diff options
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.patch | 125 |
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 + |