[x86] efi: Make "noefi" really disable EFI runtime serivces
svn path=/dists/sid/linux/; revision=19840
This commit is contained in:
parent
906dab2b06
commit
45a3bb5a44
|
@ -174,6 +174,7 @@ linux (3.2.39-1) UNRELEASED; urgency=low
|
|||
- possible bugfix, au_lkup_by_ino() returns ESTALE
|
||||
* [x86] efi: Clear EFI_RUNTIME_SERVICES rather than EFI_BOOT by "noefi" boot
|
||||
parameter
|
||||
* [x86] efi: Make "noefi" really disable EFI runtime serivces
|
||||
* drm, agp: Update to 3.4.32
|
||||
- drm/radeon: add WAIT_UNTIL to the non-VM safe regs list for cayman/TN
|
||||
- drm/radeon: prevent crash in the ring space allocation
|
||||
|
|
105
debian/patches/bugfix/x86/x86-efi-Make-noefi-really-disable-EFI-runtime-serivc.patch
vendored
Normal file
105
debian/patches/bugfix/x86/x86-efi-Make-noefi-really-disable-EFI-runtime-serivc.patch
vendored
Normal file
|
@ -0,0 +1,105 @@
|
|||
From: Matt Fleming <matt.fleming@intel.com>
|
||||
Date: Wed, 20 Feb 2013 20:36:12 +0000
|
||||
Subject: x86, efi: Make "noefi" really disable EFI runtime serivces
|
||||
|
||||
commit fb834c7acc5e140cf4f9e86da93a66de8c0514da upstream.
|
||||
|
||||
commit 1de63d60cd5b ("efi: Clear EFI_RUNTIME_SERVICES rather than
|
||||
EFI_BOOT by "noefi" boot parameter") attempted to make "noefi" true to
|
||||
its documentation and disable EFI runtime services to prevent the
|
||||
bricking bug described in commit e0094244e41c ("samsung-laptop:
|
||||
Disable on EFI hardware"). However, it's not possible to clear
|
||||
EFI_RUNTIME_SERVICES from an early param function because
|
||||
EFI_RUNTIME_SERVICES is set in efi_init() *after* parse_early_param().
|
||||
|
||||
This resulted in "noefi" effectively becoming a no-op and no longer
|
||||
providing users with a way to disable EFI, which is bad for those
|
||||
users that have buggy machines.
|
||||
|
||||
Reported-by: Walt Nelson Jr <walt0924@gmail.com>
|
||||
Cc: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
|
||||
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
||||
Link: http://lkml.kernel.org/r/1361392572-25657-1-git-send-email-matt@console-pimps.org
|
||||
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
|
||||
[bwh: Backported to 3.2: efi_runtime_init() is not a separate function,
|
||||
so put a whole set of statements in an if (!disable_runtime) block]
|
||||
---
|
||||
--- a/arch/x86/platform/efi/efi.c
|
||||
+++ b/arch/x86/platform/efi/efi.c
|
||||
@@ -83,9 +83,10 @@ int efi_enabled(int facility)
|
||||
}
|
||||
EXPORT_SYMBOL(efi_enabled);
|
||||
|
||||
+static bool disable_runtime = false;
|
||||
static int __init setup_noefi(char *arg)
|
||||
{
|
||||
- clear_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility);
|
||||
+ disable_runtime = true;
|
||||
return 0;
|
||||
}
|
||||
early_param("noefi", setup_noefi);
|
||||
@@ -549,35 +550,37 @@ void __init efi_init(void)
|
||||
|
||||
set_bit(EFI_CONFIG_TABLES, &x86_efi_facility);
|
||||
|
||||
- /*
|
||||
- * Check out the runtime services table. We need to map
|
||||
- * the runtime services table so that we can grab the physical
|
||||
- * address of several of the EFI runtime functions, needed to
|
||||
- * set the firmware into virtual mode.
|
||||
- */
|
||||
- runtime = early_ioremap((unsigned long)efi.systab->runtime,
|
||||
- sizeof(efi_runtime_services_t));
|
||||
- if (runtime != NULL) {
|
||||
- /*
|
||||
- * We will only need *early* access to the following
|
||||
- * two EFI runtime services before set_virtual_address_map
|
||||
- * is invoked.
|
||||
- */
|
||||
- efi_phys.get_time = (efi_get_time_t *)runtime->get_time;
|
||||
- efi_phys.set_virtual_address_map =
|
||||
- (efi_set_virtual_address_map_t *)
|
||||
- runtime->set_virtual_address_map;
|
||||
+ if (!disable_runtime) {
|
||||
/*
|
||||
- * Make efi_get_time can be called before entering
|
||||
- * virtual mode.
|
||||
+ * Check out the runtime services table. We need to map
|
||||
+ * the runtime services table so that we can grab the physical
|
||||
+ * address of several of the EFI runtime functions, needed to
|
||||
+ * set the firmware into virtual mode.
|
||||
*/
|
||||
- efi.get_time = phys_efi_get_time;
|
||||
-
|
||||
- set_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility);
|
||||
- } else
|
||||
- printk(KERN_ERR "Could not map the EFI runtime service "
|
||||
- "table!\n");
|
||||
- early_iounmap(runtime, sizeof(efi_runtime_services_t));
|
||||
+ runtime = early_ioremap((unsigned long)efi.systab->runtime,
|
||||
+ sizeof(efi_runtime_services_t));
|
||||
+ if (runtime != NULL) {
|
||||
+ /*
|
||||
+ * We will only need *early* access to the following
|
||||
+ * two EFI runtime services before set_virtual_address_map
|
||||
+ * is invoked.
|
||||
+ */
|
||||
+ efi_phys.get_time = (efi_get_time_t *)runtime->get_time;
|
||||
+ efi_phys.set_virtual_address_map =
|
||||
+ (efi_set_virtual_address_map_t *)
|
||||
+ runtime->set_virtual_address_map;
|
||||
+ /*
|
||||
+ * Make efi_get_time can be called before entering
|
||||
+ * virtual mode.
|
||||
+ */
|
||||
+ efi.get_time = phys_efi_get_time;
|
||||
+
|
||||
+ set_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility);
|
||||
+ } else
|
||||
+ printk(KERN_ERR "Could not map the EFI runtime service "
|
||||
+ "table!\n");
|
||||
+ early_iounmap(runtime, sizeof(efi_runtime_services_t));
|
||||
+ }
|
||||
|
||||
/* Map the EFI memory map */
|
||||
memmap.map = early_ioremap((unsigned long)memmap.phys_map,
|
|
@ -625,3 +625,4 @@ features/all/line6/0105-staging-line6-drop-dump-requests-from-pod-startup.patch
|
|||
features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch
|
||||
bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.patch
|
||||
bugfix/x86/efi-Clear-EFI_RUNTIME_SERVICES-rather-than-EFI_BOOT-.patch
|
||||
bugfix/x86/x86-efi-Make-noefi-really-disable-EFI-runtime-serivc.patch
|
||||
|
|
Loading…
Reference in New Issue