Centos-kernel-stream-9/drivers/platform/x86
Lukas Wunner d6fa7588fd Revert "apple-gmux: lock iGP IO to protect from vgaarb changes"
Commit 4eebd5a4e7 ("apple-gmux: lock iGP IO to protect from vgaarb
changes") amended this driver's ->probe hook to lock decoding of normal
(non-legacy) I/O space accesses to the integrated GPU on dual-GPU
MacBook Pros.  The lock stays in place until the driver is unbound.

The change was made to work around an issue with the out-of-tree nvidia
graphics driver (available at http://www.nvidia.com/object/unix.html).
It contains the following sequence in nvidia/nv.c:

	#if defined(CONFIG_VGA_ARB) && !defined(NVCPU_PPC64LE)
	#if defined(VGA_DEFAULT_DEVICE)
	    vga_tryget(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK);
	#endif
	    vga_set_legacy_decoding(dev, VGA_RSRC_NONE);
	#endif

This code was reported to cause deadlocks with VFIO already in 2013:
https://devtalk.nvidia.com/default/topic/545560

I've reported the issue to Nvidia developers once more in 2017:
https://www.spinics.net/lists/dri-devel/msg138754.html

On the MacBookPro10,1, this code apparently breaks backlight control
(which is handled by apple-gmux via an I/O region starting at 0x700),
as reported by Petri Hodju:
https://bugzilla.kernel.org/show_bug.cgi?id=86121

I tried to replicate Petri's observations on my MacBook9,1, which uses
the same Intel Ivy Bridge + Nvidia GeForce GT 650M architecture, to no
avail.  On my machine apple-gmux' I/O region remains accessible even
with the nvidia driver loaded and commit 4eebd5a4e7 reverted.
Petri reported that apple-gmux becomes accessible again after a
suspend/resume cycle because the BIOS changed the VGA routing on the
root port to the Nvidia GPU.  Perhaps this is a BIOS issue after all
that can be fixed with an update?

In any case, the change made by commit 4eebd5a4e7 has turned out to
cause two new issues:

* Wilfried Klaebe reports a deadlock when launching Xorg because it
  opens /dev/vga_arbiter and calls vga_get(), but apple-gmux is holding
  a lock on I/O space indefinitely.  It looks like apple-gmux' current
  behavior is an abuse of the vgaarb API as locks are not meant to be
  held for longer periods:
  https://bugzilla.kernel.org/show_bug.cgi?id=88861#c11
  https://bugzilla.kernel.org/attachment.cgi?id=217541

* On dual GPU MacBook Pros introduced since 2013, the integrated GPU is
  powergated on boot und thus becomes invisible to Linux unless a custom
  EFI protocol is used to leave it powered on.  (A patch exists but is
  not in mainline yet due to several negative side effects.)  On these
  machines, locking I/O to the integrated GPU (as done by 4eebd5a4e7)
  fails and backlight control is therefore broken:
  https://bugzilla.kernel.org/show_bug.cgi?id=105051

So let's revert commit 4eebd5a4e7 please.  Users experiencing the
issue with the proprietary nvidia driver can comment out the above-
quoted problematic code as a workaround (or try updating the BIOS).

Cc: Petri Hodju <petrihodju@yahoo.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Bruno Prémont <bonbons@linux-vserver.org>
Cc: Andy Ritger <aritger@nvidia.com>
Cc: Ronald Tschalär <ronald@innovation.ch>
Tested-by: Wilfried Klaebe <linux-kernel@lebenslange-mailadresse.de>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Cc: stable@vger.kernel.org
Signed-off-by: Darren Hart (VMware) <dvhart@infradead.org>
2018-01-31 10:35:35 -08:00
..
Kconfig
Makefile
acer-wireless.c
acer-wmi.c
acerhdf.c
alienware-wmi.c
amilo-rfkill.c
apple-gmux.c Revert "apple-gmux: lock iGP IO to protect from vgaarb changes" 2018-01-31 10:35:35 -08:00
asus-laptop.c
asus-nb-wmi.c
asus-wireless.c
asus-wmi.c
asus-wmi.h
classmate-laptop.c
compal-laptop.c
dell-laptop.c
dell-rbtn.c
dell-rbtn.h
dell-smbios-smm.c
dell-smbios-wmi.c
dell-smbios.c platform/x86: dell-smbios: Correct notation for filtering 2018-01-29 20:44:15 +02:00
dell-smbios.h
dell-smo8800.c
dell-wmi-aio.c
dell-wmi-descriptor.c
dell-wmi-descriptor.h
dell-wmi-led.c
dell-wmi.c
eeepc-laptop.c
eeepc-wmi.c
fujitsu-laptop.c
fujitsu-tablet.c
gpd-pocket-fan.c platform/x86: GPD pocket fan: Stop work on suspend 2018-01-29 20:44:16 +02:00
hdaps.c
hp-wireless.c
hp-wmi.c
hp_accel.c
ibm_rtl.c
ideapad-laptop.c
intel-hid.c
intel-rst.c
intel-smartconnect.c
intel-vbtn.c
intel-wmi-thunderbolt.c
intel_bxtwc_tmu.c
intel_cht_int33fe.c
intel_chtdc_ti_pwrbtn.c
intel_int0002_vgpio.c
intel_ips.c
intel_ips.h
intel_menlow.c
intel_mid_powerbtn.c
intel_mid_thermal.c
intel_oaktrail.c
intel_pmc_core.c platform/x86: intel_pmc_core: Convert to ICPU macro 2018-01-29 20:44:15 +02:00
intel_pmc_core.h platform/x86: intel_pmc_core: Substitute PCI with CPUID enumeration 2018-01-29 20:44:15 +02:00
intel_pmc_ipc.c
intel_punit_ipc.c
intel_scu_ipc.c
intel_scu_ipcutil.c
intel_telemetry_core.c
intel_telemetry_debugfs.c
intel_telemetry_pltdrv.c
intel_turbo_max_3.c
mlx-platform.c
mlxcpld-hotplug.c
msi-laptop.c
msi-wmi.c
mxm-wmi.c
panasonic-laptop.c
peaq-wmi.c
pmc_atom.c
pvpanic.c
samsung-laptop.c
samsung-q10.c
silead_dmi.c
sony-laptop.c
surface3-wmi.c
surface3_button.c
surfacepro3_button.c
tc1100-wmi.c
thinkpad_acpi.c
topstar-laptop.c
toshiba-wmi.c
toshiba_acpi.c
toshiba_bluetooth.c
toshiba_haps.c
wmi-bmof.c
wmi.c
xo1-rfkill.c
xo15-ebook.c