From: joeyli <jlee@suse.com> To: Matt Fleming <matt@console-pimps.org> Cc: Matthew Garrett <matthew.garrett@nebula.com>, "Fleming, Matt" <matt.fleming@intel.com>, "rja@sgi.com" <rja@sgi.com>, "mingo@kernel.org" <mingo@kernel.org>, "torvalds@linux-foundation.org" <torvalds@linux-foundation.org>, "bp@alien8.de" <bp@alien8.de>, "jkosina@suse.cz" <jkosina@suse.cz>, "linux-efi@vger.kernel.org" <linux-efi@vger.kernel.org>, "x86@kernel.org" <x86@kernel.org>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, "tglx@linutronix.de" <tglx@linutronix.de>, "hpa@linux.intel.com" <hpa@linux.intel.com>, "akpm@linux-foundation.org" <akpm@linux-foundation.org>, "oneukum@suse.de" <oneukum@suse.de> Subject: Re: [PATCH] Modify UEFI anti-bricking code Date: Thu, 06 Jun 2013 13:05:10 +0800 [thread overview] Message-ID: <1370495110.6523.35.camel@linux-s257.site> (raw) In-Reply-To: <20130605155904.GC30420@console-pimps.org> 於 三,2013-06-05 於 16:59 +0100,Matt Fleming 提到: > On Wed, 05 Jun, at 02:53:27PM, Matthew Garrett wrote: > > On Wed, 2013-06-05 at 15:49 +0100, Fleming, Matt wrote: > > > > > Folks, what do you want me to do with this? Merge it with Matthew's patch? > > > > Do that and add Joey's signed-off-by? > > Right, this is what I've got queued up. > > --- > > >From 380dcc12ba82f4e10feb6a72207b2e4771d16d8d Mon Sep 17 00:00:00 2001 > From: Matthew Garrett <matthew.garrett@nebula.com> > Date: Sat, 1 Jun 2013 16:06:20 -0400 > Subject: [PATCH] Modify UEFI anti-bricking code > > This patch reworks the UEFI anti-bricking code, including an effective > reversion of cc5a080c and 31ff2f20. It turns out that calling > QueryVariableInfo() from boot services results in some firmware > implementations jumping to physical addresses even after entering virtual > mode, so until we have 1:1 mappings for UEFI runtime space this isn't > going to work so well. [...] The follow diff change is base on 380dcc12 patch queued in efi git tree, it included Matthew and hpa's suggestions. I fix the attributes of DUMMY object to NV/BS/RT and introduced a #define of the minimum reserve flash space. This change works to me on OVMF. Thanks a lot! Joey Lee diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index cc3cfe8..2617675 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c @@ -53,6 +53,8 @@ #define EFI_DEBUG 1 +#define EFI_MIN_RESERVE 5120 + #define EFI_DUMMY_GUID \ EFI_GUID(0x4424ac57, 0xbe4b, 0x47dd, 0x9e, 0x97, 0xed, 0x50, 0xf0, 0x9f, 0x92, 0xa9) @@ -988,7 +990,11 @@ void __init efi_enter_virtual_mode(void) kfree(new_memmap); /* clean DUMMY object */ - efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, 0, 0, NULL); + efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, + EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, + 0, NULL); } /* @@ -1051,7 +1057,12 @@ efi_status_t efi_query_variable_store(u32 attributes, unsigned long size) * write if permitting it would reduce the available space to under * 5KB. This figure was provided by Samsung, so should be safe. */ - if ((remaining_size - size < 5120) && !efi_no_storage_paranoia) { + if ((remaining_size - size < EFI_MIN_RESERVE) && + !efi_no_storage_paranoia) { + + if (!(attributes & EFI_VARIABLE_NON_VOLATILE)) + return EFI_OUT_OF_RESOURCES; + /* * Triggering garbage collection may require that the firmware * generate a real EFI_OUT_OF_RESOURCES error. We can force @@ -1061,7 +1072,10 @@ efi_status_t efi_query_variable_store(u32 attributes, unsigned long size) void *dummy = kmalloc(dummy_size, GFP_ATOMIC); status = efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, - attributes, dummy_size, dummy); + EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, + dummy_size, dummy); if (status == EFI_SUCCESS) { /* @@ -1085,7 +1099,7 @@ efi_status_t efi_query_variable_store(u32 attributes, unsigned long size) /* * There still isn't enough room, so return an error */ - if (remaining_size - size < 5120) + if (remaining_size - size < EFI_MIN_RESERVE) return EFI_OUT_OF_RESOURCES; }
WARNING: multiple messages have this Message-ID (diff)
From: joeyli <jlee-IBi9RG/b67k@public.gmane.org> To: Matt Fleming <matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org> Cc: Matthew Garrett <matthew.garrett-05XSO3Yj/JvQT0dZR+AlfA@public.gmane.org>, "Fleming, Matt" <matt.fleming-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>, "rja-sJ/iWh9BUns@public.gmane.org" <rja-sJ/iWh9BUns@public.gmane.org>, "mingo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org" <mingo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, "torvalds-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org" <torvalds-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>, "bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org" <bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org>, "jkosina-AlSwsSmVLrQ@public.gmane.org" <jkosina-AlSwsSmVLrQ@public.gmane.org>, "linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" <linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>, "x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org" <x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, "linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>, "tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org" <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>, "hpa-VuQAYsv1563Yd54FQh9/CA@public.gmane.org" <hpa-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>, "akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org" <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>, "oneukum-l3A5Bk7waGM@public.gmane.org" <oneukum-l3A5Bk7waGM@public.gmane.org> Subject: Re: [PATCH] Modify UEFI anti-bricking code Date: Thu, 06 Jun 2013 13:05:10 +0800 [thread overview] Message-ID: <1370495110.6523.35.camel@linux-s257.site> (raw) In-Reply-To: <20130605155904.GC30420-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org> 於 三,2013-06-05 於 16:59 +0100,Matt Fleming 提到: > On Wed, 05 Jun, at 02:53:27PM, Matthew Garrett wrote: > > On Wed, 2013-06-05 at 15:49 +0100, Fleming, Matt wrote: > > > > > Folks, what do you want me to do with this? Merge it with Matthew's patch? > > > > Do that and add Joey's signed-off-by? > > Right, this is what I've got queued up. > > --- > > >From 380dcc12ba82f4e10feb6a72207b2e4771d16d8d Mon Sep 17 00:00:00 2001 > From: Matthew Garrett <matthew.garrett-05XSO3Yj/JvQT0dZR+AlfA@public.gmane.org> > Date: Sat, 1 Jun 2013 16:06:20 -0400 > Subject: [PATCH] Modify UEFI anti-bricking code > > This patch reworks the UEFI anti-bricking code, including an effective > reversion of cc5a080c and 31ff2f20. It turns out that calling > QueryVariableInfo() from boot services results in some firmware > implementations jumping to physical addresses even after entering virtual > mode, so until we have 1:1 mappings for UEFI runtime space this isn't > going to work so well. [...] The follow diff change is base on 380dcc12 patch queued in efi git tree, it included Matthew and hpa's suggestions. I fix the attributes of DUMMY object to NV/BS/RT and introduced a #define of the minimum reserve flash space. This change works to me on OVMF. Thanks a lot! Joey Lee diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index cc3cfe8..2617675 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c @@ -53,6 +53,8 @@ #define EFI_DEBUG 1 +#define EFI_MIN_RESERVE 5120 + #define EFI_DUMMY_GUID \ EFI_GUID(0x4424ac57, 0xbe4b, 0x47dd, 0x9e, 0x97, 0xed, 0x50, 0xf0, 0x9f, 0x92, 0xa9) @@ -988,7 +990,11 @@ void __init efi_enter_virtual_mode(void) kfree(new_memmap); /* clean DUMMY object */ - efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, 0, 0, NULL); + efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, + EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, + 0, NULL); } /* @@ -1051,7 +1057,12 @@ efi_status_t efi_query_variable_store(u32 attributes, unsigned long size) * write if permitting it would reduce the available space to under * 5KB. This figure was provided by Samsung, so should be safe. */ - if ((remaining_size - size < 5120) && !efi_no_storage_paranoia) { + if ((remaining_size - size < EFI_MIN_RESERVE) && + !efi_no_storage_paranoia) { + + if (!(attributes & EFI_VARIABLE_NON_VOLATILE)) + return EFI_OUT_OF_RESOURCES; + /* * Triggering garbage collection may require that the firmware * generate a real EFI_OUT_OF_RESOURCES error. We can force @@ -1061,7 +1072,10 @@ efi_status_t efi_query_variable_store(u32 attributes, unsigned long size) void *dummy = kmalloc(dummy_size, GFP_ATOMIC); status = efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID, - attributes, dummy_size, dummy); + EFI_VARIABLE_NON_VOLATILE | + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, + dummy_size, dummy); if (status == EFI_SUCCESS) { /* @@ -1085,7 +1099,7 @@ efi_status_t efi_query_variable_store(u32 attributes, unsigned long size) /* * There still isn't enough room, so return an error */ - if (remaining_size - size < 5120) + if (remaining_size - size < EFI_MIN_RESERVE) return EFI_OUT_OF_RESOURCES; }
next prev parent reply other threads:[~2013-06-06 5:06 UTC|newest] Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-06-01 20:06 [PATCH] Modify UEFI anti-bricking code Matthew Garrett 2013-06-01 20:06 ` Matthew Garrett 2013-06-02 15:48 ` Russ Anderson 2013-06-02 15:48 ` Russ Anderson 2013-06-03 12:17 ` Matt Fleming 2013-06-03 14:58 ` Matthew Garrett 2013-06-03 14:58 ` Matthew Garrett 2013-06-03 16:13 ` joeyli 2013-06-03 16:31 ` Matthew Garrett 2013-06-03 16:31 ` Matthew Garrett 2013-06-04 3:35 ` joeyli 2013-06-04 3:35 ` joeyli 2013-06-05 14:49 ` Fleming, Matt 2013-06-05 14:53 ` Matthew Garrett 2013-06-05 14:53 ` Matthew Garrett 2013-06-05 15:59 ` Matt Fleming 2013-06-05 15:59 ` Matt Fleming 2013-06-05 16:08 ` Matthew Garrett 2013-06-05 16:08 ` Matthew Garrett 2013-06-05 19:59 ` Matt Fleming 2013-06-05 19:59 ` Matt Fleming 2013-06-06 2:24 ` joeyli 2013-06-05 20:19 ` H. Peter Anvin 2013-06-05 20:19 ` H. Peter Anvin 2013-06-06 5:05 ` joeyli [this message] 2013-06-06 5:05 ` joeyli 2013-06-06 5:41 ` joeyli 2013-06-06 5:42 ` Matthew Garrett 2013-06-06 5:42 ` Matthew Garrett 2013-06-06 7:40 ` joeyli 2013-06-06 7:40 ` joeyli 2013-06-06 9:25 ` Matt Fleming 2013-06-06 9:25 ` Matt Fleming 2013-06-06 14:48 ` Russ Anderson 2013-06-06 14:48 ` Russ Anderson 2013-06-06 15:00 ` Matt Fleming 2013-06-06 15:00 ` Matt Fleming 2013-06-06 15:28 ` Russ Anderson 2013-06-06 15:28 ` Russ Anderson 2013-06-10 18:54 ` Russ Anderson 2013-06-10 18:54 ` Russ Anderson 2013-06-04 5:29 ` Lingzhu Xiang 2013-06-04 5:29 ` Lingzhu Xiang
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1370495110.6523.35.camel@linux-s257.site \ --to=jlee@suse.com \ --cc=akpm@linux-foundation.org \ --cc=bp@alien8.de \ --cc=hpa@linux.intel.com \ --cc=jkosina@suse.cz \ --cc=linux-efi@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=matt.fleming@intel.com \ --cc=matt@console-pimps.org \ --cc=matthew.garrett@nebula.com \ --cc=mingo@kernel.org \ --cc=oneukum@suse.de \ --cc=rja@sgi.com \ --cc=tglx@linutronix.de \ --cc=torvalds@linux-foundation.org \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.