aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4867-drm-amdgpu-Add-support-for-logging-process-info-in-a.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4867-drm-amdgpu-Add-support-for-logging-process-info-in-a.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4867-drm-amdgpu-Add-support-for-logging-process-info-in-a.patch110
1 files changed, 110 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4867-drm-amdgpu-Add-support-for-logging-process-info-in-a.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4867-drm-amdgpu-Add-support-for-logging-process-info-in-a.patch
new file mode 100644
index 00000000..3220fa98
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4867-drm-amdgpu-Add-support-for-logging-process-info-in-a.patch
@@ -0,0 +1,110 @@
+From 322b5ce1ba16bec1517cdf3800fd36c5ec075b7c Mon Sep 17 00:00:00 2001
+From: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
+Date: Thu, 28 Jun 2018 22:51:32 -0400
+Subject: [PATCH 4867/5725] drm/amdgpu: Add support for logging process info in
+ amdgpu_vm.
+
+Add process and thread names and pids and a function to extract
+this info from relevant amdgpu_vm.
+
+v2: Add documentation and fix identation.
+
+v3: Add getter and setter functions for amdgpu_task_info.
+
+Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
+Acked-by: Jim Qu <Jim.Qu@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 39 ++++++++++++++++++++++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 16 ++++++++++++++
+ 2 files changed, 55 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+index b1586a7..8b5dada 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+@@ -3010,3 +3010,42 @@ int amdgpu_vm_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
+
+ return 0;
+ }
++
++/**
++ * amdgpu_vm_get_task_info - Extracts task info for a PASID.
++ *
++ * @dev: drm device pointer
++ * @pasid: PASID identifier for VM
++ * @task_info: task_info to fill.
++ */
++void amdgpu_vm_get_task_info(struct amdgpu_device *adev, unsigned int pasid,
++ struct amdgpu_task_info *task_info)
++{
++ struct amdgpu_vm *vm;
++
++ spin_lock(&adev->vm_manager.pasid_lock);
++
++ vm = idr_find(&adev->vm_manager.pasid_idr, pasid);
++ if (vm)
++ *task_info = vm->task_info;
++
++ spin_unlock(&adev->vm_manager.pasid_lock);
++}
++
++/**
++ * amdgpu_vm_set_task_info - Sets VMs task info.
++ *
++ * @vm: vm for which to set the info
++ */
++void amdgpu_vm_set_task_info(struct amdgpu_vm *vm)
++{
++ if (!vm->task_info.pid) {
++ vm->task_info.pid = current->pid;
++ get_task_comm(vm->task_info.task_name, current);
++
++ if (current->group_leader->mm == current->mm) {
++ vm->task_info.tgid = current->group_leader->pid;
++ get_task_comm(vm->task_info.process_name, current->group_leader);
++ }
++ }
++}
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+index 7a4c967..9f70db6 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+@@ -167,6 +167,14 @@ struct amdgpu_vm_pt {
+ #define AMDGPU_VM_FAULT_PASID(fault) ((u64)(fault) >> 48)
+ #define AMDGPU_VM_FAULT_ADDR(fault) ((u64)(fault) & 0xfffffffff000ULL)
+
++
++struct amdgpu_task_info {
++ char process_name[TASK_COMM_LEN];
++ char task_name[TASK_COMM_LEN];
++ pid_t pid;
++ pid_t tgid;
++};
++
+ struct amdgpu_vm {
+ /* tree of virtual addresses mapped */
+ struct rb_root_cached va;
+@@ -218,6 +226,9 @@ struct amdgpu_vm {
+
+ /* Valid while the PD is reserved or fenced */
+ uint64_t pd_phys_addr;
++
++ /* Some basic info about the task */
++ struct amdgpu_task_info task_info;
+ };
+
+ struct amdgpu_vm_manager {
+@@ -323,4 +334,9 @@ bool amdgpu_vm_need_pipeline_sync(struct amdgpu_ring *ring,
+ struct amdgpu_job *job);
+ void amdgpu_vm_check_compute_bug(struct amdgpu_device *adev);
+
++void amdgpu_vm_get_task_info(struct amdgpu_device *adev, unsigned int pasid,
++ struct amdgpu_task_info *task_info);
++
++void amdgpu_vm_set_task_info(struct amdgpu_vm *vm);
++
+ #endif
+--
+2.7.4
+