[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v7 5/8] AMD/IOMMU: also insert IVMD ranges into Dom0's page tables
So far only one region would be taken care of, if it can be placed in the exclusion range registers of the IOMMU. Take care of further ranges as well. Seeing that we've been doing fine without this, make both insertion and removal best effort only. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Paul Durrant <paul@xxxxxxx> --- v5: New. --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -522,6 +522,14 @@ static int amd_iommu_add_device(u8 devfn amd_iommu_flush_device(iommu, bdf); } + if ( amd_iommu_reserve_domain_unity_map( + pdev->domain, + ivrs_mappings[ivrs_mappings[bdf].dte_requestor_id].unity_map, + 0) ) + AMD_IOMMU_DEBUG("%pd: unity mapping failed for %04x:%02x:%02x.%u\n", + pdev->domain, pdev->seg, pdev->bus, PCI_SLOT(devfn), + PCI_FUNC(devfn)); + return amd_iommu_setup_domain_device(pdev->domain, iommu, devfn, pdev); } @@ -547,6 +555,14 @@ static int amd_iommu_remove_device(u8 de ivrs_mappings = get_ivrs_mappings(pdev->seg); bdf = PCI_BDF2(pdev->bus, devfn); + + if ( amd_iommu_reserve_domain_unity_unmap( + pdev->domain, + ivrs_mappings[ivrs_mappings[bdf].dte_requestor_id].unity_map) ) + AMD_IOMMU_DEBUG("%pd: unity unmapping failed for %04x:%02x:%02x.%u\n", + pdev->domain, pdev->seg, pdev->bus, PCI_SLOT(devfn), + PCI_FUNC(devfn)); + if ( amd_iommu_perdev_intremap && ivrs_mappings[bdf].dte_requestor_id == bdf && ivrs_mappings[bdf].intremap_table )
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |