File xsa299-5.patch of Package xen.25143
From 13660d718ec3a119ff0ab1f1197d0796ca79c668 Mon Sep 17 00:00:00 2001
From: George Dunlap <george.dunlap@citrix.com>
Date: Thu, 10 Oct 2019 17:57:49 +0100
Subject: [PATCH 05/12] x86/mm: Use flags for _put_page_type rather than a
boolean
This is in mainly in preparation for _put_page_type taking the
partial_flags value in the future. It also makes it easier to read in
the caller (since you see a flag name rather than `true` or `false`).
No functional change intended.
This is part of XSA-299.
Reported-by: George Dunlap <george.dunlap@citrix.com>
Signed-off-by: George Dunlap <george.dunlap@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---
xen/arch/x86/mm.c | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -1391,7 +1391,7 @@ get_page_from_l4e(
l3e_remove_flags((pl3e), _PAGE_USER|_PAGE_RW|_PAGE_ACCESSED); \
} while ( 0 )
-static int _put_page_type(struct page_info *page, bool_t preemptible,
+static int _put_page_type(struct page_info *page, unsigned int flags,
struct page_info *ptpg);
void put_page_from_l1e(l1_pgentry_t l1e, struct domain *l1e_owner)
@@ -1474,7 +1474,7 @@ static int put_page_from_l2e(l2_pgentry_
PTF_partial_set )
{
ASSERT(!(flags & PTF_defer));
- rc = _put_page_type(pg, 1, ptpg);
+ rc = _put_page_type(pg, PTF_preemptible, ptpg);
}
else if ( flags & PTF_defer )
{
@@ -1483,7 +1483,7 @@ static int put_page_from_l2e(l2_pgentry_
}
else
{
- rc = _put_page_type(pg, 1, ptpg);
+ rc = _put_page_type(pg, PTF_preemptible, ptpg);
if ( likely(!rc) )
put_page(pg);
}
@@ -1520,7 +1520,7 @@ static int put_page_from_l3e(l3_pgentry_
PTF_partial_set )
{
ASSERT(!(flags & PTF_defer));
- return _put_page_type(pg, 1, mfn_to_page(pfn));
+ return _put_page_type(pg, PTF_preemptible, mfn_to_page(pfn));
}
if ( flags & PTF_defer )
@@ -1530,7 +1530,7 @@ static int put_page_from_l3e(l3_pgentry_
return 0;
}
- rc = _put_page_type(pg, 1, mfn_to_page(pfn));
+ rc = _put_page_type(pg, PTF_preemptible, mfn_to_page(pfn));
if ( likely(!rc) )
put_page(pg);
@@ -1551,7 +1551,7 @@ static int put_page_from_l4e(l4_pgentry_
PTF_partial_set )
{
ASSERT(!(flags & PTF_defer));
- return _put_page_type(pg, 1, mfn_to_page(pfn));
+ return _put_page_type(pg, PTF_preemptible, mfn_to_page(pfn));
}
if ( flags & PTF_defer )
@@ -1561,7 +1561,7 @@ static int put_page_from_l4e(l4_pgentry_
return 0;
}
- rc = _put_page_type(pg, 1, mfn_to_page(pfn));
+ rc = _put_page_type(pg, PTF_preemptible, mfn_to_page(pfn));
if ( likely(!rc) )
put_page(pg);
}
@@ -2826,11 +2826,12 @@ static int _put_final_page_type(struct p
}
-static int _put_page_type(struct page_info *page, bool_t preemptible,
+static int _put_page_type(struct page_info *page, unsigned int flags,
struct page_info *ptpg)
{
unsigned long nx, x, y = page->u.inuse.type_info;
int rc = 0;
+ bool_t preemptible = !!(flags & PTF_preemptible);
for ( ; ; )
{
@@ -3060,7 +3061,7 @@ int get_page_type(struct page_info *page
int put_page_type_preemptible(struct page_info *page)
{
- return _put_page_type(page, 1, NULL);
+ return _put_page_type(page, PTF_preemptible, NULL);
}
int get_page_type_preemptible(struct page_info *page, unsigned long type)
@@ -3266,7 +3267,7 @@ int put_old_guest_table(struct vcpu *v)
if ( !v->arch.old_guest_table )
return 0;
- switch ( rc = _put_page_type(v->arch.old_guest_table, 1,
+ switch ( rc = _put_page_type(v->arch.old_guest_table, PTF_preemptible,
v->arch.old_guest_ptpg) )
{
case -EINTR: