diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0784-drm-amdgpu-implement-export-import-sem.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0784-drm-amdgpu-implement-export-import-sem.patch | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0784-drm-amdgpu-implement-export-import-sem.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0784-drm-amdgpu-implement-export-import-sem.patch deleted file mode 100644 index e3b9997c..00000000 --- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0784-drm-amdgpu-implement-export-import-sem.patch +++ /dev/null @@ -1,141 +0,0 @@ -From 627f3a5a222601df3907a4b5139a34f2f6b03cd5 Mon Sep 17 00:00:00 2001 -From: Flora Cui <Flora.Cui@amd.com> -Date: Thu, 12 Jan 2017 10:58:18 +0800 -Subject: [PATCH 0784/4131] drm/amdgpu: implement export/import sem - -Change-Id: I33a1e22b82838848b0122350b8f24252db7f4cbb -Signed-off-by: Flora Cui <Flora.Cui@amd.com> -Acked-by: Hawking Zhang <Hawking.Zhang@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu_sem.c | 100 +++++++++++++++++++++++++++++++- - 1 file changed, 98 insertions(+), 2 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sem.c -index d26b23f..74d64e8 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sem.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sem.c -@@ -77,9 +77,9 @@ static inline void amdgpu_sem_put(struct amdgpu_sem *sem) - - static int amdgpu_sem_release(struct inode *inode, struct file *file) - { -- struct amdgpu_sem *sem = file->private_data; -+ struct amdgpu_sem_core *core = file->private_data; - -- amdgpu_sem_put(sem); -+ kref_put(&core->kref, amdgpu_sem_core_free); - return 0; - } - -@@ -211,6 +211,96 @@ static int amdgpu_sem_wait(struct amdgpu_fpriv *fpriv, - return ret; - } - -+static int amdgpu_sem_import(struct amdgpu_fpriv *fpriv, -+ int fd, u32 *handle) -+{ -+ struct file *file = fget(fd); -+ struct amdgpu_sem *sem; -+ struct amdgpu_sem_core *core; -+ int ret; -+ -+ if (!file) -+ return -EINVAL; -+ -+ core = file->private_data; -+ if (!core) { -+ fput(file); -+ return -EINVAL; -+ } -+ -+ sem = amdgpu_sem_alloc(); -+ if (!sem) { -+ ret = -ENOMEM; -+ goto err_out; -+ } -+ -+ sem->base = core; -+ -+ idr_preload(GFP_KERNEL); -+ spin_lock(&fpriv->sem_handles_lock); -+ -+ ret = idr_alloc(&fpriv->sem_handles, sem, 1, 0, GFP_NOWAIT); -+ -+ spin_unlock(&fpriv->sem_handles_lock); -+ idr_preload_end(); -+ -+ if (ret < 0) -+ goto err_out; -+ -+ *handle = ret; -+ return 0; -+ -+err_out: -+ kfree(sem); -+ return ret; -+ -+} -+ -+static int amdgpu_sem_export(struct amdgpu_fpriv *fpriv, -+ u32 handle, int *fd) -+{ -+ struct amdgpu_sem *sem; -+ struct amdgpu_sem_core *core; -+ int ret; -+ -+ sem = amdgpu_sem_lookup(fpriv, handle); -+ if (!sem) -+ return -EINVAL; -+ -+ core = sem->base; -+ mutex_lock(&core->lock); -+ if (!core->file) { -+ core->file = anon_inode_getfile("sem_file", -+ &amdgpu_sem_fops, -+ core, 0); -+ if (IS_ERR(core->file)) { -+ mutex_unlock(&core->lock); -+ ret = -ENOMEM; -+ goto err_put_sem; -+ } -+ } -+ mutex_unlock(&core->lock); -+ -+ get_file(core->file); -+ kref_get(&core->kref); -+ -+ ret = get_unused_fd_flags(O_CLOEXEC); -+ if (ret < 0) -+ goto err_put_file; -+ -+ fd_install(ret, core->file); -+ -+ *fd = ret; -+ amdgpu_sem_put(sem); -+ return 0; -+ -+err_put_file: -+ fput(core->file); -+err_put_sem: -+ amdgpu_sem_put(sem); -+ return ret; -+} -+ - void amdgpu_sem_destroy(struct amdgpu_fpriv *fpriv, u32 handle) - { - struct amdgpu_sem *sem = amdgpu_sem_lookup(fpriv, handle); -@@ -335,6 +425,12 @@ int amdgpu_sem_ioctl(struct drm_device *dev, void *data, - r = amdgpu_sem_signal(fpriv, args->in.handle, fence); - dma_fence_put(fence); - break; -+ case AMDGPU_SEM_OP_IMPORT_SEM: -+ r = amdgpu_sem_import(fpriv, args->in.handle, &args->out.handle); -+ break; -+ case AMDGPU_SEM_OP_EXPORT_SEM: -+ r = amdgpu_sem_export(fpriv, args->in.handle, &args->out.fd); -+ break; - case AMDGPU_SEM_OP_DESTROY_SEM: - amdgpu_sem_destroy(fpriv, args->in.handle); - break; --- -2.7.4 - |