From nobody Fri Apr 19 23:01:44 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org ARC-Seal: i=1; a=rsa-sha256; t=1570582171; cv=none; d=zoho.com; s=zohoarc; b=KkJn8rBe1hIdYmuh41yUFKlVj15YD8gyupLxibO9m0Xx1YdwW/s+zkh+DHTW+lBLfUD9LXc289qJsRZGziR3p8+Iz9B7sCOXfPltq2lb1hoLiEEafnj/jpn2/t8mztq+PaSGSM89l/5hj/fFgc412jN4LHqN+6rfJ+/V2gnuQ+o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1570582171; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=IkwqqZW2YCIBfksPtbQ4Q14HdcXFqkm3KW5cvgaT1IQ=; b=nAjct8qulj70Bo4Dedey7S0BXFuZxCu0VAAwAaNZNf2KSZq6NwNP7cai3h/Ypx3KpyhRn6O86RlOxgVrmmWRLzKp83bcgXiub0w3mbsducOh1DLtzSYhmIeFzRUGS2fuFp4FTUAAmHfSFzaVAI5SrBbEPESzT9+fG4AuGOHQFDY= ARC-Authentication-Results: i=1; mx.zoho.com; spf=none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1570582171527213.99389239696382; Tue, 8 Oct 2019 17:49:31 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iI09Y-0008JA-1y; Wed, 09 Oct 2019 00:48:32 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iI09X-0008Iw-4V for xen-devel@lists.xenproject.org; Wed, 09 Oct 2019 00:48:31 +0000 Received: from wout2-smtp.messagingengine.com (unknown [64.147.123.25]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 812749e6-ea2e-11e9-9bee-bc764e2007e4; Wed, 09 Oct 2019 00:48:27 +0000 (UTC) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailout.west.internal (Postfix) with ESMTP id 0934A6C2; Tue, 8 Oct 2019 20:48:25 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Tue, 08 Oct 2019 20:48:26 -0400 Received: from localhost.localdomain (ip5b412221.dynamic.kabel-deutschland.de [91.65.34.33]) by mail.messagingengine.com (Postfix) with ESMTPA id E7E0380061; Tue, 8 Oct 2019 20:48:24 -0400 (EDT) X-Inumbo-ID: 812749e6-ea2e-11e9-9bee-bc764e2007e4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm1; bh=8Ruyq0Rj+dxTgFQqWjzHFuXOl5sCUsMV8H9KlttxG g0=; b=e8lOjnjAzm1LaQ+pgtQ+grKsL4LV75ptJob/eFdXfy2iKYcYkAB28gAtZ cdl5Envi6Gj8q1cimeoCvzKPxL+3acsDhHvDxBUxAWXYKlgmzGyZIzKjrwXgzn6n W6gJWf2wX4zcnSAqoc08VOlS0QznYWW6BkryWKsc2SQIKpG4uj7yCItO23CNoOXt TMGm8OlGkm4lG4K1rQ1kOXTViQ7FecM2Pqj5ExlCJd2EN+/o0ZtVFGgpefMfYxu+ tk7K9CK29lzlcPlnk/jyDMXAbXDbikD+IxNcjkg1URkn5MoWpbruHLCWkt8/rtlw y4+DzufyJOwD6ZCHD9jW+/owpxfaQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedufedriedtgdefjecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefhvffufffkofgjfhggtgfgsehtkeertdertdejnecuhfhrohhmpeforghrvghk ucforghrtgiihihkohifshhkihdqifpkrhgvtghkihcuoehmrghrmhgrrhgvkhesihhnvh hishhisghlvghthhhinhhgshhlrggsrdgtohhmqeenucfkphepledurdeihedrfeegrdef feenucfrrghrrghmpehmrghilhhfrhhomhepmhgrrhhmrghrvghksehinhhvihhsihgslh gvthhhihhnghhslhgrsgdrtghomhenucevlhhushhtvghrufhiiigvpedt X-ME-Proxy: From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= To: xen-devel@lists.xenproject.org Date: Wed, 9 Oct 2019 02:48:18 +0200 Message-Id: X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v1 1/2] efi: remove old SetVirtualAddressMap() arrangement X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= , Jan Beulich Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Remove unused (#ifdef-ed out) code. Reviving it in its current shape won't fly because: - SetVirtualAddressMap() needs to be mapped with 1:1 mapping, which isn't the case at this time - it uses directmap, which is going away soon - it uses directmap, which is mapped with NX, breaking EfiRuntimeServicesC= ode No functional change. Signed-off-by: Marek Marczykowski-G=C3=B3recki --- xen/common/efi/boot.c | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c index 7919378..cddf3de 100644 --- a/xen/common/efi/boot.c +++ b/xen/common/efi/boot.c @@ -29,9 +29,6 @@ #undef __ASSEMBLY__ #endif =20 -/* Using SetVirtualAddressMap() is incompatible with kexec: */ -#undef USE_SET_VIRTUAL_ADDRESS_MAP - #define EFI_REVISION(major, minor) (((major) << 16) | (minor)) =20 #define SMBIOS3_TABLE_GUID \ @@ -1099,9 +1096,6 @@ static void __init efi_exit_boot(EFI_HANDLE ImageHand= le, EFI_SYSTEM_TABLE *Syste =20 /* Adjust pointers into EFI. */ efi_ct =3D (void *)efi_ct + DIRECTMAP_VIRT_START; -#ifdef USE_SET_VIRTUAL_ADDRESS_MAP - efi_rs =3D (void *)efi_rs + DIRECTMAP_VIRT_START; -#endif efi_memmap =3D (void *)efi_memmap + DIRECTMAP_VIRT_START; efi_fw_vendor =3D (void *)efi_fw_vendor + DIRECTMAP_VIRT_START; } @@ -1422,7 +1416,6 @@ static int __init parse_efi_param(const char *s) } custom_param("efi", parse_efi_param); =20 -#ifndef USE_SET_VIRTUAL_ADDRESS_MAP static __init void copy_mapping(unsigned long mfn, unsigned long end, bool (*is_valid)(unsigned long smfn, unsigned long emfn)) @@ -1466,7 +1459,6 @@ static bool __init rt_range_valid(unsigned long smfn,= unsigned long emfn) { return true; } -#endif =20 #define INVALID_VIRTUAL_ADDRESS (0xBAAADUL << \ (EFI_PAGE_SHIFT + BITS_PER_LONG - 32)) @@ -1474,13 +1466,11 @@ static bool __init rt_range_valid(unsigned long smf= n, unsigned long emfn) void __init efi_init_memory(void) { unsigned int i; -#ifndef USE_SET_VIRTUAL_ADDRESS_MAP struct rt_extra { struct rt_extra *next; unsigned long smfn, emfn; unsigned int prot; } *extra, *extra_head =3D NULL; -#endif =20 free_ebmalloc_unused_mem(); =20 @@ -1563,7 +1553,6 @@ void __init efi_init_memory(void) printk(XENLOG_ERR "Could not map MFNs %#lx-%#lx\n", smfn, emfn - 1); } -#ifndef USE_SET_VIRTUAL_ADDRESS_MAP else if ( !((desc->PhysicalStart + len - 1) >> (VADDR_BITS - 1)) && (extra =3D xmalloc(struct rt_extra)) !=3D NULL ) { @@ -1574,12 +1563,8 @@ void __init efi_init_memory(void) extra_head =3D extra; desc->VirtualStart =3D desc->PhysicalStart; } -#endif else { -#ifdef USE_SET_VIRTUAL_ADDRESS_MAP - /* XXX allocate e.g. down from FIXADDR_START */ -#endif printk(XENLOG_ERR "No mapping for MFNs %#lx-%#lx\n", smfn, emfn - 1); } @@ -1591,10 +1576,6 @@ void __init efi_init_memory(void) return; } =20 -#ifdef USE_SET_VIRTUAL_ADDRESS_MAP - efi_rs->SetVirtualAddressMap(efi_memmap_size, efi_mdesc_size, - mdesc_ver, efi_memmap); -#else /* Set up 1:1 page tables to do runtime calls in "physical" mode. */ efi_l4_pgtable =3D alloc_xen_pagetable(); BUG_ON(!efi_l4_pgtable); @@ -1680,6 +1661,5 @@ void __init efi_init_memory(void) for ( i =3D l4_table_offset(HYPERVISOR_VIRT_START); i < l4_table_offset(DIRECTMAP_VIRT_END); ++i ) efi_l4_pgtable[i] =3D idle_pg_table[i]; -#endif } #endif --=20 git-series 0.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel From nobody Fri Apr 19 23:01:44 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org ARC-Seal: i=1; a=rsa-sha256; t=1570582174; cv=none; d=zoho.com; s=zohoarc; b=np6Fide6Ep2iu52oNNp2ee+MRmw6ad+KdRameADWMyLWyK92bW2O5MbCoHVCtM85TQhUBuxWjLUjkUm7+WkXciz6jxs1ldiBHmw97769E1LrbTBPyYxZzJeAnQHAU0Z3QkaSBSIxs30zrVvsZGgr03/pzBEfTBenUBeLwCFEKvQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1570582174; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=/oD/HX24qxsP4WWCD07WIM30OISAEvh+bx2UlB3SKMQ=; b=Pe5eiIIZKkpLuqRHRc594JzyO1y5oOVc3jjcnX5JzVmpLwjRSwGmrHug1/s8itAqgFpYfRueSCqQ1ATN1tAGf4Eoio9uo9BHVhqd/GORjhnvLiHXEeRINRwJrgrbzdCFFoVLC5NSIB1VbTAgYUJ/Gc2xBBvNPOo+F+mKLCqyThs= ARC-Authentication-Results: i=1; mx.zoho.com; spf=none (zoho.com: 192.237.175.120 is neither permitted nor denied by domain of lists.xenproject.org) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1570582174145441.9763572472664; Tue, 8 Oct 2019 17:49:34 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iI09W-0008If-NJ; Wed, 09 Oct 2019 00:48:30 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iI09V-0008IO-Fb for xen-devel@lists.xenproject.org; Wed, 09 Oct 2019 00:48:29 +0000 Received: from new4-smtp.messagingengine.com (unknown [66.111.4.230]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 8178681c-ea2e-11e9-97df-12813bfff9fa; Wed, 09 Oct 2019 00:48:27 +0000 (UTC) Received: from compute7.internal (compute7.nyi.internal [10.202.2.47]) by mailnew.nyi.internal (Postfix) with ESMTP id 3C58C6DEA; Tue, 8 Oct 2019 20:48:27 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Tue, 08 Oct 2019 20:48:27 -0400 Received: from localhost.localdomain (ip5b412221.dynamic.kabel-deutschland.de [91.65.34.33]) by mail.messagingengine.com (Postfix) with ESMTPA id AA43F8005A; Tue, 8 Oct 2019 20:48:25 -0400 (EDT) X-Inumbo-ID: 8178681c-ea2e-11e9-97df-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm1; bh=6IMZVdl+ti5bO+A51msTWvJawQu2a6oxwsvmW4PMq Yo=; b=cRttka1sbqWx39yruBHBgkmXtuyuStOqpAzd3zH/EPwhSrMh1ALoTmeMk NEnjK7No7ISZQVeUpy0yT0HZhirUVzauTh5Yt8EBumi88lFqo5L18i0SfKDXF3qp jL4uNGgKo75iR35DjhK6pgTSlbYiUNUI7YngVNVxcJv3RX71qFKzKrX95LZiSxrL awjPHXfpKnpRYbO0J/i0Z4JYsHgOC8WStcQ9mZg07eWA3fEg+mdLN8xzSWLsMuto 8b2GIO5HtIJvu45gWnI018UTLm3D3hLxBbooeh63FkivwKh5emCw2ugqsTSCsIoM +jS07vJtm6UU7/aThjKw5Sej50rjw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedufedriedtgdefjecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefhvffufffkofgjfhggtgfgsehtkeertdertdejnecuhfhrohhmpeforghrvghk ucforghrtgiihihkohifshhkihdqifpkrhgvtghkihcuoehmrghrmhgrrhgvkhesihhnvh hishhisghlvghthhhinhhgshhlrggsrdgtohhmqeenucfkphepledurdeihedrfeegrdef feenucfrrghrrghmpehmrghilhhfrhhomhepmhgrrhhmrghrvghksehinhhvihhsihgslh gvthhhihhnghhslhgrsgdrtghomhenucevlhhushhtvghrufhiiigvpedt X-ME-Proxy: From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= To: xen-devel@lists.xenproject.org Date: Wed, 9 Oct 2019 02:48:19 +0200 Message-Id: <86f8281ca02b344848eaab3e2d211ade6f1d1658.1570582061.git-series.marmarek@invisiblethingslab.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v1 2/2] xen/efi: optionally call SetVirtualAddressMap() X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Ian Jackson , =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= , Tim Deegan , Julien Grall , Jan Beulich Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Some UEFI implementations are not happy about running in 1:1 addressing, but really virtual address space. Specifically, some access EfiBootServices{Code,Data}, or even totally unmapped areas. Example crash of GetVariable() call on Thinkpad W540: Xen call trace: [<0000000000000080>] 0000000000000080 [<8c2b0398e0000daa>] 8c2b0398e0000daa Pagetable walk from ffffffff858483a1: L4[0x1ff] =3D 0000000000000000 ffffffffffffffff **************************************** Panic on CPU 0: FATAL PAGE FAULT [error_code=3D0002] Faulting linear address: ffffffff858483a1 **************************************** Fix this by calling SetVirtualAddressMap() runtime service, giving it 1:1 map for areas marked as needed during runtime. The address space in which EFI runtime services are called is unchanged, but UEFI view of it may be. SetVirtualAddressMap() can be called only once, hence it's incompatible with kexec. For this reason, make it an optional feature, depending on !KEXEC. And to not inflate number of supported configurations, hide it behind EXPERT. Signed-off-by: Marek Marczykowski-G=C3=B3recki --- xen/common/Kconfig | 13 +++++++++++++ xen/common/efi/boot.c | 28 ++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/xen/common/Kconfig b/xen/common/Kconfig index 16829f6..fe98f8a 100644 --- a/xen/common/Kconfig +++ b/xen/common/Kconfig @@ -88,6 +88,19 @@ config KEXEC =20 If unsure, say Y. =20 +config SET_VIRTUAL_ADDRESS_MAP + bool "EFI: call SetVirtualAddressMap()" if EXPERT =3D "y" + default n + depends on !KEXEC + ---help--- + Call EFI SetVirtualAddressMap() runtime service to setup memory map = for + further runtime services. According to UEFI spec, it isn't strictly + necessary, but many UEFI implementations misbehave when this call is + missing. On the other hand, this call can be made only once, which m= akes + it incompatible with kexec (kexec-ing this Xen from other Xen or Lin= ux). + + If unsuser, say N. + config XENOPROF def_bool y prompt "Xen Oprofile Support" if EXPERT =3D "y" diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c index cddf3de..5c187db 100644 --- a/xen/common/efi/boot.c +++ b/xen/common/efi/boot.c @@ -1056,11 +1056,17 @@ static void __init efi_set_gop_mode(EFI_GRAPHICS_OU= TPUT_PROTOCOL *gop, UINTN gop efi_arch_video_init(gop, info_size, mode_info); } =20 +#define INVALID_VIRTUAL_ADDRESS (0xBAAADUL << \ + (EFI_PAGE_SHIFT + BITS_PER_LONG - 32)) + static void __init efi_exit_boot(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE = *SystemTable) { EFI_STATUS status; UINTN info_size =3D 0, map_key; bool retry; +#ifdef CONFIG_SET_VIRTUAL_ADDRESS_MAP + unsigned int i; +#endif =20 efi_bs->GetMemoryMap(&info_size, NULL, &map_key, &efi_mdesc_size, &mdesc_ver); @@ -1098,6 +1104,26 @@ static void __init efi_exit_boot(EFI_HANDLE ImageHan= dle, EFI_SYSTEM_TABLE *Syste efi_ct =3D (void *)efi_ct + DIRECTMAP_VIRT_START; efi_memmap =3D (void *)efi_memmap + DIRECTMAP_VIRT_START; efi_fw_vendor =3D (void *)efi_fw_vendor + DIRECTMAP_VIRT_START; + +#ifdef CONFIG_SET_VIRTUAL_ADDRESS_MAP + for ( i =3D 0; i < efi_memmap_size; i +=3D efi_mdesc_size ) + { + EFI_MEMORY_DESCRIPTOR *desc =3D efi_memmap + i; + + if ( desc->Attribute & EFI_MEMORY_RUNTIME ) + desc->VirtualStart =3D desc->PhysicalStart; + else + desc->VirtualStart =3D INVALID_VIRTUAL_ADDRESS; + } + status =3D efi_rs->SetVirtualAddressMap(efi_memmap_size, efi_mdesc_siz= e, + mdesc_ver, efi_memmap); + if ( status !=3D EFI_SUCCESS ) + { + printk(XENLOG_ERR "EFI: SetVirtualAddressMap() failed (%#lx), disa= bling runtime services\n", + status); + __clear_bit(EFI_RS, &efi_flags); + } +#endif } =20 static int __init __maybe_unused set_color(u32 mask, int bpp, u8 *pos, u8 = *sz) @@ -1460,8 +1486,6 @@ static bool __init rt_range_valid(unsigned long smfn,= unsigned long emfn) return true; } =20 -#define INVALID_VIRTUAL_ADDRESS (0xBAAADUL << \ - (EFI_PAGE_SHIFT + BITS_PER_LONG - 32)) =20 void __init efi_init_memory(void) { --=20 git-series 0.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel