diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 19 | 
1 files changed, 17 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h index 4dbbe1b6b413..b4640ab38c95 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h @@ -30,6 +30,7 @@  #include <drm/gpu_scheduler.h>  #include <drm/drm_file.h>  #include <drm/ttm/ttm_bo_driver.h> +#include <linux/sched/mm.h>  #include "amdgpu_sync.h"  #include "amdgpu_ring.h" @@ -239,6 +240,13 @@ struct amdgpu_vm {  	/* tree of virtual addresses mapped */  	struct rb_root_cached	va; +	/* Lock to prevent eviction while we are updating page tables +	 * use vm_eviction_lock/unlock(vm) +	 */ +	struct mutex		eviction_lock; +	bool			evicting; +	unsigned int		saved_flags; +  	/* BOs who needs a validation */  	struct list_head	evicted; @@ -266,6 +274,10 @@ struct amdgpu_vm {  	struct drm_sched_entity	direct;  	struct drm_sched_entity	delayed; +	/* Last submission to the scheduler entities */ +	struct dma_fence	*last_direct; +	struct dma_fence	*last_delayed; +  	unsigned int		pasid;  	/* dedicated to vm */  	struct amdgpu_vmid	*reserved_vmid[AMDGPU_MAX_VMHUBS]; @@ -298,6 +310,8 @@ struct amdgpu_vm {  	struct ttm_lru_bulk_move lru_bulk_move;  	/* mark whether can do the bulk move */  	bool			bulk_moveable; +	/* Flag to indicate if VM is used for compute */ +	bool			is_compute_context;  };  struct amdgpu_vm_manager { @@ -317,8 +331,8 @@ struct amdgpu_vm_manager {  	u64					vram_base_offset;  	/* vm pte handling */  	const struct amdgpu_vm_pte_funcs	*vm_pte_funcs; -	struct drm_sched_rq			*vm_pte_rqs[AMDGPU_MAX_RINGS]; -	unsigned				vm_pte_num_rqs; +	struct drm_gpu_scheduler		*vm_pte_scheds[AMDGPU_MAX_RINGS]; +	unsigned				vm_pte_num_scheds;  	struct amdgpu_ring			*page_fault;  	/* partial resident texture handling */ @@ -376,6 +390,7 @@ int amdgpu_vm_handle_moved(struct amdgpu_device *adev,  int amdgpu_vm_bo_update(struct amdgpu_device *adev,  			struct amdgpu_bo_va *bo_va,  			bool clear); +bool amdgpu_vm_evictable(struct amdgpu_bo *bo);  void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev,  			     struct amdgpu_bo *bo, bool evicted);  uint64_t amdgpu_vm_map_gart(const dma_addr_t *pages_addr, uint64_t addr); |