17 Jan, 2011

1 commit

  • After commit 415e12b23792 ("PCI/ACPI: Request _OSC control once for each
    root bridge (v3)") include/linux/pci-acpi.h is included by
    drivers/pci/pcie/aer/aerdrv.c and if CONFIG_ACPI is unset, the bogus and
    unnecessary alternative definition of acpi_find_root_bridge_handle()
    causes a build error to occur.

    Remove the offending piece of garbage.

    Reported-and-tested-by: Stephen Rothwell
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     

15 Jan, 2011

1 commit

  • Move the evaluation of acpi_pci_osc_control_set() (to request control of
    PCI Express native features) into acpi_pci_root_add() to avoid calling
    it many times for the same root complex with the same arguments.
    Additionally, check if all of the requisite _OSC support bits are set
    before calling acpi_pci_osc_control_set() for a given root complex.

    References: https://bugzilla.kernel.org/show_bug.cgi?id=20232
    Reported-by: Ozan Caglayan
    Tested-by: Ozan Caglayan
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Jesse Barnes

    Rafael J. Wysocki
     

23 Feb, 2010

1 commit

  • Although the majority of PCI devices can generate PMEs that in
    principle may be used to wake up devices suspended at run time,
    platform support is generally necessary to convert PMEs into wake-up
    events that can be delivered to the kernel. If ACPI is used for this
    purpose, PME signals generated by a PCI device will trigger the ACPI
    GPE associated with the device to generate an ACPI wake-up event that
    we can set up a handler for, provided that everything is configured
    correctly.

    Unfortunately, the subset of PCI devices that have GPEs associated
    with them is quite limited. The devices without dedicated GPEs have
    to rely on the GPEs associated with other devices (in the majority of
    cases their upstream bridges and, possibly, the root bridge) to
    generate ACPI wake-up events in response to PME signals from them.

    Add ACPI platform support for PCI PME wake-up:
    o Add a framework making is possible to use ACPI system notify
    handlers for run-time PM.
    o Add new PCI platform callback ->run_wake() to struct
    pci_platform_pm_ops allowing us to enable/disable the platform to
    generate wake-up events for given device. Implemet this callback
    for the ACPI platform.
    o Define ACPI wake-up handlers for PCI devices and PCI root buses and
    make the PCI-ACPI binding code register wake-up notifiers for all
    PCI devices present in the ACPI tables.
    o Add function pci_dev_run_wake() which can be used by PCI drivers to
    check if given device is capable of generating wake-up events at
    run time.

    Developed in cooperation with Matthew Garrett .

    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Jesse Barnes

    Rafael J. Wysocki
     

17 Jun, 2009

2 commits


21 Mar, 2009

2 commits

  • Current acpi_find_root_bridge_handle() has a assumption that
    pci_bus->self is NULL on the root pci bus. But it might not be true on
    some platforms. Because of this wrong assumption, current
    acpi_find_root_bridge_handle() might cause endless loop. We must check
    pci_bus->parent instead.

    Signed-off-by: Kenji Kaneshige
    Signed-off-by: Jesse Barnes

    Kenji Kaneshige
     
  • Current acpi_pci_get_bridge_handle() has an assumption that
    pci_bus->self is NULL on the root pci bus. But it might not true on
    some platforms. Because of this wrong assumption, current
    acpi_pci_get_bridge_handle() might return improper ACPI handle. We
    must check pci_bus->parent instead.

    This bug is the root cause of the following kernel panic reported by
    James Bottomley. This problem was introduced by the commit
    e8c331e963c58b83db24b7d0e39e8c07f687dbc6. The immediate cause was
    acpi_pci_get_bridge_handle() returned NULL unexpectedly and it was
    passed as the second argument of acpi_walk_namespace().

    pci_hotplug: PCI Hot Plug PCI Core version: 0.5
    acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
    BUG: unable to handle kernel NULL pointer dereference at 0000000000000010
    IP: [] acpi_ns_get_next_node+0xb/0x3c
    PGD 0
    Oops: 0000 [#1] SMP
    last sysfs file:
    CPU 0
    Modules linked in:
    Pid: 1, comm: swapper Not tainted 2.6.28 #1
    RIP: 0010:[] [] acpi_ns_get_next_node+0xb/0x3c
    RSP: 0018:ffff88007f87fd30 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    RBP: 0000000000000000 R08: ffffffff8037d260 R09: ffff88007f87fdfc
    R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000001
    R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000
    FS: 0000000000000000(0000) GS:ffffffff80742040(0000) knlGS:0000000000000000
    CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
    CR2: 0000000000000010 CR3: 0000000000201000 CR4: 00000000000006a0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process swapper (pid: 1, threadinfo ffff88007f87e000, task ffff88007f875040)
    Stack:
    0000000000000000 ffffffff803964f5 ffff88007f81b728 0000000000001001
    ffff88007f87fdfc ffffffff8037d260 0000000600000001 0000000000000000
    ffffffff8037d260 0000000000000000 0000000000000001 ffff88007f87fdfc
    Call Trace:
    [] acpi_ns_walk_namespace+0x55/0x138
    [] is_pci_dock_device+0x0/0x20
    [] is_pci_dock_device+0x0/0x20
    [] acpi_walk_namespace+0x5f/0x83
    [] detect_ejectable_slots+0x53/0x70
    [] add_bridge+0xe8/0x200
    [] acpi_walk_namespace+0x6b/0x83
    [] acpi_pci_register_driver+0x48/0x61
    [] acpiphp_init+0x0/0x58
    [] acpiphp_glue_init+0x4c/0x5a
    [] acpiphp_init+0x37/0x58
    [] _stext+0x3b/0x180
    [] create_proc_entry+0x58/0xa0
    [] register_irq_proc+0xc1/0xe0
    [] kernel_init+0x152/0x1ac
    [] finish_task_switch+0x0/0x110
    [] child_rip+0xa/0x20
    [] restore_args+0x0/0x30
    [] kernel_init+0x0/0x1ac
    [] child_rip+0x0/0x20
    Code: 89 c2 48 8b 00 48 85 c0 75 f5 48 8b 45 00 48 89 02 44 88 65 09 48 89 5d 00 31 c0 5b 5d 41 5c c3 53 48 85 d2 89 fb 48 89 d7 75 06 8b 56 10 eb 08 e8 73 f1 ff ff 48 89 c2 85 db 74 1a eb 13 0f
    RIP [] acpi_ns_get_next_node+0xb/0x3c
    RSP
    CR2: 0000000000000010
    ---[ end trace a7919e7f17c0a725 ]---

    Signed-off-by: Kenji Kaneshige
    Signed-off-by: Jesse Barnes

    Kenji Kaneshige
     

20 Mar, 2009

2 commits

  • - Rename pci_osc_control_set() to acpi_pci_osc_control_set() according
    to the other API names in drivers/acpi/pci_root.c.

    - Move _OSC related definitions to include/linux/acpi.h because _OSC
    related API is implemented in drivers/acpi/pci_root.c now.

    Signed-off-by: Kenji Kaneshige
    Reviewed-by: Andrew Patterson
    Tested-by: Andrew Patterson
    Signed-off-by: Jesse Barnes

    Kenji Kaneshige
     
  • Move PCI _OSC management code from drivers/pci/pci-acpi.c to
    drivers/acpi/pci_root.c. The benefits are

    - We no longer need struct osc_data and its management code (contents
    are moved to struct acpi_pci_root). This simplify the code, and we
    no longer care about kmalloc() failure.

    - We can make pci_acpi_osc_support() be a static function, which is
    called only from drivers/acpi/pci_root.c.

    Signed-off-by: Kenji Kaneshige
    Reviewed-by: Andrew Patterson
    Tested-by: Andrew Patterson
    Acked-by: Alex Chiang
    Signed-off-by: Jesse Barnes

    Kenji Kaneshige
     

08 Jan, 2009

4 commits

  • Some ACPI related PCI hotplug code can be shared among PCI hotplug
    drivers. This patch introduces the following functions in
    drivers/pci/hotplug/acpi_pcihp.c to share the code, and changes
    acpiphp and pciehp to use them.

    - int acpi_pci_detect_ejectable(struct pci_bus *pbus)
    This checks if the specified PCI bus has ejectable slots.

    - int acpi_pci_check_ejectable(struct pci_bus *pbus, acpi_handle handle)
    This checks if the specified handle is ejectable ACPI PCI slot. The
    'pbus' parameter is needed to check if 'handle' is PCI related ACPI
    object.

    This patch also introduces the following inline function in
    include/linux/pci-acpi.h, which is useful to get ACPI handle of the
    PCI bridge from struct pci_bus of the bridge's secondary bus.

    - static inline acpi_handle acpi_pci_get_bridge_handle(struct pci_bus *pbus)
    This returns ACPI handle of the PCI bridge which generates PCI bus
    specified by 'pbus'.

    Signed-off-by: Kenji Kaneshige
    Signed-off-by: Jesse Barnes

    Kenji Kaneshige
     
  • The acpi_query_osc, __pci_osc_support_set, pci_osc_support_set, and
    pcie_osc_support_set functions have been obsoleted in favor of setting
    these capabilities during root bridge discovery with
    pci_acpi_osc_support. There are no longer any callers of these
    functions, so remove them.

    Signed-off-by: Andrew Patterson
    Signed-off-by: Jesse Barnes

    Andrew Patterson
     
  • Add pci_acpi_osc_support() and call it when a PCI bridge is added. This
    allows us to avoid having every individual PCI root bridge driver call
    _OSC support for every root bridge in their probe functions, a
    significant savings in boot time.

    Signed-off-by: Matthew Wilcox
    Signed-off-by: Jesse Barnes

    Andrew Patterson
     
  • The pci-acpi.h file will not compile without including linux/acpi.h.

    Signed-off-by: Matthew Wilcox
    Signed-off-by: Jesse Barnes

    Andrew Patterson
     

19 Aug, 2008

1 commit

  • Consolidate finding of a root bridge and getting its handle to the one
    inline function. It's cut & pasted on multiple places. Use this new
    inline in those.

    Cc: kristen.c.accardi@intel.com
    Acked-by: Alex Chiang
    Signed-off-by: Jiri Slaby
    Signed-off-by: Jesse Barnes

    Jiri Slaby
     

02 Feb, 2008

1 commit

  • The function pci_osc_support_set() traverses every root bridge when
    checking for _OSC support for a capability. It quits as soon as it finds a
    device/bridge that doesn't support the requested capability. This won't
    work for systems that have mixed PCI and PCIe bridges when checking for
    PCIe features. I split this function into two -- pci_osc_support_set() and
    pcie_osc_support_set(). The latter is used when only PCIe devices should be
    traversed.

    Signed-off-by: Andrew Patterson
    Signed-off-by: Greg Kroah-Hartman

    Andrew Patterson
     

12 Jun, 2006

1 commit


11 Nov, 2005

1 commit

  • This patch tweaks the way pciehp requests control of the hotplug
    hardware from BIOS. It now tries to invoke the ACPI _OSC method
    for a specific hotplug controller only, rather than walking the
    entire acpi namespace invoking all possible _OSC methods under
    all host bridges. This allows us to gain control of each hotplug
    controller individually, even if BIOS fails to give us control of
    some other hotplug controller in the system.

    Signed-off-by: Rajesh Shah
    Signed-off-by: Greg Kroah-Hartman

    rajesh.shah@intel.com
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds