66 lines
2.0 KiB
Diff
66 lines
2.0 KiB
Diff
From: Ben Hutchings <ben@decadent.org.uk>
|
|
Subject: x86/efi: Autoload efivars
|
|
Date: Mon, 18 Mar 2013 22:59:14 +0000
|
|
Bug-Debian: http://bugs.debian.org/703363
|
|
Forwarded: no
|
|
|
|
efivars is generally useful to have on EFI systems, and in some cases
|
|
it may be impossible to load it after a kernel upgrade in order to
|
|
complete a boot loader update. efi-pstore is similarly useful though
|
|
less critical. At the same time we don't want to waste memory on
|
|
non-EFI systems by making them built-in.
|
|
|
|
Instead, give them module aliases as if they are platform drivers, and
|
|
register a corresponding platform device whenever EFI runtime services
|
|
are available. This should trigger udev to load them.
|
|
|
|
---
|
|
--- a/arch/x86/platform/efi/efi.c
|
|
+++ b/arch/x86/platform/efi/efi.c
|
|
@@ -42,6 +42,7 @@
|
|
#include <linux/io.h>
|
|
#include <linux/reboot.h>
|
|
#include <linux/bcd.h>
|
|
+#include <linux/platform_device.h>
|
|
|
|
#include <asm/setup.h>
|
|
#include <asm/efi.h>
|
|
@@ -783,6 +784,20 @@ void __init efi_late_init(void)
|
|
efi_bgrt_init();
|
|
}
|
|
|
|
+#ifdef CONFIG_EFI_VARS_MODULE
|
|
+static int __init efi_load_efivars(void)
|
|
+{
|
|
+ struct platform_device *pdev;
|
|
+
|
|
+ if (!efi_enabled(EFI_RUNTIME_SERVICES))
|
|
+ return 0;
|
|
+
|
|
+ pdev = platform_device_register_simple("efivars", 0, NULL, 0);
|
|
+ return IS_ERR(pdev) ? PTR_ERR(pdev) : 0;
|
|
+}
|
|
+device_initcall(efi_load_efivars);
|
|
+#endif
|
|
+
|
|
void __init efi_set_executable(efi_memory_desc_t *md, bool executable)
|
|
{
|
|
u64 addr, npages;
|
|
--- a/drivers/firmware/efi/efivars.c
|
|
+++ b/drivers/firmware/efi/efivars.c
|
|
@@ -77,6 +77,7 @@ MODULE_AUTHOR("Matt Domsch <Matt_Domsch@
|
|
MODULE_DESCRIPTION("sysfs interface to EFI Variables");
|
|
MODULE_LICENSE("GPL");
|
|
MODULE_VERSION(EFIVARS_VERSION);
|
|
+MODULE_ALIAS("platform:efivars");
|
|
|
|
LIST_HEAD(efivar_sysfs_list);
|
|
EXPORT_SYMBOL_GPL(efivar_sysfs_list);
|
|
--- a/drivers/firmware/efi/efi-pstore.c
|
|
+++ b/drivers/firmware/efi/efi-pstore.c
|
|
@@ -250,3 +250,4 @@ module_exit(efivars_pstore_exit);
|
|
|
|
MODULE_DESCRIPTION("EFI variable backend for pstore");
|
|
MODULE_LICENSE("GPL");
|
|
+MODULE_ALIAS("platform:efivars");
|