]> xenbits.xensource.com Git - xen.git/commitdiff
x86/shadow: drop shadow_prepare_page_type_change()'s 3rd parameter
authorJan Beulich <jbeulich@suse.com>
Wed, 27 Jul 2022 10:58:16 +0000 (12:58 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 27 Jul 2022 10:58:16 +0000 (12:58 +0200)
As of 8cc5036bc385 ("x86/pv: Fix ABAC cmpxchg() race in
_get_page_type()") this no longer needs passing separately - the type
can now be read from struct page_info, as the call now happens after its
writing.

While there also constify the 2nd parameter.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/arch/x86/include/asm/shadow.h
xen/arch/x86/mm.c
xen/arch/x86/mm/shadow/common.c

index 7ef76cc0635b84caf63857766de5816ac875658a..1365fe48051827acc3cac2a9640d4e1b560c5309 100644 (file)
@@ -84,8 +84,8 @@ void shadow_final_teardown(struct domain *d);
 void sh_remove_shadows(struct domain *d, mfn_t gmfn, int fast, int all);
 
 /* Adjust shadows ready for a guest page to change its type. */
-void shadow_prepare_page_type_change(struct domain *d, struct page_info *page,
-                                     unsigned long new_type);
+void shadow_prepare_page_type_change(struct domain *d,
+                                     const struct page_info *page);
 
 /* Discard _all_ mappings from the domain's shadows. */
 void shadow_blow_tables_per_domain(struct domain *d);
@@ -113,8 +113,7 @@ static inline void sh_remove_shadows(struct domain *d, mfn_t gmfn,
                                      int fast, int all) {}
 
 static inline void shadow_prepare_page_type_change(struct domain *d,
-                                                   struct page_info *page,
-                                                   unsigned long new_type) {}
+                                                   const struct page_info *page) {}
 
 static inline void shadow_blow_tables_per_domain(struct domain *d) {}
 
index 22a4dfa83806d38f43e52cbd85424e4e9e4a7a89..40e132b9ba4468dcabc2317664c8f64307e7209c 100644 (file)
@@ -3018,7 +3018,7 @@ static int _get_page_type(struct page_info *page, unsigned long type,
         struct domain *d = page_get_owner(page);
 
         if ( d && shadow_mode_enabled(d) )
-            shadow_prepare_page_type_change(d, page, type);
+            shadow_prepare_page_type_change(d, page);
 
         if ( (x & PGT_type_mask) != type )
         {
index 06a0f22906069357d7176118e86e9fe9688e5b9c..c37c3bb077c305a31087c3c25a27f5476738b123 100644 (file)
@@ -2265,8 +2265,8 @@ void sh_remove_shadows(struct domain *d, mfn_t gmfn, int fast, int all)
     paging_unlock(d);
 }
 
-void shadow_prepare_page_type_change(struct domain *d, struct page_info *page,
-                                     unsigned long new_type)
+void shadow_prepare_page_type_change(struct domain *d,
+                                     const struct page_info *page)
 {
     if ( !(page->count_info & PGC_page_table) )
         return;
@@ -2278,7 +2278,7 @@ void shadow_prepare_page_type_change(struct domain *d, struct page_info *page,
      * pages are allowed to become writeable.
      */
     if ( (page->shadow_flags & SHF_oos_may_write) &&
-         new_type == PGT_writable_page )
+         (page->u.inuse.type_info & PGT_type_mask) == PGT_writable_page )
         return;
 #endif