mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
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. Signed-off-by: Yong Zhao <Yong.Zhao@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
424b5442a2
commit
c637b36aea
@ -312,7 +312,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,
|
||||
|
@ -781,15 +781,6 @@ uint32_t kgd_gfx_v9_address_watch_get_offset(struct kgd_dev *kgd,
|
||||
return 0;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@ -835,7 +826,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,
|
||||
|
@ -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,
|
||||
|
@ -1128,7 +1128,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);
|
||||
|
||||
|
@ -220,8 +220,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;
|
||||
}
|
||||
|
@ -298,8 +298,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,
|
||||
|
Loading…
Reference in New Issue
Block a user