24 Aug, 2018

3 commits

  • commit 1204e35bedf4e5015cda559ed8c84789a6dae24e upstream.

    Commit b440bde74f04 ("PCI: Add pci_ignore_hotplug() to ignore hotplug
    events for a device") iterates over the devices on a hotplug port's
    subordinate bus in pciehp's IRQ handler without acquiring pci_bus_sem.
    It is thus possible for a user to cause a crash by concurrently
    manipulating the device list, e.g. by disabling slot power via sysfs
    on a different CPU or by initiating a remove/rescan via sysfs.

    This can't be fixed by acquiring pci_bus_sem because it may sleep.
    The simplest fix is to avoid the list iteration altogether and just
    check the ignore_hotplug flag on the port itself. This works because
    pci_ignore_hotplug() sets the flag both on the device as well as on its
    parent bridge.

    We do lose the ability to print the name of the device blocking hotplug
    in the debug message, but that's probably bearable.

    Fixes: b440bde74f04 ("PCI: Add pci_ignore_hotplug() to ignore hotplug events for a device")
    Signed-off-by: Lukas Wunner
    Signed-off-by: Bjorn Helgaas
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman

    Lukas Wunner
     
  • commit 281e878eab191cce4259abbbf1a0322e3adae02c upstream.

    When pciehp is unbound (e.g. on unplug of a Thunderbolt device), the
    hotplug_slot struct is deregistered and thus freed before freeing the
    IRQ. The IRQ handler and the work items it schedules print the slot
    name referenced from the freed structure in various informational and
    debug log messages, each time resulting in a quadruple dereference of
    freed pointers (hotplug_slot -> pci_slot -> kobject -> name).

    At best the slot name is logged as "(null)", at worst kernel memory is
    exposed in logs or the driver crashes:

    pciehp 0000:10:00.0:pcie204: Slot((null)): Card not present

    An attacker may provoke the bug by unplugging multiple devices on a
    Thunderbolt daisy chain at once. Unplugging can also be simulated by
    powering down slots via sysfs. The bug is particularly easy to trigger
    in poll mode.

    It has been present since the driver's introduction in 2004:
    https://git.kernel.org/tglx/history/c/c16b4b14d980

    Fix by rearranging teardown such that the IRQ is freed first. Run the
    work items queued by the IRQ handler to completion before freeing the
    hotplug_slot struct by draining the work queue from the ->release_slot
    callback which is invoked by pci_hp_deregister().

    Signed-off-by: Lukas Wunner
    Signed-off-by: Bjorn Helgaas
    Cc: stable@vger.kernel.org # v2.6.4
    Signed-off-by: Greg Kroah-Hartman

    Lukas Wunner
     
  • commit 4ce6435820d1f1cc2c2788e232735eb244bcc8a3 upstream.

    If addition of sysfs files fails on registration of a hotplug slot, the
    struct pci_slot as well as the entry in the slot_list is leaked. The
    issue has been present since the hotplug core was introduced in 2002:
    https://git.kernel.org/tglx/history/c/a8a2069f432c

    Perhaps the idea was that even though sysfs addition fails, the slot
    should still be usable. But that's not how drivers use the interface,
    they abort probe if a non-zero value is returned.

    Signed-off-by: Lukas Wunner
    Signed-off-by: Bjorn Helgaas
    Cc: stable@vger.kernel.org # v2.4.15+
    Cc: Greg Kroah-Hartman
    Signed-off-by: Greg Kroah-Hartman

    Lukas Wunner
     

03 Aug, 2018

1 commit

  • commit 493fb50e958c1c6deef7feff0b8c3855def78d75 upstream.

    Certain Thunderbolt 1 controllers claim to support Command Completed events
    (value of 0b in the No Command Completed Support field of the Slot
    Capabilities register) but in reality they neither set the Command
    Completed bit in the Slot Status register nor signal a Command Completed
    interrupt:

    8086:1513 CV82524 [Light Ridge 4C 2010]
    8086:151a DSL2310 [Eagle Ridge 2C 2011]
    8086:151b CVL2510 [Light Peak 2C 2010]
    8086:1547 DSL3510 [Cactus Ridge 4C 2012]
    8086:1548 DSL3310 [Cactus Ridge 2C 2012]
    8086:1549 DSL2210 [Port Ridge 1C 2011]

    All known newer chips (Redwood Ridge and onwards) set No Command Completed
    Support, indicating that they do not support Command Completed events.

    The user-visible impact is that after unplugging such a device, 2 seconds
    elapse until pciehp is unbound. That's because on ->remove,
    pcie_write_cmd() is called via pcie_disable_notification() and every call
    to pcie_write_cmd() takes 2 seconds (1 second for each invocation of
    pcie_wait_cmd()):

    [ 337.942727] pciehp 0000:0a:00.0:pcie204: Timeout on hotplug command 0x1038 (issued 21176 msec ago)
    [ 340.014735] pciehp 0000:0a:00.0:pcie204: Timeout on hotplug command 0x0000 (issued 2072 msec ago)

    That by itself has always been unpleasant, but the situation has become
    worse with commit cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during
    shutdown"): Now pciehp is unbound on ->shutdown. Because Thunderbolt
    controllers typically have 4 hotplug ports, every reboot and shutdown is
    now delayed by 8 seconds, plus another 2 seconds for every attached
    Thunderbolt 1 device.

    Thunderbolt hotplug slots are not physical slots that one inserts cards
    into, but rather logical hotplug slots implemented in silicon. Devices
    appear beyond those logical slots once a PCI tunnel is established on top
    of the Thunderbolt Converged I/O switch. One would expect commands written
    to the Slot Control register to be executed immediately by the silicon, so
    for simplicity we always assume NoCompl+ for Thunderbolt ports.

    Fixes: cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during shutdown")
    Tested-by: Mika Westerberg
    Signed-off-by: Lukas Wunner
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Mika Westerberg
    Cc: stable@vger.kernel.org # v4.12+
    Cc: Sinan Kaya
    Cc: Yehezkel Bernat
    Cc: Michael Jamet
    Cc: Andreas Noever
    Signed-off-by: Sudip Mukherjee
    Signed-off-by: Greg Kroah-Hartman

    Lukas Wunner
     

03 Jul, 2018

1 commit

  • commit 13c65840feab8109194f9490c9870587173cb29d upstream.

    After a suspend/resume cycle the Presence Detect or Data Link Layer Status
    Changed bits might be set. If we don't clear them those events will not
    fire anymore and nothing happens for instance when a device is now
    hot-unplugged.

    Fix this by clearing those bits in a newly introduced function
    pcie_reenable_notification(). This should be fine because immediately
    after, we check if the adapter is still present by reading directly from
    the status register.

    Signed-off-by: Mika Westerberg
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Rafael J. Wysocki
    Reviewed-by: Andy Shevchenko
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman

    Mika Westerberg
     

24 Apr, 2018

1 commit

  • commit 13d3047c81505cc0fb9bdae7810676e70523c8bf upstream.

    Mike Lothian reported that plugging in a USB-C device does not work
    properly in his Dell Alienware system. This system has an Intel Alpine
    Ridge Thunderbolt controller providing USB-C functionality. In these
    systems the USB controller (xHCI) is hotplugged whenever a device is
    connected to the port using ACPI-based hotplug.

    The ACPI description of the root port in question is as follows:

    Device (RP01)
    {
    Name (_ADR, 0x001C0000)

    Device (PXSX)
    {
    Name (_ADR, 0x02)

    Method (_RMV, 0, NotSerialized)
    {
    // ...
    }
    }

    Here _ADR 0x02 means device 0, function 2 on the bus under root port (RP01)
    but that seems to be incorrect because device 0 is the upstream port of the
    Alpine Ridge PCIe switch and it has no functions other than 0 (the bridge
    itself). When we get ACPI Notify() to the root port resulting from
    connecting a USB-C device, Linux tries to read PCI_VENDOR_ID from device 0,
    function 2 which of course always returns 0xffffffff because there is no
    such function and we never find the device.

    In Windows this works fine.

    Now, since we get ACPI Notify() to the root port and not to the PXSX device
    we should actually start our scan from there as well and not from the
    non-existent PXSX device. Fix this by checking presence of the slot itself
    (function 0) if we fail to do that otherwise.

    While there use pci_bus_read_dev_vendor_id() in get_slot_status(), which is
    the recommended way to read Device and Vendor IDs of devices on PCI buses.

    Link: https://bugzilla.kernel.org/show_bug.cgi?id=198557
    Reported-by: Mike Lothian
    Signed-off-by: Mika Westerberg
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Rafael J. Wysocki
    Cc: Greg Kroah-Hartman
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman

    Mika Westerberg
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

08 Sep, 2017

1 commit

  • * pci/misc:
    PCI: Fix PCIe capability sizes
    PCI: Convert to using %pOF instead of full_name()
    PCI: Constify endpoint pci_epf_type device_type
    PCI: Constify bin_attribute structures
    PCI: Constify hotplug pci_device_id structures
    PCI: Constify hotplug attribute_group structures
    PCI: Constify label attribute_group structures
    PCI: Constify sysfs attribute_group structures

    Bjorn Helgaas
     

25 Aug, 2017

1 commit

  • Now that we have a custom printf format specifier, convert users of
    full_name() to use %pOF instead. This is preparation for removing storing
    of the full path string for each node.

    Signed-off-by: Rob Herring
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Tyrel Datwyler
    Cc: Thomas Petazzoni
    Cc: Jason Cooper
    Cc: Thierry Reding
    Cc: Jonathan Hunter
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Michael Ellerman

    Rob Herring
     

16 Aug, 2017

1 commit

  • When a power fault occurs, the power controller sets Power Fault Detected
    in the Slot Status register, and pciehp_isr() queues an INT_POWER_FAULT
    event to handle it.

    It also clears Power Fault Detected, but since nothing has yet changed to
    correct the power fault, the power controller will likely set it again
    immediately, which may cause an infinite loop when pcie_isr() rechecks
    Slot Status.

    Fix that by masking off Power Fault Detected from new events if the driver
    hasn't seen the power fault clear from the previous handling attempt.

    Fixes: fad214b0aa72 ("PCI: pciehp: Process all hotplug events before looking for new ones")
    Signed-off-by: Keith Busch
    [bhelgaas: changelog, pull test out and add comment]
    Signed-off-by: Bjorn Helgaas
    Cc: Mayurkumar Patel
    Cc: stable@vger.kernel.org # 4.9+

    Keith Busch
     

11 Aug, 2017

2 commits

  • pci_device_id are not supposed to change at runtime. All functions working
    with pci_device_id provided by work with const pci_device_id.
    So mark the non-const structs as const.

    Signed-off-by: Arvind Yadav
    [bhelgaas: squash shpchp, ibmphp, bmphp_ebda, cpcihp_zt5550, cpqphp]
    Signed-off-by: Bjorn Helgaas

    Arvind Yadav
     
  • attribute_groups are not supposed to change at runtime. All functions
    working with attribute_groups provided by work with const
    attribute_group. So mark the non-const structs as const.

    File size before:
    text data bss dec hex filename
    418 160 8 586 24a drivers/pci/hotplug/rpadlpar_sysfs.o

    File size After adding 'const':
    text data bss dec hex filename
    482 96 8 586 232 drivers/pci/hotplug/rpadlpar_sysfs.o

    Signed-off-by: Arvind Yadav
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Tyrel Datwyler

    Arvind Yadav
     

03 Aug, 2017

1 commit

  • An SHPC may generate MSIs to notify software about slot or controller
    events (SHPC spec r1.0, sec 4.7). A PCI device can only generate an MSI if
    it has bus mastering enabled.

    Enable bus mastering if the bridge contains an SHPC that uses MSI for event
    notifications.

    Signed-off-by: Aleksandr Bezzubikov
    [bhelgaas: changelog]
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Marcel Apfelbaum
    Acked-by: Michael S. Tsirkin
    Cc: stable@vger.kernel.org

    Aleksandr Bezzubikov
     

11 May, 2017

1 commit

  • Pull hw lockdown support from David Howells:
    "Annotation of module parameters that configure hardware resources
    including ioports, iomem addresses, irq lines and dma channels.

    This allows a future patch to prohibit the use of such module
    parameters to prevent that hardware from being abused to gain access
    to the running kernel image as part of locking the kernel down under
    UEFI secure boot conditions.

    Annotations are made by changing:

    module_param(n, t, p)
    module_param_named(n, v, t, p)
    module_param_array(n, t, m, p)

    to:

    module_param_hw(n, t, hwtype, p)
    module_param_hw_named(n, v, t, hwtype, p)
    module_param_hw_array(n, t, hwtype, m, p)

    where the module parameter refers to a hardware setting

    hwtype specifies the type of the resource being configured. This can
    be one of:

    ioport Module parameter configures an I/O port
    iomem Module parameter configures an I/O mem address
    ioport_or_iomem Module parameter could be either (runtime set)
    irq Module parameter configures an I/O port
    dma Module parameter configures a DMA channel
    dma_addr Module parameter configures a DMA buffer address
    other Module parameter configures some other value

    Note that the hwtype is compile checked, but not currently stored (the
    lockdown code probably won't require it). It is, however, there for
    future use.

    A bonus is that the hwtype can also be used for grepping.

    The intention is for the kernel to ignore or reject attempts to set
    annotated module parameters if lockdown is enabled. This applies to
    options passed on the boot command line, passed to insmod/modprobe or
    direct twiddling in /sys/module/ parameter files.

    The module initialisation then needs to handle the parameter not being
    set, by (1) giving an error, (2) probing for a value or (3) using a
    reasonable default.

    What I can't do is just reject a module out of hand because it may
    take a hardware setting in the module parameters. Some important
    modules, some ipmi stuff for instance, both probe for hardware and
    allow hardware to be manually specified; if the driver is aborts with
    any error, you don't get any ipmi hardware.

    Further, trying to do this entirely in the module initialisation code
    doesn't protect against sysfs twiddling.

    [!] Note that in and of itself, this series of patches should have no
    effect on the the size of the kernel or code execution - that is
    left to a patch in the next series to effect. It does mark
    annotated kernel parameters with a KERNEL_PARAM_FL_HWPARAM flag in
    an already existing field"

    * tag 'hwparam-20170420' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs: (38 commits)
    Annotate hardware config module parameters in sound/pci/
    Annotate hardware config module parameters in sound/oss/
    Annotate hardware config module parameters in sound/isa/
    Annotate hardware config module parameters in sound/drivers/
    Annotate hardware config module parameters in fs/pstore/
    Annotate hardware config module parameters in drivers/watchdog/
    Annotate hardware config module parameters in drivers/video/
    Annotate hardware config module parameters in drivers/tty/
    Annotate hardware config module parameters in drivers/staging/vme/
    Annotate hardware config module parameters in drivers/staging/speakup/
    Annotate hardware config module parameters in drivers/staging/media/
    Annotate hardware config module parameters in drivers/scsi/
    Annotate hardware config module parameters in drivers/pcmcia/
    Annotate hardware config module parameters in drivers/pci/hotplug/
    Annotate hardware config module parameters in drivers/parport/
    Annotate hardware config module parameters in drivers/net/wireless/
    Annotate hardware config module parameters in drivers/net/wan/
    Annotate hardware config module parameters in drivers/net/irda/
    Annotate hardware config module parameters in drivers/net/hamradio/
    Annotate hardware config module parameters in drivers/net/ethernet/
    ...

    Linus Torvalds
     

20 Apr, 2017

1 commit

  • When the kernel is running in secure boot mode, we lock down the kernel to
    prevent userspace from modifying the running kernel image. Whilst this
    includes prohibiting access to things like /dev/mem, it must also prevent
    access by means of configuring driver modules in such a way as to cause a
    device to access or modify the kernel image.

    To this end, annotate module_param* statements that refer to hardware
    configuration and indicate for future reference what type of parameter they
    specify. The parameter parser in the core sees this information and can
    skip such parameters with an error message if the kernel is locked down.
    The module initialisation then runs as normal, but just sees whatever the
    default values for those parameters is.

    Note that we do still need to do the module initialisation because some
    drivers have viable defaults set in case parameters aren't specified and
    some drivers support automatic configuration (e.g. PNP or PCI) in addition
    to manually coded parameters.

    This patch annotates drivers in drivers/pci/hotplug/.

    Suggested-by: Alan Cox
    Signed-off-by: David Howells
    Acked-by: Bjorn Helgaas
    cc: Scott Murray
    cc: linux-pci@vger.kernel.org

    David Howells
     

30 Mar, 2017

1 commit

  • Add a new state to pci_dev to be set when it is unexpectedly disconnected.
    The PCI driver tear down functions can observe this new device state so
    they may skip operations that will fail.

    The pciehp and pcie-dpc drivers are aware when the link is down, so these
    set the flag when their handlers detect the device is disconnected.

    Tested-by: Krishna Dhulipala
    Signed-off-by: Keith Busch
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Wei Zhang

    Keith Busch
     

02 Mar, 2017

2 commits

  • …hed.h> into <linux/sched/signal.h>

    Fix up affected files that include this signal functionality via sched.h.

    Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>

    Ingo Molnar
     
  • Pull more powerpc updates from Michael Ellerman:
    "Highlights include:

    - an update of the disassembly code used by xmon to the latest
    versions in binutils. We've received permission from all the
    authors of the relevant binutils changes to relicense their changes
    to the relevant files from GPLv3 to GPLv2, for inclusion in Linux.
    Thanks to Peter Bergner for doing the leg work to get permission
    from everyone.

    - addition of the "architected" Power9 CPU table entry, allowing us
    to boot in Power9 architected mode under a hypervisor.

    - updates to the Power9 PMU code.

    - implementation of clear_bit_unlock_is_negative_byte() to optimise
    unlock_page().

    - Freescale updates from Scott: "Highlights include 8xx breakpoints
    and perf, t1042rdb display support, and board updates."

    Thanks to:
    Al Viro, Andrew Donnellan, Aneesh Kumar K.V, Balbir Singh, Douglas
    Miller, Frédéric Weisbecker, Gavin Shan, Madhavan Srinivasan,
    Michael Roth, Nathan Fontenot, Naveen N. Rao, Nicholas Piggin, Peter
    Bergner, Paul E. McKenney, Rashmica Gupta, Russell Currey, Sahil
    Mehta, Stewart Smith"

    * tag 'powerpc-4.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (48 commits)
    powerpc: Remove leftover cputime_to_nsecs call causing build error
    powerpc/mm/hash: Always clear UPRT and Host Radix bits when setting up CPU
    powerpc/optprobes: Fix TOC handling in optprobes trampoline
    powerpc/pseries: Advertise Hot Plug Event support to firmware
    cxl: fix nested locking hang during EEH hotplug
    powerpc/xmon: Dump memory in CPU endian format
    powerpc/pseries: Revert 'Auto-online hotplugged memory'
    powerpc/powernv: Make PCI non-optional
    powerpc/64: Implement clear_bit_unlock_is_negative_byte()
    powerpc/powernv: Remove unused variable in pnv_pci_sriov_disable()
    powerpc/kernel: Remove error message in pcibios_setup_phb_resources()
    powerpc/mm: Fix typo in set_pte_at()
    pci/hotplug/pnv-php: Disable MSI and PCI device properly
    pci/hotplug/pnv-php: Disable surprise hotplug capability on conflicts
    pci/hotplug/pnv-php: Remove WARN_ON() in pnv_php_put_slot()
    powerpc: Add POWER9 architected mode to cputable
    powerpc/perf: use is_kernel_addr macro in perf_get_misc_flags()
    powerpc/perf: Avoid FAB_*_MATCH checks for power9
    powerpc/perf: Add restrictions to PMC5 in power9 DD1
    powerpc/perf: Use Instruction Counter value
    ...

    Linus Torvalds
     

24 Feb, 2017

1 commit

  • Pull PCI updates from Bjorn Helgaas:

    - add ASPM L1 substate support

    - enable PCIe Extended Tags when supported

    - configure PCIe MPS settings on iProc, Versatile, X-Gene, and Xilinx

    - increase VPD access timeout

    - add ACS quirks for Intel Union Point, Qualcomm QDF2400 and QDF2432

    - use new pci_irq_alloc_vectors() in more drivers

    - fix MSI affinity memory leak

    - remove unused MSI interfaces and update documentation

    - remove unused AER .link_reset() callback

    - avoid pci_lock / p->pi_lock deadlock seen with perf

    - serialize sysfs enable/disable num_vfs operations

    - move DesignWare IP from drivers/pci/host/ to drivers/pci/dwc/ and
    refactor so we can support both hosts and endpoints

    - add DT ECAM-like support for HiSilicon Hip06/Hip07 controllers

    - add Rockchip system power management support

    - add Thunder-X cn81xx and cn83xx support

    - add Exynos 5440 PCIe PHY support

    * tag 'pci-v4.11-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (93 commits)
    PCI: dwc: Remove dependency of designware on CONFIG_PCI
    PCI: dwc: Add CONFIG_PCIE_DW_HOST to enable PCI dwc host
    PCI: dwc: Split pcie-designware.c into host and core files
    PCI: dwc: designware: Fix style errors in pcie-designware.c
    PCI: dwc: designware: Parse "num-lanes" property in dw_pcie_setup_rc()
    PCI: dwc: all: Split struct pcie_port into host-only and core structures
    PCI: dwc: designware: Get device pointer at the start of dw_pcie_host_init()
    PCI: dwc: all: Rename cfg_read/cfg_write to read/write
    PCI: dwc: all: Use platform_set_drvdata() to save private data
    PCI: dwc: designware: Move register defines to designware header file
    PCI: dwc: Use PTR_ERR_OR_ZERO to simplify code
    PCI: dra7xx: Group PHY API invocations
    PCI: dra7xx: Enable MSI and legacy interrupts simultaneously
    PCI: dra7xx: Add support to force RC to work in GEN1 mode
    PCI: dra7xx: Simplify probe code with devm_gpiod_get_optional()
    PCI: Move DesignWare IP support to new drivers/pci/dwc/ directory
    PCI: exynos: Support the PHY generic framework
    Documentation: binding: Modify the exynos5440 PCIe binding
    phy: phy-exynos-pcie: Add support for Exynos PCIe PHY
    Documentation: samsung-phy: Add exynos-pcie-phy binding
    ...

    Linus Torvalds
     

21 Feb, 2017

1 commit

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

    - Implement wraparound-safe refcount_t and kref_t types based on
    generic atomic primitives (Peter Zijlstra)

    - Improve and fix the ww_mutex code (Nicolai Hähnle)

    - Add self-tests to the ww_mutex code (Chris Wilson)

    - Optimize percpu-rwsems with the 'rcuwait' mechanism (Davidlohr
    Bueso)

    - Micro-optimize the current-task logic all around the core kernel
    (Davidlohr Bueso)

    - Tidy up after recent optimizations: remove stale code and APIs,
    clean up the code (Waiman Long)

    - ... plus misc fixes, updates and cleanups"

    * 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (50 commits)
    fork: Fix task_struct alignment
    locking/spinlock/debug: Remove spinlock lockup detection code
    lockdep: Fix incorrect condition to print bug msgs for MAX_LOCKDEP_CHAIN_HLOCKS
    lkdtm: Convert to refcount_t testing
    kref: Implement 'struct kref' using refcount_t
    refcount_t: Introduce a special purpose refcount type
    sched/wake_q: Clarify queue reinit comment
    sched/wait, rcuwait: Fix typo in comment
    locking/mutex: Fix lockdep_assert_held() fail
    locking/rtmutex: Flip unlikely() branch to likely() in __rt_mutex_slowlock()
    locking/rwsem: Reinit wake_q after use
    locking/rwsem: Remove unnecessary atomic_long_t casts
    jump_labels: Move header guard #endif down where it belongs
    locking/atomic, kref: Implement kref_put_lock()
    locking/ww_mutex: Turn off __must_check for now
    locking/atomic, kref: Avoid more abuse
    locking/atomic, kref: Use kref_get_unless_zero() more
    locking/atomic, kref: Kill kref_sub()
    locking/atomic, kref: Add kref_read()
    locking/atomic, kref: Add KREF_INIT()
    ...

    Linus Torvalds
     

17 Feb, 2017

3 commits

  • pnv_php_disable_irq() can be called in two paths: Bailing path in
    pnv_php_enable_irq() or releasing slot. The MSI (or MSIx) interrupts
    is disabled unconditionally in pnv_php_disable_irq(). It's wrong
    because that might be enabled by drivers other than pnv-php.

    This disables MSI (or MSIx) interrupts and the PCI device only if
    it was enabled by pnv-php. In the error path of pnv_php_enable_irq(),
    we rely on the newly added parameter @disable_device. In the path
    of releasing slot, @pnv_php->irq is checked.

    Cc: # v4.9+
    Fixes: 360aebd85a4c ("drivers/pci/hotplug: Support surprise hotplug in powernv driver")
    Signed-off-by: Gavin Shan
    Reviewed-by: Andrew Donnellan
    Signed-off-by: Michael Ellerman

    Gavin Shan
     
  • The root port or PCIe switch downstream port might have been associated
    with driver other than pnv-php. The MSI or MSIx might also have been
    enabled by that driver (e.g. pcieport_drv). Attempt to enable MSI incurs
    below backtrace:

    PowerPC PowerNV PCI Hotplug Driver version: 0.1
    ------------[ cut here ]------------
    WARNING: CPU: 19 PID: 1004 at drivers/pci/msi.c:1071 \
    __pci_enable_msi_range+0x84/0x4e0
    NIP [c000000000665c34] __pci_enable_msi_range+0x84/0x4e0
    LR [c000000000665c24] __pci_enable_msi_range+0x74/0x4e0
    Call Trace:
    [c000000384d67600] [c000000000665c24] __pci_enable_msi_range+0x74/0x4e0
    [c000000384d676e0] [d00000000aa31b04] pnv_php_register+0x564/0x5a0 [pnv_php]
    [c000000384d677c0] [d00000000aa31658] pnv_php_register+0xb8/0x5a0 [pnv_php]
    [c000000384d678a0] [d00000000aa31658] pnv_php_register+0xb8/0x5a0 [pnv_php]
    [c000000384d67980] [d00000000aa31dfc] pnv_php_init+0x60/0x98 [pnv_php]
    [c000000384d679f0] [c00000000000cfdc] do_one_initcall+0x6c/0x1d0
    [c000000384d67ab0] [c000000000b92354] do_init_module+0x94/0x254
    [c000000384d67b40] [c00000000019719c] load_module+0x258c/0x2c60
    [c000000384d67d30] [c000000000197bb0] SyS_finit_module+0xf0/0x170
    [c000000384d67e30] [c00000000000b184] system_call+0x38/0xe0

    This fixes the issue by skipping enabling the surprise hotplug
    capability if the MSI or MSIx on the PCI slot's upstream port has
    been enabled by other driver.

    Cc: # v4.9+
    Fixes: 360aebd85a4c ("drivers/pci/hotplug: Support surprise hotplug in powernv driver")
    Signed-off-by: Gavin Shan
    Reviewed-by: Andrew Donnellan
    Tested-by: Vaibhav Jain
    Signed-off-by: Michael Ellerman

    Gavin Shan
     
  • The WARN_ON() causes unnecessary backtrace when putting the parent
    slot, which is likely to be NULL.

    WARNING: CPU: 2 PID: 1071 at drivers/pci/hotplug/pnv_php.c:85 \
    pnv_php_release+0xcc/0x150 [pnv_php]
    :
    Call Trace:
    [c0000003bc007c10] [d00000000ad613c4] pnv_php_release+0x144/0x150 [pnv_php]
    [c0000003bc007c40] [c0000000006641d8] pci_hp_deregister+0x238/0x330
    [c0000003bc007cd0] [d00000000ad61440] pnv_php_unregister_one+0x70/0xa0 [pnv_php]
    [c0000003bc007d10] [d00000000ad614c0] pnv_php_unregister+0x50/0x80 [pnv_php]
    [c0000003bc007d40] [d00000000ad61e84] pnv_php_exit+0x50/0xcb4 [pnv_php]
    [c0000003bc007d70] [c00000000019499c] SyS_delete_module+0x1fc/0x2a0
    [c0000003bc007e30] [c00000000000b184] system_call+0x38/0xe0

    Cc: # v4.8+
    Fixes: 66725152fb9f ("PCI/hotplug: PowerPC PowerNV PCI hotplug driver")
    Signed-off-by: Gavin Shan
    Reviewed-by: Andrew Donnellan
    Tested-by: Vaibhav Jain
    Signed-off-by: Michael Ellerman

    Gavin Shan
     

15 Feb, 2017

3 commits

  • We're supporting surprise hotplug on PCI slots behind root port
    or PCIe switch downstream ports, which don't claim the capability
    in hardware register (offset: PCIe cap + PCI_EXP_SLTCAP). PEX8718
    is one of the examples. For those PCI slots, the PDC (Presence
    Detection Change) event isn't reliable and the underly (skiboot)
    firmware has best judgement.

    This masks the PDC event when skiboot requests by "ibm,slot-broken-pdc"
    property in PCI slot's device-tree node.

    Reported-by: Hank Chang
    Signed-off-by: Gavin Shan
    Tested-by: Willie Liauw
    Signed-off-by: Michael Ellerman

    Gavin Shan
     
  • In PowerNV PCI hotplug driver, the initial PCI slot's state is set
    to PNV_PHP_STATE_POPULATED if no PCI devices are connected to the
    slot. The PCI devices that are hot added to the slot won't be probed
    and populated because of the check in pnv_php_enable():

    /* Check if the slot has been configured */
    if (php_slot->state != PNV_PHP_STATE_REGISTERED)
    return 0;

    This fixes the issue by leaving the slot in PNV_PHP_STATE_REGISTERED
    state initially if nothing is connected to the slot.

    Fixes: 360aebd85a4 ("drivers/pci/hotplug: Support surprise hotplug in powernv driver")
    Cc: stable@vger.kernel.org #v4.9+
    Reported-by: Hank Chang
    Signed-off-by: Gavin Shan
    Tested-by: Willie Liauw
    Signed-off-by: Michael Ellerman

    Gavin Shan
     
  • The surprise hotplug is driven by interrupt in PowerNV PCI hotplug
    driver. In the interrupt handler, pnv_php_interrupt(), we bail when
    pnv_pci_get_presence_state() returns zero wrongly. It causes the
    presence change event is always ignored incorrectly.

    This fixes the issue by bailing on error (non-zero value) returned
    from pnv_pci_get_presence_state().

    Fixes: 360aebd85a4 ("drivers/pci/hotplug: Support surprise hotplug in powernv driver")
    Cc: stable@vger.kernel.org #v4.9+
    Reported-by: Hank Chang
    Signed-off-by: Gavin Shan
    Tested-by: Willie Liauw
    Signed-off-by: Michael Ellerman

    Gavin Shan
     

03 Feb, 2017

1 commit

  • This reverts commit 68db9bc814362e7f24371c27d12a4f34477d9356.

    Yinghai reported that the following manual hotplug sequence:

    # echo 0 > /sys/bus/pci/slots/8/power
    # echo 1 > /sys/bus/pci/slots/8/power

    worked in v4.9, but fails in v4.10-rc1, and that reverting 68db9bc81436
    ("PCI: pciehp: Add runtime PM support for PCIe hotplug ports") makes it
    work again.

    Fixes: 68db9bc81436 ("PCI: pciehp: Add runtime PM support for PCIe hotplug ports")
    Link: https://lkml.kernel.org/r/CAE9FiQVCMCa7iVyuwp9z6VrY0cE7V_xghuXip28Ft52=8QmTWw@mail.gmail.com
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=193951
    Reported-by: Yinghai Lu
    Signed-off-by: Bjorn Helgaas

    Bjorn Helgaas
     

14 Jan, 2017

1 commit

  • Since we need to change the implementation, stop exposing internals.

    Provide kref_read() to read the current reference count; typically
    used for debug messages.

    Kills two anti-patterns:

    atomic_read(&kref->refcount)
    kref->refcount.counter

    Signed-off-by: Peter Zijlstra (Intel)
    Cc: Andrew Morton
    Cc: Greg Kroah-Hartman
    Cc: Linus Torvalds
    Cc: Paul E. McKenney
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

12 Jan, 2017

2 commits


25 Dec, 2016

1 commit


17 Dec, 2016

1 commit

  • Pull powerpc updates from Michael Ellerman:
    "Highlights include:

    - Support for the kexec_file_load() syscall, which is a prereq for
    secure and trusted boot.

    - Prevent kernel execution of userspace on P9 Radix (similar to
    SMEP/PXN).

    - Sort the exception tables at build time, to save time at boot, and
    store them as relative offsets to save space in the kernel image &
    memory.

    - Allow building the kernel with thin archives, which should allow us
    to build an allyesconfig once some other fixes land.

    - Build fixes to allow us to correctly rebuild when changing the
    kernel endian from big to little or vice versa.

    - Plumbing so that we can avoid doing a full mm TLB flush on P9
    Radix.

    - Initial stack protector support (-fstack-protector).

    - Support for dumping the radix (aka. Linux) and hash page tables via
    debugfs.

    - Fix an oops in cxl coredump generation when cxl_get_fd() is used.

    - Freescale updates from Scott: "Highlights include 8xx hugepage
    support, qbman fixes/cleanup, device tree updates, and some misc
    cleanup."

    - Many and varied fixes and minor enhancements as always.

    Thanks to:
    Alexey Kardashevskiy, Andrew Donnellan, Aneesh Kumar K.V, Anshuman
    Khandual, Anton Blanchard, Balbir Singh, Bartlomiej Zolnierkiewicz,
    Christophe Jaillet, Christophe Leroy, Denis Kirjanov, Elimar
    Riesebieter, Frederic Barrat, Gautham R. Shenoy, Geliang Tang, Geoff
    Levand, Jack Miller, Johan Hovold, Lars-Peter Clausen, Libin,
    Madhavan Srinivasan, Michael Neuling, Nathan Fontenot, Naveen N.
    Rao, Nicholas Piggin, Pan Xinhui, Peter Senna Tschudin, Rashmica
    Gupta, Rui Teng, Russell Currey, Scott Wood, Simon Guo, Suraj
    Jitindar Singh, Thiago Jung Bauermann, Tobias Klauser, Vaibhav Jain"

    [ And thanks to Michael, who took time off from a new baby to get this
    pull request done. - Linus ]

    * tag 'powerpc-4.10-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (174 commits)
    powerpc/fsl/dts: add FMan node for t1042d4rdb
    powerpc/fsl/dts: add sg_2500_aqr105_phy4 alias on t1024rdb
    powerpc/fsl/dts: add QMan and BMan nodes on t1024
    powerpc/fsl/dts: add QMan and BMan nodes on t1023
    soc/fsl/qman: test: use DEFINE_SPINLOCK()
    powerpc/fsl-lbc: use DEFINE_SPINLOCK()
    powerpc/8xx: Implement support of hugepages
    powerpc: get hugetlbpage handling more generic
    powerpc: port 64 bits pgtable_cache to 32 bits
    powerpc/boot: Request no dynamic linker for boot wrapper
    soc/fsl/bman: Use resource_size instead of computation
    soc/fsl/qe: use builtin_platform_driver
    powerpc/fsl_pmc: use builtin_platform_driver
    powerpc/83xx/suspend: use builtin_platform_driver
    powerpc/ftrace: Fix the comments for ftrace_modify_code
    powerpc/perf: macros for power9 format encoding
    powerpc/perf: power9 raw event format encoding
    powerpc/perf: update attribute_group data structure
    powerpc/perf: factor out the event format field
    powerpc/mm/iommu, vfio/spapr: Put pages on VFIO container shutdown
    ...

    Linus Torvalds
     

16 Dec, 2016

1 commit

  • Pull PCI updates from Bjorn Helgaas:
    "PCI changes:

    - add support for PCI on ARM64 boxes with ACPI. We already had this
    for theoretical spec-compliant hardware; now we're adding quirks
    for the actual hardware (Cavium, HiSilicon, Qualcomm, X-Gene)

    - add runtime PM support for hotplug ports

    - enable runtime suspend for Intel UHCI that uses platform-specific
    wakeup signaling

    - add yet another host bridge registration interface. We hope this is
    extensible enough to subsume the others

    - expose device revision in sysfs for DRM

    - to avoid device conflicts, make sure any VF BAR updates are done
    before enabling the VF

    - avoid unnecessary link retrains for ASPM

    - allow INTx masking on Mellanox devices that support it

    - allow access to non-standard VPD for Chelsio devices

    - update Broadcom iProc support for PAXB v2, PAXC v2, inbound DMA,
    etc

    - update Rockchip support for max-link-speed

    - add NVIDIA Tegra210 support

    - add Layerscape LS1046a support

    - update R-Car compatibility strings

    - add Qualcomm MSM8996 support

    - remove some uninformative bootup messages"

    * tag 'pci-v4.10-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (115 commits)
    PCI: Enable access to non-standard VPD for Chelsio devices (cxgb3)
    PCI: Expand "VPD access disabled" quirk message
    PCI: pciehp: Remove loading message
    PCI: hotplug: Remove hotplug core message
    PCI: Remove service driver load/unload messages
    PCI/AER: Log AER IRQ when claiming Root Port
    PCI/AER: Log errors with PCI device, not PCIe service device
    PCI/AER: Remove unused version macros
    PCI/PME: Log PME IRQ when claiming Root Port
    PCI/PME: Drop unused support for PMEs from Root Complex Event Collectors
    PCI: Move config space size macros to pci_regs.h
    x86/platform/intel-mid: Constify mid_pci_platform_pm
    PCI/ASPM: Don't retrain link if ASPM not possible
    PCI: iproc: Skip check for legacy IRQ on PAXC buses
    PCI: pciehp: Leave power indicator on when enabling already-enabled slot
    PCI: pciehp: Prioritize data-link event over presence detect
    PCI: rcar: Add gen3 fallback compatibility string for pcie-rcar
    PCI: rcar: Use gen2 fallback compatibility last
    PCI: rcar-gen2: Use gen2 fallback compatibility last
    PCI: rockchip: Move the deassert of pm/aclk/pclk after phy_init()
    ..

    Linus Torvalds
     

13 Dec, 2016

4 commits

  • * pci/pm:
    x86/platform/intel-mid: Constify mid_pci_platform_pm
    PCI: pciehp: Add runtime PM support for PCIe hotplug ports
    ACPI / hotplug / PCI: Make device_is_managed_by_native_pciehp() public
    ACPI / hotplug / PCI: Use cached copy of PCI_EXP_SLTCAP_HPC bit
    PCI: Unfold conditions to block runtime PM on PCIe ports
    PCI: Consolidate conditions to allow runtime PM on PCIe ports
    PCI: Activate runtime PM on a PCIe port only if it can suspend
    PCI: Speed up algorithm in pci_bridge_d3_update()
    PCI: Autosense device removal in pci_bridge_d3_update()
    PCI: Don't acquire ref on parent in pci_bridge_d3_update()
    USB: UHCI: report non-PME wakeup signalling for Intel hardware
    PCI: Check for PME in targeted sleep state

    Bjorn Helgaas
     
  • * pci/misc:
    PCI: Enable access to non-standard VPD for Chelsio devices (cxgb3)
    PCI: Expand "VPD access disabled" quirk message
    PCI: pciehp: Remove loading message
    PCI: hotplug: Remove hotplug core message
    PCI: Remove service driver load/unload messages
    PCI/AER: Log AER IRQ when claiming Root Port
    PCI/AER: Log errors with PCI device, not PCIe service device
    PCI/AER: Remove unused version macros
    PCI/PME: Log PME IRQ when claiming Root Port
    PCI/PME: Drop unused support for PMEs from Root Complex Event Collectors
    PCI: Move config space size macros to pci_regs.h

    Bjorn Helgaas
     
  • Remove the "PCI Express Hot Plug Controller Driver" version message. I
    don't think it contains any useful information. Remove unused #defines
    and move the author information to a comment.

    Signed-off-by: Bjorn Helgaas

    Bjorn Helgaas
     
  • Remove the "PCI Hot Plug PCI Core" version message. I don't think it
    contains any useful information. Remove unused #defines and move the
    author information to a comment.

    Signed-off-by: Bjorn Helgaas

    Bjorn Helgaas
     

09 Dec, 2016

1 commit

  • If an error occurs when enabling a slot, pciehp_power_thread() turns off
    the power indicator. But if the only error is that the slot was already
    enabled, we should leave the power indicator on.

    Return success if called to enable an already-enabled slot.
    This is in the same spirit of the special handling for EEXISTS when
    pciehp_configure_device() determines the slot devices already exist.

    Signed-off-by: Ashok Raj
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Keith Busch

    Ashok Raj
     

08 Dec, 2016

1 commit

  • If Slot Status indicates changes in both Data Link Layer Status and
    Presence Detect, prioritize the Link status change.

    When both events are observed, pciehp currently relies on the Slot Status
    Presence Detect State (PDS) to agree with the Link Status Data Link Layer
    Active status. The Presence Detect State, however, may be set to 1 through
    out-of-band presence detect even if the link is down, which creates
    conflicting events.

    Since the Link Status accurately reflects the reachability of the
    downstream bus, the Link Status event should take precedence over a
    Presence Detect event. Skip checking the PDC status if we handled a link
    event in the same handler.

    Signed-off-by: Ashok Raj
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Keith Busch

    Ashok Raj
     

24 Nov, 2016

1 commit