From 75b356b15ac83dc336dac953ecdd2b2b9703f91d Mon Sep 17 00:00:00 2001 From: Felix Kuehling Date: Fri, 28 Jul 2017 16:54:54 -0400 Subject: [PATCH 1779/4131] drm/amdgpu: Fix KFD initialization for multi-GPU systems kfd2kgd is device-specific, so it should not be a global variable. Merge amdgpu_amdkfd_load_interface and amdgpu_amdkfd_device_probe so that it's only needed as a local variable in one function. Modificatin in this commit was reverted before to reduce conflicts when port kfd primary patches. Re-cherry-pick it again now. Signed-off-by: Felix Kuehling Reviewed-by: Oded Gabbay Signed-off-by: Alex Deucher Signed-off-by: Le Ma Conflicts: drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c Change-Id: Id87865187760e36c2fc71a51da22502f71dc8968 --- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 36 ++++++++++++++---------------- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 2 -- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c index 106ccb4..8a35200 100755 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c @@ -32,7 +32,6 @@ #define AMDKFD_SKIP_UNCOMPILED_CODE 1 -const struct kfd2kgd_calls *kfd2kgd; const struct kgd2kfd_calls *kgd2kfd; bool (*kgd2kfd_init_p)(unsigned int, const struct kgd2kfd_calls**); @@ -68,8 +67,21 @@ int amdgpu_amdkfd_init(void) return ret; } -bool amdgpu_amdkfd_load_interface(struct amdgpu_device *adev) +void amdgpu_amdkfd_fini(void) +{ + if (kgd2kfd) { + kgd2kfd->exit(); + symbol_put(kgd2kfd_init); + } +} + +void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) { + const struct kfd2kgd_calls *kfd2kgd; + + if (!kgd2kfd) + return; + switch (adev->asic_type) { #ifdef CONFIG_DRM_AMDGPU_CIK case CHIP_KAVERI: @@ -90,25 +102,11 @@ bool amdgpu_amdkfd_load_interface(struct amdgpu_device *adev) break; default: dev_info(adev->dev, "kfd not supported on this ASIC\n"); - return false; + return; } - return true; -} - -void amdgpu_amdkfd_fini(void) -{ - if (kgd2kfd) { - kgd2kfd->exit(); - symbol_put(kgd2kfd_init); - } -} - -void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) -{ - if (kgd2kfd) - adev->kfd = kgd2kfd->probe((struct kgd_dev *)adev, - adev->pdev, kfd2kgd); + adev->kfd = kgd2kfd->probe((struct kgd_dev *)adev, + adev->pdev, kfd2kgd); } void amdgpu_amdkfd_device_init(struct amdgpu_device *adev) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h index 50cd9e1..0756fff 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h @@ -131,8 +131,6 @@ struct amdkfd_vm { int amdgpu_amdkfd_init(void); void amdgpu_amdkfd_fini(void); -bool amdgpu_amdkfd_load_interface(struct amdgpu_device *adev); - void amdgpu_amdkfd_suspend(struct amdgpu_device *adev); int amdgpu_amdkfd_resume(struct amdgpu_device *adev); void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev, -- 2.7.4