Messages in this thread | | | Date | Wed, 28 Oct 2009 14:21:19 +0100 | From | Joerg Roedel <> | Subject | Re: [PATCH 0/10] x86: handle HW IOMMU initialization failure gracely |
| |
On Wed, Oct 28, 2009 at 03:47:34PM +0900, FUJITA Tomonori wrote: > If HW IOMMU initialization fails (Intel VT-d often does typically due > to BIOS bugs), we fall back to nommu. It doesn't work for the majority > since nowadays we have more than 4GB memory so we must use swiotlb > instead of nommu. > > The problem is that it's too late to initialize swiotlb when HW IOMMU > initialization fails. We need to allocate swiotlb memory earlier from > bootmem allocator. Chris explained the issue in detail: > > http://marc.info/?l=linux-kernel&m=125657444317079&w=2 > > > The current x86 IOMMU initialization sequence is too complicated and > handling the above issue makes it more hacky. > > This series changes x86 IOMMU initialization sequence to handle the > above issue cleanly. > > The new x86 IOMMU initialization sequence are: > > 1. initializing swiotlb (and setting swiotlb to 1) in the case of > (max_pfn > MAX_DMA32_PFN && !no_iommu). dma_ops is set to > swiotlb_dma_ops or nommu_dma_ops. > > 2. calling the detection functions of all the IOMMUs > > 3. the detection function sets x86_init.iommu.iommu_init to the IOMMU > initialization function (so we can avoid calling the initialization > functions of all the IOMMUs needlessly). > > 4. if the IOMMU initialization function doesn't need to swiotlb then > sets swiotlb to zero (e.g. the initialization is sucessful). > > 5. if we find that swiotlb is set to zero, we free swiotlb resource.
I started to test this patchset. It breaks the iommu=soft selection to force using swiotlb usage. On my machine always the AMD IOMMU driver gots selected and initialized.
Joerg
| |