mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -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
@@ -155,8 +155,8 @@ static int kfd_open(struct inode *inode, struct file *filep)
|
||||
/* filep now owns the reference returned by kfd_create_process */
|
||||
filep->private_data = process;
|
||||
|
||||
dev_dbg(kfd_device, "process %d opened, compat mode (32 bit) - %d\n",
|
||||
process->pasid, process->is_32bit_user_mode);
|
||||
dev_dbg(kfd_device, "process pid %d opened kfd node, compat mode (32 bit) - %d\n",
|
||||
process->lead_thread->pid, process->is_32bit_user_mode);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -361,8 +361,8 @@ static int kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p,
|
||||
goto err_acquire_queue_buf;
|
||||
}
|
||||
|
||||
pr_debug("Creating queue for PASID 0x%x on gpu 0x%x\n",
|
||||
p->pasid,
|
||||
pr_debug("Creating queue for process pid %d on gpu 0x%x\n",
|
||||
p->lead_thread->pid,
|
||||
dev->id);
|
||||
|
||||
err = pqm_create_queue(&p->pqm, dev, &q_properties, &queue_id,
|
||||
@@ -415,9 +415,9 @@ static int kfd_ioctl_destroy_queue(struct file *filp, struct kfd_process *p,
|
||||
int retval;
|
||||
struct kfd_ioctl_destroy_queue_args *args = data;
|
||||
|
||||
pr_debug("Destroying queue id %d for pasid 0x%x\n",
|
||||
pr_debug("Destroying queue id %d for process pid %d\n",
|
||||
args->queue_id,
|
||||
p->pasid);
|
||||
p->lead_thread->pid);
|
||||
|
||||
mutex_lock(&p->mutex);
|
||||
|
||||
@@ -468,8 +468,8 @@ static int kfd_ioctl_update_queue(struct file *filp, struct kfd_process *p,
|
||||
properties.pm4_target_xcc = (args->queue_percentage >> 8) & 0xFF;
|
||||
properties.priority = args->queue_priority;
|
||||
|
||||
pr_debug("Updating queue id %d for pasid 0x%x\n",
|
||||
args->queue_id, p->pasid);
|
||||
pr_debug("Updating queue id %d for process pid %d\n",
|
||||
args->queue_id, p->lead_thread->pid);
|
||||
|
||||
mutex_lock(&p->mutex);
|
||||
|
||||
@@ -695,7 +695,7 @@ static int kfd_ioctl_get_process_apertures(struct file *filp,
|
||||
struct kfd_process_device_apertures *pAperture;
|
||||
int i;
|
||||
|
||||
dev_dbg(kfd_device, "get apertures for PASID 0x%x", p->pasid);
|
||||
dev_dbg(kfd_device, "get apertures for process pid %d", p->lead_thread->pid);
|
||||
|
||||
args->num_of_nodes = 0;
|
||||
|
||||
@@ -747,7 +747,8 @@ static int kfd_ioctl_get_process_apertures_new(struct file *filp,
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
dev_dbg(kfd_device, "get apertures for PASID 0x%x", p->pasid);
|
||||
dev_dbg(kfd_device, "get apertures for process pid %d",
|
||||
p->lead_thread->pid);
|
||||
|
||||
if (args->num_of_nodes == 0) {
|
||||
/* Return number of nodes, so that user space can alloacate
|
||||
@@ -3365,12 +3366,12 @@ static int kfd_mmio_mmap(struct kfd_node *dev, struct kfd_process *process,
|
||||
|
||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
|
||||
pr_debug("pasid 0x%x mapping mmio page\n"
|
||||
pr_debug("process pid %d mapping mmio page\n"
|
||||
" target user address == 0x%08llX\n"
|
||||
" physical address == 0x%08llX\n"
|
||||
" vm_flags == 0x%04lX\n"
|
||||
" size == 0x%04lX\n",
|
||||
process->pasid, (unsigned long long) vma->vm_start,
|
||||
process->lead_thread->pid, (unsigned long long) vma->vm_start,
|
||||
address, vma->vm_flags, PAGE_SIZE);
|
||||
|
||||
return io_remap_pfn_range(vma,
|
||||
|
||||
Reference in New Issue
Block a user