diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -1169,10 +1169,6 @@ } } -static char bootmethod[16] = ""; -SYSCTL_STRING(_machdep, OID_AUTO, bootmethod, CTLFLAG_RD, bootmethod, 0, - "System firmware boot method"); - static void native_parse_memmap(caddr_t kmdp, vm_paddr_t *physmap, int *physmap_idx) { diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -1237,10 +1237,6 @@ SYSCTL_ULONG(_machdep, OID_AUTO, guessed_bootdev, CTLFLAG_RD, &bootdev, 0, "Maybe the Boot device (not in struct cdev *format)"); -static char bootmethod[16] = "BIOS"; -SYSCTL_STRING(_machdep, OID_AUTO, bootmethod, CTLFLAG_RD, bootmethod, 0, - "System firmware boot method"); - /* * Initialize 386 and configure to run kernel */ @@ -2348,6 +2344,9 @@ /* Init basic tunables, hz etc */ init_param1(); + /* Set bootmethod to BIOS: it's the only supported on i386. */ + strlcpy(bootmethod, "BIOS", sizeof(bootmethod)); + /* * Make gdt memory segments. All segments cover the full 4GB * of address space and permissions are enforced at page level. diff --git a/sys/x86/include/x86_var.h b/sys/x86/include/x86_var.h --- a/sys/x86/include/x86_var.h +++ b/sys/x86/include/x86_var.h @@ -95,6 +95,7 @@ extern int cpu_flush_rsb_ctxsw; extern int x86_rngds_mitg_enable; extern int cpu_amdc1e_bug; +extern char bootmethod[16]; struct pcb; struct thread; diff --git a/sys/x86/x86/cpu_machdep.c b/sys/x86/x86/cpu_machdep.c --- a/sys/x86/x86/cpu_machdep.c +++ b/sys/x86/x86/cpu_machdep.c @@ -111,6 +111,10 @@ static volatile u_int cpu_reset_proxy_active; #endif +char bootmethod[16]; +SYSCTL_STRING(_machdep, OID_AUTO, bootmethod, CTLFLAG_RD, bootmethod, 0, + "System firmware boot method"); + struct msr_op_arg { u_int msr; int op; diff --git a/sys/x86/xen/pv.c b/sys/x86/xen/pv.c --- a/sys/x86/xen/pv.c +++ b/sys/x86/xen/pv.c @@ -48,6 +48,7 @@ #include #include #include +#include #include #include @@ -65,6 +66,7 @@ #include #include #include +#include #include #include @@ -630,6 +632,11 @@ if (envp != NULL) envp += off; xen_pvh_set_env(envp, reject_option); + + if (MD_FETCH(kmdp, MODINFOMD_EFI_MAP, void *) != NULL) + strlcpy(bootmethod, "UEFI", sizeof(bootmethod)); + else + strlcpy(bootmethod, "BIOS", sizeof(bootmethod)); } else { /* Parse the extra boot information given by Xen */ if (start_info->cmdline_paddr != 0) @@ -637,6 +644,7 @@ (char *)(start_info->cmdline_paddr + KERNBASE), ","); kmdp = NULL; + strlcpy(bootmethod, "XEN", sizeof(bootmethod)); } boothowto |= boot_env_to_howto();