[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen stable-4.14] x86/p2m-pt: fix p2m_flags_to_access()
commit 4ff1d3b86fe901ac558310f41ab0331ed4a249ea Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Wed Sep 8 14:52:13 2021 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Wed Sep 8 14:52:13 2021 +0200 x86/p2m-pt: fix p2m_flags_to_access() The initial if() was inverted, invalidating all output from this function. Which in turn means the mirroring of P2M mappings into the IOMMU didn't always work as intended: Mappings may have got updated when there was no need to. There would not have been too few (un)mappings; what saves us is that alongside the flags comparison MFNs also get compared, with non-present entries always having an MFN of 0 or INVALID_MFN while present entries always have MFNs different from these two (0 in the table also meant to cover INVALID_MFN): OLD NEW P W access MFN P W access MFN 0 0 r 0 0 0 n 0 0 1 rw 0 0 1 n 0 1 0 n non-0 1 0 r non-0 1 1 n non-0 1 1 rw non-0 present <-> non-present transitions are fine because the MFNs differ. present -> present transitions as well as non-present -> non-present ones are potentially causing too many map/unmap operations, but never too few, because in that case old (bogus) and new access differ. Fixes: d1bb6c97c31e ("IOMMU: also pass p2m_access_t to p2m_get_iommu_flags()) Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> master commit: e70a9a043a5ce6d4025420f729bc473f711bf5d1 master date: 2021-09-07 14:24:49 +0200 --- xen/arch/x86/mm/p2m-pt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/arch/x86/mm/p2m-pt.c b/xen/arch/x86/mm/p2m-pt.c index 68744b74a4..28d1875820 100644 --- a/xen/arch/x86/mm/p2m-pt.c +++ b/xen/arch/x86/mm/p2m-pt.c @@ -483,7 +483,7 @@ int p2m_pt_handle_deferred_changes(uint64_t gpa) /* Reconstruct a fake p2m_access_t from stored PTE flags. */ static p2m_access_t p2m_flags_to_access(unsigned int flags) { - if ( flags & _PAGE_PRESENT ) + if ( !(flags & _PAGE_PRESENT) ) return p2m_access_n; /* No need to look at _PAGE_NX for now. */ -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.14
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |