x86/hvm: fold opt_hap_{2mb,1gb} into hap_capabilities
authorAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 23 Sep 2015 09:16:51 +0000 (11:16 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 23 Sep 2015 09:16:51 +0000 (11:16 +0200)
This allows all runtime users to simply check hap_has_{2mb,1gb} rather than
having to check opt_hap_{2mb,1gb} as well.

As a result, opt_hap_{2mb,1gb} can move into __initdata.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Acked-by: George Dunlap <george.dunlap@citrix.com>
xen/arch/x86/hvm/hvm.c
xen/arch/x86/mm/p2m.c

index f082b86d2c952f98302a524bd5d0620767967eb5..6afc344ce5623978e36e8f2e0a2a6a4ae21a2b5a 100644 (file)
@@ -158,9 +158,17 @@ static int __init hvm_enable(void)
         printk("HVM: Hardware Assisted Paging (HAP) detected\n");
         printk("HVM: HAP page sizes: 4kB");
         if ( fns->hap_capabilities & HVM_HAP_SUPERPAGE_2MB )
+        {
             printk(", 2MB%s", opt_hap_2mb ? "" : " [disabled]");
+            if ( !opt_hap_2mb )
+                hvm_funcs.hap_capabilities &= ~HVM_HAP_SUPERPAGE_2MB;
+        }
         if ( fns->hap_capabilities & HVM_HAP_SUPERPAGE_1GB )
+        {
             printk(", 1GB%s", opt_hap_1gb ? "" : " [disabled]");
+            if ( !opt_hap_1gb )
+                hvm_funcs.hap_capabilities &= ~HVM_HAP_SUPERPAGE_1GB;
+        }
         printk("\n");
     }
 
index 1eda2c8064d2347db25dde85feba47201fa4080f..cf8485ed44a3b704c566816d21a5d7b1db42fb0b 100644 (file)
 
 #include "mm-locks.h"
 
-/* turn on/off 1GB host page table support for hap, default on */
-bool_t __read_mostly opt_hap_1gb = 1;
+/* Turn on/off host superpage page table support for hap, default on. */
+bool_t __initdata opt_hap_1gb = 1, __initdata opt_hap_2mb = 1;
 boolean_param("hap_1gb", opt_hap_1gb);
-
-bool_t __read_mostly opt_hap_2mb = 1;
 boolean_param("hap_2mb", opt_hap_2mb);
 
-
 /* Override macros from asm/page.h to make them work with mfn_t */
 #undef mfn_to_page
 #define mfn_to_page(_m) __mfn_to_page(mfn_x(_m))
@@ -451,10 +448,12 @@ int p2m_set_entry(struct p2m_domain *p2m, unsigned long gfn, mfn_t mfn,
     while ( todo )
     {
         if ( hap_enabled(d) )
-            order = ( (((gfn | mfn_x(mfn) | todo) & ((1ul << PAGE_ORDER_1G) - 1)) == 0) &&
-                      hap_has_1gb && opt_hap_1gb) ? PAGE_ORDER_1G :
-                      ((((gfn | mfn_x(mfn) | todo) & ((1ul << PAGE_ORDER_2M) - 1)) == 0) &&
-                      hap_has_2mb && opt_hap_2mb) ? PAGE_ORDER_2M : PAGE_ORDER_4K;
+            order = (!((gfn | mfn_x(mfn) | todo) &
+                       ((1ul << PAGE_ORDER_1G) - 1)) &&
+                     hap_has_1gb) ? PAGE_ORDER_1G :
+                    (!((gfn | mfn_x(mfn) | todo) &
+                       ((1ul << PAGE_ORDER_2M) - 1)) &&
+                     hap_has_2mb) ? PAGE_ORDER_2M : PAGE_ORDER_4K;
         else
             order = 0;