mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-02 09:05:51 +00:00
PCI: shpchp: Manage SHPC unconditionally on non-ACPI systems
An SHPC can be operated either by platform firmware or by the OS. The OS uses a host bridge ACPI _OSC method to negotiate for control of SHPC. If firmware wants to prevent an OS from operating an SHPC, it must supply an _OSC method that declines to grant SHPC ownership to the OS. If acpi_pci_find_root() returns NULL, it means there's no ACPI host bridge device (PNP0A03 or PNP0A08) and hence no _OSC method, so the OS is always allowed to manage the SHPC. Fix a NULL pointer dereference when CONFIG_ACPI=y but the current hardware/firmware platform doesn't support ACPI. In that case, acpi_get_hp_hw_control_from_firmware() is implemented but acpi_pci_find_root() returns NULL. Fixes: 90cc0c3cc709 ("PCI: shpchp: Add shpchp_is_native()") Link: https://lkml.kernel.org/r/20180621164715.28160-1-marc.zyngier@arm.com Reported-by: Marc Zyngier <marc.zyngier@arm.com> Tested-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
This commit is contained in:
parent
ce397d215c
commit
6f6f42466d
@ -7,7 +7,6 @@
|
||||
* All rights reserved.
|
||||
*
|
||||
* Send feedback to <kristen.c.accardi@intel.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
@ -87,8 +86,17 @@ int acpi_get_hp_hw_control_from_firmware(struct pci_dev *pdev)
|
||||
return 0;
|
||||
|
||||
/* If _OSC exists, we should not evaluate OSHP */
|
||||
|
||||
/*
|
||||
* If there's no ACPI host bridge (i.e., ACPI support is compiled
|
||||
* into the kernel but the hardware platform doesn't support ACPI),
|
||||
* there's nothing to do here.
|
||||
*/
|
||||
host = pci_find_host_bridge(pdev->bus);
|
||||
root = acpi_pci_find_root(ACPI_HANDLE(&host->dev));
|
||||
if (!root)
|
||||
return 0;
|
||||
|
||||
if (root->osc_support_set)
|
||||
goto no_control;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user