Commit 5ae0283e authored by Felix Kuehling's avatar Felix Kuehling Committed by Oded Gabbay

drm/amdgpu: Add userptr support for KFD

This adds support for allocating, mapping, unmapping and freeing
userptr BOs, and for handling MMU notifiers.

v2: updated a comment
Signed-off-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
parent 6b95e797
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/mmu_context.h> #include <linux/mmu_context.h>
#include <linux/workqueue.h>
#include <kgd_kfd_interface.h> #include <kgd_kfd_interface.h>
#include <drm/ttm/ttm_execbuf_util.h> #include <drm/ttm/ttm_execbuf_util.h>
#include "amdgpu_sync.h" #include "amdgpu_sync.h"
...@@ -59,7 +60,9 @@ struct kgd_mem { ...@@ -59,7 +60,9 @@ struct kgd_mem {
uint32_t mapping_flags; uint32_t mapping_flags;
atomic_t invalid;
struct amdkfd_process_info *process_info; struct amdkfd_process_info *process_info;
struct page **user_pages;
struct amdgpu_sync sync; struct amdgpu_sync sync;
...@@ -84,6 +87,9 @@ struct amdkfd_process_info { ...@@ -84,6 +87,9 @@ struct amdkfd_process_info {
struct list_head vm_list_head; struct list_head vm_list_head;
/* List head for all KFD BOs that belong to a KFD process. */ /* List head for all KFD BOs that belong to a KFD process. */
struct list_head kfd_bo_list; struct list_head kfd_bo_list;
/* List of userptr BOs that are valid or invalid */
struct list_head userptr_valid_list;
struct list_head userptr_inval_list;
/* Lock to protect kfd_bo_list */ /* Lock to protect kfd_bo_list */
struct mutex lock; struct mutex lock;
...@@ -91,6 +97,11 @@ struct amdkfd_process_info { ...@@ -91,6 +97,11 @@ struct amdkfd_process_info {
unsigned int n_vms; unsigned int n_vms;
/* Eviction Fence */ /* Eviction Fence */
struct amdgpu_amdkfd_fence *eviction_fence; struct amdgpu_amdkfd_fence *eviction_fence;
/* MMU-notifier related fields */
atomic_t evicted_bos;
struct delayed_work restore_userptr_work;
struct pid *pid;
}; };
int amdgpu_amdkfd_init(void); int amdgpu_amdkfd_init(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment