Skip to content

Commit

Permalink
amdkfd: init aperture once per process
Browse files Browse the repository at this point in the history
Since the user space may call open() more that once from the same process,
the aperture initialization should be moved from kfd_open()

Signed-off-by: Alexey Skidanov <Alexey.Skidanov@amd.com>
Reviewed-by: Oded Gabbay <oded.gabbay@amd.com>
Signed-off-by: Oded Gabbay <oded.gabbay@amd.com>
  • Loading branch information
Alexey Skidanov authored and Oded Gabbay committed Nov 18, 2014
1 parent f1386fb commit dd59239
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 8 deletions.
4 changes: 0 additions & 4 deletions drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,13 +121,9 @@ static int kfd_open(struct inode *inode, struct file *filep)
if (IS_ERR(process))
return PTR_ERR(process);

process->is_32bit_user_mode = is_32bit_user_mode;

dev_dbg(kfd_device, "process %d opened, compat mode (32 bit) - %d\n",
process->pasid, process->is_32bit_user_mode);

kfd_init_apertures(process);

return 0;
}

Expand Down
6 changes: 2 additions & 4 deletions drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -299,13 +299,13 @@ int kfd_init_apertures(struct kfd_process *process)
struct kfd_dev *dev;
struct kfd_process_device *pdd;

mutex_lock(&process->mutex);

/*Iterating over all devices*/
while ((dev = kfd_topology_enum_kfd_devices(id)) != NULL &&
id < NUM_OF_SUPPORTED_GPUS) {

pdd = kfd_get_process_device_data(dev, process, 1);
if (!pdd)
return -1;

/*
* For 64 bit process aperture will be statically reserved in
Expand Down Expand Up @@ -348,8 +348,6 @@ int kfd_init_apertures(struct kfd_process *process)
id++;
}

mutex_unlock(&process->mutex);

return 0;
}

Expand Down
9 changes: 9 additions & 0 deletions drivers/gpu/drm/amd/amdkfd/kfd_process.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
#include <linux/slab.h>
#include <linux/amd-iommu.h>
#include <linux/notifier.h>
#include <linux/compat.h>

struct mm_struct;

#include "kfd_priv.h"
Expand Down Expand Up @@ -285,8 +287,15 @@ static struct kfd_process *create_process(const struct task_struct *thread)
if (err != 0)
goto err_process_pqm_init;

/* init process apertures*/
process->is_32bit_user_mode = is_compat_task();
if (kfd_init_apertures(process) != 0)
goto err_init_apretures;

return process;

err_init_apretures:
pqm_uninit(&process->pqm);
err_process_pqm_init:
hash_del_rcu(&process->kfd_processes);
synchronize_rcu();
Expand Down

0 comments on commit dd59239

Please sign in to comment.