Commit 0e1117b2 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'efi-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull EFI fixes from Ingo Molnar:
 "A fix for EFI capsules and an SGI UV platform fix"

* 'efi-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  efi/capsule: Allocate whole capsule into virtual memory
  x86/platform/uv: Skip UV runtime services mapping in the efi_runtime_disabled case
parents 99091700 6862e6ad
...@@ -187,7 +187,8 @@ EXPORT_SYMBOL_GPL(uv_bios_set_legacy_vga_target); ...@@ -187,7 +187,8 @@ EXPORT_SYMBOL_GPL(uv_bios_set_legacy_vga_target);
void uv_bios_init(void) void uv_bios_init(void)
{ {
uv_systab = NULL; 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"); pr_crit("UV: UVsystab: missing\n");
return; return;
} }
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/efi.h> #include <linux/efi.h>
#include <linux/vmalloc.h>
#define NO_FURTHER_WRITE_ACTION -1 #define NO_FURTHER_WRITE_ACTION -1
...@@ -108,14 +109,15 @@ static ssize_t efi_capsule_submit_update(struct capsule_info *cap_info) ...@@ -108,14 +109,15 @@ static ssize_t efi_capsule_submit_update(struct capsule_info *cap_info)
int ret; int ret;
void *cap_hdr_temp; 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) { if (!cap_hdr_temp) {
pr_debug("%s: kmap() failed\n", __func__); pr_debug("%s: vmap() failed\n", __func__);
return -EFAULT; return -EFAULT;
} }
ret = efi_capsule_update(cap_hdr_temp, cap_info->pages); ret = efi_capsule_update(cap_hdr_temp, cap_info->pages);
kunmap(cap_info->pages[0]); vunmap(cap_hdr_temp);
if (ret) { if (ret) {
pr_err("%s: efi_capsule_update() failed\n", __func__); pr_err("%s: efi_capsule_update() failed\n", __func__);
return ret; return ret;
......
...@@ -190,9 +190,9 @@ efi_capsule_update_locked(efi_capsule_header_t *capsule, ...@@ -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 * map the capsule described by @capsule with its data in @pages and
* send it to the firmware via the UpdateCapsule() runtime service. * send it to the firmware via the UpdateCapsule() runtime service.
* *
* @capsule must be a virtual mapping of the first page in @pages * @capsule must be a virtual mapping of the complete capsule update in the
* (@pages[0]) in the kernel address space. That is, a * kernel address space, as the capsule can be consumed immediately.
* capsule_header_t that describes the entire contents of the capsule * A capsule_header_t that describes the entire contents of the capsule
* must be at the start of the first data page. * must be at the start of the first data page.
* *
* Even though this function will validate that the firmware supports * Even though this function will validate that the firmware supports
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment