[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH, v2] linux-2.6.18: add privileged/unprivileged kernel feature indication
On Thu, 2011-07-21 at 10:55 +0100, Jan Beulich wrote: > >>> On 21.07.11 at 11:32, Keir Fraser <keir@xxxxxxx> wrote: > > Aren't XEN_PRIV_CAP_STR parts pointless? Any hypervisor new enough to > > understand those features will also understand > > XEN_ELFNOTE_SUPPORTED_FEATURE? > > It's more for completeness (so that when XEN_COMPAT set high enough > one can e.g. inspect the ELF notes without needing to understand binary > values). It'd be useful to update tools/xcutils/readnotes.c to decode them perhaps? Ian. > > Jan > > > -- Keir > > > > On 19/07/2011 10:14, "Jan Beulich" <JBeulich@xxxxxxxxxx> wrote: > > > >> This is the kernel side change accompanying the earlier sent Xen side > >> patch titled identically. > >> > >> (This depends on the public headers to be synced over after the > >> respective hypervisor side change.) > >> > >> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> > >> > >> --- a/arch/i386/kernel/head-xen.S > >> +++ b/arch/i386/kernel/head-xen.S > >> @@ -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,19 @@ ENTRY(cpu_gdt_table) > >> .quad 0x0000000000000000 /* 0xf0 - unused */ > >> .quad 0x0000000000000000 /* 0xf8 - GDT entry 31: double-fault TSS */ > >> > >> +#ifdef CONFIG_XEN_UNPRIVILEGED_GUEST > >> +# define XEN_PRIV_CAP (1 << XENFEAT_unprivileged) > >> +# define XEN_PRIV_CAP_STR "|!unprivileged" > >> +#else > >> +# define XEN_PRIV_CAP ((1 << XENFEAT_privileged) | \ > >> + (1 << XENFEAT_unprivileged)) > >> +# define XEN_PRIV_CAP_STR "|privileged|unprivileged" > >> +#endif > >> +#if CONFIG_XEN_COMPAT < 0xffffffff//temp 0x040200 > >> +# undef XEN_PRIV_CAP_STR > >> +# define XEN_PRIV_CAP_STR "" > >> +#endif > >> + > >> #if CONFIG_XEN_COMPAT <= 0x030002 > >> /* > >> * __xen_guest information > >> @@ -168,7 +182,8 @@ ENTRY(cpu_gdt_table) > >> utoa (__PAGE_OFFSET + __PHYSICAL_START + VIRT_ENTRY_OFFSET) > >> .ascii ",HYPERCALL_PAGE=0x" > >> utoa ((__PHYSICAL_START+HYPERCALL_PAGE_OFFSET)>>PAGE_SHIFT) > >> - .ascii ",FEATURES=writable_page_tables" > >> + .ascii ",FEATURES=" XEN_PRIV_CAP > >> + .ascii "|writable_page_tables" > >> .ascii "|writable_descriptor_tables" > >> .ascii "|auto_translated_physmap" > >> .ascii "|pae_pgdir_above_4gb" > >> @@ -195,7 +210,18 @@ ENTRY(cpu_gdt_table) > >> 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_ > > p > >> gdir_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_PRIV_CAP_STR) > >> + ELFNOTE(Xen, XEN_ELFNOTE_SUPPORTED_FEATURES, .long, XEN_PRIV_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) > >> --- a/arch/x86_64/kernel/head-xen.S > >> +++ b/arch/x86_64/kernel/head-xen.S > >> @@ -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,19 @@ gdt_end: > >> ENTRY(empty_zero_page) > >> .skip PAGE_SIZE > >> > >> +#ifdef CONFIG_XEN_UNPRIVILEGED_GUEST > >> +# define XEN_PRIV_CAP (1 << XENFEAT_unprivileged) > >> +# define XEN_PRIV_CAP_STR "|!unprivileged" > >> +#else > >> +# define XEN_PRIV_CAP ((1 << XENFEAT_privileged) | \ > >> + (1 << XENFEAT_unprivileged)) > >> +# define XEN_PRIV_CAP_STR "|privileged|unprivileged" > >> +#endif > >> +#if CONFIG_XEN_COMPAT < 0xffffffff//temp 0x040200 > >> +# undef XEN_PRIV_CAP_STR > >> +# define XEN_PRIV_CAP_STR "" > >> +#endif > >> + > >> #if CONFIG_XEN_COMPAT <= 0x030002 > >> /* > >> * __xen_guest information > >> @@ -186,7 +200,8 @@ ENTRY(empty_zero_page) > >> utoh (__START_KERNEL_map + __PHYSICAL_START) > >> .ascii ",HYPERCALL_PAGE=0x" > >> utoh (phys_hypercall_page >> PAGE_SHIFT) > >> - .ascii ",FEATURES=writable_page_tables" > >> + .ascii ",FEATURES=" XEN_PRIV_CAP > >> + .ascii "|writable_page_tables" > >> .ascii "|writable_descriptor_tables" > >> .ascii "|auto_translated_physmap" > >> .ascii "|supervisor_mode_kernel" > >> @@ -206,6 +221,15 @@ ENTRY(empty_zero_page) > >> 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|supe > > r > >> visor_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_PRIV_CAP_STR) > >> + ELFNOTE(Xen, XEN_ELFNOTE_SUPPORTED_FEATURES, .long, XEN_PRIV_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-devel mailing list > >> Xen-devel@xxxxxxxxxxxxxxxxxxx > >> http://lists.xensource.com/xen-devel > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |