| From 96f84932781aef1fc29e16651d96cdb3c9a8d965 Mon Sep 17 00:00:00 2001 |
| From: Hans de Goede <hdegoede@redhat.com> |
| Date: Sat, 7 Sep 2019 22:32:38 +0200 |
| Subject: [PATCH] drm/radeon: Bail earlier when radeon.cik_/si_support=0 is |
| passed |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit 9dbc88d013b79c62bd845cb9e7c0256e660967c5 upstream. |
| |
| 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 an userspace bug, not sending unnecessary |
| udev events is a good idea in general. |
| |
| BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1490490 |
| Reviewed-by: Michel Dรคnzer <mdaenzer@redhat.com> |
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c |
| index 60ee51edd782..92d02ce14d5b 100644 |
| --- a/drivers/gpu/drm/radeon/radeon_drv.c |
| +++ b/drivers/gpu/drm/radeon/radeon_drv.c |
| @@ -320,8 +320,39 @@ bool radeon_device_is_virtual(void); |
| static int radeon_pci_probe(struct pci_dev *pdev, |
| const struct pci_device_id *ent) |
| { |
| + unsigned long flags = 0; |
| int ret; |
| |
| + if (!ent) |
| + return -ENODEV; /* Avoid NULL-ptr deref in drm_get_pci_dev */ |
| + |
| + flags = ent->driver_data; |
| + |
| + if (!radeon_si_support) { |
| + switch (flags & RADEON_FAMILY_MASK) { |
| + case CHIP_TAHITI: |
| + case CHIP_PITCAIRN: |
| + case CHIP_VERDE: |
| + case CHIP_OLAND: |
| + case CHIP_HAINAN: |
| + dev_info(&pdev->dev, |
| + "SI support disabled by module param\n"); |
| + return -ENODEV; |
| + } |
| + } |
| + if (!radeon_cik_support) { |
| + switch (flags & RADEON_FAMILY_MASK) { |
| + case CHIP_KAVERI: |
| + case CHIP_BONAIRE: |
| + case CHIP_HAWAII: |
| + case CHIP_KABINI: |
| + case CHIP_MULLINS: |
| + dev_info(&pdev->dev, |
| + "CIK support disabled by module param\n"); |
| + return -ENODEV; |
| + } |
| + } |
| + |
| if (vga_switcheroo_client_probe_defer(pdev)) |
| return -EPROBE_DEFER; |
| |
| diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c |
| index 6a8fb6fd183c..3ff835767ac5 100644 |
| --- a/drivers/gpu/drm/radeon/radeon_kms.c |
| +++ b/drivers/gpu/drm/radeon/radeon_kms.c |
| @@ -95,31 +95,6 @@ int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags) |
| struct radeon_device *rdev; |
| int r, acpi_status; |
| |
| - if (!radeon_si_support) { |
| - switch (flags & RADEON_FAMILY_MASK) { |
| - case CHIP_TAHITI: |
| - case CHIP_PITCAIRN: |
| - case CHIP_VERDE: |
| - case CHIP_OLAND: |
| - case CHIP_HAINAN: |
| - dev_info(dev->dev, |
| - "SI support disabled by module param\n"); |
| - return -ENODEV; |
| - } |
| - } |
| - if (!radeon_cik_support) { |
| - switch (flags & RADEON_FAMILY_MASK) { |
| - case CHIP_KAVERI: |
| - case CHIP_BONAIRE: |
| - case CHIP_HAWAII: |
| - case CHIP_KABINI: |
| - case CHIP_MULLINS: |
| - dev_info(dev->dev, |
| - "CIK support disabled by module param\n"); |
| - return -ENODEV; |
| - } |
| - } |
| - |
| rdev = kzalloc(sizeof(struct radeon_device), GFP_KERNEL); |
| if (rdev == NULL) { |
| return -ENOMEM; |
| -- |
| 2.7.4 |
| |