#include <xen/cpu.h>
#include <xen/pfn.h>
#include <xen/virtual_region.h>
+#include <xen/version.h>
#include <xen/vmap.h>
#include <xen/trace.h>
#include <xen/libfdt/libfdt-xen.h>
switch_stack_and_jump(idle_vcpu[0]->arch.cpu_info, init_done);
}
-void arch_get_xen_caps(xen_capabilities_info_t *info)
+static int __init init_xen_cap_info(void)
{
/* Interface name is always xen-3.0-* for Xen-3.x. */
- int major = 3, minor = 0;
- char s[32];
-
- (*info)[0] = '\0';
#ifdef CONFIG_ARM_64
- snprintf(s, sizeof(s), "xen-%d.%d-aarch64 ", major, minor);
- safe_strcat(*info, s);
+ safe_strcat(xen_cap_info, "xen-3.0-aarch64 ");
#endif
if ( cpu_has_aarch32 )
- {
- snprintf(s, sizeof(s), "xen-%d.%d-armv7l ", major, minor);
- safe_strcat(*info, s);
- }
+ safe_strcat(xen_cap_info, "xen-3.0-armv7l ");
+
+ return 0;
}
+__initcall(init_xen_cap_info);
/*
* Local variables:
machine_halt();
}
-
-void arch_get_xen_caps(xen_capabilities_info_t *info)
-{
- BUG_ON("unimplemented");
-}
#include <asm/smp.h>
#include <asm/traps.h>
-void arch_get_xen_caps(xen_capabilities_info_t *info)
-{
- BUG_ON("unimplemented");
-}
-
/* Xen stack for bringing up the first CPU. */
unsigned char __initdata cpu0_boot_stack[STACK_SIZE]
__aligned(STACK_SIZE);
unreachable();
}
-void arch_get_xen_caps(xen_capabilities_info_t *info)
+static int __init cf_check init_xen_cap_info(void)
{
/* Interface name is always xen-3.0-* for Xen-3.x. */
- int major = 3, minor = 0;
- char s[32];
-
- (*info)[0] = '\0';
if ( IS_ENABLED(CONFIG_PV) )
{
- snprintf(s, sizeof(s), "xen-%d.%d-x86_64 ", major, minor);
- safe_strcat(*info, s);
+ safe_strcat(xen_cap_info, "xen-3.0-x86_64 ");
if ( opt_pv32 )
- {
- snprintf(s, sizeof(s), "xen-%d.%d-x86_32p ", major, minor);
- safe_strcat(*info, s);
- }
+ safe_strcat(xen_cap_info, "xen-3.0-x86_32p ");
}
if ( hvm_enabled )
- {
- snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor);
- safe_strcat(*info, s);
- snprintf(s, sizeof(s), "hvm-%d.%d-x86_32p ", major, minor);
- safe_strcat(*info, s);
- snprintf(s, sizeof(s), "hvm-%d.%d-x86_64 ", major, minor);
- safe_strcat(*info, s);
- }
+ safe_strcat(xen_cap_info,
+ "hvm-3.0-x86_32 "
+ "hvm-3.0-x86_32p "
+ "hvm-3.0-x86_64 ");
+
+ return 0;
}
+__initcall(init_xen_cap_info);
int __hwdom_init remove_xen_ranges(struct rangeset *r)
{
static xen_commandline_t saved_cmdline;
static const char __initconst opt_builtin_cmdline[] = CONFIG_CMDLINE;
+char __ro_after_init xen_cap_info[128];
static int assign_integer_param(const struct kernel_param *param, uint64_t val)
{
memset(info, 0, sizeof(info));
if ( !deny )
- arch_get_xen_caps(&info);
+ safe_strcpy(info, xen_cap_info);
if ( copy_to_guest(arg, info, ARRAY_SIZE(info)) )
return -EFAULT;
struct vcpu *v,
XEN_GUEST_HANDLE_PARAM(void) arg);
-void arch_get_xen_caps(xen_capabilities_info_t *info);
-
#endif /* __XEN_HYPERCALL_H__ */
const char *xen_build_info(void);
int xen_build_id(const void **p, unsigned int *len);
+extern char xen_cap_info[128];
+
#ifdef BUILD_ID
void xen_build_init(void);
int xen_build_id_check(const Elf_Note *n, unsigned int n_sz,