mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
drm/amdkfd: Have kfd driver use same PASID values from graphic driver
Current kfd driver has its own PASID value for a kfd process and uses it to locate vm at interrupt handler or mapping between kfd process and vm. That design is not working when a physical gpu device has multiple spatial partitions, ex: adev in CPX mode. This patch has kfd driver use same pasid values that graphic driver generated which is per vm per pasid. These pasid values are passed to fw/hardware. We do not need change interrupt handler though more pasid values are used. Also, pasid values at log are replaced by user process pid; pasid values are not exposed to user. Users see their process pids that have meaning in user space. Signed-off-by: Xiaogang Chen <xiaogang.chen@amd.com> Reviewed-by: Felix Kuehling <felix.kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
ca44922107
commit
8544374c0f
@@ -851,6 +851,8 @@ struct kfd_process_device {
|
||||
|
||||
/* Tracks queue reset status */
|
||||
bool has_reset_queue;
|
||||
|
||||
u32 pasid;
|
||||
};
|
||||
|
||||
#define qpd_to_pdd(x) container_of(x, struct kfd_process_device, qpd)
|
||||
@@ -910,8 +912,6 @@ struct kfd_process {
|
||||
/* We want to receive a notification when the mm_struct is destroyed */
|
||||
struct mmu_notifier mmu_notifier;
|
||||
|
||||
u32 pasid;
|
||||
|
||||
/*
|
||||
* Array of kfd_process_device pointers,
|
||||
* one for each device the process is using.
|
||||
@@ -1039,7 +1039,8 @@ void kfd_process_destroy_wq(void);
|
||||
void kfd_cleanup_processes(void);
|
||||
struct kfd_process *kfd_create_process(struct task_struct *thread);
|
||||
struct kfd_process *kfd_get_process(const struct task_struct *task);
|
||||
struct kfd_process *kfd_lookup_process_by_pasid(u32 pasid);
|
||||
struct kfd_process *kfd_lookup_process_by_pasid(u32 pasid,
|
||||
struct kfd_process_device **pdd);
|
||||
struct kfd_process *kfd_lookup_process_by_mm(const struct mm_struct *mm);
|
||||
|
||||
int kfd_process_gpuidx_from_gpuid(struct kfd_process *p, uint32_t gpu_id);
|
||||
@@ -1337,7 +1338,7 @@ void device_queue_manager_uninit(struct device_queue_manager *dqm);
|
||||
struct kernel_queue *kernel_queue_init(struct kfd_node *dev,
|
||||
enum kfd_queue_type type);
|
||||
void kernel_queue_uninit(struct kernel_queue *kq);
|
||||
int kfd_dqm_evict_pasid(struct device_queue_manager *dqm, u32 pasid);
|
||||
int kfd_evict_process_device(struct kfd_process_device *pdd);
|
||||
int kfd_dqm_suspend_bad_queue_mes(struct kfd_node *knode, u32 pasid, u32 doorbell_id);
|
||||
|
||||
/* Process Queue Manager */
|
||||
@@ -1492,7 +1493,7 @@ int kfd_event_create(struct file *devkfd, struct kfd_process *p,
|
||||
int kfd_get_num_events(struct kfd_process *p);
|
||||
int kfd_event_destroy(struct kfd_process *p, uint32_t event_id);
|
||||
|
||||
void kfd_signal_vm_fault_event(struct kfd_node *dev, u32 pasid,
|
||||
void kfd_signal_vm_fault_event(struct kfd_process_device *pdd,
|
||||
struct kfd_vm_fault_info *info,
|
||||
struct kfd_hsa_memory_exception_data *data);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user