• Chris Wright's avatar
    intel-iommu: ignore page table validation in pass through mode · 1672af11
    Chris Wright authored
    We are seeing a bug when booting w/ iommu=pt with current upstream
    (bisect blames 19943b0e "intel-iommu:
    Unify hardware and software passthrough support).
    
    The issue is specific to this loop during identity map initialization
    of each device:
    
    domain_context_mapping_one(si_domain, ..., CONTEXT_TT_PASS_THROUGH)
    ...
    		/* Skip top levels of page tables for
    		* iommu which has less agaw than default.
    		*/
    		for (agaw = domain->agaw; agaw != iommu->agaw; agaw--) {
    			pgd = phys_to_virt(dma_pte_addr(pgd));
    			if (!dma_pte_present(pgd)) {      <------ failing here
    				spin_unlock_irqrestore(&iommu->lock, flags);
    			return -ENOMEM;
    		}
    
    This box has 2 iommu's in it.  The catchall iommu has MGAW == 48, and
    SAGAW == 4.  The other iommu has MGAW == 39, SAGAW == 2.
    
    The device that's failing the above pgd test is the only device connected
    to the non-catchall iommu, which has a smaller address width than the
    domain default.  This test is not necessary since the context is in PT
    mode and the ASR is ignored.
    
    Thanks to Don Dutile for discovering and debugging this one.
    
    Cc: stable@kernel.org
    Signed-off-by: default avatarChris Wright <chrisw@sous-sol.org>
    Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
    1672af11
intel-iommu.c 92.8 KB