aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0136-drm-amdkfd-Implement-wave-control-debugger-IOCTL.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0136-drm-amdkfd-Implement-wave-control-debugger-IOCTL.patch')
-rw-r--r--common/recipes-kernel/linux/files/0136-drm-amdkfd-Implement-wave-control-debugger-IOCTL.patch120
1 files changed, 0 insertions, 120 deletions
diff --git a/common/recipes-kernel/linux/files/0136-drm-amdkfd-Implement-wave-control-debugger-IOCTL.patch b/common/recipes-kernel/linux/files/0136-drm-amdkfd-Implement-wave-control-debugger-IOCTL.patch
deleted file mode 100644
index 4fd0b780..00000000
--- a/common/recipes-kernel/linux/files/0136-drm-amdkfd-Implement-wave-control-debugger-IOCTL.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-From 9448458998e27be7fcb9ebc58200be45a6429451 Mon Sep 17 00:00:00 2001
-From: Yair Shachar <yair.shachar@amd.com>
-Date: Wed, 20 May 2015 14:09:24 +0300
-Subject: [PATCH 0136/1050] drm/amdkfd: Implement wave control debugger IOCTL
-
-v2:
-
-- rename get_dbgmgr_mutex to kfd_get_dbgmgr_mutex to namespace it
-- change void* to uint64_t inside ioctl arguments
-- use kmalloc instead of kzalloc because we use copy_from_user
- immediately after it
-
-Signed-off-by: Yair Shachar <yair.shachar@amd.com>
-Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
----
- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 88 +++++++++++++++++++++++++++++++-
- 1 file changed, 87 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
-index 54a3e29..9e5261d 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
-@@ -537,7 +537,93 @@ static int kfd_ioctl_dbg_address_watch(struct file *filep,
- static int kfd_ioctl_dbg_wave_control(struct file *filep,
- struct kfd_process *p, void *data)
- {
-- long status = -EFAULT;
-+ struct kfd_ioctl_dbg_wave_control_args *args = data;
-+ struct kfd_dev *dev;
-+ struct dbg_wave_control_info wac_info;
-+ unsigned char *args_buff;
-+ uint32_t computed_buff_size;
-+ long status;
-+ void __user *cmd_from_user;
-+ unsigned int args_idx = 0;
-+
-+ memset((void *) &wac_info, 0, sizeof(struct dbg_wave_control_info));
-+
-+ /* we use compact form, independent of the packing attribute value */
-+ computed_buff_size = sizeof(*args) +
-+ sizeof(wac_info.mode) +
-+ sizeof(wac_info.operand) +
-+ sizeof(wac_info.dbgWave_msg.DbgWaveMsg) +
-+ sizeof(wac_info.dbgWave_msg.MemoryVA) +
-+ sizeof(wac_info.trapId);
-+
-+ dev = kfd_device_by_id(args->gpu_id);
-+ if (dev == NULL)
-+ return -EINVAL;
-+
-+ if (dev->device_info->asic_family == CHIP_CARRIZO) {
-+ pr_debug("kfd_ioctl_dbg_wave_control not supported on CZ\n");
-+ return -EINVAL;
-+ }
-+
-+ /* input size must match the computed "compact" size */
-+ if (args->buf_size_in_bytes != computed_buff_size) {
-+ pr_debug("size mismatch, computed : actual %u : %u\n",
-+ args->buf_size_in_bytes, computed_buff_size);
-+ return -EINVAL;
-+ }
-+
-+ cmd_from_user = (void __user *) args->content_ptr;
-+
-+ if (cmd_from_user == NULL)
-+ return -EINVAL;
-+
-+ /* this is the actual buffer to work with */
-+
-+ args_buff = kmalloc(args->buf_size_in_bytes - sizeof(*args),
-+ GFP_KERNEL);
-+
-+ if (args_buff == NULL)
-+ return -ENOMEM;
-+
-+ /* Now copy the entire buffer from user */
-+ status = copy_from_user(args_buff, cmd_from_user,
-+ args->buf_size_in_bytes - sizeof(*args));
-+ if (status != 0) {
-+ pr_debug("Failed to copy wave control user data\n");
-+ kfree(args_buff);
-+ return -EINVAL;
-+ }
-+
-+ /* move ptr to the start of the "pay-load" area */
-+ wac_info.process = p;
-+
-+ wac_info.operand = *((enum HSA_DBG_WAVEOP *)(&args_buff[args_idx]));
-+ args_idx += sizeof(wac_info.operand);
-+
-+ wac_info.mode = *((enum HSA_DBG_WAVEMODE *)(&args_buff[args_idx]));
-+ args_idx += sizeof(wac_info.mode);
-+
-+ wac_info.trapId = *((uint32_t *)(&args_buff[args_idx]));
-+ args_idx += sizeof(wac_info.trapId);
-+
-+ wac_info.dbgWave_msg.DbgWaveMsg.WaveMsgInfoGen2.Value =
-+ *((uint32_t *)(&args_buff[args_idx]));
-+ wac_info.dbgWave_msg.MemoryVA = NULL;
-+
-+ mutex_lock(kfd_get_dbgmgr_mutex());
-+
-+ pr_debug("Calling dbg manager process %p, operand %u, mode %u, trapId %u, message %u\n",
-+ wac_info.process, wac_info.operand,
-+ wac_info.mode, wac_info.trapId,
-+ wac_info.dbgWave_msg.DbgWaveMsg.WaveMsgInfoGen2.Value);
-+
-+ status = kfd_dbgmgr_wave_control(dev->dbgmgr, &wac_info);
-+
-+ pr_debug("Returned status of dbg manager is %ld\n", status);
-+
-+ mutex_unlock(kfd_get_dbgmgr_mutex());
-+
-+ kfree(args_buff);
-
- return status;
- }
---
-1.9.1
-