EFI fixes
Subsystems (3)
Linus,
Please pull the latest efi-urgent-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git efi-urgent-for-linus
# HEAD: 6862e6ad95e984991a6ceec592cf67831658f928 efi/capsule: Allocate whole capsule into virtual memory
A fix for EFI capsules and an SGI UV platform fix.
Thanks,
Ingo
------------------>
Alex Thorlton (1):
x86/platform/uv: Skip UV runtime services mapping in the efi_runtime_disabled case
Austin Christ (1):
efi/capsule: Allocate whole capsule into virtual memory
arch/x86/platform/uv/bios_uv.c | 3 ++- drivers/firmware/efi/capsule-loader.c | 8 +++++--- drivers/firmware/efi/capsule.c | 6 +++--- 3 files changed, 10 insertions(+), 7 deletions(-)
arch/x86/platform/uv/bios_uv.c +2 -1
@@ -187,7 +187,8 @@ EXPORT_SYMBOL_GPL(uv_bios_set_legacy_vga_target);void uv_bios_init (void ) { uv_systab =NULL ; -if ((efi.uv_systab ==EFI_INVALID_TABLE_ADDR ) || !efi.uv_systab) { +if ((efi.uv_systab ==EFI_INVALID_TABLE_ADDR ) || + !efi.uv_systab ||efi_runtime_disabled ()) {pr_crit ("UV: UVsystab: missing\n" );return ; }
drivers/firmware/efi/capsule-loader.c +5 -3
@@ -16,6 +16,7 @@#include <linux/slab.h> #include <linux/mutex.h> #include <linux/efi.h> +#include <linux/vmalloc.h> #define NO_FURTHER_WRITE_ACTION -1
@@ -108,14 +109,15 @@ static ssize_t efi_capsule_submit_update(struct capsule_info *cap_info)int ret;void *cap_hdr_temp; - cap_hdr_temp =kmap (cap_info->pages[0 ]); + cap_hdr_temp =vmap (cap_info->pages, cap_info->index, +VM_MAP ,PAGE_KERNEL );if (!cap_hdr_temp) { -pr_debug ("%s: kmap() failed\n" , __func__); +pr_debug ("%s: vmap() failed\n" , __func__);return -EFAULT ; } ret =efi_capsule_update (cap_hdr_temp, cap_info->pages); -kunmap (cap_info->pages[0 ]); +vunmap (cap_hdr_temp);if (ret) {pr_err ("%s: efi_capsule_update() failed\n" , __func__);return ret;
drivers/firmware/efi/capsule.c +3 -3
@@ -190,9 +190,9 @@ efi_capsule_update_locked(efi_capsule_header_t *capsule,* map the capsule described by @capsule with its data in @pages and * send it to the firmware via the UpdateCapsule() runtime service. * -* @capsule must be a virtual mapping of the first page in @pages -* (@pages[0]) in the kernel address space. That is, a -* capsule_header_t that describes the entire contents of the capsule +* @capsule must be a virtual mapping of the complete capsule update in the +* kernel address space, as the capsule can be consumed immediately. +* A capsule_header_t that describes the entire contents of the capsule * must be at the start of the first data page. * * Even though this function will validate that the firmware supports