30 Dec, 2020

1 commit

  • commit 7482c5cb90e5a7f9e9e12dd154d405e0219656e3 upstream.

    The idea behind acpi_pm_set_bridge_wakeup() was to allow bridges to
    be reference counted for wakeup enabling, because they may be enabled
    to signal wakeup on behalf of their subordinate devices and that
    may happen for multiple times in a row, whereas for the other devices
    it only makes sense to enable wakeup signaling once.

    However, this becomes problematic if the bridge itself is suspended,
    because it is treated as a "regular" device in that case and the
    reference counting doesn't work.

    For instance, suppose that there are two devices below a bridge and
    they both can signal wakeup. Every time one of them is suspended,
    wakeup signaling is enabled for the bridge, so when they both have
    been suspended, the bridge's wakeup reference counter value is 2.

    Say that the bridge is suspended subsequently and acpi_pci_wakeup()
    is called for it. Because the bridge can signal wakeup, that
    function will invoke acpi_pm_set_device_wakeup() to configure it
    and __acpi_pm_set_device_wakeup() will be called with the last
    argument equal to 1. This causes __acpi_device_wakeup_enable()
    invoked by it to omit the reference counting, because the reference
    counter of the target device (the bridge) is 2 at that time.

    Now say that the bridge resumes and one of the device below it
    resumes too, so the bridge's reference counter becomes 0 and
    wakeup signaling is disabled for it, but there is still the other
    suspended device which may need the bridge to signal wakeup on its
    behalf and that is not going to work.

    To address this scenario, use wakeup enable reference counting for
    all devices, not just for bridges, so drop the last argument from
    __acpi_device_wakeup_enable() and __acpi_pm_set_device_wakeup(),
    which causes acpi_pm_set_device_wakeup() and
    acpi_pm_set_bridge_wakeup() to become identical, so drop the latter
    and use the former instead of it everywhere.

    Fixes: 1ba51a7c1496 ("ACPI / PCI / PM: Rework acpi_pci_propagate_wakeup()")
    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Mika Westerberg
    Acked-by: Bjorn Helgaas
    Cc: 4.14+ # 4.14+
    Signed-off-by: Greg Kroah-Hartman

    Rafael J. Wysocki
     

23 Oct, 2020

1 commit

  • Pull PCI updates from Bjorn Helgaas:
    "Enumeration:
    - Print IRQ number used by PCIe Link Bandwidth Notification (Dongdong
    Liu)
    - Add schedule point in pci_read_config() to reduce max latency
    (Jiang Biao)
    - Add Kconfig options for MPS/MRRS strategy (Jim Quinlan)

    Resource management:
    - Fix pci_iounmap() memory leak when !CONFIG_GENERIC_IOMAP (Lorenzo
    Pieralisi)

    PCIe native device hotplug:
    - Reduce noisiness on hot removal (Lukas Wunner)

    Power management:
    - Revert "PCI/PM: Apply D2 delay as milliseconds, not microseconds"
    that was done on the basis of spec typo (Bjorn Helgaas)
    - Rename pci_dev.d3_delay to d3hot_delay to remove D3hot/D3cold
    ambiguity (Krzysztof Wilczyński)
    - Remove unused pcibios_pm_ops (Vaibhav Gupta)

    IOMMU:
    - Enable Translation Blocking for external devices to harden against
    DMA attacks (Rajat Jain)

    Error handling:
    - Add an ACPI APEI notifier chain for vendor CPER records to enable
    device-specific error handling (Shiju Jose)

    ASPM:
    - Remove struct aspm_register_info to simplify code (Saheed O.
    Bolarinwa)

    Amlogic Meson PCIe controller driver:
    - Build as module by default (Kevin Hilman)

    Ampere Altra PCIe controller driver:
    - Add MCFG quirk to work around non-standard ECAM implementation
    (Tuan Phan)

    Broadcom iProc PCIe controller driver:
    - Set affinity mask on MSI interrupts (Mark Tomlinson)

    Broadcom STB PCIe controller driver:
    - Make PCIE_BRCMSTB depend on ARCH_BRCMSTB (Jim Quinlan)
    - Add DT bindings for more Brcmstb chips (Jim Quinlan)
    - Add bcm7278 register info (Jim Quinlan)
    - Add bcm7278 PERST# support (Jim Quinlan)
    - Add suspend and resume pm_ops (Jim Quinlan)
    - Add control of rescal reset (Jim Quinlan)
    - Set additional internal memory DMA viewport sizes (Jim Quinlan)
    - Accommodate MSI for older chips (Jim Quinlan)
    - Set bus max burst size by chip type (Jim Quinlan)
    - Add support for bcm7211, bcm7216, bcm7445, bcm7278 (Jim Quinlan)

    Freescale i.MX6 PCIe controller driver:
    - Use dev_err_probe() to reduce redundant messages (Anson Huang)

    Freescale Layerscape PCIe controller driver:
    - Enforce 4K DMA buffer alignment in endpoint test (Hou Zhiqiang)
    - Add DT compatible strings for ls1088a, ls2088a (Xiaowei Bao)
    - Add endpoint support for ls1088a, ls2088a (Xiaowei Bao)
    - Add endpoint test support for lS1088a (Xiaowei Bao)
    - Add MSI-X support for ls1088a (Xiaowei Bao)

    HiSilicon HIP PCIe controller driver:
    - Handle HIP-specific errors via ACPI APEI (Yicong Yang)

    HiSilicon Kirin PCIe controller driver:
    - Return -EPROBE_DEFER if the GPIO isn't ready (Bean Huo)

    Intel VMD host bridge driver:
    - Factor out physical offset, bus offset, IRQ domain, IRQ allocation
    (Jon Derrick)
    - Use generic PCI PM correctly (Jon Derrick)

    Marvell Aardvark PCIe controller driver:
    - Fix compilation on s390 (Pali Rohár)
    - Implement driver 'remove' function and allow to build it as module
    (Pali Rohár)
    - Move PCIe reset card code to advk_pcie_train_link() (Pali Rohár)
    - Convert mvebu a3700 internal SMCC firmware return codes to errno
    (Pali Rohár)
    - Fix initialization with old Marvell's Arm Trusted Firmware (Pali
    Rohár)

    Microsoft Hyper-V host bridge driver:
    - Fix hibernation in case interrupts are not re-created (Dexuan Cui)

    NVIDIA Tegra PCIe controller driver:
    - Stop checking return value of debugfs_create() functions (Greg
    Kroah-Hartman)
    - Convert to use DEFINE_SEQ_ATTRIBUTE macro (Liu Shixin)

    Qualcomm PCIe controller driver:
    - Reset PCIe to work around Qsdk U-Boot issue (Ansuel Smith)

    Renesas R-Car PCIe controller driver:
    - Add DT documentation for r8a774a1, r8a774b1, r8a774e1 endpoints
    (Lad Prabhakar)
    - Add RZ/G2M, RZ/G2N, RZ/G2H IDs to endpoint test (Lad Prabhakar)
    - Add DT support for r8a7742 (Lad Prabhakar)

    Socionext UniPhier Pro5 controller driver:
    - Add DT descriptions of iATU register (host and endpoint) (Kunihiko
    Hayashi)

    Synopsys DesignWare PCIe controller driver:
    - Add link up check in dw_child_pcie_ops.map_bus() (racy, but seems
    unavoidable) (Hou Zhiqiang)
    - Fix endpoint Header Type check so multi-function devices work (Hou
    Zhiqiang)
    - Skip PCIE_MSI_INTR0* programming if MSI is disabled (Jisheng Zhang)
    - Stop leaking MSI page in suspend/resume (Jisheng Zhang)
    - Add common iATU register support instead of keystone-specific code
    (Kunihiko Hayashi)
    - Major config space access and other cleanups in dwc core and
    drivers that use it (al, exynos, histb, imx6, intel-gw, keystone,
    kirin, meson, qcom, tegra) (Rob Herring)
    - Add multiple PFs support for endpoint (Xiaowei Bao)
    - Add MSI-X doorbell mode in endpoint mode (Xiaowei Bao)

    Miscellaneous:
    - Use fallthrough pseudo-keyword (Gustavo A. R. Silva)
    - Fix "0 used as NULL pointer" warnings (Gustavo Pimentel)
    - Fix "cast truncates bits from constant value" warnings (Gustavo
    Pimentel)
    - Remove redundant zeroing for sg_init_table() (Julia Lawall)
    - Use scnprintf(), not snprintf(), in sysfs "show" functions
    (Krzysztof Wilczyński)
    - Remove unused assignments (Krzysztof Wilczyński)
    - Fix "0 used as NULL pointer" warning (Krzysztof Wilczyński)
    - Simplify bool comparisons (Krzysztof Wilczyński)
    - Use for_each_child_of_node() and for_each_node_by_name() (Qinglang
    Miao)
    - Simplify return expressions (Qinglang Miao)"

    * tag 'pci-v5.10-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (147 commits)
    PCI: vmd: Update VMD PM to correctly use generic PCI PM
    PCI: vmd: Create IRQ allocation helper
    PCI: vmd: Create IRQ Domain configuration helper
    PCI: vmd: Create bus offset configuration helper
    PCI: vmd: Create physical offset helper
    PCI: v3-semi: Remove unneeded break
    PCI: dwc: Add link up check in dw_child_pcie_ops.map_bus()
    PCI/ASPM: Remove struct pcie_link_state.l1ss
    PCI/ASPM: Remove struct aspm_register_info.l1ss_cap
    PCI/ASPM: Pass L1SS Capabilities value, not struct aspm_register_info
    PCI/ASPM: Remove struct aspm_register_info.l1ss_ctl1
    PCI/ASPM: Remove struct aspm_register_info.l1ss_ctl2 (unused)
    PCI/ASPM: Remove struct aspm_register_info.l1ss_cap_ptr
    PCI/ASPM: Remove struct aspm_register_info.latency_encoding
    PCI/ASPM: Remove struct aspm_register_info.enabled
    PCI/ASPM: Remove struct aspm_register_info.support
    PCI/ASPM: Use 'parent' and 'child' for readability
    PCI/ASPM: Move LTR path check to where it's used
    PCI/ASPM: Move pci_clear_and_set_dword() earlier
    PCI: dwc: Fix MSI page leakage in suspend/resume
    ...

    Linus Torvalds
     

15 Oct, 2020

1 commit

  • Pull ACPI updates from Rafael Wysocki:
    "These add support for generic initiator-only proximity domains to the
    ACPI NUMA code and the architectures using it, clean up some
    non-ACPICA code referring to debug facilities from ACPICA, reduce the
    overhead related to accessing GPE registers, add a new DPTF (Dynamic
    Power and Thermal Framework) participant driver, update the ACPICA
    code in the kernel to upstream revision 20200925, add a new ACPI
    backlight whitelist entry, fix a few assorted issues and clean up some
    code.

    Specifics:

    - Add support for generic initiator-only proximity domains to the
    ACPI NUMA code and the architectures using it (Jonathan Cameron)

    - Clean up some non-ACPICA code referring to debug facilities from
    ACPICA that are not actually used in there (Hanjun Guo)

    - Add new DPTF driver for the PCH FIVR participant (Srinivas
    Pandruvada)

    - Reduce overhead related to accessing GPE registers in ACPICA and
    the OS interface layer and make it possible to access GPE registers
    using logical addresses if they are memory-mapped (Rafael Wysocki)

    - Update the ACPICA code in the kernel to upstream revision 20200925
    including changes as follows:
    + Add predefined names from the SMBus sepcification (Bob Moore)
    + Update acpi_help UUID list (Bob Moore)
    + Return exceptions for string-to-integer conversions in iASL (Bob
    Moore)
    + Add a new "ALL " debugger command (Bob Moore)
    + Add support for 64 bit risc-v compilation (Colin Ian King)
    + Do assorted cleanups (Bob Moore, Colin Ian King, Randy Dunlap)

    - Add new ACPI backlight whitelist entry for HP 635 Notebook (Alex
    Hung)

    - Move TPS68470 OpRegion driver to drivers/acpi/pmic/ and split out
    Kconfig and Makefile specific for ACPI PMIC (Andy Shevchenko)

    - Clean up the ACPI SoC driver for AMD SoCs (Hanjun Guo)

    - Add missing config_item_put() to fix refcount leak (Hanjun Guo)

    - Drop lefrover field from struct acpi_memory_device (Hanjun Guo)

    - Make the ACPI extlog driver check for RDMSR failures (Ben
    Hutchings)

    - Fix handling of lid state changes in the ACPI button driver when
    input device is closed (Dmitry Torokhov)

    - Fix several assorted build issues (Barnabás Pőcze, John Garry,
    Nathan Chancellor, Tian Tao)

    - Drop unused inline functions and reduce code duplication by using
    kobj_to_dev() in the NFIT parsing code (YueHaibing, Wang Qing)

    - Serialize tools/power/acpi Makefile (Thomas Renninger)"

    * tag 'acpi-5.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (64 commits)
    ACPICA: Update version to 20200925 Version 20200925
    ACPICA: Remove unnecessary semicolon
    ACPICA: Debugger: Add a new command: "ALL "
    ACPICA: iASL: Return exceptions for string-to-integer conversions
    ACPICA: acpi_help: Update UUID list
    ACPICA: Add predefined names found in the SMBus sepcification
    ACPICA: Tree-wide: fix various typos and spelling mistakes
    ACPICA: Drop the repeated word "an" in a comment
    ACPICA: Add support for 64 bit risc-v compilation
    ACPI: button: fix handling lid state changes when input device closed
    tools/power/acpi: Serialize Makefile
    ACPI: scan: Replace ACPI_DEBUG_PRINT() with pr_debug()
    ACPI: memhotplug: Remove 'state' from struct acpi_memory_device
    ACPI / extlog: Check for RDMSR failure
    ACPI: Make acpi_evaluate_dsm() prototype consistent
    docs: mm: numaperf.rst Add brief description for access class 1.
    node: Add access1 class to represent CPU to memory characteristics
    ACPI: HMAT: Fix handling of changes from ACPI 6.2 to ACPI 6.3
    ACPI: Let ACPI know we support Generic Initiator Affinity Structures
    x86: Support Generic Initiator only proximity domains
    ...

    Linus Torvalds
     

14 Oct, 2020

2 commits

  • Disable parsing of the HMAT for debug, to workaround broken platform
    instances, or cases where it is otherwise not wanted.

    [rdunlap@infradead.org: fix build when CONFIG_ACPI is not set]
    Link: https://lkml.kernel.org/r/70e5ee34-9809-a997-7b49-499e4be61307@infradead.org

    Signed-off-by: Dan Williams
    Signed-off-by: Randy Dunlap
    Signed-off-by: Andrew Morton
    Cc: Dave Hansen
    Cc: Andy Lutomirski
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: Borislav Petkov
    Cc: "H. Peter Anvin"
    Cc: Ard Biesheuvel
    Cc: Ard Biesheuvel
    Cc: Benjamin Herrenschmidt
    Cc: Ben Skeggs
    Cc: Brice Goglin
    Cc: Catalin Marinas
    Cc: Daniel Vetter
    Cc: Dave Jiang
    Cc: David Airlie
    Cc: David Hildenbrand
    Cc: Greg Kroah-Hartman
    Cc: Ira Weiny
    Cc: Jason Gunthorpe
    Cc: Jeff Moyer
    Cc: Jia He
    Cc: Joao Martins
    Cc: Jonathan Cameron
    Cc: Michael Ellerman
    Cc: Mike Rapoport
    Cc: Paul Mackerras
    Cc: Pavel Tatashin
    Cc: "Rafael J. Wysocki"
    Cc: Tom Lendacky
    Cc: Vishal Verma
    Cc: Wei Yang
    Cc: Will Deacon
    Cc: Bjorn Helgaas
    Cc: Boris Ostrovsky
    Cc: Hulk Robot
    Cc: Jason Yan
    Cc: "Jérôme Glisse"
    Cc: Juergen Gross
    Cc: kernel test robot
    Cc: Randy Dunlap
    Cc: Stefano Stabellini
    Cc: Vivek Goyal
    Link: https://lkml.kernel.org/r/159643095540.4062302.732962081968036212.stgit@dwillia2-desk3.amr.corp.intel.com
    Signed-off-by: Linus Torvalds

    Dan Williams
     
  • Patch series "device-dax: Support sub-dividing soft-reserved ranges", v5.

    The device-dax facility allows an address range to be directly mapped
    through a chardev, or optionally hotplugged to the core kernel page
    allocator as System-RAM. It is the mechanism for converting persistent
    memory (pmem) to be used as another volatile memory pool i.e. the current
    Memory Tiering hot topic on linux-mm.

    In the case of pmem the nvdimm-namespace-label mechanism can sub-divide
    it, but that labeling mechanism is not available / applicable to
    soft-reserved ("EFI specific purpose") memory [3]. This series provides a
    sysfs-mechanism for the daxctl utility to enable provisioning of
    volatile-soft-reserved memory ranges.

    The motivations for this facility are:

    1/ Allow performance differentiated memory ranges to be split between
    kernel-managed and directly-accessed use cases.

    2/ Allow physical memory to be provisioned along performance relevant
    address boundaries. For example, divide a memory-side cache [4] along
    cache-color boundaries.

    3/ Parcel out soft-reserved memory to VMs using device-dax as a security
    / permissions boundary [5]. Specifically I have seen people (ab)using
    memmap=nn!ss (mark System-RAM as Persistent Memory) just to get the
    device-dax interface on custom address ranges. A follow-on for the VM
    use case is to teach device-dax to dynamically allocate 'struct page' at
    runtime to reduce the duplication of 'struct page' space in both the
    guest and the host kernel for the same physical pages.

    [2]: http://lore.kernel.org/r/20200713160837.13774-11-joao.m.martins@oracle.com
    [3]: http://lore.kernel.org/r/157309097008.1579826.12818463304589384434.stgit@dwillia2-desk3.amr.corp.intel.com
    [4]: http://lore.kernel.org/r/154899811738.3165233.12325692939590944259.stgit@dwillia2-desk3.amr.corp.intel.com
    [5]: http://lore.kernel.org/r/20200110190313.17144-1-joao.m.martins@oracle.com

    This patch (of 23):

    In preparation for adding a new numa= option clean up the existing ones to
    avoid ifdefs in numa_setup(), and provide feedback when the option is
    numa=fake= option is invalid due to kernel config. The same does not need
    to be done for numa=noacpi, since the capability is already hard disabled
    at compile-time.

    Suggested-by: Rafael J. Wysocki
    Signed-off-by: Dan Williams
    Signed-off-by: Andrew Morton
    Cc: Andy Lutomirski
    Cc: Ard Biesheuvel
    Cc: Benjamin Herrenschmidt
    Cc: Ben Skeggs
    Cc: Borislav Petkov
    Cc: Brice Goglin
    Cc: Catalin Marinas
    Cc: Daniel Vetter
    Cc: Dave Hansen
    Cc: Dave Jiang
    Cc: David Airlie
    Cc: David Hildenbrand
    Cc: Greg Kroah-Hartman
    Cc: "H. Peter Anvin"
    Cc: Ingo Molnar
    Cc: Ira Weiny
    Cc: Jason Gunthorpe
    Cc: Jeff Moyer
    Cc: Jia He
    Cc: Joao Martins
    Cc: Jonathan Cameron
    Cc: Michael Ellerman
    Cc: Mike Rapoport
    Cc: Paul Mackerras
    Cc: Pavel Tatashin
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Thomas Gleixner
    Cc: Tom Lendacky
    Cc: Vishal Verma
    Cc: Wei Yang
    Cc: Will Deacon
    Cc: Ard Biesheuvel
    Cc: Bjorn Helgaas
    Cc: Boris Ostrovsky
    Cc: Hulk Robot
    Cc: Jason Yan
    Cc: "Jérôme Glisse"
    Cc: Juergen Gross
    Cc: kernel test robot
    Cc: Randy Dunlap
    Cc: Stefano Stabellini
    Cc: Vivek Goyal
    Link: https://lkml.kernel.org/r/160106109960.30709.7379926726669669398.stgit@dwillia2-desk3.amr.corp.intel.com
    Link: https://lkml.kernel.org/r/159643094279.4062302.17779410714418721328.stgit@dwillia2-desk3.amr.corp.intel.com
    Link: https://lkml.kernel.org/r/159643094925.4062302.14979872973043772305.stgit@dwillia2-desk3.amr.corp.intel.com
    Signed-off-by: Linus Torvalds

    Dan Williams
     

13 Oct, 2020

2 commits

  • * acpi-numa:
    docs: mm: numaperf.rst Add brief description for access class 1.
    node: Add access1 class to represent CPU to memory characteristics
    ACPI: HMAT: Fix handling of changes from ACPI 6.2 to ACPI 6.3
    ACPI: Let ACPI know we support Generic Initiator Affinity Structures
    x86: Support Generic Initiator only proximity domains
    ACPI: Support Generic Initiator only domains
    ACPI / NUMA: Add stub function for pxm_to_node()
    irq-chip/gic-v3-its: Fix crash if ITS is in a proximity domain without processor or memory
    ACPI: Remove side effect of partly creating a node in acpi_get_node()
    ACPI: Rename acpi_map_pxm_to_online_node() to pxm_to_online_node()
    ACPI: Remove side effect of partly creating a node in acpi_map_pxm_to_online_node()
    ACPI: Do not create new NUMA domains from ACPI static tables that are not SRAT
    ACPI: Add out of bounds and numa_off protections to pxm_to_node()

    Rafael J. Wysocki
     
  • * acpi-video:
    ACPI: video: use ACPI backlight for HP 635 Notebook

    * acpi-battery:
    ACPI: battery: include linux/power_supply.h

    * acpi-config:
    ACPI: configfs: Add missing config_item_put() to fix refcount leak

    * acpi-scan:
    ACPI: scan: Replace ACPI_DEBUG_PRINT() with pr_debug()

    Rafael J. Wysocki
     

09 Oct, 2020

7 commits

  • Rafael J. Wysocki
     
  • ACPICA commit 70add34a9a4729b5496d0695ad14d6a1dc435879

    Link: https://github.com/acpica/acpica/commit/70add34a
    Signed-off-by: Bob Moore
    Signed-off-by: Erik Kaneda
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     
  • This allows iASL to generate errors by passing exceptions that may be
    encountered during string-to-integer conversions. The exceptions
    point out invalid hex, decimal, and octal integers.

    ACPICA commit e98b8c0a3d96fdabb167c0ef18a809b32ade3228

    Link: https://github.com/acpica/acpica/commit/e98b8c0a
    Signed-off-by: Bob Moore
    Signed-off-by: Erik Kaneda
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     
  • Added the following UUID's

    Memory Device
    Generic Buttons Device
    NVDIMM Root Device
    Control Method Battery
    Device Graphs for _DSD method
    Hierarchical Data Extension
    ARM core_sight Graph UUID

    This commit squashes the following ACPICA commits:
    93e9aa864a7c5e10db876a9af3f2086e50cc6cf5
    759aaf73942af4a1a0d13715ce5e6b054af351fa
    24751ce4cf3089a7c1709e4986bc82dfb5cca7bc

    Link: https://github.com/acpica/acpica/commit/93e9aa86
    Link: https://github.com/acpica/acpica/commit/759aaf73
    Link: https://github.com/acpica/acpica/commit/24751ce4
    Signed-off-by: Bob Moore
    Signed-off-by: Erik Kaneda
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     
  • ACPICA commit 6648a6ac8410813bcfedb5c8345259dd155ea851

    Fix spelling issues found using the codespell checker

    Link: https://github.com/acpica/acpica/commit/6648a6ac
    Signed-off-by: Colin Ian King
    Signed-off-by: Bob Moore
    Signed-off-by: Erik Kaneda
    Signed-off-by: Rafael J. Wysocki

    Colin Ian King
     
  • ACPICA commit 9ed2c006444d1def55bc6f08164ed5d9e809c856

    Link: https://github.com/acpica/acpica/commit/9ed2c006
    Signed-off-by: Randy Dunlap
    Signed-off-by: Erik Kaneda
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Randy Dunlap
     
  • ACPICA commit 0def627be286620c64a5d4d60ce2373f119169a9

    Add 64 bit risc-v architecture. Useful for acpica tools and
    incorporating ACPICA into the Firmware Test Suite.

    Link: https://github.com/acpica/acpica/commit/0def627b
    Signed-off-by: Colin Ian King
    Signed-off-by: Bob Moore
    Signed-off-by: Erik Kaneda
    Signed-off-by: Rafael J. Wysocki

    Colin Ian King
     

30 Sep, 2020

1 commit

  • After commit 01feba590cd6 ("ACPI: Do not create new NUMA domains from
    ACPI static tables that are not SRAT"):

    $ scripts/config --file arch/x86/configs/x86_64_defconfig -d NUMA -e ACPI_NFIT

    $ make -skj"$(nproc)" distclean defconfig drivers/acpi/nfit/
    drivers/acpi/nfit/core.c: In function ‘acpi_nfit_register_region’:
    drivers/acpi/nfit/core.c:3010:27: error: implicit declaration of
    function ‘pxm_to_node’; did you mean ‘xa_to_node’?
    [-Werror=implicit-function-declaration]
    3010 | ndr_desc->target_node = pxm_to_node(spa->proximity_domain);
    | ^~~~~~~~~~~
    | xa_to_node
    cc1: some warnings being treated as errors
    ...

    Add a stub function like acpi_map_pxm_to_node() had so that the build
    continues to work.

    Fixes: 01feba590cd6 ("ACPI: Do not create new NUMA domains from ACPI static tables that are not SRAT")
    Signed-off-by: Nathan Chancellor
    Acked-by: Randy Dunlap # build-tested
    Acked-by: Jonathan Cameron
    Reviewed-by: Hanjun Guo
    Signed-off-by: Rafael J. Wysocki

    Nathan Chancellor
     

26 Sep, 2020

1 commit


16 Sep, 2020

1 commit

  • CPER records describing a firmware-first error are identified by GUID.
    The ghes driver currently logs, but ignores any unknown CPER records.
    This prevents describing errors that can't be represented by a standard
    entry, that would otherwise allow a driver to recover from an error.
    The UEFI spec calls these 'Non-standard Section Body' (N.2.3 of
    version 2.8).

    Add a notifier chain for these non-standard/vendor-records. Callers
    must identify their type of records by GUID.

    Record data is copied to memory from the ghes_estatus_pool to allow
    us to keep it until after the notifier has run.

    Co-developed-by: James Morse
    Link: https://lore.kernel.org/r/20200903123456.1823-2-shiju.jose@huawei.com
    Signed-off-by: James Morse
    Signed-off-by: Shiju Jose
    Signed-off-by: Lorenzo Pieralisi
    Acked-by: "Rafael J. Wysocki"

    Shiju Jose
     

11 Sep, 2020

2 commits

  • Define ACPI_GPE_USE_LOGICAL_ADDRESSES in aclinux.h and modify
    acpi_os_initialize() to store the logical addresses of the FADT GPE
    blocks 0 and 1 in acpi_gbl_xgpe0_block_logical_address and
    acpi_gbl_xgpe1_block_logical_address, respectively, so as to allow
    ACPICA to use them for accessing GPE registers in system memory,
    instead of using their physical addresses and looking up the
    corresponding logical addresses on every access attempt, which is
    inefficient.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     
  • Modify acpi_os_map_generic_address() to return the pointer returned
    by acpi_os_map_iomem() which represents the logical address
    corresponding to the struct acpi_generic_address argument passed to
    it or NULL if that address cannot be obtained (for example, the
    argument does not represent an address in system memory or it could
    not be mapped by the OS).

    Among other things, that will allow the ACPI OS layer to pass the
    logical addresses of the FADT GPE blocks 0 and 1 to ACPICA going
    forward.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

04 Aug, 2020

2 commits

  • Pull ACPI updates from Rafael Wysocki:
    "These eliminate significant AML processing overhead related to using
    operation regions in system memory, update the ACPICA code in the
    kernel to upstream revision 20200717 (including a fix to prevent
    operation region reference counts from overflowing in some cases),
    remove the last bits of the (long deprecated) ACPI procfs interface
    and do some assorted cleanups.

    Specifics:

    - Eliminate significant AML processing overhead related to using
    operation regions in system memory by reworking the management of
    memory mappings in the ACPI code to defer unmap operations (to do
    them outside of the ACPICA locks, among other things) and making
    the memory operation reagion handler avoid releasing memory
    mappings created by it too early (Rafael Wysocki).

    - Update the ACPICA code in the kernel to upstream revision 20200717:

    * Prevent operation region reference counts from overflowing in
    some cases (Erik Kaneda).

    * Replace one-element array with flexible-array (Gustavo A. R.
    Silva).

    - Fix ACPI PCI hotplug reference counting (Rafael Wysocki).

    - Drop last bits of the ACPI procfs interface (Thomas Renninger).

    - Drop some redundant checks from the code parsing ACPI tables
    related to NUMA (Hanjun Guo).

    - Avoid redundant object evaluation in the ACPI device properties
    handling code (Heikki Krogerus).

    - Avoid unecessary memory overhead related to storing the signatures
    of the ACPI tables recognized by the kernel (Ard Biesheuvel).

    - Add missing newline characters when printing module parameter
    values in some places (Xiongfeng Wang).

    - Update the link to the ACPI specifications in some places (Tiezhu
    Yang).

    - Use the fallthrough pseudo-keyword in the ACPI code (Gustavo A. R.
    Silva).

    - Drop redundant variable initialization from the APEI code (Colin
    Ian King).

    - Drop uninitialized_var() from the ACPI PAD driver (Jason Yan).

    - Replace HTTP links with HTTPS ones in the ACPI code (Alexander A.
    Klimov)"

    * tag 'acpi-5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (22 commits)
    ACPI: APEI: remove redundant assignment to variable rc
    ACPI: NUMA: Remove the useless 'node >= MAX_NUMNODES' check
    ACPI: NUMA: Remove the useless sub table pointer check
    ACPI: tables: Remove the duplicated checks for acpi_parse_entries_array()
    ACPICA: Update version to 20200717
    ACPICA: Do not increment operation_region reference counts for field units
    ACPICA: Replace one-element array with flexible-array
    ACPI: Replace HTTP links with HTTPS ones
    ACPI: Use valid link to the ACPI specification
    ACPI: OSL: Clean up the removal of unused memory mappings
    ACPI: OSL: Use deferred unmapping in acpi_os_unmap_iomem()
    ACPI: OSL: Use deferred unmapping in acpi_os_unmap_generic_address()
    ACPICA: Preserve memory opregion mappings
    ACPI: OSL: Implement deferred unmapping of ACPI memory
    ACPI: Use fallthrough pseudo-keyword
    PCI: hotplug: ACPI: Fix context refcounting in acpiphp_grab_context()
    ACPI: tables: avoid relocations for table signature array
    ACPI: PAD: Eliminate usage of uninitialized_var() macro
    ACPI: sysfs: add newlines when printing module parameters
    ACPI: EC: add newline when printing 'ec_event_clearing' module parameter
    ...

    Linus Torvalds
     
  • Pull arm64 and cross-arch updates from Catalin Marinas:
    "Here's a slightly wider-spread set of updates for 5.9.

    Going outside the usual arch/arm64/ area is the removal of
    read_barrier_depends() series from Will and the MSI/IOMMU ID
    translation series from Lorenzo.

    The notable arm64 updates include ARMv8.4 TLBI range operations and
    translation level hint, time namespace support, and perf.

    Summary:

    - Removal of the tremendously unpopular read_barrier_depends()
    barrier, which is a NOP on all architectures apart from Alpha, in
    favour of allowing architectures to override READ_ONCE() and do
    whatever dance they need to do to ensure address dependencies
    provide LOAD -> LOAD/STORE ordering.

    This work also offers a potential solution if compilers are shown
    to convert LOAD -> LOAD address dependencies into control
    dependencies (e.g. under LTO), as weakly ordered architectures will
    effectively be able to upgrade READ_ONCE() to smp_load_acquire().
    The latter case is not used yet, but will be discussed further at
    LPC.

    - Make the MSI/IOMMU input/output ID translation PCI agnostic,
    augment the MSI/IOMMU ACPI/OF ID mapping APIs to accept an input ID
    bus-specific parameter and apply the resulting changes to the
    device ID space provided by the Freescale FSL bus.

    - arm64 support for TLBI range operations and translation table level
    hints (part of the ARMv8.4 architecture version).

    - Time namespace support for arm64.

    - Export the virtual and physical address sizes in vmcoreinfo for
    makedumpfile and crash utilities.

    - CPU feature handling cleanups and checks for programmer errors
    (overlapping bit-fields).

    - ACPI updates for arm64: disallow AML accesses to EFI code regions
    and kernel memory.

    - perf updates for arm64.

    - Miscellaneous fixes and cleanups, most notably PLT counting
    optimisation for module loading, recordmcount fix to ignore
    relocations other than R_AARCH64_CALL26, CMA areas reserved for
    gigantic pages on 16K and 64K configurations.

    - Trivial typos, duplicate words"

    Link: http://lkml.kernel.org/r/20200710165203.31284-1-will@kernel.org
    Link: http://lkml.kernel.org/r/20200619082013.13661-1-lorenzo.pieralisi@arm.com

    * tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (82 commits)
    arm64: use IRQ_STACK_SIZE instead of THREAD_SIZE for irq stack
    arm64/mm: save memory access in check_and_switch_context() fast switch path
    arm64: sigcontext.h: delete duplicated word
    arm64: ptrace.h: delete duplicated word
    arm64: pgtable-hwdef.h: delete duplicated words
    bus: fsl-mc: Add ACPI support for fsl-mc
    bus/fsl-mc: Refactor the MSI domain creation in the DPRC driver
    of/irq: Make of_msi_map_rid() PCI bus agnostic
    of/irq: make of_msi_map_get_device_domain() bus agnostic
    dt-bindings: arm: fsl: Add msi-map device-tree binding for fsl-mc bus
    of/device: Add input id to of_dma_configure()
    of/iommu: Make of_map_rid() PCI agnostic
    ACPI/IORT: Add an input ID to acpi_dma_configure()
    ACPI/IORT: Remove useless PCI bus walk
    ACPI/IORT: Make iort_msi_map_rid() PCI agnostic
    ACPI/IORT: Make iort_get_device_domain IRQ domain agnostic
    ACPI/IORT: Make iort_match_node_callback walk the ACPI namespace for NC
    arm64: enable time namespace support
    arm64/vdso: Restrict splitting VVAR VMA
    arm64/vdso: Handle faults on timens page
    ...

    Linus Torvalds
     

03 Aug, 2020

1 commit

  • * acpi-mm:
    ACPI: OSL: Clean up the removal of unused memory mappings
    ACPI: OSL: Use deferred unmapping in acpi_os_unmap_iomem()
    ACPI: OSL: Use deferred unmapping in acpi_os_unmap_generic_address()
    ACPICA: Preserve memory opregion mappings
    ACPI: OSL: Implement deferred unmapping of ACPI memory

    * acpi-tables:
    ACPI: NUMA: Remove the useless 'node >= MAX_NUMNODES' check
    ACPI: NUMA: Remove the useless sub table pointer check
    ACPI: tables: Remove the duplicated checks for acpi_parse_entries_array()
    ACPI: tables: avoid relocations for table signature array

    * acpi-apei:
    ACPI: APEI: remove redundant assignment to variable rc

    * acpi-misc:
    ACPI: Replace HTTP links with HTTPS ones
    ACPI: Use valid link to the ACPI specification
    ACPI: Use fallthrough pseudo-keyword

    Rafael J. Wysocki
     

28 Jul, 2020

1 commit

  • Some HW devices are created as child devices of proprietary busses,
    that have a bus specific policy defining how the child devices
    wires representing the devices ID are translated into IOMMU and
    IRQ controllers device IDs.

    Current IORT code provides translations for:

    - PCI devices, where the device ID is well identified at bus level
    as the requester ID (RID)
    - Platform devices that are endpoint devices where the device ID is
    retrieved from the ACPI object IORT mappings (Named components single
    mappings). A platform device is represented in IORT as a named
    component node

    For devices that are child devices of proprietary busses the IORT
    firmware represents the bus node as a named component node in IORT
    and it is up to that named component node to define in/out bus
    specific ID translations for the bus child devices that are
    allocated and created in a bus specific manner.

    In order to make IORT ID translations available for proprietary
    bus child devices, the current ACPI (and IORT) code must be
    augmented to provide an additional ID parameter to acpi_dma_configure()
    representing the child devices input ID. This ID is bus specific
    and it is retrieved in bus specific code.

    By adding an ID parameter to acpi_dma_configure(), the IORT
    code can map the child device ID to an IOMMU stream ID through
    the IORT named component representing the bus in/out ID mappings.

    Signed-off-by: Lorenzo Pieralisi
    Cc: Will Deacon
    Cc: Hanjun Guo
    Cc: Sudeep Holla
    Cc: Robin Murphy
    Cc: "Rafael J. Wysocki"
    Link: https://lore.kernel.org/r/20200619082013.13661-6-lorenzo.pieralisi@arm.com
    Signed-off-by: Catalin Marinas

    Lorenzo Pieralisi
     

27 Jul, 2020

3 commits

  • ACPICA commit c1adb9a2a775df7a85df0103342ebf090e1b2016

    Version 20200717.

    Link: https://github.com/acpica/acpica/commit/c1adb9a2
    Signed-off-by: Bob Moore
    Signed-off-by: Erik Kaneda
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     
  • ACPICA commit 7ba2f3d91a32f104765961fda0ed78b884ae193d

    The current codebase makes use of one-element arrays in the following
    form:

    struct something {
    int length;
    u8 data[1];
    };

    struct something *instance;

    instance = kmalloc(sizeof(*instance) + size, GFP_KERNEL);
    instance->length = size;
    memcpy(instance->data, source, size);

    but the preferred mechanism to declare variable-length types such as
    these ones is a flexible array member[1][2], introduced in C99:

    struct foo {
    int stuff;
    struct boo array[];
    };

    By making use of the mechanism above, we will get a compiler warning
    in case the flexible array does not occur last in the structure,
    which will help us prevent some kind of undefined behavior bugs from
    being inadvertently introduced[3] to the linux codebase from now on.

    This issue was found with the help of Coccinelle and audited _manually_.

    [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
    [2] https://github.com/KSPP/linux/issues/21
    [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")

    Link: https://github.com/acpica/acpica/commit/7ba2f3d9
    Signed-off-by: Gustavo A. R. Silva
    Signed-off-by: Erik Kaneda
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Gustavo A. R. Silva
     
  • The ACPICA's strategy with respect to the handling of memory mappings
    associated with memory operation regions is to avoid mapping the
    entire region at once which may be problematic at least in principle
    (for example, it may lead to conflicts with overlapping mappings
    having different attributes created by drivers). It may also be
    wasteful, because memory opregions on some systems take up vast
    chunks of address space while the fields in those regions actually
    accessed by AML are sparsely distributed.

    For this reason, a one-page "window" is mapped for a given opregion
    on the first memory access through it and if that "window" does not
    cover an address range accessed through that opregion subsequently,
    it is unmapped and a new "window" is mapped to replace it. Next,
    if the new "window" is not sufficient to acess memory through the
    opregion in question in the future, it will be replaced with yet
    another "window" and so on. That may lead to a suboptimal sequence
    of memory mapping and unmapping operations, for example if two fields
    in one opregion separated from each other by a sufficiently wide
    chunk of unused address space are accessed in an alternating pattern.

    The situation may still be suboptimal if the deferred unmapping
    introduced previously is supported by the OS layer. For instance,
    the alternating memory access pattern mentioned above may produce
    a relatively long list of mappings to release with substantial
    duplication among the entries in it, which could be avoided if
    acpi_ex_system_memory_space_handler() did not release the mapping
    used by it previously as soon as the current access was not covered
    by it.

    In order to improve that, modify acpi_ex_system_memory_space_handler()
    to preserve all of the memory mappings created by it until the memory
    regions associated with them go away.

    Accordingly, update acpi_ev_system_memory_region_setup() to unmap all
    memory associated with memory opregions that go away.

    Reported-by: Dan Williams
    Tested-by: Xiang Li
    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

24 Jul, 2020

1 commit

  • Recent extensions of the TPM2 ACPI table added 3 more fields
    including 12 bytes of start method specific parameters and Log Area
    Minimum Length (u32) and Log Area Start Address (u64). So, we define
    a new structure acpi_tpm2_phy that holds these optional new fields.
    The new fields allow non-UEFI systems to access the TPM2's log.

    The specification that has the new fields is the following:
    TCG ACPI Specification
    Family "1.2" and "2.0"
    Version 1.2, Revision 8

    https://trustedcomputinggroup.org/wp-content/uploads/TCG_ACPIGeneralSpecification_v1.20_r8.pdf

    Cc: linux-acpi@vger.kernel.org
    Cc: Len Brown
    Signed-off-by: Stefan Berger
    Acked-by: Rafael J. Wysocki
    Reviewed-by: Jarkko Sakkinen
    Reviewed-by: Jerry Snitselaar
    Signed-off-by: Jarkko Sakkinen

    Stefan Berger
     

10 Jun, 2020

1 commit


05 Jun, 2020

2 commits


01 Jun, 2020

2 commits

  • * acpi-apei:
    arm64: acpi: Make apei_claim_sea() synchronise with APEI's irq work
    ACPI: APEI: Kick the memory_failure() queue for synchronous errors
    mm/memory-failure: Add memory_failure_queue_kick()

    * acpi-pmic:
    ACPI / PMIC: Add i2c address for thermal control

    * acpi-video:
    ACPI: video: Use native backlight on Acer TravelMate 5735Z

    * acpi-dptf:
    ACPI: DPTF: Add battery participant driver
    ACPI: DPTF: Additional sysfs attributes for power participant driver

    Rafael J. Wysocki
     
  • * acpi-processor:
    ACPI: processor: idle: Allow probing on platforms with one ACPI C-state

    * acpi-cppc:
    ACPI: CPPC: Fix reference count leak in acpi_cppc_processor_probe()
    ACPI: CPPC: Make some symbols static

    * acpi-dbg:
    ACPI: debug: Make two functions static

    * acpi-misc:
    ACPI: GED: use correct trigger type field in _Exx / _Lxx handling
    ACPI: GED: add support for _Exx / _Lxx handler methods
    ACPI: Delete unused proc filename macros

    * acpi-pci:
    ACPI: hotplug: PCI: Use the new acpi_evaluate_reg() helper
    ACPI: utils: Add acpi_evaluate_reg() helper

    Rafael J. Wysocki
     

20 May, 2020

1 commit

  • memory_failure() offlines or repairs pages of memory that have been
    discovered to be corrupt. These may be detected by an external
    component, (e.g. the memory controller), and notified via an IRQ.
    In this case the work is queued as not all of memory_failure()s work
    can happen in IRQ context.

    If the error was detected as a result of user-space accessing a
    corrupt memory location the CPU may take an abort instead. On arm64
    this is a 'synchronous external abort', and on a firmware first
    system it is replayed using NOTIFY_SEA.

    This notification has NMI like properties, (it can interrupt
    IRQ-masked code), so the memory_failure() work is queued. If we
    return to user-space before the queued memory_failure() work is
    processed, we will take the fault again. This loop may cause platform
    firmware to exceed some threshold and reboot when Linux could have
    recovered from this error.

    For NMIlike notifications keep track of whether memory_failure() work
    was queued, and make task_work pending to flush out the queue.
    To save memory allocations, the task_work is allocated as part of
    the ghes_estatus_node, and free()ing it back to the pool is deferred.

    Signed-off-by: James Morse
    Tested-by: Tyler Baicar
    Signed-off-by: Rafael J. Wysocki

    James Morse
     

09 May, 2020

2 commits

  • With a recent fix to the pinctrl-cherryview driver we now have
    2 drivers open-coding the parameter building / passing for calling
    _REG on an ACPI handle.

    Add a helper for this, so that these 2 drivers can be converted to this
    helper.

    Suggested-by: Andy Shevchenko
    Reviewed-by: Andy Shevchenko
    Signed-off-by: Hans de Goede
    Signed-off-by: Rafael J. Wysocki

    Hans de Goede
     
  • ACPICA commit c00a5cd99fa3fe6cd053a2a1a557e54b4fea26f7

    Version 20200430.

    Link: https://github.com/acpica/acpica/commit/c00a5cd9
    Signed-off-by: Bob Moore
    Signed-off-by: Erik Kaneda
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     

07 Apr, 2020

1 commit

  • Pull more ACPI updates from Rafael Wysocki:
    "Additional ACPI updates.

    These update the ACPICA code in the kernel to the 20200326 upstream
    revision, fix an ACPI-related CPU hotplug deadlock on x86, update
    Intel Tiger Lake device IDs in some places, add a new ACPI backlight
    blacklist entry, update the "acpi_backlight" kernel command line
    switch documentation and clean up a CPPC library routine.

    Specifics:

    - Update the ACPICA code in the kernel to upstream revision 20200326
    including:
    * Fix for a typo in a comment field (Bob Moore)
    * acpiExec namespace init file fixes (Bob Moore)
    * Addition of NHLT to the known tables list (Cezary Rojewski)
    * Conversion of PlatformCommChannel ASL keyword to PCC (Erik
    Kaneda)
    * acpiexec cleanup (Erik Kaneda)
    * WSMT-related typo fix (Erik Kaneda)
    * sprintf() utility function fix (John Levon)
    * IVRS IVHD type 11h parsing implementation (Michał Żygowski)
    * IVRS IVHD type 10h reserved field name fix (Michał Żygowski)

    - Fix ACPI-related CPU hotplug deadlock on x86 (Qian Cai)

    - Fix Intel Tiger Lake ACPI device IDs in several places (Gayatri
    Kammela)

    - Add ACPI backlight blacklist entry for Acer Aspire 5783z (Hans de
    Goede)

    - Fix documentation of the "acpi_backlight" kernel command line
    switch (Randy Dunlap)

    - Clean up the acpi_get_psd_map() CPPC library routine (Liguang
    Zhang)"

    * tag 'acpi-5.7-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
    x86: ACPI: fix CPU hotplug deadlock
    thermal: int340x_thermal: fix: Update Tiger Lake ACPI device IDs
    platform/x86: intel-hid: fix: Update Tiger Lake ACPI device ID
    ACPI: Update Tiger Lake ACPI device IDs
    ACPI: video: Use native backlight on Acer Aspire 5783z
    ACPI: video: Docs update for "acpi_backlight" kernel parameter options
    ACPICA: Update version 20200326
    ACPICA: Fixes for acpiExec namespace init file
    ACPICA: Add NHLT table signature
    ACPICA: WSMT: Fix typo, no functional change
    ACPICA: utilities: fix sprintf()
    ACPICA: acpiexec: remove redeclaration of acpi_gbl_db_opt_no_region_support
    ACPICA: Change PlatformCommChannel ASL keyword to PCC
    ACPICA: Fix IVRS IVHD type 10h reserved field name
    ACPICA: Implement IVRS IVHD type 11h parsing
    ACPICA: Fix a typo in a comment field
    ACPI: CPPC: clean up acpi_get_psd_map()

    Linus Torvalds
     

06 Apr, 2020

1 commit

  • * acpica:
    ACPICA: Update version 20200326
    ACPICA: Fixes for acpiExec namespace init file
    ACPICA: Add NHLT table signature
    ACPICA: WSMT: Fix typo, no functional change
    ACPICA: utilities: fix sprintf()
    ACPICA: acpiexec: remove redeclaration of acpi_gbl_db_opt_no_region_support
    ACPICA: Change PlatformCommChannel ASL keyword to PCC
    ACPICA: Fix IVRS IVHD type 10h reserved field name
    ACPICA: Implement IVRS IVHD type 11h parsing
    ACPICA: Fix a typo in a comment field

    Rafael J. Wysocki
     

04 Apr, 2020

1 commit

  • Similar to commit 0266d81e9bf5 ("acpi/processor: Prevent cpu hotplug
    deadlock") except this is for acpi_processor_ffh_cstate_probe():

    "The problem is that the work is scheduled on the current CPU from the
    hotplug thread associated with that CPU.

    It's not required to invoke these functions via the workqueue because
    the hotplug thread runs on the target CPU already.

    Check whether current is a per cpu thread pinned on the target CPU and
    invoke the function directly to avoid the workqueue."

    WARNING: possible circular locking dependency detected
    ------------------------------------------------------
    cpuhp/1/15 is trying to acquire lock:
    ffffc90003447a28 ((work_completion)(&wfc.work)){+.+.}-{0:0}, at: __flush_work+0x4c6/0x630

    but task is already holding lock:
    ffffffffafa1c0e8 (cpuidle_lock){+.+.}-{3:3}, at: cpuidle_pause_and_lock+0x17/0x20

    which lock already depends on the new lock.

    the existing dependency chain (in reverse order) is:

    -> #1 (cpu_hotplug_lock){++++}-{0:0}:
    cpus_read_lock+0x3e/0xc0
    irq_calc_affinity_vectors+0x5f/0x91
    __pci_enable_msix_range+0x10f/0x9a0
    pci_alloc_irq_vectors_affinity+0x13e/0x1f0
    pci_alloc_irq_vectors_affinity at drivers/pci/msi.c:1208
    pqi_ctrl_init+0x72f/0x1618 [smartpqi]
    pqi_pci_probe.cold.63+0x882/0x892 [smartpqi]
    local_pci_probe+0x7a/0xc0
    work_for_cpu_fn+0x2e/0x50
    process_one_work+0x57e/0xb90
    worker_thread+0x363/0x5b0
    kthread+0x1f4/0x220
    ret_from_fork+0x27/0x50

    -> #0 ((work_completion)(&wfc.work)){+.+.}-{0:0}:
    __lock_acquire+0x2244/0x32a0
    lock_acquire+0x1a2/0x680
    __flush_work+0x4e6/0x630
    work_on_cpu+0x114/0x160
    acpi_processor_ffh_cstate_probe+0x129/0x250
    acpi_processor_evaluate_cst+0x4c8/0x580
    acpi_processor_get_power_info+0x86/0x740
    acpi_processor_hotplug+0xc3/0x140
    acpi_soft_cpu_online+0x102/0x1d0
    cpuhp_invoke_callback+0x197/0x1120
    cpuhp_thread_fun+0x252/0x2f0
    smpboot_thread_fn+0x255/0x440
    kthread+0x1f4/0x220
    ret_from_fork+0x27/0x50

    other info that might help us debug this:

    Chain exists of:
    (work_completion)(&wfc.work) --> cpuhp_state-up --> cpuidle_lock

    Possible unsafe locking scenario:

    CPU0 CPU1
    ---- ----
    lock(cpuidle_lock);
    lock(cpuhp_state-up);
    lock(cpuidle_lock);
    lock((work_completion)(&wfc.work));

    *** DEADLOCK ***

    3 locks held by cpuhp/1/15:
    #0: ffffffffaf51ab10 (cpu_hotplug_lock){++++}-{0:0}, at: cpuhp_thread_fun+0x69/0x2f0
    #1: ffffffffaf51ad40 (cpuhp_state-up){+.+.}-{0:0}, at: cpuhp_thread_fun+0x69/0x2f0
    #2: ffffffffafa1c0e8 (cpuidle_lock){+.+.}-{3:3}, at: cpuidle_pause_and_lock+0x17/0x20

    Call Trace:
    dump_stack+0xa0/0xea
    print_circular_bug.cold.52+0x147/0x14c
    check_noncircular+0x295/0x2d0
    __lock_acquire+0x2244/0x32a0
    lock_acquire+0x1a2/0x680
    __flush_work+0x4e6/0x630
    work_on_cpu+0x114/0x160
    acpi_processor_ffh_cstate_probe+0x129/0x250
    acpi_processor_evaluate_cst+0x4c8/0x580
    acpi_processor_get_power_info+0x86/0x740
    acpi_processor_hotplug+0xc3/0x140
    acpi_soft_cpu_online+0x102/0x1d0
    cpuhp_invoke_callback+0x197/0x1120
    cpuhp_thread_fun+0x252/0x2f0
    smpboot_thread_fn+0x255/0x440
    kthread+0x1f4/0x220
    ret_from_fork+0x27/0x50

    Signed-off-by: Qian Cai
    Tested-by: Borislav Petkov
    [ rjw: Subject ]
    Signed-off-by: Rafael J. Wysocki

    Qian Cai
     

31 Mar, 2020

2 commits

  • Pull locking updates from Ingo Molnar:
    "The main changes in this cycle were:

    - Continued user-access cleanups in the futex code.

    - percpu-rwsem rewrite that uses its own waitqueue and atomic_t
    instead of an embedded rwsem. This addresses a couple of
    weaknesses, but the primary motivation was complications on the -rt
    kernel.

    - Introduce raw lock nesting detection on lockdep
    (CONFIG_PROVE_RAW_LOCK_NESTING=y), document the raw_lock vs. normal
    lock differences. This too originates from -rt.

    - Reuse lockdep zapped chain_hlocks entries, to conserve RAM
    footprint on distro-ish kernels running into the "BUG:
    MAX_LOCKDEP_CHAIN_HLOCKS too low!" depletion of the lockdep
    chain-entries pool.

    - Misc cleanups, smaller fixes and enhancements - see the changelog
    for details"

    * 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (55 commits)
    fs/buffer: Make BH_Uptodate_Lock bit_spin_lock a regular spinlock_t
    thermal/x86_pkg_temp: Make pkg_temp_lock a raw_spinlock_t
    Documentation/locking/locktypes: Minor copy editor fixes
    Documentation/locking/locktypes: Further clarifications and wordsmithing
    m68knommu: Remove mm.h include from uaccess_no.h
    x86: get rid of user_atomic_cmpxchg_inatomic()
    generic arch_futex_atomic_op_inuser() doesn't need access_ok()
    x86: don't reload after cmpxchg in unsafe_atomic_op2() loop
    x86: convert arch_futex_atomic_op_inuser() to user_access_begin/user_access_end()
    objtool: whitelist __sanitizer_cov_trace_switch()
    [parisc, s390, sparc64] no need for access_ok() in futex handling
    sh: no need of access_ok() in arch_futex_atomic_op_inuser()
    futex: arch_futex_atomic_op_inuser() calling conventions change
    completion: Use lockdep_assert_RT_in_threaded_ctx() in complete_all()
    lockdep: Add posixtimer context tracing bits
    lockdep: Annotate irq_work
    lockdep: Add hrtimer context tracing bits
    lockdep: Introduce wait-type checks
    completion: Use simple wait queues
    sched/swait: Prepare usage in completions
    ...

    Linus Torvalds
     
  • Pull ACPI updates from Rafael Wysocki:

    - Update the ACPICA code in the kernel to the 20200214 upstream
    release including:

    * Fix to re-enable the sleep button after wakeup (Anchal
    Agarwal).

    * Fixes for mistakes in comments and typos (Bob Moore).

    * ASL-ASL+ converter updates (Erik Kaneda).

    * Type casting cleanups (Sven Barth).

    - Clean up the intialization of the EC driver and eliminate some dead
    code from it (Rafael Wysocki).

    - Clean up the quirk tables in the AC and battery drivers (Hans de
    Goede).

    - Fix the global lock handling on x86 to ignore unspecified bit
    positions in the global lock field (Jan Engelhardt).

    - Add a new "tiny" driver for ACPI button devices exposed by VMs to
    guest kernels to send signals directly to init (Josh Triplett).

    - Add a kernel parameter to disable ACPI BGRT on x86 (Alex Hung).

    - Make the ACPI PCI host bridge and fan drivers use scnprintf() to
    avoid potential buffer overflows (Takashi Iwai).

    - Clean up assorted pieces of code:

    * Reorder "asmlinkage" to make g++ happy (Alexey Dobriyan).

    * Drop unneeded variable initialization (Colin Ian King).

    * Add missing __acquires/__releases annotations (Jules Irenge).

    * Replace list_for_each_safe() with list_for_each_entry_safe()
    (chenqiwu)"

    * tag 'acpi-5.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (31 commits)
    ACPICA: Update version to 20200214
    ACPI: PCI: Use scnprintf() for avoiding potential buffer overflow
    ACPI: fan: Use scnprintf() for avoiding potential buffer overflow
    ACPI: EC: Eliminate EC_FLAGS_QUERY_HANDSHAKE
    ACPI: EC: Do not clear boot_ec_is_ecdt in acpi_ec_add()
    ACPI: EC: Simplify acpi_ec_ecdt_start() and acpi_ec_init()
    ACPI: EC: Consolidate event handler installation code
    acpi/x86: ignore unspecified bit positions in the ACPI global lock field
    acpi/x86: add a kernel parameter to disable ACPI BGRT
    x86/acpi: make "asmlinkage" part first thing in the function definition
    ACPI: list_for_each_safe() -> list_for_each_entry_safe()
    ACPI: video: remove redundant assignments to variable result
    ACPI: OSL: Add missing __acquires/__releases annotations
    ACPI / battery: Cleanup Lenovo Ideapad Miix 320 DMI table entry
    ACPI / AC: Cleanup DMI quirk table
    ACPI: EC: Use fast path in acpi_ec_add() for DSDT boot EC
    ACPI: EC: Simplify acpi_ec_add()
    ACPI: EC: Drop AE_NOT_FOUND special case from ec_install_handlers()
    ACPI: EC: Avoid passing redundant argument to functions
    ACPI: EC: Avoid printing confusing messages in acpi_ec_setup()
    ...

    Linus Torvalds