22 Jun, 2017

1 commit

  • See this dmesg extract before the patch:

    [ 0.679466] ACPI: Dynamic OEM Table Load:
    [ 0.679470] ACPI: SSDT 0xFFFF910F6B497E00 00018A (v02 PmRef ApCst 00003000 INTL 20160422)
    [ 0.679579] ACPI: Executed 1 blocks of module-level executable AML code
    [ 0.681477] ACPI : EC: EC started
    [ 0.681478] ACPI : EC: interrupt blocked
    [ 0.684798] ACPI: Interpreter enabled
    [ 0.684835] ACPI: (supports S0 S3 S4 S5)

    Signed-off-by: Vincent Legoll
    Signed-off-by: Rafael J. Wysocki

    Vincent Legoll
     

29 Mar, 2017

1 commit

  • The on-stack resource-window 'win' in setup_res() is not
    properly initialized. This causes the pointers in the
    embedded 'struct resource' to contain stale addresses.

    These pointers (in my case the ->child pointer) later get
    propagated to the global iomem_resources list, causing a #GP
    exception when the list is traversed in
    iomem_map_sanity_check().

    Fixes: c183619b63ec (x86/irq, ACPI: Implement ACPI driver to support IOAPIC hotplug)
    Signed-off-by: Joerg Roedel
    Signed-off-by: Rafael J. Wysocki

    Joerg Roedel
     

01 Mar, 2017

1 commit

  • The hot removal of IOAPIC is handling PCI and ACPI removal in one go. That
    only works when the PCI drivers released the interrupt resources, but
    breaks when a IOAPIC interrupt is still associated to a PCI device.

    The new pcibios_release_device() callback allows to solve that problem by
    splitting the removal into two steps:

    1) PCI removal:

    Release all PCI resources including eventually not yet released IOAPIC
    interrupts via the new pcibios_release_device() callback.

    2) ACPI removal:

    After release of all PCI resources the ACPI resources can be released
    without issue.

    [ tglx: Rewrote changelog ]

    Signed-off-by: Rui Wang
    Cc: tony.luck@intel.com
    Cc: linux-pci@vger.kernel.org
    Cc: rjw@rjwysocki.net
    Cc: linux-acpi@vger.kernel.org
    Cc: fengguang.wu@intel.com
    Cc: helgaas@kernel.org
    Cc: kbuild-all@01.org
    Cc: bhelgaas@google.com
    Link: http://lkml.kernel.org/r/1488288869-31290-3-git-send-email-rui.y.wang@intel.com
    Signed-off-by: Thomas Gleixner

    Rui Wang
     

18 Aug, 2016

4 commits

  • handle_ioapic_add() uses request_resource() to request ACPI "_CRS"
    resources. This can fail with the following error message:

    [ 247.325693] ACPI: \_SB_.IIO1.AID1: failed to insert resource

    This happens when there are multiple IOAPICs and DSDT groups their
    "_CRS" resources as the children of a parent resource, as seen from
    /proc/iomem:

    fec00000-fecfffff : PNP0003:00
    fec00000-fec003ff : IOAPIC 0
    fec01000-fec013ff : IOAPIC 1
    fec40000-fec403ff : IOAPIC 2

    In this case request_resource() fails because there's a conflicting
    resource which is the parent (fec0000-fecfffff). Fix it by using
    insert_resource() which can request resources by taking the conflicting
    resource as the parent.

    Signed-off-by: Rui Wang
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: bhelgaas@google.com
    Cc: helgaas@kernel.org
    Cc: linux-acpi@vger.kernel.org
    Cc: linux-pci@vger.kernel.org
    Cc: rjw@rjwysocki.net
    Cc: tony.luck@intel.com
    Link: http://lkml.kernel.org/r/1471420837-31003-6-git-send-email-rui.y.wang@intel.com
    Signed-off-by: Ingo Molnar

    Rui Wang
     
  • IOAPIC resource at 0xfecxxxxx gets lost from /proc/iomem after
    hot-removing and then hot-adding the IOAPIC device.

    After system boot, in /proc/iomem:

    fec00000-fecfffff : PNP0003:00
    fec00000-fec003ff : IOAPIC 0
    fec01000-fec013ff : IOAPIC 1
    fec40000-fec403ff : IOAPIC 2
    fec80000-fec803ff : IOAPIC 3
    fecc0000-fecc03ff : IOAPIC 4

    Then hot-remove IOAPIC 2 and hot-add it again:

    fec00000-fecfffff : PNP0003:00
    fec00000-fec003ff : IOAPIC 0
    fec01000-fec013ff : IOAPIC 1
    fec80000-fec803ff : IOAPIC 3
    fecc0000-fecc03ff : IOAPIC 4

    The range at 0xfec40000 is lost from /proc/iomem - which is a bug.

    This bug happens because handle_ioapic_add() requests resources from
    either PCI config BAR or ACPI "_CRS", not both. But Intel platforms
    map the IOxAPIC registers both at the PCI config BAR (called MBAR, dynamic),
    and at the ACPI "_CRS" (called ABAR, static). The 0xfecX_YZ00 to 0xfecX_YZFF
    range appears in "_CRS" of each IOAPIC device.

    Both ranges should be claimed from /proc/iomem for exclusive use.

    Signed-off-by: Rui Wang
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: bhelgaas@google.com
    Cc: helgaas@kernel.org
    Cc: linux-acpi@vger.kernel.org
    Cc: linux-pci@vger.kernel.org
    Cc: rjw@rjwysocki.net
    Cc: tony.luck@intel.com
    Link: http://lkml.kernel.org/r/1471420837-31003-5-git-send-email-rui.y.wang@intel.com
    Signed-off-by: Ingo Molnar

    Rui Wang
     
  • acpi_dev_filter_resource_type() returns 0 on success, and 1 on failure.
    A return value of zero means there's a matching resource, so we should
    continue within setup_res() to get the resource.

    Signed-off-by: Rui Wang
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: bhelgaas@google.com
    Cc: helgaas@kernel.org
    Cc: linux-acpi@vger.kernel.org
    Cc: linux-pci@vger.kernel.org
    Cc: rjw@rjwysocki.net
    Cc: tony.luck@intel.com
    Link: http://lkml.kernel.org/r/1471420837-31003-4-git-send-email-rui.y.wang@intel.com
    Signed-off-by: Ingo Molnar

    Rui Wang
     
  • Change the argument of acpi_ioapic_add() to a generic ACPI handle, and
    move its prototype from drivers/acpi/internal.h to include/linux/acpi.h
    so that it can be called from outside the pci_root driver.

    Signed-off-by: Rui Wang
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: bhelgaas@google.com
    Cc: helgaas@kernel.org
    Cc: linux-acpi@vger.kernel.org
    Cc: linux-pci@vger.kernel.org
    Cc: rjw@rjwysocki.net
    Cc: tony.luck@intel.com
    Link: http://lkml.kernel.org/r/1471420837-31003-2-git-send-email-rui.y.wang@intel.com
    Signed-off-by: Ingo Molnar

    Rui Wang
     

05 Feb, 2015

1 commit

  • Enable support of IOAPIC hotplug by:
    1) reintroducing ACPI based IOAPIC driver
    2) enhance pci_root driver to hook hotplug events

    The ACPI IOAPIC driver is always enabled if all of ACPI, PCI and IOAPIC
    are enabled.

    Signed-off-by: Jiang Liu
    Cc: Konrad Rzeszutek Wilk
    Cc: Tony Luck
    Cc: Joerg Roedel
    Cc: Greg Kroah-Hartman
    Cc: Benjamin Herrenschmidt
    Cc: Rafael J. Wysocki
    Cc: Bjorn Helgaas
    Cc: Randy Dunlap
    Cc: Yinghai Lu
    Cc: Borislav Petkov
    Cc: Len Brown
    Link: http://lkml.kernel.org/r/1414387308-27148-19-git-send-email-jiang.liu@linux.intel.com
    Signed-off-by: Thomas Gleixner
    Signed-off-by: Rafael J. Wysocki

    Jiang Liu