26 Jun, 2013

1 commit


23 Jun, 2013

1 commit

  • If we use a large mapping, the expectation is that only unmaps from
    the first pte in the superpage are supported. Unmaps from offsets
    into the superpage should fail (ie. return zero sized unmap). In the
    current code, unmapping from an offset clears the size of the full
    mapping starting from an offset. For instance, if we map a 16k
    physically contiguous range at IOVA 0x0 with a large page, then
    attempt to unmap 4k at offset 12k, 4 ptes are cleared (12k - 28k) and
    the unmap returns 16k unmapped. This potentially incorrectly clears
    valid mappings and confuses drivers like VFIO that use the unmap size
    to release pinned pages.

    Fix by refusing to unmap from offsets into the page.

    Signed-off-by: Alex Williamson
    Cc: stable@vger.kernel.org
    Signed-off-by: Joerg Roedel

    Alex Williamson
     

21 Jun, 2013

1 commit


20 Jun, 2013

1 commit

  • If a device is multifunction and does not have ACS enabled then we
    assume that the entire package lacks ACS and use function 0 as the
    base of the group. The PCIe spec however states that components are
    permitted to implement ACS on some, none, or all of their applicable
    functions. It's therefore conceivable that function 0 may be fully
    independent and support ACS while other functions do not. Instead
    use the lowest function of the slot that does not have ACS enabled
    as the base of the group. This may be the current device, which is
    intentional. So long as we use a consistent algorithm, all the
    non-ACS functions will be grouped together and ACS functions will
    get separate groups.

    Signed-off-by: Alex Williamson
    Signed-off-by: Joerg Roedel

    Alex Williamson
     

07 May, 2013

1 commit

  • Pull IOMMU updates from Joerg Roedel:
    "The updates are mostly about the x86 IOMMUs this time.

    Exceptions are the groundwork for the PAMU IOMMU from Freescale (for a
    PPC platform) and an extension to the IOMMU group interface.

    On the x86 side this includes a workaround for VT-d to disable
    interrupt remapping on broken chipsets. On the AMD-Vi side the most
    important new feature is a kernel command-line interface to override
    broken information in IVRS ACPI tables and get interrupt remapping
    working this way.

    Besides that there are small fixes all over the place."

    * tag 'iommu-updates-v3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu: (24 commits)
    iommu/tegra: Fix printk formats for dma_addr_t
    iommu: Add a function to find an iommu group by id
    iommu/vt-d: Remove warning for HPET scope type
    iommu: Move swap_pci_ref function to drivers/iommu/pci.h.
    iommu/vt-d: Disable translation if already enabled
    iommu/amd: fix error return code in early_amd_iommu_init()
    iommu/AMD: Per-thread IOMMU Interrupt Handling
    iommu: Include linux/err.h
    iommu/amd: Workaround for ERBT1312
    iommu/amd: Document ivrs_ioapic and ivrs_hpet parameters
    iommu/amd: Don't report firmware bugs with cmd-line ivrs overrides
    iommu/amd: Add ioapic and hpet ivrs override
    iommu/amd: Add early maps for ioapic and hpet
    iommu/amd: Extend IVRS special device data structure
    iommu/amd: Move add_special_device() to __init
    iommu: Fix compile warnings with forward declarations
    iommu/amd: Properly initialize irq-table lock
    iommu/amd: Use AMD specific data structure for irq remapping
    iommu/amd: Remove map_sg_no_iommu()
    iommu/vt-d: add quirk for broken interrupt remapping on 55XX chipsets
    ...

    Linus Torvalds
     

02 May, 2013

1 commit


30 Apr, 2013

1 commit

  • Pull PCI updates from Bjorn Helgaas:
    "PCI changes for the v3.10 merge window:

    PCI device hotplug
    - Remove ACPI PCI subdrivers (Jiang Liu, Myron Stowe)
    - Make acpiphp builtin only, not modular (Jiang Liu)
    - Add acpiphp mutual exclusion (Jiang Liu)

    Power management
    - Skip "PME enabled/disabled" messages when not supported (Rafael
    Wysocki)
    - Fix fallback to PCI_D0 (Rafael Wysocki)

    Miscellaneous
    - Factor quirk_io_region (Yinghai Lu)
    - Cache MSI capability offsets & cleanup (Gavin Shan, Bjorn Helgaas)
    - Clean up EISA resource initialization and logging (Bjorn Helgaas)
    - Fix prototype warnings (Andy Shevchenko, Bjorn Helgaas)
    - MIPS: Initialize of_node before scanning bus (Gabor Juhos)
    - Fix pcibios_get_phb_of_node() declaration "weak" annotation (Gabor
    Juhos)
    - Add MSI INTX_DISABLE quirks for AR8161/AR8162/etc (Xiong Huang)
    - Fix aer_inject return values (Prarit Bhargava)
    - Remove PME/ACPI dependency (Andrew Murray)
    - Use shared PCI_BUS_NUM() and PCI_DEVID() (Shuah Khan)"

    * tag 'pci-v3.10-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (63 commits)
    vfio-pci: Use cached MSI/MSI-X capabilities
    vfio-pci: Use PCI_MSIX_TABLE_BIR, not PCI_MSIX_FLAGS_BIRMASK
    PCI: Remove "extern" from function declarations
    PCI: Use PCI_MSIX_TABLE_BIR, not PCI_MSIX_FLAGS_BIRMASK
    PCI: Drop msi_mask_reg() and remove drivers/pci/msi.h
    PCI: Use msix_table_size() directly, drop multi_msix_capable()
    PCI: Drop msix_table_offset_reg() and msix_pba_offset_reg() macros
    PCI: Drop is_64bit_address() and is_mask_bit_support() macros
    PCI: Drop msi_data_reg() macro
    PCI: Drop msi_lower_address_reg() and msi_upper_address_reg() macros
    PCI: Drop msi_control_reg() macro and use PCI_MSI_FLAGS directly
    PCI: Use cached MSI/MSI-X offsets from dev, not from msi_desc
    PCI: Clean up MSI/MSI-X capability #defines
    PCI: Use cached MSI-X cap while enabling MSI-X
    PCI: Use cached MSI cap while enabling MSI interrupts
    PCI: Remove MSI/MSI-X cap check in pci_msi_check_device()
    PCI: Cache MSI/MSI-X capability offsets in struct pci_dev
    PCI: Use u8, not int, for PM capability offset
    [SCSI] megaraid_sas: Use correct #define for MSI-X capability
    PCI: Remove "extern" from function declarations
    ...

    Linus Torvalds
     

23 Apr, 2013

2 commits

  • The swap_pci_ref function is used by the IOMMU API code for
    swapping pci device pointers, while determining the iommu
    group for the device.
    Currently this function was being implemented for different
    IOMMU drivers. This patch moves the function to a new file,
    drivers/iommu/pci.h so that the implementation can be
    shared across various IOMMU drivers.

    Signed-off-by: Varun Sethi
    Signed-off-by: Joerg Roedel

    Varun Sethi
     
  • In the current interrupt handling scheme, there are as many threads as
    the number of IOMMUs. Each thread is created and assigned to an IOMMU at
    the time of registering interrupt handlers (request_threaded_irq).
    When an IOMMU HW generates an interrupt, the irq handler (top half) wakes up
    the corresponding thread to process event and PPR logs of all IOMMUs
    starting from the 1st IOMMU.

    In the system with multiple IOMMU,this handling scheme complicates the
    synchronization of the IOMMU data structures and status registers as
    there could be multiple threads competing for the same IOMMU while
    the other IOMMU could be left unhandled.

    To simplify, this patch is proposing a different interrupt handling scheme
    by having each thread only managing interrupts of the corresponding IOMMU.
    This can be achieved by passing the struct amd_iommu when registering the
    interrupt handlers. This structure is unique for each IOMMU and can be used
    by the bottom half thread to identify the IOMMU to be handled instead
    of calling for_each_iommu. Besides this also eliminate the needs to lock
    the IOMMU for processing event and PPR logs.

    Signed-off-by: Suravee Suthikulpanit
    Signed-off-by: Joerg Roedel

    Suravee Suthikulpanit
     

20 Apr, 2013

1 commit

  • Work around an IOMMU hardware bug where clearing the
    EVT_INT or PPR_INT bit in the status register may race with
    the hardware trying to set it again. When not handled the
    bit might not be cleared and we lose all future event or ppr
    interrupts.

    Reported-by: Suravee Suthikulpanit
    Cc: stable@vger.kernel.org
    Signed-off-by: Joerg Roedel

    Joerg Roedel
     

18 Apr, 2013

3 commits


03 Apr, 2013

1 commit


02 Apr, 2013

1 commit

  • Current driver does not clear the IOMMU event log interrupt bit
    in the IOMMU status register after processing an interrupt.
    This causes the IOMMU hardware to generate event log interrupt only once.
    This has been observed in both IOMMU v1 and V2 hardware.
    This patch clears the bit by writing 1 to bit 1 of the IOMMU
    status register (MMIO Offset 2020h)

    Signed-off-by: Suravee Suthikulpanit
    Signed-off-by: Joerg Roedel

    Suravee Suthikulpanit
     

27 Mar, 2013

3 commits


27 Feb, 2013

1 commit

  • Pull IOMMU Updates from Joerg Roedel:
    "Besides some fixes and cleanups in the code there are three more
    important changes to point out this time:

    * New IOMMU driver for the ARM SHMOBILE platform
    * An IOMMU-API extension for non-paging IOMMUs (required for
    upcoming PAMU driver)
    * Rework of the way the Tegra IOMMU driver accesses its
    registetrs - register windows are easier to extend now.

    There are also a few changes to non-iommu code, but that is acked by
    the respective maintainers."

    * tag 'iommu-updates-v3.9' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu: (23 commits)
    iommu/tegra: assume CONFIG_OF in SMMU driver
    iommu/tegra: assume CONFIG_OF in gart driver
    iommu/amd: Remove redundant NULL check before dma_ops_domain_free().
    iommu/amd: Initialize device table after dma_ops
    iommu/vt-d: Zero out allocated memory in dmar_enable_qi
    iommu/tegra: smmu: Fix incorrect mask for regbase
    iommu/exynos: Make exynos_sysmmu_disable static
    ARM: mach-shmobile: r8a7740: Add IPMMU device
    ARM: mach-shmobile: sh73a0: Add IPMMU device
    ARM: mach-shmobile: sh7372: Add IPMMU device
    iommu/shmobile: Add iommu driver for Renesas IPMMU modules
    iommu: Add DOMAIN_ATTR_WINDOWS domain attribute
    iommu: Add domain window handling functions
    iommu: Implement DOMAIN_ATTR_PAGING attribute
    iommu: Check for valid pgsize_bitmap in iommu_map/unmap
    iommu: Make sure DOMAIN_ATTR_MAX is really the maximum
    iommu/tegra: smmu: Change SMMU's dependency on ARCH_TEGRA
    iommu/tegra: smmu: Use helper function to check for valid register offset
    iommu/tegra: smmu: Support variable MMIO ranges/blocks
    iommu/tegra: Add missing spinlock initialization
    ...

    Linus Torvalds
     

13 Feb, 2013

1 commit


28 Jan, 2013

1 commit


02 Dec, 2012

2 commits


24 Oct, 2012

5 commits


02 Oct, 2012

3 commits


28 Sep, 2012

9 commits