lkml.org 
[lkml]   [2019]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 077/114] drm/radeon: Bail earlier when radeon.cik_/si_support=0 is passed
    Date
    From: Hans de Goede <hdegoede@redhat.com>

    [ Upstream commit 9dbc88d013b79c62bd845cb9e7c0256e660967c5 ]

    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: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/radeon/radeon_drv.c | 31 +++++++++++++++++++++++++++++
    drivers/gpu/drm/radeon/radeon_kms.c | 25 -----------------------
    2 files changed, 31 insertions(+), 25 deletions(-)

    diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
    index 25b5407c74b5a..d83310751a8e4 100644
    --- a/drivers/gpu/drm/radeon/radeon_drv.c
    +++ b/drivers/gpu/drm/radeon/radeon_drv.c
    @@ -340,8 +340,39 @@ static int radeon_kick_out_firmware_fb(struct pci_dev *pdev)
    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 6a8fb6fd183c3..3ff835767ac58 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.20.1


    \
     
     \ /
      Last update: 2019-10-10 10:57    [W:3.432 / U:0.908 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site