[PATCH] drm/amdgpu: Bail earlier when amdgpu.cik_/si_support is not set to 1

Daniel Vetter daniel at ffwll.ch
Thu Oct 10 16:59:41 UTC 2019


On Thu, Oct 10, 2019 at 6:28 PM Hans de Goede <hdegoede at redhat.com> wrote:
>
> Bail from the pci_driver probe function instead of from the drm_driver
> load function.
>
> This avoid /dev/dri/card0 temporarily getting registered and then
> unregistered again, sending unwanted add / remove udev events to
> userspace.
>
> Specifically this avoids triggering the (userspace) bug fixed by this
> plymouth merge-request:
> https://gitlab.freedesktop.org/plymouth/plymouth/merge_requests/59
>
> Note that despite that being a userspace bug, not sending unnecessary
> udev events is a good idea in general.

I think even better would be getting rid of the load/unload callbacks,
this issue here isn't the only problem with them.

Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

I guess also cc: stable material?
-Daniel
>
> BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1490490
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 35 +++++++++++++++++++++++++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 35 -------------------------
>  2 files changed, 35 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 6f8aaf655a9f..2a00a36106b2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -1048,6 +1048,41 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
>                 return -ENODEV;
>         }
>
> +#ifdef CONFIG_DRM_AMDGPU_SI
> +       if (!amdgpu_si_support) {
> +               switch (flags & AMD_ASIC_MASK) {
> +               case CHIP_TAHITI:
> +               case CHIP_PITCAIRN:
> +               case CHIP_VERDE:
> +               case CHIP_OLAND:
> +               case CHIP_HAINAN:
> +                       dev_info(&pdev->dev,
> +                                "SI support provided by radeon.\n");
> +                       dev_info(&pdev->dev,
> +                                "Use radeon.si_support=0 amdgpu.si_support=1 to override.\n"
> +                               );
> +                       return -ENODEV;
> +               }
> +       }
> +#endif
> +#ifdef CONFIG_DRM_AMDGPU_CIK
> +       if (!amdgpu_cik_support) {
> +               switch (flags & AMD_ASIC_MASK) {
> +               case CHIP_KAVERI:
> +               case CHIP_BONAIRE:
> +               case CHIP_HAWAII:
> +               case CHIP_KABINI:
> +               case CHIP_MULLINS:
> +                       dev_info(&pdev->dev,
> +                                "CIK support provided by radeon.\n");
> +                       dev_info(&pdev->dev,
> +                                "Use radeon.cik_support=0 amdgpu.cik_support=1 to override.\n"
> +                               );
> +                       return -ENODEV;
> +               }
> +       }
> +#endif
> +
>         /* Get rid of things like offb */
>         ret = drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, 0, "amdgpudrmfb");
>         if (ret)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index f2c097983f48..d55f5baa83d3 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -144,41 +144,6 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
>         struct amdgpu_device *adev;
>         int r, acpi_status;
>
> -#ifdef CONFIG_DRM_AMDGPU_SI
> -       if (!amdgpu_si_support) {
> -               switch (flags & AMD_ASIC_MASK) {
> -               case CHIP_TAHITI:
> -               case CHIP_PITCAIRN:
> -               case CHIP_VERDE:
> -               case CHIP_OLAND:
> -               case CHIP_HAINAN:
> -                       dev_info(dev->dev,
> -                                "SI support provided by radeon.\n");
> -                       dev_info(dev->dev,
> -                                "Use radeon.si_support=0 amdgpu.si_support=1 to override.\n"
> -                               );
> -                       return -ENODEV;
> -               }
> -       }
> -#endif
> -#ifdef CONFIG_DRM_AMDGPU_CIK
> -       if (!amdgpu_cik_support) {
> -               switch (flags & AMD_ASIC_MASK) {
> -               case CHIP_KAVERI:
> -               case CHIP_BONAIRE:
> -               case CHIP_HAWAII:
> -               case CHIP_KABINI:
> -               case CHIP_MULLINS:
> -                       dev_info(dev->dev,
> -                                "CIK support provided by radeon.\n");
> -                       dev_info(dev->dev,
> -                                "Use radeon.cik_support=0 amdgpu.cik_support=1 to override.\n"
> -                               );
> -                       return -ENODEV;
> -               }
> -       }
> -#endif
> -
>         adev = kzalloc(sizeof(struct amdgpu_device), GFP_KERNEL);
>         if (adev == NULL) {
>                 return -ENOMEM;
> --
> 2.23.0
>


-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the dri-devel mailing list