|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 07/12] xen/arm: mm: Rework xen_pt_update_entry to avoid use xenmap_operation
With the newly introduced flags, it is now possible to know how the page
will be updated through the flags.
All the use of xenmap_operation are not replaced with the flags. At the
same time, validity check are now removed as they are gathered in
xen_pt_check_entry().
Signed-off-by: Julien Grall <julien.grall@xxxxxxx>
---
xen/arch/arm/mm.c | 47 +++++++++++++++++++++++------------------------
1 file changed, 23 insertions(+), 24 deletions(-)
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index 5eb6f47d74..611ea53992 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -1062,34 +1062,33 @@ static int xen_pt_update_entry(enum xenmap_operation
op, unsigned long addr,
if ( !xen_pt_check_entry(*entry, mfn, flags) )
return -EINVAL;
- switch ( op ) {
- case INSERT:
- case RESERVE:
- if ( op == RESERVE )
- break;
+ /* If we are only populating page-table, then we are done. */
+ if ( flags & _PAGE_POPULATE )
+ return 0;
+
+ /* We are removing the page */
+ if ( !(flags & _PAGE_PRESENT) )
+ memset(&pte, 0x00, sizeof(pte));
+ else
+ {
+ /* We are inserting a mapping => Create new pte. */
+ if ( !mfn_eq(mfn, INVALID_MFN) )
+ {
pte = mfn_to_xen_entry(mfn, PAGE_AI_MASK(flags));
- pte.pt.ro = PAGE_RO_MASK(flags);
- pte.pt.xn = PAGE_XN_MASK(flags);
- BUG_ON(!pte.pt.ro && !pte.pt.xn);
+
+ /* Third level entries set pte.pt.table = 1 */
pte.pt.table = 1;
- write_pte(entry, pte);
- break;
- case MODIFY:
- case REMOVE:
- if ( op == REMOVE )
- pte.bits = 0;
- else
- {
- pte = *entry;
- pte.pt.ro = PAGE_RO_MASK(flags);
- pte.pt.xn = PAGE_XN_MASK(flags);
- }
- write_pte(entry, pte);
- break;
- default:
- BUG();
+ }
+ else /* We are updating the permission => Copy the current pte. */
+ pte = *entry;
+
+ /* Set permission */
+ pte.pt.ro = PAGE_RO_MASK(flags);
+ pte.pt.xn = PAGE_XN_MASK(flags);
}
+ write_pte(entry, pte);
+
return 0;
}
--
2.11.0
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |