|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 8/8] x86/iommu: add map-reserved dom0-iommu option to map reserved memory ranges
>>> On 14.08.18 at 15:43, <roger.pau@xxxxxxxxxx> wrote:
> @@ -138,13 +139,20 @@ static bool __hwdom_init hwdom_iommu_map(const struct
> domain *d,
> unsigned long pfn,
> unsigned long max_pfn)
> {
> + unsigned int i;
> +
> /*
> * Set up 1:1 mapping for dom0. Default to include only conventional RAM
> * areas and let RMRRs include needed reserved regions. When set, the
> * inclusive mapping additionally maps in every pfn up to 4GB except
> those
> - * that fall in unusable ranges.
> + * that fall in unusable ranges for PV Dom0.
> */
> - if ( (pfn > max_pfn && !mfn_valid(_mfn(pfn))) || xen_in_range(pfn) )
> + if ( (pfn > max_pfn && !mfn_valid(_mfn(pfn))) || xen_in_range(pfn) ||
> + /*
> + * Ignore any address below 1MB, that's already identity mapped by
> the
> + * domain builder for HVM.
> + */
> + (!d->domain_id && is_hvm_domain(d) && pfn < PFN_DOWN(MB(1))) )
Would you mind clarifying the comment by saying "Dom0 builder"?
The respective source files have been renamed to dom0_build.c
for the same reason, quite some time ago.
> + /* Check that it doesn't overlap with the LAPIC */
> + if ( has_vlapic(d) )
> + {
> + const struct vcpu *v;
> +
> + for_each_vcpu(d, v)
> + if ( pfn == PFN_DOWN(vlapic_base_address(vcpu_vlapic(v))) )
> + return false;
> + }
> + /* ... or the IO-APIC */
> + for ( i = 0; has_vioapic(d) && i < d->arch.hvm_domain.nr_vioapics; i++ )
> + if ( pfn == PFN_DOWN(domain_vioapic(d, i)->base_address) )
> + return false;
> + /*
> + * ... or the PCIe MCFG regions.
> + * TODO: runtime added MMCFG regions are not checked to make sure they
> + * don't overlap with already mapped regions, thus preventing trapping.
> + */
> + if ( has_vpci(d) && vpci_is_mmcfg_address(d, pfn_to_paddr(pfn)) )
> + return false;
Didn't we agree to have such a TODO also in the LAPIC loop?
> @@ -185,7 +219,13 @@ void __hwdom_init arch_iommu_hwdom_init(struct domain *d)
> if ( !hwdom_iommu_map(d, pfn, max_pfn) )
> continue;
>
> - rc = iommu_map_page(d, pfn, pfn, IOMMUF_readable|IOMMUF_writable);
> + if ( iommu_use_hap_pt(d) )
> + {
> + ASSERT(is_hvm_domain(d));
> + rc = set_identity_p2m_entry(d, pfn, p2m_access_rw, 0);
> + }
> + else
> + rc = iommu_map_page(d, pfn, pfn,
> IOMMUF_readable|IOMMUF_writable);
Why iommu_use_hap_pt()? Shouldn't HAP with or without shared
page tables as well as shadow all get the same in-sync p2m and
IOMMU mappings?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |