11 Jan, 2012

2 commits

  • * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu: (53 commits)
    iommu/amd: Set IOTLB invalidation timeout
    iommu/amd: Init stats for iommu=pt
    iommu/amd: Remove unnecessary cache flushes in amd_iommu_resume
    iommu/amd: Add invalidate-context call-back
    iommu/amd: Add amd_iommu_device_info() function
    iommu/amd: Adapt IOMMU driver to PCI register name changes
    iommu/amd: Add invalid_ppr callback
    iommu/amd: Implement notifiers for IOMMUv2
    iommu/amd: Implement IO page-fault handler
    iommu/amd: Add routines to bind/unbind a pasid
    iommu/amd: Implement device aquisition code for IOMMUv2
    iommu/amd: Add driver stub for AMD IOMMUv2 support
    iommu/amd: Add stat counter for IOMMUv2 events
    iommu/amd: Add device errata handling
    iommu/amd: Add function to get IOMMUv2 domain for pdev
    iommu/amd: Implement function to send PPR completions
    iommu/amd: Implement functions to manage GCR3 table
    iommu/amd: Implement IOMMUv2 TLB flushing routines
    iommu/amd: Add support for IOMMUv2 domain mode
    iommu/amd: Add amd_iommu_domain_direct_map function
    ...

    Linus Torvalds
     
  • * 'stable/for-linus-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen: (37 commits)
    xen/pciback: Expand the warning message to include domain id.
    xen/pciback: Fix "device has been assigned to X domain!" warning
    xen/pciback: Move the PCI_DEV_FLAGS_ASSIGNED ops to the "[un|]bind"
    xen/xenbus: don't reimplement kvasprintf via a fixed size buffer
    xenbus: maximum buffer size is XENSTORE_PAYLOAD_MAX
    xen/xenbus: Reject replies with payload > XENSTORE_PAYLOAD_MAX.
    Xen: consolidate and simplify struct xenbus_driver instantiation
    xen-gntalloc: introduce missing kfree
    xen/xenbus: Fix compile error - missing header for xen_initial_domain()
    xen/netback: Enable netback on HVM guests
    xen/grant-table: Support mappings required by blkback
    xenbus: Use grant-table wrapper functions
    xenbus: Support HVM backends
    xen/xenbus-frontend: Fix compile error with randconfig
    xen/xenbus-frontend: Make error message more clear
    xen/privcmd: Remove unused support for arch specific privcmp mmap
    xen: Add xenbus_backend device
    xen: Add xenbus device driver
    xen: Add privcmd device driver
    xen/gntalloc: fix reference counts on multi-page mappings
    ...

    Linus Torvalds
     

09 Jan, 2012

2 commits

  • Conflicts:
    drivers/pci/hotplug/acpiphp_glue.c

    Joerg Roedel
     
  • * 'for-linus2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (165 commits)
    reiserfs: Properly display mount options in /proc/mounts
    vfs: prevent remount read-only if pending removes
    vfs: count unlinked inodes
    vfs: protect remounting superblock read-only
    vfs: keep list of mounts for each superblock
    vfs: switch ->show_options() to struct dentry *
    vfs: switch ->show_path() to struct dentry *
    vfs: switch ->show_devname() to struct dentry *
    vfs: switch ->show_stats to struct dentry *
    switch security_path_chmod() to struct path *
    vfs: prefer ->dentry->d_sb to ->mnt->mnt_sb
    vfs: trim includes a bit
    switch mnt_namespace ->root to struct mount
    vfs: take /proc/*/mounts and friends to fs/proc_namespace.c
    vfs: opencode mntget() mnt_set_mountpoint()
    vfs: spread struct mount - remaining argument of next_mnt()
    vfs: move fsnotify junk to struct mount
    vfs: move mnt_devname
    vfs: move mnt_list to struct mount
    vfs: switch pnode.h macros to struct mount *
    ...

    Linus Torvalds
     

07 Jan, 2012

1 commit

  • * 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86: Skip cpus with apic-ids >= 255 in !x2apic_mode
    x86, x2apic: Allow "nox2apic" to disable x2apic mode setup by BIOS
    x86, x2apic: Fallback to xapic when BIOS doesn't setup interrupt-remapping
    x86, acpi: Skip acpi x2apic entries if the x2apic feature is not present
    x86, apic: Add probe() for apic_flat
    x86: Simplify code by removing a !SMP #ifdefs from 'struct cpuinfo_x86'
    x86: Convert per-cpu counter icr_read_retry_count into a member of irq_stat
    x86: Add per-cpu stat counter for APIC ICR read tries
    pci, x86/io-apic: Allow PCI_IOAPIC to be user configurable on x86
    x86: Fix the !CONFIG_NUMA build of the new CPU ID fixup code support
    x86: Add NumaChip support
    x86: Add x86_init platform override to fix up NUMA core numbering
    x86: Make flat_init_apic_ldr() available

    Linus Torvalds
     

05 Jan, 2012

1 commit

  • The 'name', 'owner', and 'mod_name' members are redundant with the
    identically named fields in the 'driver' sub-structure. Rather than
    switching each instance to specify these fields explicitly, introduce
    a macro to simplify this.

    Eliminate further redundancy by allowing the drvname argument to
    DEFINE_XENBUS_DRIVER() to be blank (in which case the first entry from
    the ID table will be used for .driver.name).

    Also eliminate the questionable xenbus_register_{back,front}end()
    wrappers - their sole remaining purpose was the checking of the
    'owner' field, proper setting of which shouldn't be an issue anymore
    when the macro gets used.

    v2: Restore DRV_NAME for the driver name in xen-pciback.

    Signed-off-by: Jan Beulich
    Cc: Jens Axboe
    Cc: Dmitry Torokhov
    Cc: Florian Tobias Schandinat
    Cc: Ian Campbell
    Cc: David S. Miller
    Signed-off-by: Konrad Rzeszutek Wilk

    Jan Beulich
     

04 Jan, 2012

1 commit


19 Dec, 2011

1 commit

  • I noticed that hotplug of one setup does not work with recent change in
    pci tree.

    After checking the bridge conf setup, I noticed that the bridges get
    assigned but do not get enabled.

    The reason is the following commit, while simply ignores bridge
    resources when enabling a pci device:

    | commit bbef98ab0f019f1b0c25c1acdf1683c68933d41b
    | Author: Ram Pai
    | Date: Sun Nov 6 10:33:10 2011 +0800
    |
    | PCI: defer enablement of SRIOV BARS
    |...
    | NOTE: Note, there is subtle change in the pci_enable_device() API. Any
    | driver that depends on SRIOV BARS to be enabled in pci_enable_device()
    | can fail.

    Put back bridge resource and ROM resource checking to fix the problem.

    That should fix regression like BIOS does not assign correct resource to
    bridge.

    Discussion can be found at:
    http://www.spinics.net/lists/linux-pci/msg12874.html

    Signed-off-by: Yinghai Lu
    Acked-by: Jesse Barnes
    Signed-off-by: Linus Torvalds

    Yinghai Lu
     

15 Dec, 2011

1 commit

  • During test of one IB card with guest VM, found that, msi is not
    initialized properly.

    It turns out __write_msi_msg will do nothing if device current_state is
    not PCI_D0. And, that pci device does not have pm_cap in guest VM.

    There is an error in setting of power state to PCI_D0 in
    pci_enable_device(), but error is not returned for this. Following is
    code flow:

    pci_enable_device() --> __pci_enable_device_flags() -->
    do_pci_enable_device() --> pci_set_power_state() -->
    __pci_start_power_transition()

    We have following condition inside __pci_start_power_transition():
    if (platform_pci_power_manageable(dev)) {
    error = platform_pci_set_power_state(dev, state);
    if (!error)
    pci_update_current_state(dev, state);
    } else {
    error = -ENODEV;
    /* Fall back to PCI_D0 if native PM is not supported */
    if (!dev->pm_cap)
    dev->current_state = PCI_D0;
    }

    Here, from platform_pci_set_power_state(), acpi_pci_set_power_state() is
    getting called and that is failing with ENODEV because of following
    condition:

    if (!handle || ACPI_SUCCESS(acpi_get_handle(handle, "_EJ0",&tmp)))
    return -ENODEV;

    Because of that, pci_update_current_state() is not getting called.

    With this patch, if device power state can not be set via
    platform_pci_set_power_state and that device does not have native pm
    support, then PCI device power state will be set to PCI_D0.

    -v2: This also reverts 47e9037ac16637cd7f12b8790ea7ce6680e42168, as it's
    not needed after this change.

    Acked-by: "Rafael J. Wysocki"
    Signed-off-by: Ajaykumar Hotchandani
    Signed-off-by: Yinghai Lu
    Signed-off-by: Jesse Barnes

    Ajaykumar Hotchandani
     

14 Dec, 2011

1 commit

  • Commit 0d52f54e2ef64c189dedc332e680b2eb4a34590a (PCI / ACPI: Make
    acpiphp ignore root bridges using PCIe native hotplug) added code
    that made the acpiphp driver completely ignore PCIe root complexes
    for which the kernel had been granted control of the native PCIe
    hotplug feature by the BIOS through _OSC. Unfortunately, however,
    this was a mistake, because on some systems there were PCI bridges
    supporting PCI (non-PCIe) hotplug under such root complexes and
    those bridges should have been handled by acpiphp.

    For this reason, revert the changes made by the commit mentioned
    above and make register_slot() in drivers/pci/hotplug/acpiphp_glue.c
    avoid registering hotplug slots for PCIe ports that belong to
    root complexes with native PCIe hotplug enabled (which means that
    the BIOS has granted the kernel control of this feature for the
    given root complex). This is reported to address the original
    issue fixed by commit 0d52f54e2ef64c189dedc332e680b2eb4a34590a and
    to work on the system where that commit broke things.

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

    Rafael J. Wysocki
     

06 Dec, 2011

13 commits

  • This adjusts PCI_IOAPIC to be user configurable (possibly as a
    module) on x86, since the base architecture code for adding
    IO-APICs dynamically isn't there yet (and hence having the code
    present everywhere is pretty pointless).

    To make this consistent, a MODULE_DEVICE_TABLE() declaration
    gets added, the class specifications get corrected (by properly
    using PCI_DEVICE_CLASS() intended for purposes like this), and
    the probe and remove functions get their sections adjusted.

    Signed-off-by: Jan Beulich
    Acked-by: Jesse Barnes
    Cc: Bjorn Helgaas
    Link: http://lkml.kernel.org/r/4EDDD71A02000078000659F1@nat28.tlf.novell.com
    Signed-off-by: Ingo Molnar

    Jan Beulich
     
  • I get this compile failure on parisc:

    drivers/pci/ats.c: In function 'ats_alloc_one':
    drivers/pci/ats.c:29: error: implicit declaration of function 'kzalloc'
    drivers/pci/ats.c:29: warning: assignment makes pointer from integer without a cast
    drivers/pci/ats.c: In function 'ats_free_one':
    drivers/pci/ats.c:45: error: implicit declaration of function 'kfree'

    Because ats.c is missing linux/slab.h as an include. This patch fixes it

    Signed-off-by: James Bottomley
    Signed-off-by: Jesse Barnes

    James Bottomley
     
  • All the PCI BARs of a device are enabled when the device is enabled
    using pci_enable_device(). This unnecessarily enables SRIOV BARs of the
    device.

    On some platforms, which do not support SRIOV as yet, the
    pci_enable_device() fails to enable the device if its SRIOV BARs are not
    allocated resources correctly.

    The following patch fixes the above problem. The SRIOV BARs are now
    enabled when IOV capability of the device is enabled in sriov_enable().

    NOTE: Note, there is subtle change in the pci_enable_device() API. Any
    driver that depends on SRIOV BARS to be enabled in pci_enable_device()
    can fail.

    The patch has been touch tested on power and x86 platform.

    Tested-by: Michael Wang
    Signed-off-by: Ram Pai
    Signed-off-by: Jesse Barnes

    Ram Pai
     
  • More consistency cleanups. Drop the _OFF, separate and indent
    CTRL/CAP/STATUS bit definitions. This helped find the previous
    mis-use of bit 0 in the PASID capability register.

    Reviewed-by: Joerg Roedel
    Tested-by: Joerg Roedel
    Signed-off-by: Alex Williamson
    Signed-off-by: Jesse Barnes

    Alex Williamson
     
  • The PASID ECN indicates bit 0 is reserved in the capability register.
    Switch pci_enable_pasid() to error if PASID is already enabled and
    don't expose enable as a feature in pci_pasid_features().

    Reviewed-by: Joerg Roedel
    Tested-by: Joerg Roedel
    Signed-off-by: Alex Williamson
    Signed-off-by: Jesse Barnes

    Alex Williamson
     
  • I traced a nasty kexec on panic boot failure to the fact that we had
    screaming msi interrupts and we were not disabling the msi messages at
    kernel startup. The booting kernel had not enabled those interupts so
    was not prepared to handle them.

    I can see no reason why we would ever want to leave the msi interrupts
    enabled at boot if something else has enabled those interrupts. The pci
    spec specifies that msi interrupts should be off by default. Drivers
    are expected to enable the msi interrupts if they want to use them. Our
    interrupt handling code reprograms the interrupt handlers at boot and
    will not be be able to do anything useful with an unexpected interrupt.

    This patch applies cleanly all of the way back to 2.6.32 where I noticed
    the problem.

    Cc: stable@kernel.org
    Signed-off-by: Eric W. Biederman
    Signed-off-by: Jesse Barnes

    Eric W. Biederman
     
  • Modify pci_acpi_wake_dev() to avoid resuming PME-capable devices
    whose PME Status bits are not set, which may happen currently if
    several devices are associated with the same wakeup GPE and all
    of them are notified whenever at least one of them signals PME.

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

    Rafael J. Wysocki
     
  • If the kernel has requested control of the SHPC native hotplug
    feature for a given root bridge, the acpiphp driver should not try
    to handle that root bridge and it should leave it to shpchp.
    Failing to do so causes problems to happen if shpchp is loaded
    and unloaded before loading acpiphp (ACPI-based hotplug won't work
    in that case anyway).

    To address this issue make find_root_bridges() ignore PCI root
    bridges with SHPC native hotplug enabled and make add_bridge()
    return error code if SHPC native hotplug is enabled for the given
    root bridge. This causes acpiphp to refuse to load if SHPC native
    hotplug is enabled for all root bridges and to refuse binding to
    the root bridges with SHPC native hotplug enabled.

    Reviewed-by: Kenji Kaneshige
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Jesse Barnes

    Rafael J. Wysocki
     
  • Use non-ordered workqueue for attention button events.

    Attention button events on each slot can be handled asynchronously. So
    we should use non-ordered workqueue. This patch also removes ordered
    workqueue in pciehp as a result.

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

    Kenji Kaneshige
     
  • Fix improper workqueue cleanup.

    In the current pciehp, pcied_cleanup() calls destroy_workqueue()
    before calling pcie_port_service_unregister(). This causes kernel oops
    because flush_workqueue() is called in the pcie_port_service_unregister()
    code path after the workqueue was destroyed. So pcied_cleanup() must call
    pcie_port_service_unregister() first before calling destroy_workqueue().

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

    Kenji Kaneshige
     
  • Right now we forcibly clear ASPM state on all devices if the BIOS indicates
    that the feature isn't supported. Based on the Microsoft presentation
    "PCI Express In Depth for Windows Vista and Beyond", I'm starting to think
    that this may be an error. The implication is that unless the platform
    grants full control via _OSC, Windows will not touch any PCIe features -
    including ASPM. In that case clearing ASPM state would be an error unless
    the platform has granted us that control.

    This patch reworks the ASPM disabling code such that the actual clearing
    of state is triggered by a successful handoff of PCIe control to the OS.
    The general ASPM code undergoes some changes in order to ensure that the
    ability to clear the bits isn't overridden by ASPM having already been
    disabled. Further, this theoretically now allows for situations where
    only a subset of PCIe roots hand over control, leaving the others in the
    BIOS state.

    It's difficult to know for sure that this is the right thing to do -
    there's zero public documentation on the interaction between all of these
    components. But enough vendors enable ASPM on platforms and then set this
    bit that it seems likely that they're expecting the OS to leave them alone.

    Measured to save around 5W on an idle Thinkpad X220.

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

    Matthew Garrett
     
  • These are extended capabilities, rename and move to proper
    group for consistency.

    Signed-off-by: Alex Williamson
    Signed-off-by: Jesse Barnes

    Alex Williamson
     
  • This patch adds a per-pci-device subdirectory in sysfs called:
    /sys/bus/pci/devices//msi_irqs

    This sub-directory exports the set of msi vectors allocated by a given
    pci device, by creating a numbered sub-directory for each vector beneath
    msi_irqs. For each vector various attributes can be exported.
    Currently the only attribute is called mode, which tracks the
    operational mode of that vector (msi vs. msix)

    Acked-by: Greg Kroah-Hartman
    Signed-off-by: Jesse Barnes

    Neil Horman
     

24 Nov, 2011

1 commit

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci:
    PCI hotplug: shpchp: don't blindly claim non-AMD 0x7450 device IDs
    PCI: pciehp: wait 100 ms after Link Training check
    PCI: pciehp: wait 1000 ms before Link Training check
    PCI: pciehp: Retrieve link speed after link is trained
    PCI: Let PCI_PRI depend on PCI
    PCI: Fix compile errors with PCI_ATS and !PCI_IOV
    PCI / ACPI: Make acpiphp ignore root bridges using PCIe native hotplug

    Linus Torvalds
     

15 Nov, 2011

1 commit

  • Previously we claimed device ID 0x7450, regardless of the vendor, which is
    clearly wrong. Now we'll claim that device ID only for AMD.

    I suspect this was just a typo in the original code, but it's possible this
    change will break shpchp on non-7450 AMD bridges. If so, we'll have to fix
    them as we find them.

    Reference: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=638863
    Reported-by: Ralf Jung
    Cc: Joerg Roedel
    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Jesse Barnes

    Bjorn Helgaas
     

12 Nov, 2011

2 commits

  • If the port supports Link speeds greater than 5.0 GT/s, we must wait
    for 100 ms after Link training completes before sending configuration
    request.

    Acked-by: Yinghai Lu
    Tested-by: Yinghai Lu
    Signed-off-by: Kenji Kaneshige
    Signed-off-by: Jesse Barnes

    Kenji Kaneshige
     
  • We need to wait for 1000 ms after Data Link Layer Link Active (DLLLA)
    bit reads 1b before sending configuration request. Currently pciehp
    does this wait after checking Link Training (LT) bit. But we need it
    before checking LT bit because LT is still set even after DLLLA bit is
    set on some platforms.

    Acked-by: Yinghai Lu
    Tested-by: Yinghai Lu
    Signed-off-by: Kenji Kaneshige
    Signed-off-by: Jesse Barnes

    Kenji Kaneshige
     

08 Nov, 2011

1 commit

  • During hot plug, board_added will call pciehp_power_on_slot().
    But link speed is updated in pciehp_power_on_slot().

    We should not update link speed there, because that is too early.

    So move the link speed update to pciehp_check_link_status() after making
    sure the link has been trained.

    -v2: fix compile warning that Kenji found.

    Signed-off-by: Yinghai Lu
    Reviewed-by: Kenji Kaneshige
    Tested-by: Kenji Kaneshige
    Signed-off-by: Jesse Barnes

    Yinghai Lu
     

07 Nov, 2011

2 commits

  • * 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)
    Revert "tracing: Include module.h in define_trace.h"
    irq: don't put module.h into irq.h for tracking irqgen modules.
    bluetooth: macroize two small inlines to avoid module.h
    ip_vs.h: fix implicit use of module_get/module_put from module.h
    nf_conntrack.h: fix up fallout from implicit moduleparam.h presence
    include: replace linux/module.h with "struct module" wherever possible
    include: convert various register fcns to macros to avoid include chaining
    crypto.h: remove unused crypto_tfm_alg_modname() inline
    uwb.h: fix implicit use of asm/page.h for PAGE_SIZE
    pm_runtime.h: explicitly requires notifier.h
    linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h
    miscdevice.h: fix up implicit use of lists and types
    stop_machine.h: fix implicit use of smp.h for smp_processor_id
    of: fix implicit use of errno.h in include/linux/of.h
    of_platform.h: delete needless include
    acpi: remove module.h include from platform/aclinux.h
    miscdevice.h: delete unnecessary inclusion of module.h
    device_cgroup.h: delete needless include
    net: sch_generic remove redundant use of
    net: inet_timewait_sock doesnt need
    ...

    Fix up trivial conflicts (other header files, and removal of the ab3550 mfd driver) in
    - drivers/media/dvb/frontends/dibx000_common.c
    - drivers/media/video/{mt9m111.c,ov6650.c}
    - drivers/mfd/ab3550-core.c
    - include/linux/dmaengine.h

    Linus Torvalds
     
  • * 'trivial' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
    scsi: drop unused Kconfig symbol
    pci: drop unused Kconfig symbol
    stmmac: drop unused Kconfig symbol
    x86: drop unused Kconfig symbol
    powerpc: drop unused Kconfig symbols
    powerpc: 40x: drop unused Kconfig symbol
    mips: drop unused Kconfig symbols
    openrisc: drop unused Kconfig symbols
    arm: at91: drop unused Kconfig symbol
    samples: drop unused Kconfig symbol
    m32r: drop unused Kconfig symbol
    score: drop unused Kconfig symbols
    sh: drop unused Kconfig symbol
    um: drop unused Kconfig symbol
    sparc: drop unused Kconfig symbol
    alpha: drop unused Kconfig symbol

    Fix up trivial conflict in drivers/net/ethernet/stmicro/stmmac/Kconfig
    as per Michal: the STMMAC_DUAL_MAC config variable is still unused and
    should be deleted.

    Linus Torvalds
     

01 Nov, 2011

5 commits

  • These were getting module.h implicitly from device.h but we want
    to clean that up, so we fix it here to avoid things like:

    pci/slot.c: In function ‘pci_hp_create_module_link’:
    pci/slot.c:383: error: ‘module_kset’ undeclared (first use in this function)

    Similarly, rpadlpar_core.c is modular, so add module.h to its includes.

    Signed-off-by: Paul Gortmaker

    Paul Gortmaker
     
  • They were implicitly getting it from device.h --> module.h but
    we want to clean that up. So add the minimal header for these
    macros.

    Signed-off-by: Paul Gortmaker

    Paul Gortmaker
     
  • There's no other Kconfig symbol that depends on XEN_PCIDEV_FE_DEBUG.
    Neither is there anything that uses CONFIG_XEN_PCIDEV_FE_DEBUG.

    Signed-off-by: Paul Bolle
    Reviewed-by: Konrad Rzeszutek Wilk
    Signed-off-by: Michal Marek

    Paul Bolle
     
  • This avoids the PCI_PRI question in 'make config' when PCI
    is not selected.

    Reported-by: Geert Uytterhoeven
    Signed-off-by: Joerg Roedel
    Signed-off-by: Jesse Barnes

    Joerg Roedel
     
  • If the kernel has requested control of the PCIe native hotplug
    feature for a given root complex, the acpiphp driver should not try
    to handle that root complex and it should leave it to pciehp.
    Failing to do so causes problems to happen if acpiphp is loaded
    before pciehp on such systems.

    To address this issue make find_root_bridges() ignore PCIe root
    complexes with PCIe native hotplug enabled and make add_bridge()
    return error code if PCIe native hotplug is enabled for the given
    root port. This causes acpiphp to refuse to load if PCIe native
    hotplug is enabled for all complexes and to refuse binding to
    the root complexes with PCIe native hotplug is enabled.

    Acked-by: Kenji Kaneshige
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Jesse Barnes

    Rafael J. Wysocki
     

29 Oct, 2011

1 commit

  • * 'next-rebase' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci:
    PCI: Clean-up MPS debug output
    pci: Clamp pcie_set_readrq() when using "performance" settings
    PCI: enable MPS "performance" setting to properly handle bridge MPS
    PCI: Workaround for Intel MPS errata
    PCI: Add support for PASID capability
    PCI: Add implementation for PRI capability
    PCI: Export ATS functions to modules
    PCI: Move ATS implementation into own file
    PCI / PM: Remove unnecessary error variable from acpi_dev_run_wake()
    PCI hotplug: acpiphp: Prevent deadlock on PCI-to-PCI bridge remove
    PCI / PM: Extend PME polling to all PCI devices
    PCI quirk: mmc: Always check for lower base frequency quirk for Ricoh 1180:e823
    PCI: Make pci_setup_bridge() non-static for use by arch code
    x86: constify PCI raw ops structures
    PCI: Add quirk for known incorrect MPSS
    PCI: Add Solarflare vendor ID and SFC4000 device IDs

    Linus Torvalds
     

28 Oct, 2011

4 commits

  • Clean-up MPS debug output to make it a single line and aligned, thus
    making it more readable for a large number of buses and devices in a
    single system.

    Suggested by Benjamin Herrenschmidt

    Signed-off-by: Jon Mason
    Signed-off-by: Jesse Barnes

    Jon Mason
     
  • When configuring the PCIe settings for "performance", we allow parents
    to have a larger Max Payload Size than children and rely on children
    Max Read Request Size to not be larger than their own MPS to avoid
    having the host bridge generate responses they can't cope with.

    However, various drivers in Linux call pci_set_readrq() with arbitrary
    values, assuming this to be a simple performance tweak. This breaks
    under our "performance" configuration.

    Fix that by making sure the value programmed by pcie_set_readrq() is
    never larger than the configured MPS for that device.

    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Jon Mason
    Signed-off-by: Jesse Barnes

    Benjamin Herrenschmidt
     
  • Rework the "performance" MPS option to configure the device MPS with the
    smaller of the device MPSS or the bridge MPS (which is assumed to be
    properly configured at this point to the largest allowable MPS based on
    its parent bus).

    Also, rework the MRRS setting to report an inability to set the MRRS to
    a valid setting.

    Signed-off-by: Jon Mason
    Acked-by: Benjamin Herrenschmidt
    Signed-off-by: Jesse Barnes

    Jon Mason
     
  • Intel 5000 and 5100 series memory controllers have a known issue if read
    completion coalescing is enabled and the PCI-E Maximum Payload Size is
    set to 256B. To work around this issue, disable read completion
    coalescing in the memory controller and root complexes. Unfortunately,
    it must always be disabled, even if no 256B MPS devices are present, due
    to the possibility of one being hotplugged.

    Links to erratas:
    http://www.intel.com/content/dam/doc/specification-update/5000-chipset-memory-controller-hub-specification-update.pdf
    http://www.intel.com/content/dam/doc/specification-update/5100-memory-controller-hub-chipset-specification-update.pdf

    Thanks to Jesse Brandeburg and Ben Hutchings for providing insight into
    the problem.

    Tested-and-Reported-by: Avi Kivity
    Signed-off-by: Jon Mason
    Signed-off-by: Jesse Barnes

    Jon Mason