lkml.org 
[lkml]   [2012]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 054/187] iommu/amd: Initialize dma_ops for hotplug and sriov devices
    Date
    From: Greg KH <gregkh@linuxfoundation.org>

    3.4-stable review patch. If anyone has any objections, please let me know.

    ------------------

    From: Joerg Roedel <joerg.roedel@amd.com>

    commit ac1534a55d1e87d59a21c09c570605933b551480 upstream.

    When a device is added to the system at runtime the AMD
    IOMMU driver initializes the necessary data structures to
    handle translation for it. But it forgets to change the
    per-device dma_ops to point to the AMD IOMMU driver. So
    mapping actually never happens and all DMA accesses end in
    an IO_PAGE_FAULT. Fix this.

    Reported-by: Stefan Assmann <sassmann@redhat.com>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/iommu/amd_iommu.c | 9 +++++++++
    1 file changed, 9 insertions(+)

    --- a/drivers/iommu/amd_iommu.c
    +++ b/drivers/iommu/amd_iommu.c
    @@ -83,6 +83,8 @@ static struct iommu_ops amd_iommu_ops;
    static ATOMIC_NOTIFIER_HEAD(ppr_notifier);
    int amd_iommu_max_glx_val = -1;

    +static struct dma_map_ops amd_iommu_dma_ops;
    +
    /*
    * general struct to manage commands send to an IOMMU
    */
    @@ -2267,6 +2269,13 @@ static int device_change_notifier(struct
    list_add_tail(&dma_domain->list, &iommu_pd_list);
    spin_unlock_irqrestore(&iommu_pd_list_lock, flags);

    + dev_data = get_dev_data(dev);
    +
    + if (!dev_data->passthrough)
    + dev->archdata.dma_ops = &amd_iommu_dma_ops;
    + else
    + dev->archdata.dma_ops = &nommu_dma_ops;
    +
    break;
    case BUS_NOTIFY_DEL_DEVICE:




    \
     
     \ /
      Last update: 2012-07-13 02:02    [W:0.031 / U:0.004 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site