[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
|
- possible bugfix, au_lkup_by_ino() returns ESTALE
|
||||||
* [x86] efi: Clear EFI_RUNTIME_SERVICES rather than EFI_BOOT by "noefi" boot
|
* [x86] efi: Clear EFI_RUNTIME_SERVICES rather than EFI_BOOT by "noefi" boot
|
||||||
parameter
|
parameter
|
||||||
|
* [x86] efi: Make "noefi" really disable EFI runtime serivces
|
||||||
* drm, agp: Update to 3.4.32
|
* drm, agp: Update to 3.4.32
|
||||||
- drm/radeon: add WAIT_UNTIL to the non-VM safe regs list for cayman/TN
|
- drm/radeon: add WAIT_UNTIL to the non-VM safe regs list for cayman/TN
|
||||||
- drm/radeon: prevent crash in the ring space allocation
|
- 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
|
features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch
|
||||||
bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.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/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