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
This commit is contained in:
commit
0e1117b257
|
@ -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 @@
|
||||||
#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)
|
||||||
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,
|
||||||
* 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
|
||||||
|
|
Loading…
Reference in a new issue