lkml.org 
[lkml]   [2011]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[04/89] intel-iommu: Check for identity mapping candidate using
    2.6.39-stable review patch.  If anyone has any objections, please let us know.

    ------------------
    system dma mask

    From: Chris Wright <chrisw@sous-sol.org>

    commit 8fcc5372fbac085199d84a880503ed67aba3fe49 upstream.

    The identity mapping code appears to make the assumption that if the
    devices dma_mask is greater than 32bits the device can use identity
    mapping. But that is not true: take the case where we have a 40bit
    device in a 44bit architecture. The device can potentially receive a
    physical address that it will truncate and cause incorrect addresses
    to be used.

    Instead check to see if the device's dma_mask is large enough
    to address the system's dma_mask.

    Signed-off-by: Mike Travis <travis@sgi.com>
    Reviewed-by: Mike Habeck <habeck@sgi.com>
    Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/pci/intel-iommu.c | 15 +++++++++++++--
    1 file changed, 13 insertions(+), 2 deletions(-)

    --- a/drivers/pci/intel-iommu.c
    +++ b/drivers/pci/intel-iommu.c
    @@ -2190,8 +2190,19 @@ static int iommu_should_identity_map(str
    * Assume that they will -- if they turn out not to be, then we can
    * take them out of the 1:1 domain later.
    */
    - if (!startup)
    - return pdev->dma_mask > DMA_BIT_MASK(32);
    + if (!startup) {
    + /*
    + * If the device's dma_mask is less than the system's memory
    + * size then this is not a candidate for identity mapping.
    + */
    + u64 dma_mask = pdev->dma_mask;
    +
    + if (pdev->dev.coherent_dma_mask &&
    + pdev->dev.coherent_dma_mask < dma_mask)
    + dma_mask = pdev->dev.coherent_dma_mask;
    +
    + return dma_mask >= dma_get_required_mask(&pdev->dev);
    + }

    return 1;
    }



    \
     
     \ /
      Last update: 2011-06-16 09:45    [W:4.075 / U:0.244 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site