[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


 


Rackspace

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