Re: IO_PAGE_FAULTs on unity mapped regions during amd_iommu_init() in Linux 3.4

Shuah Khan
2013-02-07T02:40:56Z

On Wed, 2013-02-06 at 13:12 +0100, Joerg Roedel wrote:
> On Tue, Feb 05, 2013 at 06:57:21AM -0700, Shuah Khan wrote:
> > Thanks much. I will hang on to this test system for testing your fix.
>
> Okay, here is the simple fix for v3.8-rc6. I guess it is not
> straighforward to port it to v3.4, but it should be doable.
>
> From 2ecf57c85e67e0243b36b787d0490c0b47202ba8 Mon Sep 17 00:00:00 2001
> From: Joerg Roedel <joro@8bytes.org>
> Date: Wed, 6 Feb 2013 12:55:23 +0100
> Subject: [PATCH] iommu/amd: Initialize device table after dma_ops
>
> When dma_ops are initialized the unity mappings are
> created. The init_device_table_dma() function makes sure DMA
> from all devices is blocked by default. This opens a short
> window in time where DMA to unity mapped regions is blocked
> by the IOMMU. Make sure this does not happen by initializing
> the device table after dma_ops.
>
> Signed-off-by: Joerg Roedel <joro@8bytes.org>

Joerg,

I tested your patch on 3.8. I was able to reproduce the problem and then
apply your patch to verify that the problem is fixed. This patch applies
cleanly to 3.7.6, however I could not reproduce the problem on 3.7.6
without the patch. But the window exists on 3.7 as well. Your patch can
be applied to 3.7.6 as is.

I back-ported the patch to 3.4 and 3.0 and tested. I am sending those
patches after this email.

On 3.4.29 and 3.0.62 I was able to reproduce the problem and then
applied the back-ported patch to verify that the problem is fixed.

Thanks again for the fix.

-- Shuah