• Rafael J. Wysocki's avatar
    ACPIPHP / radeon / nouveau: Fix VGA switcheroo problem related to hotplug · f244d8b6
    Rafael J. Wysocki authored
    The changes in the ACPI-based PCI hotplug (ACPIPHP) subsystem made
    during the 3.12 development cycle uncovered a problem with VGA
    switcheroo that on some systems, when the device-specific method
    (ATPX in the radeon case, _DSM in the nouveau case) is used to turn
    off the discrete graphics, the BIOS generates ACPI hotplug events for
    that device and those events cause ACPIPHP to attempt to remove the
    device from the system (they are events for a device that was present
    previously and is not present any more, so that's what should be done
    according to the spec).  Then, the system stops functioning correctly.
    
    Since the hotplug events in question were simply silently ignored
    previously, the least intrusive way to address that problem is to
    make ACPIPHP ignore them again.  For this purpose, introduce a new
    ACPI device flag, no_hotplug, and modify ACPIPHP to ignore hotplug
    events for PCI devices whose ACPI companions have that flag set.
    Next, make the radeon and nouveau switcheroo detection code set the
    no_hotplug flag for the discrete graphics' ACPI companion.
    
    Fixes: bbd34fcd (ACPI / hotplug / PCI: Register all devices under the given bridge)
    References: https://bugzilla.kernel.org/show_bug.cgi?id=61891
    References: https://bugzilla.kernel.org/show_bug.cgi?id=64891Reported-and-tested-by: default avatarMike Lothian <mike@fireburn.co.uk>
    Reported-and-tested-by: <madcatx@atlas.cz>
    Reported-and-tested-by: default avatarJoaquín Aramendía <samsagax@gmail.com>
    Cc: Alex Deucher <alexdeucher@gmail.com>
    Cc: Dave Airlie <airlied@linux.ie>
    Cc: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Cc: 3.12+ <stable@vger.kernel.org> # 3.12+
    f244d8b6
acpiphp_glue.c 27.8 KB