|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] x86/mm: subsume set_gpfn_from_mfn() into guest_physmap_add_page()
commit 05fe88fef20bafb2b62190b08f28211a1c4a1b12
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Tue May 14 16:21:33 2019 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Tue May 14 16:21:33 2019 +0200
x86/mm: subsume set_gpfn_from_mfn() into guest_physmap_add_page()
The two callers in common/memory.c currently call set_gpfn_from_mfn()
themselves, so moving the call into guest_physmap_add_page() helps
tidy their code.
The two callers in common/grant_table.c fail to make that call alongside
the one to guest_physmap_add_page(), so will actually get fixed by the
change.
Other (x86) callers are HVM only and are hence unaffected by a change
to the function's !paging_mode_translate() part.
Sadly this isn't enough yet to drop Arm's dummy macro, as there's one
more use in page_alloc.c.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Acked-by: Julien Grall <julien.grall@xxxxxxx>
Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx>
---
xen/arch/x86/mm/p2m.c | 9 +++++----
xen/common/memory.c | 28 +++++++++-------------------
2 files changed, 14 insertions(+), 23 deletions(-)
diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
index 5ae25a9be5..cc6661e4f1 100644
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -869,15 +869,16 @@ guest_physmap_add_page(struct domain *d, gfn_t gfn, mfn_t
mfn,
* any guest-requested type changes succeed and remove the IOMMU
* entry).
*/
- if ( !need_iommu_pt_sync(d) )
- return 0;
-
for ( i = 0; i < (1UL << page_order); ++i, ++page )
{
- if ( get_page_and_type(page, d, PGT_writable_page) )
+ if ( !need_iommu_pt_sync(d) )
+ /* nothing */;
+ else if ( get_page_and_type(page, d, PGT_writable_page) )
put_page_and_type(page);
else
return -EINVAL;
+
+ set_gpfn_from_mfn(mfn_x(mfn) + i, gfn_x(gfn) + i);
}
return 0;
diff --git a/xen/common/memory.c b/xen/common/memory.c
index edf6aaaa13..520d6f4803 100644
--- a/xen/common/memory.c
+++ b/xen/common/memory.c
@@ -268,16 +268,10 @@ static void populate_physmap(struct memop_args *a)
guest_physmap_add_page(d, _gfn(gpfn), mfn, a->extent_order);
- if ( !paging_mode_translate(d) )
- {
- for ( j = 0; j < (1U << a->extent_order); j++ )
- set_gpfn_from_mfn(mfn_x(mfn_add(mfn, j)), gpfn + j);
-
- /* Inform the domain of the new page's machine address. */
- if ( unlikely(__copy_mfn_to_guest_offset(a->extent_list, i,
- mfn)) )
- goto out;
- }
+ if ( !paging_mode_translate(d) &&
+ /* Inform the domain of the new page's machine address. */
+ unlikely(__copy_mfn_to_guest_offset(a->extent_list, i, mfn)) )
+ goto out;
}
}
@@ -753,15 +747,11 @@ static long
memory_exchange(XEN_GUEST_HANDLE_PARAM(xen_memory_exchange_t) arg)
guest_physmap_add_page(d, _gfn(gpfn), mfn,
exch.out.extent_order);
- if ( !paging_mode_translate(d) )
- {
- for ( k = 0; k < (1UL << exch.out.extent_order); k++ )
- set_gpfn_from_mfn(mfn_x(mfn_add(mfn, k)), gpfn + k);
- if ( __copy_mfn_to_guest_offset(exch.out.extent_start,
- (i << out_chunk_order) + j,
- mfn) )
- rc = -EFAULT;
- }
+ if ( !paging_mode_translate(d) &&
+ __copy_mfn_to_guest_offset(exch.out.extent_start,
+ (i << out_chunk_order) + j,
+ mfn) )
+ rc = -EFAULT;
}
BUG_ON( !(d->is_dying) && (j != (1UL << out_chunk_order)) );
--
generated by git-patchbot for /home/xen/git/xen.git#staging
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |