|
@@ -11,8 +11,28 @@
|
|
#include <asm/page_types.h>
|
|
#include <asm/page_types.h>
|
|
|
|
|
|
#include <xen/interface/elfnote.h>
|
|
#include <xen/interface/elfnote.h>
|
|
|
|
+#include <xen/interface/features.h>
|
|
#include <asm/xen/interface.h>
|
|
#include <asm/xen/interface.h>
|
|
|
|
|
|
|
|
+#ifdef CONFIG_XEN_PVH
|
|
|
|
+#define PVH_FEATURES_STR "|writable_descriptor_tables|auto_translated_physmap|supervisor_mode_kernel"
|
|
|
|
+/* Note the lack of 'hvm_callback_vector'. Older hypervisor will
|
|
|
|
+ * balk at this being part of XEN_ELFNOTE_FEATURES, so we put it in
|
|
|
|
+ * XEN_ELFNOTE_SUPPORTED_FEATURES which older hypervisors will ignore.
|
|
|
|
+ */
|
|
|
|
+#define PVH_FEATURES ((1 << XENFEAT_writable_page_tables) | \
|
|
|
|
+ (1 << XENFEAT_auto_translated_physmap) | \
|
|
|
|
+ (1 << XENFEAT_supervisor_mode_kernel) | \
|
|
|
|
+ (1 << XENFEAT_hvm_callback_vector))
|
|
|
|
+/* The XENFEAT_writable_page_tables is not stricly neccessary as we set that
|
|
|
|
+ * up regardless whether this CONFIG option is enabled or not, but it
|
|
|
|
+ * clarifies what the right flags need to be.
|
|
|
|
+ */
|
|
|
|
+#else
|
|
|
|
+#define PVH_FEATURES_STR ""
|
|
|
|
+#define PVH_FEATURES (0)
|
|
|
|
+#endif
|
|
|
|
+
|
|
__INIT
|
|
__INIT
|
|
ENTRY(startup_xen)
|
|
ENTRY(startup_xen)
|
|
cld
|
|
cld
|
|
@@ -95,7 +115,10 @@ NEXT_HYPERCALL(arch_6)
|
|
#endif
|
|
#endif
|
|
ELFNOTE(Xen, XEN_ELFNOTE_ENTRY, _ASM_PTR startup_xen)
|
|
ELFNOTE(Xen, XEN_ELFNOTE_ENTRY, _ASM_PTR startup_xen)
|
|
ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, _ASM_PTR hypercall_page)
|
|
ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, _ASM_PTR hypercall_page)
|
|
- ELFNOTE(Xen, XEN_ELFNOTE_FEATURES, .asciz "!writable_page_tables|pae_pgdir_above_4gb")
|
|
|
|
|
|
+ ELFNOTE(Xen, XEN_ELFNOTE_FEATURES, .ascii "!writable_page_tables|pae_pgdir_above_4gb"; .asciz PVH_FEATURES_STR)
|
|
|
|
+ ELFNOTE(Xen, XEN_ELFNOTE_SUPPORTED_FEATURES, .long (PVH_FEATURES) |
|
|
|
|
+ (1 << XENFEAT_writable_page_tables) |
|
|
|
|
+ (1 << XENFEAT_dom0))
|
|
ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE, .asciz "yes")
|
|
ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE, .asciz "yes")
|
|
ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz "generic")
|
|
ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz "generic")
|
|
ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID,
|
|
ELFNOTE(Xen, XEN_ELFNOTE_L1_MFN_VALID,
|