15 Sep, 2016

1 commit

  • For irq spreading want to store affinity masks in the msi_entry. Add the
    infrastructure for it.

    We allocate an array of cpumasks with an array size of the number of used
    vectors in the entry, so we can hand in the information per linux interrupt
    later.

    As we hand in the number of used vectors, we assign them right
    away. Convert all the call sites.

    Signed-off-by: Thomas Gleixner
    Cc: axboe@fb.com
    Cc: keith.busch@intel.com
    Cc: agordeev@redhat.com
    Cc: linux-block@vger.kernel.org
    Cc: Christoph Hellwig
    Link: http://lkml.kernel.org/r/1473862739-15032-2-git-send-email-hch@lst.de

    Thomas Gleixner
     

09 Aug, 2016

1 commit

  • Bharat Kumar Gogada reported issues with the generic MSI code, where the
    end-point ended up with garbage in its MSI configuration (both for the vector
    and the message).

    It turns out that the two MSI paths in the kernel are doing slightly different
    things:

    generic MSI: disable MSI -> allocate MSI -> enable MSI -> setup EP
    PCI MSI: disable MSI -> allocate MSI -> setup EP -> enable MSI

    And it turns out that end-points are allowed to latch the content of the MSI
    configuration registers as soon as MSIs are enabled. In Bharat's case, the
    end-point ends up using whatever was there already, which is not what you
    want.

    In order to make things converge, we introduce a new MSI domain flag
    (MSI_FLAG_ACTIVATE_EARLY) that is unconditionally set for PCI/MSI. When set,
    this flag forces the programming of the end-point as soon as the MSIs are
    allocated.

    A consequence of this is that we have an extra activate in irq_startup, but
    that should be without much consequence.

    tglx:

    - Several people reported a VMWare regression with PCI/MSI-X passthrough. It
    turns out that the patch also cures that issue.

    - We need to have a look at the MSI disable interrupt path, where we write
    the msg to all zeros without disabling MSI in the PCI device. Is that
    correct?

    Fixes: 52f518a3a7c2 "x86/MSI: Use hierarchical irqdomains to manage MSI interrupts"
    Reported-and-tested-by: Bharat Kumar Gogada
    Reported-and-tested-by: Foster Snowhill
    Reported-by: Matthias Prager
    Reported-by: Jason Taylor
    Signed-off-by: Marc Zyngier
    Acked-by: Bjorn Helgaas
    Cc: linux-pci@vger.kernel.org
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/1468426713-31431-1-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

04 Jul, 2016

4 commits

  • virq is not required to be the same for all msi descs. Use the base irq number
    from the desc in the debug printk.

    Reported-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     
  • Allow the MSI code to provide affinity hints per MSI descriptor.

    Signed-off-by: Thomas Gleixner
    Cc: Christoph Hellwig
    Cc: linux-block@vger.kernel.org
    Cc: linux-pci@vger.kernel.org
    Cc: linux-nvme@lists.infradead.org
    Cc: axboe@fb.com
    Cc: agordeev@redhat.com
    Link: http://lkml.kernel.org/r/1467621574-8277-6-git-send-email-hch@lst.de
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     
  • Add an extra argument to the irq(domain) allocation functions, so we can hand
    down affinity hints to the allocator. Thats necessary to implement proper
    support for multiqueue devices.

    Signed-off-by: Thomas Gleixner
    Cc: Christoph Hellwig
    Cc: linux-block@vger.kernel.org
    Cc: linux-pci@vger.kernel.org
    Cc: linux-nvme@lists.infradead.org
    Cc: axboe@fb.com
    Cc: agordeev@redhat.com
    Link: http://lkml.kernel.org/r/1467621574-8277-4-git-send-email-hch@lst.de
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     
  • No user and we definitely don't want to grow one.

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Bart Van Assche
    Cc: Christoph Hellwig
    Cc: linux-block@vger.kernel.org
    Cc: linux-pci@vger.kernel.org
    Cc: linux-nvme@lists.infradead.org
    Cc: axboe@fb.com
    Cc: agordeev@redhat.com
    Link: http://lkml.kernel.org/r/1467621574-8277-2-git-send-email-hch@lst.de
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     

22 Jan, 2016

1 commit

  • Pull PCI updates from Bjorn Helgaas:
    "PCI changes for the v4.5 merge window:

    Enumeration:
    - Simplify config space size computation (Bjorn Helgaas)
    - Avoid iterating through ROM outside the resource window (Edward O'Callaghan)
    - Support PCIe devices with short cfg_size (Jason S. McMullan)
    - Add Netronome vendor and device IDs (Jason S. McMullan)
    - Limit config space size for Netronome NFP6000 family (Jason S. McMullan)
    - Add Netronome NFP4000 PF device ID (Simon Horman)
    - Limit config space size for Netronome NFP4000 (Simon Horman)
    - Print warnings for all invalid expansion ROM headers (Vladis Dronov)

    Resource management:
    - Fix minimum allocation address overwrite (Christoph Biedl)

    PCI device hotplug:
    - acpiphp_ibm: Fix null dereferences on null ibm_slot (Colin Ian King)
    - pciehp: Always protect pciehp_disable_slot() with hotplug mutex (Guenter Roeck)
    - shpchp: Constify hpc_ops structure (Julia Lawall)
    - ibmphp: Remove unneeded NULL test (Julia Lawall)

    Power management:
    - Make ASPM sysfs link_state_store() consistent with link_state_show() (Andy Lutomirski)

    Virtualization
    - Add function 1 DMA alias quirk for Lite-On/Plextor M6e/Marvell 88SS9183 (Tim Sander)

    MSI:
    - Remove empty pci_msi_init_pci_dev() (Bjorn Helgaas)
    - Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD (Grygorii Strashko)
    - Initialize MSI capability for all architectures (Guilherme G. Piccoli)
    - Relax msi_domain_alloc() to support parentless MSI irqdomains (Liu Jiang)

    ARM Versatile host bridge driver:
    - Remove unused pci_sys_data structures (Lorenzo Pieralisi)

    Broadcom iProc host bridge driver:
    - Hide CONFIG_PCIE_IPROC (Arnd Bergmann)
    - Do not use 0x in front of %pap (Dmitry V. Krivenok)
    - Update iProc PCIe device tree binding (Ray Jui)
    - Add PAXC interface support (Ray Jui)
    - Add iProc PCIe MSI device tree binding (Ray Jui)
    - Add iProc PCIe MSI support (Ray Jui)

    Freescale i.MX6 host bridge driver:
    - Use gpio_set_value_cansleep() (Fabio Estevam)
    - Add support for active-low reset GPIO (Petr Štetiar)

    HiSilicon host bridge driver:
    - Add support for HiSilicon Hip06 PCIe host controllers (Gabriele Paoloni)

    Intel VMD host bridge driver:
    - Export irq_domain_set_info() for module use (Keith Busch)
    - x86/PCI: Allow DMA ops specific to a PCI domain (Keith Busch)
    - Use 32 bit PCI domain numbers (Keith Busch)
    - Add driver for Intel Volume Management Device (VMD) (Keith Busch)

    Qualcomm host bridge driver:
    - Document PCIe devicetree bindings (Stanimir Varbanov)
    - Add Qualcomm PCIe controller driver (Stanimir Varbanov)
    - dts: apq8064: add PCIe devicetree node (Stanimir Varbanov)
    - dts: ifc6410: enable PCIe DT node for this board (Stanimir Varbanov)

    Renesas R-Car host bridge driver:
    - Add support for R-Car H3 to pcie-rcar (Harunobu Kurokawa)
    - Allow DT to override default window settings (Phil Edworthy)
    - Convert to DT resource parsing API (Phil Edworthy)
    - Revert "PCI: rcar: Build pcie-rcar.c only on ARM" (Phil Edworthy)
    - Remove unused pci_sys_data struct from pcie-rcar (Phil Edworthy)
    - Add runtime PM support to pcie-rcar (Phil Edworthy)
    - Add Gen2 PHY setup to pcie-rcar (Phil Edworthy)
    - Add gen2 fallback compatibility string for pci-rcar-gen2 (Simon Horman)
    - Add gen2 fallback compatibility string for pcie-rcar (Simon Horman)

    Synopsys DesignWare host bridge driver:
    - Simplify control flow (Bjorn Helgaas)
    - Make config accessor override checking symmetric (Bjorn Helgaas)
    - Ensure ATU is enabled before IO/conf space accesses (Stanimir Varbanov)

    Miscellaneous:
    - Add of_pci_get_host_bridge_resources() stub (Arnd Bergmann)
    - Check for PCI_HEADER_TYPE_BRIDGE equality, not bitmask (Bjorn Helgaas)
    - Fix all whitespace issues (Bogicevic Sasa)
    - x86/PCI: Simplify pci_bios_{read,write} (Geliang Tang)
    - Use to_pci_dev() instead of open-coding it (Geliang Tang)
    - Use kobj_to_dev() instead of open-coding it (Geliang Tang)
    - Use list_for_each_entry() to simplify code (Geliang Tang)
    - Fix typos in (Thomas Petazzoni)
    - x86/PCI: Clarify AMD Fam10h config access restrictions comment (Tomasz Nowicki)"

    * tag 'pci-v4.5-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (58 commits)
    PCI: Add function 1 DMA alias quirk for Lite-On/Plextor M6e/Marvell 88SS9183
    PCI: Limit config space size for Netronome NFP4000
    PCI: Add Netronome NFP4000 PF device ID
    x86/PCI: Add driver for Intel Volume Management Device (VMD)
    PCI/AER: Use 32 bit PCI domain numbers
    x86/PCI: Allow DMA ops specific to a PCI domain
    irqdomain: Export irq_domain_set_info() for module use
    PCI: host: Add of_pci_get_host_bridge_resources() stub
    genirq/MSI: Relax msi_domain_alloc() to support parentless MSI irqdomains
    PCI: rcar: Add Gen2 PHY setup to pcie-rcar
    PCI: rcar: Add runtime PM support to pcie-rcar
    PCI: designware: Make config accessor override checking symmetric
    PCI: ibmphp: Remove unneeded NULL test
    ARM: dts: ifc6410: enable PCIe DT node for this board
    ARM: dts: apq8064: add PCIe devicetree node
    PCI: hotplug: Use list_for_each_entry() to simplify code
    PCI: rcar: Remove unused pci_sys_data struct from pcie-rcar
    PCI: hisi: Add support for HiSilicon Hip06 PCIe host controllers
    PCI: Avoid iterating through memory outside the resource window
    PCI: acpiphp_ibm: Fix null dereferences on null ibm_slot
    ...

    Linus Torvalds
     

15 Jan, 2016

1 commit


16 Dec, 2015

2 commits


04 Nov, 2015

1 commit

  • Pull irq updates from Thomas Gleixner:
    "The irq departement delivers:

    - Rework the irqdomain core infrastructure to accomodate ACPI based
    systems. This is required to support ARM64 without creating
    artificial device tree nodes.

    - Sanitize the ACPI based ARM GIC initialization by making use of the
    new firmware independent irqdomain core

    - Further improvements to the generic MSI management

    - Generalize the irq migration on CPU hotplug

    - Improvements to the threaded interrupt infrastructure

    - Allow the migration of "chained" low level interrupt handlers

    - Allow optional force masking of interrupts in disable_irq[_nosysnc]

    - Support for two new interrupt chips - Sigh!

    - A larger set of errata fixes for ARM gicv3

    - The usual pile of fixes, updates, improvements and cleanups all
    over the place"

    * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (71 commits)
    Document that IRQ_NONE should be returned when IRQ not actually handled
    PCI/MSI: Allow the MSI domain to be device-specific
    PCI: Add per-device MSI domain hook
    of/irq: Use the msi-map property to provide device-specific MSI domain
    of/irq: Split of_msi_map_rid to reuse msi-map lookup
    irqchip/gic-v3-its: Parse new version of msi-parent property
    PCI/MSI: Use of_msi_get_domain instead of open-coded "msi-parent" parsing
    of/irq: Use of_msi_get_domain instead of open-coded "msi-parent" parsing
    of/irq: Add support code for multi-parent version of "msi-parent"
    irqchip/gic-v3-its: Add handling of PCI requester id.
    PCI/MSI: Add helper function pci_msi_domain_get_msi_rid().
    of/irq: Add new function of_msi_map_rid()
    Docs: dt: Add PCI MSI map bindings
    irqchip/gic-v2m: Add support for multiple MSI frames
    irqchip/gic-v3: Fix translation of LPIs after conversion to irq_fwspec
    irqchip/mxs: Add Alphascale ASM9260 support
    irqchip/mxs: Prepare driver for hardware with different offsets
    irqchip/mxs: Panic if ioremap or domain creation fails
    irqdomain: Documentation updates
    irqdomain/msi: Use fwnode instead of of_node
    ...

    Linus Torvalds
     

16 Oct, 2015

1 commit

  • When we create a generic MSI domain, that MSI_FLAG_USE_DEF_CHIP_OPS
    is set, and that any of .mask or .unmask are NULL in the irq_chip
    structure, we set them to pci_msi_[un]mask_irq.

    This is a bad idea for at least two reasons:
    - PCI_MSI might not be selected, kernel fails to build (yes, this is
    legitimate, at least on arm64!)
    - This may not be a PCI/MSI domain at all (platform MSI, for example)

    Either way, this looks wrong. Move the overriding of mask/unmask to
    the PCI counterpart, and panic is any of these two methods is not
    set in the core code (they really should be present).

    Signed-off-by: Marc Zyngier
    Cc: Jiang Liu
    Cc: Bjorn Helgaas
    Link: http://lkml.kernel.org/r/1444760085-27857-1-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

14 Oct, 2015

1 commit

  • As we continue to push of_node towards the outskirts of irq domains,
    let's start tackling the case of msi_create_irq_domain and its little
    friends.

    This has limited impact in both PCI/MSI, platform MSI, and a few
    drivers.

    Signed-off-by: Marc Zyngier
    Tested-by: Hanjun Guo
    Tested-by: Lorenzo Pieralisi
    Cc:
    Cc: Tomasz Nowicki
    Cc: Suravee Suthikulpanit
    Cc: Graeme Gregory
    Cc: Jake Oshins
    Cc: Jiang Liu
    Cc: Jason Cooper
    Cc: Rafael J. Wysocki
    Link: http://lkml.kernel.org/r/1444737105-31573-17-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

23 Jul, 2015

1 commit

  • Move alloc_msi_entry() from PCI MSI code into generic MSI code, so it
    can be reused by other generic MSI drivers. Also introduce
    free_msi_entry() for completeness.

    Suggested-by: Stuart Yoder .
    Signed-off-by: Jiang Liu
    Reviewed-by: Marc Zyngier
    Reviewed-by: Yijing Wang
    Acked-by: Bjorn Helgaas
    Cc: Tony Luck
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Grant Likely
    Cc: Borislav Petkov
    Cc: Alexander Gordeev
    Link: http://lkml.kernel.org/r/1436428847-8886-13-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     

05 May, 2015

1 commit

  • The irq_domain_ops are not modified. The irqdomain core code accepts
    pointer to a const data.

    Signed-off-by: Krzysztof Kozlowski
    Cc: Jason Cooper
    Cc: Kukjin Kim
    Cc: Stephen Warren
    Cc: Lee Jones
    Cc: Matthias Brugger
    Cc: Maxime Ripard
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-rpi-kernel@lists.infradead.org
    Cc: linux-mediatek@lists.infradead.org
    Link: http://lkml.kernel.org/r/1430139264-4362-1-git-send-email-k.kozlowski.k@gmail.com
    Signed-off-by: Thomas Gleixner

    Krzysztof Kozlowski
     

09 Apr, 2015

1 commit

  • While debugging an unrelated issue with the GICv3 ITS driver, the
    following trace triggered:

    WARNING: CPU: 1 PID: 1 at kernel/irq/irqdomain.c:1121 irq_domain_free_irqs+0x160/0x17c()
    NULL pointer, cannot free irq
    Modules linked in:
    CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W 3.19.0-rc6+ #3690
    Hardware name: FVP Base (DT)
    Call trace:
    [] dump_backtrace+0x0/0x13c
    [] show_stack+0x10/0x1c
    [] dump_stack+0x74/0x94
    [] warn_slowpath_common+0x9c/0xd4
    [] warn_slowpath_fmt+0x5c/0x80
    [] irq_domain_free_irqs+0x15c/0x17c
    [] msi_domain_free_irqs+0x58/0x74
    [] free_msi_irqs+0xb4/0x1c0

    // The msi_prepare callback fails here

    [] pci_enable_msix+0x25c/0x3d4
    [] pci_enable_msix_range+0x34/0x80
    [] vp_try_to_find_vqs+0xec/0x528
    [] vp_find_vqs+0x6c/0xa8
    [] init_vq+0x120/0x248
    [] virtblk_probe+0xb0/0x6bc
    [] virtio_dev_probe+0x17c/0x214
    [] driver_probe_device+0x7c/0x23c
    [] __driver_attach+0x98/0xa0
    [] bus_for_each_dev+0x60/0xb4
    [] driver_attach+0x1c/0x28
    [] bus_add_driver+0x150/0x208
    [] driver_register+0x64/0x130
    [] register_virtio_driver+0x24/0x68
    [] init+0x70/0xac
    [] do_one_initcall+0x94/0x1d0
    [] kernel_init_freeable+0x144/0x1e4
    [] kernel_init+0xc/0xd8
    ---[ end trace f9ee562a77cc7bae ]---

    The ITS msi_prepare callback having failed, we end-up trying to
    free MSIs that have never been allocated. Oddly enough, the kernel
    is pretty upset about it.

    It turns out that this behaviour was expected before the MSI domain
    was introduced (and dealt with in arch_teardown_msi_irqs).

    The obvious fix is to detect this early enough and bail out.

    Signed-off-by: Marc Zyngier
    Reviewed-by: Jiang Liu
    Link: http://lkml.kernel.org/r/1422299419-6051-1-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

08 Dec, 2014

1 commit


23 Nov, 2014

4 commits

  • Required to support non PCI based MSI.

    [ tglx: Extracted from Jiangs patch series ]

    Signed-off-by: Jiang Liu
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Extend struct msi_domain_info and provide default callbacks for
    msi_domain_ops.

    Signed-off-by: Jiang Liu
    Cc: Tony Luck
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yijing Wang
    Cc: Yingjoe Chen
    Cc: Borislav Petkov
    Cc: Matthias Brugger
    Cc: Alexander Gordeev
    Link: http://lkml.kernel.org/r/1416061447-9472-8-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Introduce msi_domain_{alloc|free}_irqs() to alloc/free interrupts
    from generic MSI irqdomain.

    Signed-off-by: Jiang Liu
    Cc: Tony Luck
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yijing Wang
    Cc: Yingjoe Chen
    Cc: Borislav Petkov
    Cc: Matthias Brugger
    Cc: Alexander Gordeev
    Link: http://lkml.kernel.org/r/1416061447-9472-7-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner

    Jiang Liu
     
  • Implement the basic functions for MSI interrupt support with
    hierarchical interrupt domains.

    [ tglx: Extracted and combined from several patches ]

    Signed-off-by: Jiang Liu
    Cc: Bjorn Helgaas
    Cc: Grant Likely
    Cc: Marc Zyngier
    Cc: Yingjoe Chen
    Cc: Yijing Wang
    Signed-off-by: Thomas Gleixner

    Jiang Liu