[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