Received: by 2002:a25:86ce:0:0:0:0:0 with SMTP id y14csp5219ybm; Mon, 20 May 2019 10:51:54 -0700 (PDT) X-Google-Smtp-Source: APXvYqw9DK/jJMVK//ePJb3o/kxN+YS4+Uta/ZChSx9PwZ6dAtlWVMZzMYITpY5XiUct7wgNT2lJ X-Received: by 2002:a62:5f42:: with SMTP id t63mr39244890pfb.83.1558374714904; Mon, 20 May 2019 10:51:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558374714; cv=none; d=google.com; s=arc-20160816; b=I3rzrTqlWWjHEsBOsNm8PAmuKZW24bvz9CE2rviYpJxzL7RRlSJ3ToVqLv3KLH5uCX w3c0qUDRIIQfTNddUqV4Vzo85QSuA1Z9/Df5r4rhFseeNxwdSpVZxZhg04smKmMrHes/ ZHelVJY1/7sodGTQWR4+fR0GGWm+A7IFyN8mlUjhRh1rsMGgWJrBb6IcDyqDGO3KJ42h vOnnryHhD1IoufJ+oRFgrg42D953gnSQ13iph4FnNPR7fyXSO2t+QtaXt5S5Z3RvRSEN SdGNeRHto3kFoFb7STxucE7S1uKZ8xHQOOWZc9zEpirMFEo1pkrSbv7/3YztHoV9rxqJ JO9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Jwruv2XOJ/bTLPhfo6dajlE0nvRwmjR6jeVeuENmKms=; b=vPQB5XmRVWiKKGvGSylIpD3al1YIXg2UoYrAvtMZtW5CI/FPoLEPsLbI8B3TiqJcF7 UF+HShvMu9EaFRpG4OYQgOoWpKNI4er+ULEkFYGNkPka4pHaX5cmCUhfHGkx+XUEhcb5 QuTaJqg/oJ1uIGIuBDhZt2Zm3Q+SH/7cCDC71iVmyOMt/FgNSsRnGqjz1ffb67MebsY7 E8gJVSo2bny7xBv+34C6T/TEPEPwiDTvTK+d1262buugEw2quow5nug8CboVoVTC3bLA HYLIlqmA8OUopQ4tnprzXf/I0PCdlvwekgChXs8hcjnhaVNW+68owQgmnboogVVhKhLU BlDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=lGA32QmN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 204si20162817pfz.86.2019.05.20.10.51.40; Mon, 20 May 2019 10:51:54 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=lGA32QmN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390876AbfETMgZ (ORCPT + 99 others); Mon, 20 May 2019 08:36:25 -0400 Received: from mail.kernel.org ([198.145.29.99]:55488 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391270AbfETMgY (ORCPT ); Mon, 20 May 2019 08:36:24 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3537121479; Mon, 20 May 2019 12:36:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1558355783; bh=yputAOmvq4pakf8w26I0FF70V3hB7OHK244yXiugR5g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lGA32QmNXNwcpbp9MFZBanMRoPzIGoG74PXyCj207U+BKL3uHn9duo09FAU9fwqlT anR9iC2Tq7NcAmBzSaK19m4PqMDyb6djHHOph0rCirrD9orAAMPphXU8Uk2JYBKJF4 /fgUG5/ZTiiGtmSCrvuMP5A0+IOcRoGGEo8tgsMQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, PGNet Dev , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Boris Ostrovsky Subject: [PATCH 5.1 122/128] xen/pvh: correctly setup the PV EFI interface for dom0 Date: Mon, 20 May 2019 14:15:09 +0200 Message-Id: <20190520115256.875735466@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190520115249.449077487@linuxfoundation.org> References: <20190520115249.449077487@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Roger Pau Monne commit 72813bfbf0276a97c82af038efb5f02dcdd9e310 upstream. This involves initializing the boot params EFI related fields and the efi global variable. Without this fix a PVH dom0 doesn't detect when booted from EFI, and thus doesn't support accessing any of the EFI related data. Reported-by: PGNet Dev Signed-off-by: Roger Pau Monné Reviewed-by: Boris Ostrovsky Signed-off-by: Boris Ostrovsky Cc: stable@vger.kernel.org # 4.19+ Signed-off-by: Greg Kroah-Hartman --- arch/x86/platform/pvh/enlighten.c | 8 ++++---- arch/x86/xen/efi.c | 12 ++++++------ arch/x86/xen/enlighten_pv.c | 2 +- arch/x86/xen/enlighten_pvh.c | 6 +++++- arch/x86/xen/xen-ops.h | 4 ++-- 5 files changed, 18 insertions(+), 14 deletions(-) --- a/arch/x86/platform/pvh/enlighten.c +++ b/arch/x86/platform/pvh/enlighten.c @@ -44,8 +44,6 @@ void __init __weak mem_map_via_hcall(str 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; @@ -103,7 +101,7 @@ static void __init init_pvh_bootparams(b * If we are trying to boot a Xen PVH guest, it is expected that the kernel * will have been configured to provide the required override for this routine. */ -void __init __weak xen_pvh_init(void) +void __init __weak xen_pvh_init(struct boot_params *boot_params) { xen_raw_printk("Error: Missing xen PVH initialization\n"); BUG(); @@ -112,7 +110,7 @@ void __init __weak xen_pvh_init(void) static void hypervisor_specific_init(bool xen_guest) { if (xen_guest) - xen_pvh_init(); + xen_pvh_init(&pvh_bootparams); } /* @@ -131,6 +129,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); --- a/arch/x86/xen/efi.c +++ b/arch/x86/xen/efi.c @@ -158,7 +158,7 @@ static enum efi_secureboot_mode xen_efi_ 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; @@ -167,12 +167,12 @@ void __init xen_efi_init(void) if (efi_systab_xen == NULL) 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); --- a/arch/x86/xen/enlighten_pv.c +++ b/arch/x86/xen/enlighten_pv.c @@ -1403,7 +1403,7 @@ asmlinkage __visible void __init xen_sta /* 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 --- a/arch/x86/xen/enlighten_pvh.c +++ b/arch/x86/xen/enlighten_pvh.c @@ -13,6 +13,8 @@ #include +#include "xen-ops.h" + /* * PVH variables. * @@ -21,7 +23,7 @@ */ bool xen_pvh __attribute__((section(".data"))) = 0; -void __init xen_pvh_init(void) +void __init xen_pvh_init(struct boot_params *boot_params) { u32 msr; u64 pfn; @@ -33,6 +35,8 @@ void __init xen_pvh_init(void) msr = cpuid_ebx(xen_cpuid_base() + 2); pfn = __pa(hypercall_page); wrmsr_safe(msr, (u32)pfn, (u32)(pfn >> 32)); + + xen_efi_init(boot_params); } void __init mem_map_via_hcall(struct boot_params *boot_params_p) --- a/arch/x86/xen/xen-ops.h +++ b/arch/x86/xen/xen-ops.h @@ -122,9 +122,9 @@ static inline void __init xen_init_vga(c void __init xen_init_apic(void); #ifdef CONFIG_XEN_EFI -extern void xen_efi_init(void); +extern void xen_efi_init(struct boot_params *boot_params); #else -static inline void __init xen_efi_init(void) +static inline void __init xen_efi_init(struct boot_params *boot_params) { } #endif