[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 5/7] x86/iommu: remove regions not to be mapped
On 15.12.2023 15:18, Roger Pau Monne wrote: > Introduce the code to remove regions not to be mapped from the rangeset > that will be used to setup the IOMMU page tables for the hardware domain. > > This change also introduces two new functions: remove_xen_ranges() and > vpci_subtract_mmcfg() that copy the logic in xen_in_range() and > vpci_is_mmcfg_address() respectively and remove the ranges that would > otherwise > be intercepted by the original functions. > > Note that the rangeset is still not populated. > > Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> > @@ -533,6 +541,62 @@ void __hwdom_init arch_iommu_hwdom_init(struct domain *d) > goto commit; > } > > + /* Remove any areas in-use by Xen. */ > + rc = remove_xen_ranges(map); > + if ( rc ) > + panic("IOMMU failed to remove Xen ranges: %d\n", rc); > + > + /* Remove any overlap with the Interrupt Address Range. */ > + rc = rangeset_remove_range(map, 0xfee00, 0xfeeff); > + if ( rc ) > + panic("IOMMU failed to remove Interrupt Address Range: %d\n", > + rc); > + > + /* If emulating IO-APIC(s) make sure the base address is unmapped. */ > + if ( has_vioapic(d) ) > + { > + for ( i = 0; i < d->arch.hvm.nr_vioapics; i++ ) > + { > + rc = rangeset_remove_singleton(map, > + PFN_DOWN(domain_vioapic(d, i)->base_address)); > + if ( rc ) > + panic("IOMMU failed to remove IO-APIC: %d\n", > + rc); > + } > + } > + > + if ( is_pv_domain(d) ) > + { > + /* > + * Be consistent with CPU mappings: Dom0 is permitted to establish > r/o > + * ones there (also for e.g. HPET in certain cases), so it should > also > + * have such established for IOMMUs. Remove any read-only ranges > here, > + * since ranges in mmio_ro_ranges are already explicitly mapped below > + * in read-only mode. > + */ > + rc = rangeset_report_ranges(mmio_ro_ranges, 0, ~0UL, map_subtract, > map); I find it a little odd that you iterate over mmio_ro_ranges twice (once here, once in what the earlier patch added), but I guess overall it's easier this way. Also, nit: Either this line is too long, or ... > + if ( rc ) > + panic("IOMMU failed to remove read-only regions: %d\n", > + rc); ... there's no need to wrap lines here. Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |