aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3905-drm-amdkfd-Fix-NULL-pointer-dereference-for-set_scra.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3905-drm-amdkfd-Fix-NULL-pointer-dereference-for-set_scra.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3905-drm-amdkfd-Fix-NULL-pointer-dereference-for-set_scra.patch125
1 files changed, 125 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3905-drm-amdkfd-Fix-NULL-pointer-dereference-for-set_scra.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3905-drm-amdkfd-Fix-NULL-pointer-dereference-for-set_scra.patch
new file mode 100644
index 00000000..79472cf4
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3905-drm-amdkfd-Fix-NULL-pointer-dereference-for-set_scra.patch
@@ -0,0 +1,125 @@
+From 4952e695e7c4a3d0f65d17371a01a8744fb0aac9 Mon Sep 17 00:00:00 2001
+From: Yong Zhao <Yong.Zhao@amd.com>
+Date: Wed, 18 Sep 2019 18:17:57 -0400
+Subject: [PATCH 3905/4256] drm/amdkfd: Fix NULL pointer dereference for
+ set_scratch_backing_va()
+
+Currently this function pointer is missing for GFX10. Considering it is
+a void function since GFX9, fix it by checking the function pointer
+before dereferencing it.
+
+Change-Id: I1dc8e5163f259251357bfaa42a91ff991fba6dd5
+Signed-off-by: Yong Zhao <Yong.Zhao@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c | 1 -
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 10 ----------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h | 2 --
+ drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 2 +-
+ drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 5 +++--
+ drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 5 +++++
+ 6 files changed, 9 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
+index ada4662a0842..ce0ceb71ef35 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
+@@ -313,7 +313,6 @@ static const struct kfd2kgd_calls kfd2kgd = {
+ kgd_gfx_v9_get_atc_vmid_pasid_mapping_pasid,
+ .get_atc_vmid_pasid_mapping_valid =
+ kgd_gfx_v9_get_atc_vmid_pasid_mapping_valid,
+- .set_scratch_backing_va = kgd_gfx_v9_set_scratch_backing_va,
+ .get_tile_config = kgd_gfx_v9_get_tile_config,
+ .set_vm_context_page_table_base = kgd_gfx_v9_set_vm_context_page_table_base,
+ .invalidate_tlbs = kgd_gfx_v9_invalidate_tlbs,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
+index e8d6d2dc19e7..58f82da00e6d 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
+@@ -992,15 +992,6 @@ void kgd_gfx_v9_get_iq_wait_times(struct kgd_dev *kgd,
+ *wait_times = RREG32(SOC15_REG_OFFSET(GC, 0, mmCP_IQ_WAIT_TIME2));
+ }
+
+-void kgd_gfx_v9_set_scratch_backing_va(struct kgd_dev *kgd,
+- uint64_t va, uint32_t vmid)
+-{
+- /* No longer needed on GFXv9. The scratch base address is
+- * passed to the shader by the CP. It's the user mode driver's
+- * responsibility.
+- */
+-}
+-
+ void kgd_gfx_v9_set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid,
+ uint64_t page_table_base)
+ {
+@@ -1062,7 +1053,6 @@ static const struct kfd2kgd_calls kfd2kgd = {
+ kgd_gfx_v9_get_atc_vmid_pasid_mapping_pasid,
+ .get_atc_vmid_pasid_mapping_valid =
+ kgd_gfx_v9_get_atc_vmid_pasid_mapping_valid,
+- .set_scratch_backing_va = kgd_gfx_v9_set_scratch_backing_va,
+ .get_tile_config = kgd_gfx_v9_get_tile_config,
+ .set_vm_context_page_table_base = kgd_gfx_v9_set_vm_context_page_table_base,
+ .invalidate_tlbs = kgd_gfx_v9_invalidate_tlbs,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
+index a1c5789b5c36..a30e36341502 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.h
+@@ -61,8 +61,6 @@ uint16_t kgd_gfx_v9_get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd,
+ uint8_t vmid);
+ void kgd_gfx_v9_set_vm_context_page_table_base(struct kgd_dev *kgd, uint32_t vmid,
+ uint64_t page_table_base);
+-void kgd_gfx_v9_set_scratch_backing_va(struct kgd_dev *kgd,
+- uint64_t va, uint32_t vmid);
+ int kgd_gfx_v9_invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid);
+ int kgd_gfx_v9_invalidate_tlbs_vmid(struct kgd_dev *kgd, uint16_t vmid);
+ int kgd_gfx_v9_get_tile_config(struct kgd_dev *kgd,
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+index fa1385d60235..3362b4516089 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+@@ -1133,7 +1133,7 @@ static int kfd_ioctl_set_scratch_backing_va(struct file *filep,
+ mutex_unlock(&p->mutex);
+
+ if (dev->dqm->sched_policy == KFD_SCHED_POLICY_NO_HWS &&
+- pdd->qpd.vmid != 0)
++ pdd->qpd.vmid != 0 && dev->kfd2kgd->set_scratch_backing_va)
+ dev->kfd2kgd->set_scratch_backing_va(
+ dev->kgd, args->va_addr, pdd->qpd.vmid);
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+index 62c612cff26b..eb7e1aaf54a4 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+@@ -249,8 +249,9 @@ static int allocate_vmid(struct device_queue_manager *dqm,
+ /* invalidate the VM context after pasid and vmid mapping is set up */
+ kfd_flush_tlb(qpd_to_pdd(qpd));
+
+- dqm->dev->kfd2kgd->set_scratch_backing_va(
+- dqm->dev->kgd, qpd->sh_hidden_private_base, qpd->vmid);
++ if (dqm->dev->kfd2kgd->set_scratch_backing_va)
++ dqm->dev->kfd2kgd->set_scratch_backing_va(dqm->dev->kgd,
++ qpd->sh_hidden_private_base, qpd->vmid);
+
+ return 0;
+ }
+diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+index db3f4b76d40f..57cf9aabedb4 100644
+--- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
++++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+@@ -306,8 +306,13 @@ struct kfd2kgd_calls {
+ struct kgd_dev *kgd,
+ uint8_t vmid);
+
++ /* No longer needed from GFXv9 onward. The scratch base address is
++ * passed to the shader by the CP. It's the user mode driver's
++ * responsibility.
++ */
+ void (*set_scratch_backing_va)(struct kgd_dev *kgd,
+ uint64_t va, uint32_t vmid);
++
+ int (*get_tile_config)(struct kgd_dev *kgd, struct tile_config *config);
+
+ void (*set_vm_context_page_table_base)(struct kgd_dev *kgd,
+--
+2.17.1
+