#define AMDGPU_BO_INVALID_OFFSET LONG_MAX
+/* bo virtual addresses in a vm */
struct amdgpu_bo_va_mapping {
struct list_head list;
struct rb_node rb;
uint64_t flags;
};
-/* bo virtual addresses in a specific vm */
+/* User space allocated BO in a VM */
struct amdgpu_bo_va {
+ struct amdgpu_vm_bo_base base;
+
/* protected by bo being reserved */
- struct list_head bo_list;
struct dma_fence *last_pt_update;
unsigned ref_count;
- /* protected by vm mutex and spinlock */
- struct list_head vm_status;
-
/* mappings for this bo_va */
struct list_head invalids;
struct list_head valids;
-
- /* constant after initialization */
- struct amdgpu_vm *vm;
- struct amdgpu_bo *bo;
};
-
struct amdgpu_bo {
/* Protected by tbo.reserved */
- u32 prefered_domains;
+ u32 preferred_domains;
u32 allowed_domains;
struct ttm_place placements[AMDGPU_GEM_DOMAIN_MAX + 1];
struct ttm_placement placement;
struct ttm_bo_kmap_obj dma_buf_vmap;
struct amdgpu_mn *mn;
- struct list_head mn_list;
- struct list_head shadow_list;
+
+ union {
+ struct list_head mn_list;
+ struct list_head shadow_list;
+ };
};
/**
bool kernel, u32 domain, u64 flags,
struct sg_table *sg,
struct reservation_object *resv,
+ uint64_t init_value,
struct amdgpu_bo **bo_ptr);
int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
unsigned long size, int byte_align,
struct sg_table *sg,
struct ttm_placement *placement,
struct reservation_object *resv,
+ uint64_t init_value,
struct amdgpu_bo **bo_ptr);
+int amdgpu_bo_create_reserved(struct amdgpu_device *adev,
+ unsigned long size, int align,
+ u32 domain, struct amdgpu_bo **bo_ptr,
+ u64 *gpu_addr, void **cpu_addr);
int amdgpu_bo_create_kernel(struct amdgpu_device *adev,
unsigned long size, int align,
u32 domain, struct amdgpu_bo **bo_ptr,