29 Apr, 2008

1 commit


25 Apr, 2008

1 commit

  • Stephen Rothwell noticed that:

    Commit 2be621498d461b63ca6124f86e3b9582e1a8e722 ("x86: dma-ops on highmem
    fix") in Linus' tree introduced a new warning (noticed in the x86_64
    allmodconfig build of linux-next):

    drivers/pci/intel-iommu.c:2240: warning: initialization from incompatible pointer type

    Which points at an instance of map_single that needs updating.

    Fix it to the new prototype.

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     

23 Apr, 2008

1 commit

  • Commit 884525655d07fdee9245716b998ecdc45cdd8007 ("PCI: clean up resource
    alignment management") didn't set the alignment information for the
    cardbus window resources, causing their subsequent allocations to fail
    miserably with a message like

    yenta_cardbus 0000:15:00.0: device not available because of BAR 7 [100:1ff] collisions
    yenta_cardbus: probe of 0000:15:00.0 failed with error -16

    or similar.

    This fixes it and clarifies the code a bit too (we used to have to use
    the insane PCI bridge alignment logic that put the alignment in the
    "start" field, this makes it use the slightly easier-to-understand
    size-based alignment, and allows us to set the resource start to zero
    until it gets allocated).

    Reported-and-tested-by: Jeff Chua
    Cc: Ivan Kokshaysky
    Cc: Jesse Barnes
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

22 Apr, 2008

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/pci-2.6: (42 commits)
    PCI: Change PCI subsystem MAINTAINER
    PCI: pci-iommu-iotlb-flushing-speedup
    PCI: pci_setup_bridge() mustn't be __devinit
    PCI: pci_bus_size_cardbus() mustn't be __devinit
    PCI: pci_scan_device() mustn't be __devinit
    PCI: pci_alloc_child_bus() mustn't be __devinit
    PCI: replace remaining __FUNCTION__ occurrences
    PCI: Hotplug: fakephp: Return success, not ENODEV, when bus rescan is triggered
    PCI: Hotplug: Fix leaks in IBM Hot Plug Controller Driver - ibmphp_init_devno()
    PCI: clean up resource alignment management
    PCI: aerdrv_acpi.c: remove unneeded NULL check
    PCI: Update VIA CX700 quirk
    PCI: Expose PCI VPD through sysfs
    PCI: iommu: iotlb flushing
    PCI: simplify quirk debug output
    PCI: iova RB tree setup tweak
    PCI: parisc: use generic pci_enable_resources()
    PCI: ppc: use generic pci_enable_resources()
    PCI: powerpc: use generic pci_enable_resources()
    PCI: ia64: use generic pci_enable_resources()
    ...

    Linus Torvalds
     

21 Apr, 2008

29 commits

  • The following patch is an update to use an array instead of a list of
    IOVA's in the implementation of defered iotlb flushes. It takes
    inspiration from sba_iommu.c

    I like this implementation better as it encapsulates the batch process
    within intel-iommu.c, and no longer touches iova.h (which is shared)

    Performance data: Netperf 32byte UDP streaming
    2.6.25-rc3-mm1:
    IOMMU-strict : 58Mps @ 62% cpu
    NO-IOMMU : 71Mbs @ 41% cpu
    List-based IOMMU-default-batched-IOTLB flush: 66Mbps @ 57% cpu

    with this patch:
    IOMMU-strict : 73Mps @ 75% cpu
    NO-IOMMU : 74Mbs @ 42% cpu
    Array-based IOMMU-default-batched-IOTLB flush: 72Mbps @ 62% cpu

    Signed-off-by:
    Cc: Grant Grundler
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    mark gross
     
  • WARNING: drivers/pci/built-in.o(.text+0x28ee9): Section mismatch in reference from the function pci_bus_assign_resources() to the function .devinit.text:pci_setup_bridge()

    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Adrian Bunk
     
  • WARNING: drivers/pci/built-in.o(.text+0x28e1f): Section mismatch in reference from the function pci_bus_size_bridges() to the function .devinit.text:pci_bus_size_cardbus()

    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Adrian Bunk
     
  • WARNING: drivers/pci/built-in.o(.text+0x150f): Section mismatch in reference from the function pci_scan_single_device() to the function .devinit.text:pci_scan_device()

    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Adrian Bunk
     
  • WARNING: drivers/pci/built-in.o(.text+0xc4c): Section mismatch in reference from the function pci_add_new_bus() to the function .devinit.text:pci_alloc_child_bus()

    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Adrian Bunk
     
  • __FUNCTION__ is gcc-specific, use __func__

    Signed-off-by: Harvey Harrison
    Signed-off-by: Greg Kroah-Hartman

    Harvey Harrison
     
  • The 'power' attribute of the fakephp driver originally only let one turn a
    slot off. If one tried to turn a slot on (echo 1 > .../power), it would
    return ENODEV, as fakephp did not support this function.

    An old (pre-git) patch changed this:
    2004/11/11 16:33:31-08:00 jdittmer
    [PATCH] fakephp: add pci bus rescan ability
    http://article.gmane.org/gmane.linux.kernel/251183

    Now writing "1" to the power attribute has the effect of triggering a bus
    rescan, but it still returns ENODEV, probably an oversight in the above
    patch.

    Using the BusyBox echo will not produce an error message, but will
    trigger *two* bus rescans (and return an exit code of 1):
    ~ # strace echo -n 1 > /sys/bus/pci/slots/0000:00:00.0/power
    ...
    write(1, "1", 1) = -1 ENODEV (No such device)
    write(1, "1", 1) = -1 ENODEV (No such device)
    exit(1) = ?

    Using cp gives a write error, even though the write did happen and a rescan
    was triggered:
    ~ # echo -n 1 > tmp ; cp tmp /sys/bus/pci/slots/0000:00:00.0/power
    cp: Write Error: No such device

    It seems much better to return success instead of failure. The actual
    status of the bus rescan is hard to return. It happens asynchronously in a
    work thread, so the sysfs store functions returns before any status is
    ready (the whole point of the work queue). And even if it didn't do this,
    the rescan doesn't have any clear status to return.

    Signed-off-by: Trent Piepho
    CC: Jan Dittmer
    Signed-off-by: Greg Kroah-Hartman

    Trent Piepho
     
  • In drivers/pci/hotplug/ibmphp_core.c::ibmphp_init_devno() we allocate
    space dynamically for a PCI irq routing table by calling
    pcibios_get_irq_routing_table(), but we never free the allocated space.

    This patch frees the allocated space at the function exit points.

    Spotted by the Coverity checker. Compile tested only.

    Please consider applying.

    Signed-off-by: Jesper Juhl
    Signed-off-by: Greg Kroah-Hartman

    Jesper Juhl
     
  • Done per Linus' request and suggestions. Linus has explained that
    better than I'll be able to explain:

    On Thu, Mar 27, 2008 at 10:12:10AM -0700, Linus Torvalds wrote:
    > Actually, before we go any further, there might be a less intrusive
    > alternative: add just a couple of flags to the resource flags field (we
    > still have something like 8 unused bits on 32-bit), and use those to
    > implement a generic "resource_alignment()" routine.
    >
    > Two flags would do it:
    >
    > - IORESOURCE_SIZEALIGN: size indicates alignment (regular PCI device
    > resources)
    >
    > - IORESOURCE_STARTALIGN: start field is alignment (PCI bus resources
    > during probing)
    >
    > and then the case of both flags zero (or both bits set) would actually be
    > "invalid", and we would also clear the IORESOURCE_STARTALIGN flag when we
    > actually allocate the resource (so that we don't use the "start" field as
    > alignment incorrectly when it no longer indicates alignment).
    >
    > That wouldn't be totally generic, but it would have the nice property of
    > automatically at least add sanity checking for that whole "res->start has
    > the odd meaning of 'alignment' during probing" and remove the need for a
    > new field, and it would allow us to have a generic "resource_alignment()"
    > routine that just gets a resource pointer.

    Besides, I removed IORESOURCE_BUS_HAS_VGA flag which was unused for ages.

    Signed-off-by: Ivan Kokshaysky
    Cc: Linus Torvalds
    Cc: Gary Hade
    Signed-off-by: Greg Kroah-Hartman

    Ivan Kokshaysky
     
  • There's no reason for checking pdev->bus for being NULL here (and we'd
    anyway Oops 3 lines below if it was).

    Signed-off-by: Adrian Bunk
    Signed-off-by: Greg Kroah-Hartman

    Adrian Bunk
     
  • This follows up 53a9bf4267b8b1f958dbeb7c8c1ef21c82229b71. Some newer
    CX700 BIOSes from our vendor have PCI Bus Parking disabled but PCI
    Master read caching enabled. This creates problems such as system
    freezing when both the network controller and the USB controller are
    active and one of them is pretty busy (e.g. heavy network traffic).

    This patch separates the checks and both the bus parking and the read
    caching are disabled independently if either is enabled by the BIOS.

    Signed-off-by: Tim Yamin
    Signed-off-by: Greg Kroah-Hartman

    Tim Yamin
     
  • Vital Product Data (VPD) may be exposed by PCI devices in several
    ways. It is generally unsafe to read this information through the
    existing interfaces to user-land because of stateful interfaces.

    This adds:
    - abstract operations for VPD access (struct pci_vpd_ops)
    - VPD state information in struct pci_dev (struct pci_vpd)
    - an implementation of the VPD access method specified in PCI 2.2
    (in access.c)
    - a 'vpd' binary file in sysfs directories for PCI devices with VPD
    operations defined

    It adds a probe for PCI 2.2 VPD in pci_scan_device() and release of
    VPD state in pci_release_dev().

    Signed-off-by: Ben Hutchings
    Signed-off-by: Greg Kroah-Hartman

    Ben Hutchings
     
  • This patch is for batching up the flushing of the IOTLB for the DMAR
    implementation found in the Intel VT-d hardware. It works by building a list
    of to be flushed IOTLB entries and a bitmap list of which DMAR engine they are
    from.

    After either a high water mark (250 accessible via debugfs) or 10ms the list
    of iova's will be reclaimed and the DMAR engines associated are IOTLB-flushed.

    This approach recovers 15 to 20% of the performance lost when using the IOMMU
    for my netperf udp stream benchmark with small packets. It can be disabled
    with a kernel boot parameter "intel_iommu=strict".

    Its use does weaken the IOMMU protections a bit.

    Signed-off-by: Mark Gross
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    mark gross
     
  • print_fn_descriptor_symbol() prints the address if we don't have a symbol,
    so no need to print both.

    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Bjorn Helgaas
     
  • The following patch merges two functions into one allowing for a 3%
    reduction in overhead in locating, allocating and inserting pages for
    use in IOMMU operations.

    Its a bit of a eye-crosser so I welcome any RB-tree / MM experts to take
    a look. It works by re-using some of the information gathered in the
    search for the pages to use in setting up the IOTLB's in the insertion
    of the iova structure into the RB tree.

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

    mark gross
     
  • Each architecture has its own pcibios_enable_resources() implementation.
    These differ in many minor ways that have nothing to do with actual
    architectural differences. Follow-on patches will make most arches
    use this generic version instead.

    This version is based on powerpc, which seemed most up-to-date. The only
    functional difference from the x86 version is that this uses "!r->parent"
    to check for resource collisions instead of "!r->start && r->end".

    Signed-off-by: Bjorn Helgaas
    Acked-by: Benjamin Herrenschmidt
    Acked-by: David Howells
    Signed-off-by: Greg Kroah-Hartman

    Bjorn Helgaas
     
  • PCI Express ASPM defines a protocol for PCI Express components in the D0
    state to reduce Link power by placing their Links into a low power state
    and instructing the other end of the Link to do likewise. This
    capability allows hardware-autonomous, dynamic Link power reduction
    beyond what is achievable by software-only controlled power management.
    However, The device should be configured by software appropriately.
    Enabling ASPM will save power, but will introduce device latency.

    This patch adds ASPM support in Linux. It introduces a global policy for
    ASPM, a sysfs file /sys/module/pcie_aspm/parameters/policy can control
    it. The interface can be used as a boot option too. Currently we have
    below setting:
    -default, BIOS default setting
    -powersave, highest power saving mode, enable all available ASPM
    state and clock power management
    -performance, highest performance, disable ASPM and clock power
    management
    By default, the 'default' policy is used currently.

    In my test, power difference between powersave mode and performance mode
    is about 1.3w in a system with 3 PCIE links.

    Note: some devices might not work well with aspm, either because chipset
    issue or device issue. The patch provide API (pci_disable_link_state),
    driver can disable ASPM for specific device.

    Signed-off-by: Shaohua Li
    Signed-off-by: Greg Kroah-Hartman

    Shaohua Li
     
  • The PCI bus names included in /proc/iomem and /proc/ioports are
    of the form 'PCI Bus #XX' where XX is the bus number. This patch
    changes the naming to 'PCI Bus XXXX:YY' where XXXX is the domain
    number and YY is the bus number. For example, PCI bus 14 in
    domain 0 will show as 'PCI Bus 0000:14' instead of 'PCI Bus #14'.
    This change makes the naming consistent with other architectures
    such as ia64 where multiple PCI domain support has been around
    longer.

    Signed-off-by: Gary Hade
    Signed-off-by: Greg Kroah-Hartman

    Gary Hade
     
  • #if 0 the no longer used pci_cleanup_aer_correct_error_status().

    Signed-off-by: Adrian Bunk
    Cc: Stephen Hemminger
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Adrian Bunk
     
  • [PATCH] pcie AER: don't check _OSC when acpi is disabled

    when acpi=off or pci=noacpi, get warning

    AER service couldn't init device 0000:00:0a.0:pcie01 - no _OSC support
    AER service couldn't init device 0000:00:0e.0:pcie01 - no _OSC support
    AER service couldn't init device 0000:00:0f.0:pcie01 - no _OSC support
    AER service couldn't init device 0000:80:0b.0:pcie01 - no _OSC support
    AER service couldn't init device 0000:80:0e.0:pcie01 - no _OSC support
    AER service couldn't init device 0000:80:0f.0:pcie01 - no _OSC support

    so don't check _OSC in aer_osc_setup

    Signed-off-by: Yinghai Lu
    Signed-off-by: Greg Kroah-Hartman

    Yinghai Lu
     
  • This patch finally removes the global list of PCI devices. We are
    relying entirely on the list held in the driver core now, and do not
    need a separate "shadow" list as no one uses it.

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • This lets us check if the device is really added to the driver core or
    not, which is what we need when walking some of the bus lists. The flag
    is there in anticipation of getting rid of the other PCI device list,
    which is what we used to check in this situation.

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • no_pci_devices() should use the driver core list of PCI devices, not our
    "separate" one.

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • This was marked incorrectly for some reason. Allow the ibmphp driver to
    be built even if PCI_LEGACY is not enabled.

    Cc: Kristen Carlson Accardi
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • This removes the depandancy of the cpcihp driver from the PCI_LEGACY
    config option by removing its usage of the pci_find_bus() function.

    Cc: Kristen Carlson Accardi
    Signed-off-by: Scott Murray
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • This cleans up the search.c file, now using the pci list of devices that
    are created for the driver core, instead of relying on our separate list
    of devices. It's better to use the functions already created for this
    kind of thing, instead of rolling our own all the time.

    This work is done in anticipation of getting rid of that second list of
    pci devices all together.

    And it ends up saving code, always a nice benefit.

    This also removes one compiler warning for when CONFIG_PCI_LEGACY is
    enabled as we no longer internally use the deprecated functions anymore.

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • This removes the pci_get_device_reverse function as there should not be
    any need to walk pci devices backwards anymore. All users of this call
    are now gone from the tree, so it is safe to remove it.

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • No one is using this function anymore for quite some time, so remove it.
    Everyone calls pci_dev_present() instead anyway...

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • An unused function that bloated the kernel only when CONFIG_EMBEDDED was
    enabled...

    Signed-off-by: Adrian Bunk
    Signed-off-by: Greg Kroah-Hartman

    Adrian Bunk
     

20 Apr, 2008

2 commits

  • * Cleaned up references to cpumask_scnprintf() and added new
    cpulist_scnprintf() interfaces where appropriate.

    * Fix some small bugs (or code efficiency improvments) for various uses
    of cpumask_scnprintf.

    * Clean up some checkpatch errors.

    Signed-off-by: Mike Travis
    Signed-off-by: Ingo Molnar

    Mike Travis
     
  • * Use new set_cpus_allowed_ptr() function added by previous patch,
    which instead of passing the "newly allowed cpus" cpumask_t arg
    by value, pass it by pointer:

    -int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
    +int set_cpus_allowed_ptr(struct task_struct *p, const cpumask_t *new_mask)

    * Modify CPU_MASK_ALL

    Depends on:
    [sched-devel]: sched: add new set_cpus_allowed_ptr function

    Signed-off-by: Mike Travis
    Signed-off-by: Ingo Molnar

    Mike Travis
     

29 Mar, 2008

1 commit

  • This reverts commit 3c0a654e390d00fef9d8faed758f5e1e8078adb5 and
    fixes kernel bug #10245:

    http://bugzilla.kernel.org/show_bug.cgi?id=10245

    The HP Compaq nc6120 has the same PCI sub-device ID as the nx6110, and the
    SMBus is used by ACPI for thermal management on the nc6120, so Linux should
    not attach a native driver to it. This means that this quirk is unsafe and
    has to be removed.

    I also added a comment to help developers realize that adding new IDs to this
    SMBus unhiding quirk table should be done only with great care, and in
    particular only after checking that ACPI is not making use of the SMBus.

    Signed-off-by: Jean Delvare
    Cc: Tomasz Koprowski
    Acked-by: Greg Kroah-Hartman
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jean Delvare
     

27 Mar, 2008

1 commit

  • This reverts commit 8fa5913d54f3b1e09948e6a0db34da887e05ff1f, which
    caused various interesting problems for people, including wrong resource
    allocations. See for example bugzilla entry "2.6.25-rc2: ohci1394
    problem (MMIO broken)" at

    http://bugzilla.kernel.org/show_bug.cgi?id=10080

    And Gary Hade says:

    "The same change had also exposed an issue reported by Paul Martin that
    has been causing an Oops while hotplugging ThinkPads to a ThinkPad
    Dock II. See

    http://lkml.org/lkml/2008/2/19/405
    http://bugzilla.kernel.org/show_bug.cgi?id=9961

    I have a fix for the ThinkPad docking Oops but if the issue being
    discussed here is caused by the transparent bridge sizing removal
    change I totally agree that it should be reverted."

    The transparent bridge sizing removal change was motivated by
    insufficient PCI memory resource for a transparent bridge window that
    was being created as a result of expansion ROM(s) being included in
    the transparent bridge sizing calculations.

    A later "PCI: Remove default PCI expansion ROM memory allocation"
    change ( re: http://lkml.org/lkml/2007/12/11/361 ) removes the
    expansion ROM(s) from the transparent bridge sizing calculations which
    actually resolves the original issue in a different manner. So, even
    if the "PCI: remove transparent bridge sizing" is not problematic it
    is no longer needed anyway."

    Identified-by: Ivan Kokshaysky
    Tested-by: Thomas Meyer
    Acked-by: Gary Hade
    Acked-by: Ingo Molnar
    Cc: Stefan Richter
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

25 Mar, 2008

2 commits

  • Revert as it is reported to cause problems for people.

    commit 4348a2dc49f9baecd34a9b0904245488c6189398
    Author: Shaohua Li
    Date: Wed Oct 24 10:45:08 2007 +0800

    pcie: utilize pcie transaction pending bit

    PCIE has a mechanism to wait for Non-Posted request to complete. I think
    pci_disable_device is a good place to do this.

    Signed-off-by: Shaohua Li
    Signed-off-by: Greg Kroah-Hartman

    Due to the regression reported at
    http://bugzilla.kernel.org/show_bug.cgi?id=10065

    Cc: Shaohua Li
    Cc: Soeren Sonnenburg
    Cc: "Rafael J. Wysocki"
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Andrew Morton
     
  • lockdep goes off on the iova copy_reserved_iova() because it and a function
    it calls grabs locks in the from, and the to of the copy operation.

    The function grab locks of the same lock classes triggering the warning. The
    first lock grabbed is for the constant reserved areas that is never accessed
    after early boot. Technically you could do without grabbing the locks for the
    "from" structure its copying reserved areas from.

    But dropping the from locks to me looks wrong, even though it would be ok.

    The affected code only runs in early boot as its setting up the DMAR
    engines.

    This patch gives the reserved_ioval_list locks special lockdep classes.

    Signed-off-by: Mark Gross
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Mark Gross
     

18 Mar, 2008

1 commit

  • This fixes a 2.6.25 regression reported by Alex Chiang.

    Invoke pciehp_enable_slot() at startup only when pciehp_force=1.
    Some HP equipment apparently cannot cope with it otherwise.

    This restores the (previously working) 2.6.24 behaviour here,
    while allowing machines that need a kick to use pciehp_force=1.

    This was the original design back in October 2007,
    but Kristen suggested we try without it first:

    Kristen Carlson Accardi wrote:
    >I think it would be ok to try allowing the slot to be enabled when not
    >using pciehp_force mode. We can wrap it later if it proves to break things

    This ended up breaking one of Alex's setups,
    so it's time to put the wrapper back in now.

    Signed-off-by: Mark Lord
    Acked-by: Alex Chiang
    Acked-by: Kristen Carlson Accardi
    Signed-off-by: Linus Torvalds

    Mark Lord