lkml.org 
[lkml]   [2012]   [Feb]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 1/3] x86 PCI: Fix identity mapping for sandy bridge
    With SandyBridge, Intel has changed these Socket PCI devices to have a class
    type of "System Peripheral" & "Performance counter", rather than "HostBridge".
    So instead of using a "special" case to detect which devices will not be
    doing DMA, use the fact that a device that is not associated with an IOMMU,
    will not need an identity map.

    Signed-off-by: Mike Travis <travis@sgi.com>
    Signed-off-by: Mike Habeck <habeck@sgi.com>
    ---
    drivers/iommu/intel-iommu.c | 20 +++++++++-----------
    1 file changed, 9 insertions(+), 11 deletions(-)

    --- linux.orig/drivers/iommu/intel-iommu.c
    +++ linux/drivers/iommu/intel-iommu.c
    @@ -48,8 +48,6 @@
    #define ROOT_SIZE VTD_PAGE_SIZE
    #define CONTEXT_SIZE VTD_PAGE_SIZE

    -#define IS_BRIDGE_HOST_DEVICE(pdev) \
    - ((pdev->class >> 8) == PCI_CLASS_BRIDGE_HOST)
    #define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
    #define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
    #define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
    @@ -2369,18 +2367,18 @@ static int __init iommu_prepare_static_i
    return -EFAULT;

    for_each_pci_dev(pdev) {
    - /* Skip Host/PCI Bridge devices */
    - if (IS_BRIDGE_HOST_DEVICE(pdev))
    - continue;
    if (iommu_should_identity_map(pdev, 1)) {
    - printk(KERN_INFO "IOMMU: %s identity mapping for device %s\n",
    - hw ? "hardware" : "software", pci_name(pdev));
    -
    ret = domain_add_dev_info(si_domain, pdev,
    - hw ? CONTEXT_TT_PASS_THROUGH :
    - CONTEXT_TT_MULTI_LEVEL);
    - if (ret)
    + hw ? CONTEXT_TT_PASS_THROUGH :
    + CONTEXT_TT_MULTI_LEVEL);
    + if (ret) {
    + /* device not associated with an iommu */
    + if (ret == -ENODEV)
    + continue;
    return ret;
    + }
    + pr_info("IOMMU: %s identity mapping for device %s\n",
    + hw ? "hardware" : "software", pci_name(pdev));
    }
    }

    --


    \
     
     \ /
      Last update: 2012-02-03 00:59    [W:0.022 / U:1.052 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site