[PATCH 1/1] drm/amdgpu: Fix KFD initialization for multi-GPU systems
Oded Gabbay
oded.gabbay at gmail.com
Mon Jul 31 09:01:50 UTC 2017
On Sat, Jul 29, 2017 at 12:14 AM, Felix Kuehling <Felix.Kuehling at amd.com> wrote:
> 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.
>
> Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 37 +++++++++++++++---------------
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 2 --
> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 1 -
> 3 files changed, 18 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> index 2292c77..471f9d4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> @@ -27,7 +27,6 @@
> #include "amdgpu_gfx.h"
> #include <linux/module.h>
>
> -const struct kfd2kgd_calls *kfd2kgd;
> const struct kgd2kfd_calls *kgd2kfd;
> bool (*kgd2kfd_init_p)(unsigned, const struct kgd2kfd_calls**);
>
> @@ -61,8 +60,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:
> @@ -73,25 +85,12 @@ bool amdgpu_amdkfd_load_interface(struct amdgpu_device *adev)
> kfd2kgd = amdgpu_amdkfd_gfx_8_0_get_functions();
> break;
> default:
> - return false;
> + dev_info(adev->dev, "kfd not supported on this ASIC\n");
> + 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 73f83a1..b8802a5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> @@ -39,8 +39,6 @@ struct kgd_mem {
> 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,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index 9182def..33b5fe3 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -157,7 +157,6 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
> "Error during ACPI methods call\n");
> }
>
> - amdgpu_amdkfd_load_interface(adev);
> amdgpu_amdkfd_device_probe(adev);
> amdgpu_amdkfd_device_init(adev);
>
> --
> 1.9.1
>
This patch is:
Reviewed-by: Oded Gabbay <oded.gabbay at gmail.com>
More information about the amd-gfx
mailing list