]> xenbits.xensource.com Git - people/aperard/xen-unstable.git/commitdiff
x86/mm: Drop duplicate l1_disallow_mask() calls
authorAndrew Cooper <andrew.cooper3@citrix.com>
Thu, 28 Apr 2022 17:09:39 +0000 (18:09 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 22 Jul 2024 17:18:00 +0000 (18:18 +0100)
Even in release builds where the message is omitted, gdprintk() evalues its
parameters for side effects, and l1_disallow_mask() is full of them.

Calculate the disallow mask once and reuse the variable, resulting in better
code generation:

  add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-207 (-207)
  Function                                     old     new   delta
  mod_l1_entry                                1947    1860     -87
  get_page_from_l1e                           1391    1271    -120

Also, render the bad flags message with a 0x prefix.

No practical change.

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

index 648d6dd475baa00b716ceda569f95e5469c38628..0ecea0f707b2a483180061eb2d77217ac4f6e5ac 100644 (file)
@@ -842,7 +842,7 @@ get_page_from_l1e(
 {
     unsigned long mfn = l1e_get_pfn(l1e);
     struct page_info *page = mfn_to_page(_mfn(mfn));
-    uint32_t l1f = l1e_get_flags(l1e);
+    uint32_t l1f = l1e_get_flags(l1e), disallow;
     struct vcpu *curr = current;
     struct domain *real_pg_owner;
     bool write, valid;
@@ -853,10 +853,10 @@ get_page_from_l1e(
         return 0;
     }
 
-    if ( unlikely(l1f & l1_disallow_mask(l1e_owner)) )
+    disallow = l1_disallow_mask(l1e_owner);
+    if ( unlikely(l1f & disallow) )
     {
-        gdprintk(XENLOG_WARNING, "Bad L1 flags %x\n",
-                 l1f & l1_disallow_mask(l1e_owner));
+        gdprintk(XENLOG_WARNING, "Bad L1 flags %#x\n", l1f & disallow);
         return -EINVAL;
     }
 
@@ -2155,11 +2155,12 @@ static int mod_l1_entry(l1_pgentry_t *pl1e, l1_pgentry_t nl1e,
     if ( l1e_get_flags(nl1e) & _PAGE_PRESENT )
     {
         struct page_info *page = NULL;
+        uint32_t disallow = l1_disallow_mask(pt_dom);
 
-        if ( unlikely(l1e_get_flags(nl1e) & l1_disallow_mask(pt_dom)) )
+        if ( unlikely(l1e_get_flags(nl1e) & disallow) )
         {
-            gdprintk(XENLOG_WARNING, "Bad L1 flags %x\n",
-                    l1e_get_flags(nl1e) & l1_disallow_mask(pt_dom));
+            gdprintk(XENLOG_WARNING, "Bad L1 flags %#x\n",
+                     l1e_get_flags(nl1e) & disallow);
             return -EINVAL;
         }