[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [linux-2.6.18-xen] xen: add privileged (dom0) kernel feature indication



# HG changeset patch
# User Jan Beulich <jbeulich@xxxxxxxxxx>
# Date 1311407491 -3600
# Node ID 678eefedc07b94b15774d05b7239201d7038a298
# Parent  ada524c58c95a348e77c3c0aa11bcfcb5c578f70
xen: add privileged (dom0) kernel feature indication

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---


diff -r ada524c58c95 -r 678eefedc07b arch/i386/kernel/head-xen.S
--- a/arch/i386/kernel/head-xen.S       Sat Jul 23 08:51:07 2011 +0100
+++ b/arch/i386/kernel/head-xen.S       Sat Jul 23 08:51:31 2011 +0100
@@ -12,6 +12,7 @@
 #include <asm/dwarf2.h>
 #include <xen/interface/xen.h>
 #include <xen/interface/elfnote.h>
+#include <xen/interface/features.h>
 
 /*
  * References to members of the new_cpu_data structure.
@@ -142,6 +143,18 @@
        .quad 0x0000000000000000        /* 0xf0 - unused */
        .quad 0x0000000000000000        /* 0xf8 - GDT entry 31: double-fault 
TSS */
 
+#ifdef CONFIG_XEN_UNPRIVILEGED_GUEST
+# define XEN_DOM0_CAP          0
+# define XEN_DOM0_CAP_STR      ""
+#else
+# define XEN_DOM0_CAP          (1 << XENFEAT_dom0)
+# if CONFIG_XEN_COMPAT < 0x040200
+#  define XEN_DOM0_CAP_STR     ""
+# else
+#  define XEN_DOM0_CAP_STR     "|dom0"
+# endif
+#endif
+
 #if CONFIG_XEN_COMPAT <= 0x030002
 /*
  * __xen_guest information
@@ -195,7 +208,18 @@
        ELFNOTE(Xen, XEN_ELFNOTE_ENTRY,          .long,  startup_32)
        ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, .long,  hypercall_page)
        ELFNOTE(Xen, XEN_ELFNOTE_HV_START_LOW,   .long,  HYPERVISOR_VIRT_START)
-       ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,       .asciz, 
"writable_page_tables|writable_descriptor_tables|auto_translated_physmap|pae_pgdir_above_4gb|supervisor_mode_kernel")
+       ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,       .ascii, "writable_page_tables";
+                                                .ascii  
"|writable_descriptor_tables";
+                                                .ascii  
"|auto_translated_physmap";
+                                                .ascii  "|pae_pgdir_above_4gb";
+                                                .ascii  
"|supervisor_mode_kernel";
+                                                .asciz  XEN_DOM0_CAP_STR)
+       ELFNOTE(Xen, XEN_ELFNOTE_SUPPORTED_FEATURES, .long, XEN_DOM0_CAP |
+                                          (1 << XENFEAT_writable_page_tables) |
+                                          (1 << 
XENFEAT_writable_descriptor_tables) |
+                                          (1 << 
XENFEAT_auto_translated_physmap) |
+                                          (1 << XENFEAT_pae_pgdir_above_4gb) |
+                                          (1 << 
XENFEAT_supervisor_mode_kernel))
 #ifdef CONFIG_X86_PAE
        ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,       .asciz, "yes")
        ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID,   .quad,  
_PAGE_PRESENT,_PAGE_PRESENT)
diff -r ada524c58c95 -r 678eefedc07b arch/x86_64/kernel/head-xen.S
--- a/arch/x86_64/kernel/head-xen.S     Sat Jul 23 08:51:07 2011 +0100
+++ b/arch/x86_64/kernel/head-xen.S     Sat Jul 23 08:51:31 2011 +0100
@@ -24,6 +24,7 @@
 #include <asm/cache.h>
 #include <asm/dwarf2.h>
 #include <xen/interface/elfnote.h>
+#include <xen/interface/features.h>
 
        .section .bootstrap.text, "ax", @progbits
        .code64
@@ -160,6 +161,18 @@
 ENTRY(empty_zero_page)
        .skip PAGE_SIZE
 
+#ifdef CONFIG_XEN_UNPRIVILEGED_GUEST
+# define XEN_DOM0_CAP          0
+# define XEN_DOM0_CAP_STR      ""
+#else
+# define XEN_DOM0_CAP          (1 << XENFEAT_dom0)
+# if CONFIG_XEN_COMPAT < 0x040200
+#  define XEN_DOM0_CAP_STR     ""
+# else
+#  define XEN_DOM0_CAP_STR     "|dom0"
+# endif
+#endif
+
 #if CONFIG_XEN_COMPAT <= 0x030002
 /*
  * __xen_guest information
@@ -206,6 +219,15 @@
        ELFNOTE(Xen, XEN_ELFNOTE_ENTRY,          .quad,  startup_64)
        ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, .quad,  hypercall_page)
        ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID,   .quad,  
_PAGE_PRESENT,_PAGE_PRESENT)
-       ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,       .asciz, 
"writable_page_tables|writable_descriptor_tables|auto_translated_physmap|supervisor_mode_kernel")
+       ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,       .ascii, "writable_page_tables";
+                                                .ascii  
"|writable_descriptor_tables";
+                                                .ascii  
"|auto_translated_physmap";
+                                                .ascii  
"|supervisor_mode_kernel";
+                                                .asciz  XEN_DOM0_CAP_STR)
+       ELFNOTE(Xen, XEN_ELFNOTE_SUPPORTED_FEATURES, .long, XEN_DOM0_CAP |
+                                          (1 << XENFEAT_writable_page_tables) |
+                                          (1 << 
XENFEAT_writable_descriptor_tables) |
+                                          (1 << 
XENFEAT_auto_translated_physmap) |
+                                          (1 << 
XENFEAT_supervisor_mode_kernel))
        ELFNOTE(Xen, XEN_ELFNOTE_LOADER,         .asciz, "generic")
        ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long,  1)

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.