intel-iommu: Fix reattaching of devices to identity mapping domain
David Woodhouse [Sat, 4 Jul 2009 09:49:46 +0000 (10:49 +0100)]
When we reattach a device to the si_domain (because it's been removed
from a VM), we weren't calling domain_context_mapping() to actually tell
the hardware about that.

We should really put the call to domain_context_mapping() into
domain_add_dev_info() -- we never call the latter without also doing the
former, and we can keep the error paths simple that way. But that's a
cleanup which can wait for 2.6.32 now.

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>

drivers/pci/intel-iommu.c

index 3e39101..73a5c71 100644 (file)
@@ -2475,6 +2475,9 @@ static int iommu_no_mapping(struct pci_dev *pdev)
                if (pdev->dma_mask > DMA_BIT_MASK(32)) {
                        int ret;
                        ret = domain_add_dev_info(si_domain, pdev);
+                       if (ret)
+                               return 0;
+                       ret = domain_context_mapping(si_domain, pdev, CONTEXT_TT_MULTI_LEVEL);
                        if (!ret) {
                                printk(KERN_INFO "64bit %s uses identity mapping\n",
                                       pci_name(pdev));