[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Xen 4.12.0 Dom0=pvh mode EFI variables 'not supported' after boot
On Wed, Apr 17, 2019 at 09:51:47PM -0700, PGNet Dev wrote: > On 4/17/19 8:30 PM, PGNet Dev wrote: > > Thx. > > > > not ignoring you -- opensuse kernel build system is having a hissy-fit > > atm; builds are failing. :-/ > > > > if I can't get it to behave a build a nice pkg for me, I'll work on a > > manual spin. > > With a pkg instance of your-patched kernel 5.0.8, > > > https://build.opensuse.org/build/home:pgnd:Kernel:stable/openSUSE_Leap_15.0/x86_64/kernel-source/_log > > ... > [ 79s] + patch -s -F0 -E -p1 --no-backup-if-mismatch -i > /home/abuild/rpmbuild/BUILD/kernel-source-5.0.8/patches.suse/vfio-type1-limit-dma-mappings-per-container > >>> [ 79s] + patch -s -F0 -E -p1 --no-backup-if-mismatch -i > >>> /home/abuild/rpmbuild/BUILD/kernel-source-5.0.8/patches.addon/xen-pvh-uefi.patch > [ 79s] ++ find . -name .gitignore > ... > > and Dom=pvh enabled, > > ... > Xen 4.12.0_10-lp150.647 (c/s ) EFI loader > Using configuration file 'xen-4.12.0_10-lp150.647.cfg' > vmlinuz-5.0.8-lp150.2.g8b88553-default: > 0x000000008b899000-0x000000008c068db8 > initrd-5.0.8-lp150.2.g8b88553-default: > 0x000000008a720000-0x000000008b898618 > ... > (XEN) [00000027c63c1674] Xen version 4.12.0_10-lp150.647 > ... > (XEN) [00000027caa3ad80] Command line: dom0=pvh dom0-iommu=map-reserved > ... > ... > > it boots OK, > > xl list > Name ID Mem VCPUs > State Time(s) > Domain-0 0 4015 4 > r----- 62.1 > Xenstore 1 31 1 > -b---- 0.0 > > but still > > efibootmgr -v > EFI variables are not supported on this system. > error trace: > > Given some of the build 'fun' I've been having today, I'll take a closer look > at the patched kernel build in the morning -- to make doubly sure I actually > built correctly. OK, that patch seemed to fix the issue for me, and I managed to get efibootmgr to display the firmware data from a PVH dom0. Can you provide the full serial output of Xen plus Linux booting with dom0=pvh and the patch below applied? Note that this is the previously provided patch with added debug messages. Thanks, Roger. ---8<--- diff --git a/arch/x86/platform/pvh/enlighten.c b/arch/x86/platform/pvh/enlighten.c index 62f5c7045944..a748d2ea2d90 100644 --- a/arch/x86/platform/pvh/enlighten.c +++ b/arch/x86/platform/pvh/enlighten.c @@ -11,6 +11,7 @@ #include <asm/xen/interface.h> #include <xen/xen.h> +#include <xen/xen-ops.h> #include <xen/interface/hvm/start_info.h> /* @@ -44,8 +45,6 @@ void __init __weak mem_map_via_hcall(struct boot_params *ptr __maybe_unused) static void __init init_pvh_bootparams(bool xen_guest) { - memset(&pvh_bootparams, 0, sizeof(pvh_bootparams)); - if ((pvh_start_info.version > 0) && (pvh_start_info.memmap_entries)) { struct hvm_memmap_table_entry *ep; int i; @@ -111,8 +110,10 @@ void __init __weak xen_pvh_init(void) static void hypervisor_specific_init(bool xen_guest) { - if (xen_guest) + if (xen_guest) { xen_pvh_init(); + xen_efi_init(&pvh_bootparams); + } } /* @@ -131,6 +132,8 @@ void __init xen_prepare_pvh(void) BUG(); } + memset(&pvh_bootparams, 0, sizeof(pvh_bootparams)); + hypervisor_specific_init(xen_guest); init_pvh_bootparams(xen_guest); diff --git a/arch/x86/xen/efi.c b/arch/x86/xen/efi.c index 1fbb629a9d78..cdefa2a6b15d 100644 --- a/arch/x86/xen/efi.c +++ b/arch/x86/xen/efi.c @@ -16,6 +16,8 @@ #include <asm/setup.h> #include <asm/xen/hypercall.h> +#include <xen/hvc-console.h> + static efi_char16_t vendor[100] __initdata; static efi_system_table_t efi_systab_xen __initdata = { @@ -53,8 +55,10 @@ static efi_system_table_t __init *xen_efi_probe(void) }; union xenpf_efi_info *info = &op.u.firmware_info.u.efi_info; - if (!xen_initial_domain() || HYPERVISOR_platform_op(&op) < 0) + if (!xen_initial_domain() || HYPERVISOR_platform_op(&op) < 0) { +xen_raw_printk("Not initial domain or no EFI_INFO\n"); return NULL; + } /* Here we know that Xen runs on EFI platform. */ @@ -158,23 +162,28 @@ static enum efi_secureboot_mode xen_efi_get_secureboot(void) return efi_secureboot_mode_unknown; } -void __init xen_efi_init(void) +void __init xen_efi_init(struct boot_params *boot_params) { efi_system_table_t *efi_systab_xen; +xen_raw_printk("Proving for XEN-EFI presence\n"); + efi_systab_xen = xen_efi_probe(); - if (efi_systab_xen == NULL) + if (efi_systab_xen == NULL) { +xen_raw_printk("No XEN-EFI detected\n"); return; + } - strncpy((char *)&boot_params.efi_info.efi_loader_signature, "Xen", - sizeof(boot_params.efi_info.efi_loader_signature)); - boot_params.efi_info.efi_systab = (__u32)__pa(efi_systab_xen); - boot_params.efi_info.efi_systab_hi = (__u32)(__pa(efi_systab_xen) >> 32); + strncpy((char *)&boot_params->efi_info.efi_loader_signature, "Xen", + sizeof(boot_params->efi_info.efi_loader_signature)); + boot_params->efi_info.efi_systab = (__u32)__pa(efi_systab_xen); + boot_params->efi_info.efi_systab_hi = (__u32)(__pa(efi_systab_xen) >> 32); - boot_params.secure_boot = xen_efi_get_secureboot(); + boot_params->secure_boot = xen_efi_get_secureboot(); set_bit(EFI_BOOT, &efi.flags); set_bit(EFI_PARAVIRT, &efi.flags); set_bit(EFI_64BIT, &efi.flags); +xen_raw_printk("XEN-EFI correctly initialized\n"); } diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c index c54a493e139a..4722ba2966ac 100644 --- a/arch/x86/xen/enlighten_pv.c +++ b/arch/x86/xen/enlighten_pv.c @@ -1403,7 +1403,7 @@ asmlinkage __visible void __init xen_start_kernel(void) /* We need this for printk timestamps */ xen_setup_runstate_info(0); - xen_efi_init(); + xen_efi_init(&boot_params); /* Start the world */ #ifdef CONFIG_X86_32 diff --git a/arch/x86/xen/enlighten_pvh.c b/arch/x86/xen/enlighten_pvh.c index 35b7599d2d0b..bbffa409e0e8 100644 --- a/arch/x86/xen/enlighten_pvh.c +++ b/arch/x86/xen/enlighten_pvh.c @@ -27,6 +27,7 @@ void __init xen_pvh_init(void) u64 pfn; xen_pvh = 1; + xen_domain_type = XEN_HVM_DOMAIN; xen_start_flags = pvh_start_info.flags; msr = cpuid_ebx(xen_cpuid_base() + 2); diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h index 0e60bd918695..357eb3fa2144 100644 --- a/arch/x86/xen/xen-ops.h +++ b/arch/x86/xen/xen-ops.h @@ -121,14 +121,6 @@ static inline void __init xen_init_vga(const struct dom0_vga_console_info *info, void __init xen_init_apic(void); -#ifdef CONFIG_XEN_EFI -extern void xen_efi_init(void); -#else -static inline void __init xen_efi_init(void) -{ -} -#endif - __visible void xen_irq_enable_direct(void); __visible void xen_irq_disable_direct(void); __visible unsigned long xen_save_fl_direct(void); diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h index 4969817124a8..51ef98e96d88 100644 --- a/include/xen/xen-ops.h +++ b/include/xen/xen-ops.h @@ -209,6 +209,7 @@ int xen_xlate_map_ballooned_pages(xen_pfn_t **pfns, void **vaddr, bool xen_running_on_version_or_later(unsigned int major, unsigned int minor); +#ifdef CONFIG_XEN_EFI efi_status_t xen_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc); efi_status_t xen_efi_set_time(efi_time_t *tm); efi_status_t xen_efi_get_wakeup_time(efi_bool_t *enabled, efi_bool_t *pending, @@ -233,7 +234,12 @@ efi_status_t xen_efi_query_capsule_caps(efi_capsule_header_t **capsules, int *reset_type); void xen_efi_reset_system(int reset_type, efi_status_t status, unsigned long data_size, efi_char16_t *data); - +extern void xen_efi_init(struct boot_params *boot_params); +#else +static inline void __init xen_efi_init(struct boot_params *boot_params) +{ +} +#endif #ifdef CONFIG_PREEMPT _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |