summaryrefslogtreecommitdiff
path: root/arch/x86/include
diff options
context:
space:
mode:
authorSrinivasarao P <spathi@codeaurora.org>2018-01-02 15:25:20 +0530
committerSrinivasarao P <spathi@codeaurora.org>2018-01-02 18:31:53 +0530
commit80eb7ccae411759ac85501602aae882dede1c7fa (patch)
tree4a79225bf7ae46bfdd0c42474ea3457b9ec7c48b /arch/x86/include
parentb0e2559a3e52ae84a664bc83155f731bfd7a303d (diff)
parent8bc4213be484e83f578ccbf70f408e0178a8a76f (diff)
Merge android-4.4.104 (8bc4213) into msm-4.4
* refs/heads/tmp-8bc4213 Linux 4.4.104 nfsd: Fix another OPEN stateid race nfsd: Fix stateid races between OPEN and CLOSE nfsd: Make init_open_stateid() a bit more whole drm/i915: Prevent zero length "index" write drm/i915: Don't try indexed reads to alternate slave addresses NFS: revalidate "." etc correctly on "open". mtd: nand: Fix writing mtdoops to nand flash. drm/panel: simple: Add missing panel_simple_unprepare() calls drm/radeon: fix atombios on big endian Revert "drm/radeon: dont switch vt on suspend" bcache: Fix building error on MIPS eeprom: at24: check at24_read/write arguments mmc: core: Do not leave the block driver in a suspended state KVM: x86: inject exceptions produced by x86_decode_insn KVM: x86: Exit to user-mode on #UD intercept when emulator requires KVM: x86: pvclock: Handle first-time write to pvclock-page contains random junk btrfs: clear space cache inode generation always mm/madvise.c: fix madvise() infinite loop under special circumstances mm, thp: Do not make page table dirty unconditionally in touch_p[mu]d() x86/efi-bgrt: Replace early_memremap() with memremap() x86/efi-bgrt: Fix kernel panic when mapping BGRT data ARM: dts: omap3: logicpd-torpedo-37xx-devkit: Fix MMC1 cd-gpio x86/efi: Build our own page table structures x86/efi: Hoist page table switching code into efi_call_virt() x86/mm/pat: Ensure cpa->pfn only contains page frame numbers ipsec: Fix aborted xfrm policy dump crash netlink: add a start callback for starting a netlink dump Documentation: tee subsystem and op-tee driver tee: add OP-TEE driver tee: generic TEE subsystem dt/bindings: add bindings for optee kernel.h: add u64_to_user_ptr() ARM: 8481/2: drivers: psci: replace psci firmware calls ARM: 8480/2: arm64: add implementation for arm-smccc ARM: 8479/2: add implementation for arm-smccc ARM: 8478/2: arm/arm64: add arm-smccc UPSTREAM: net: xfrm: allow clearing socket xfrm policies. Conflicts: arch/arm64/kernel/arm64ksyms.c arch/arm64/kernel/asm-offsets.c arch/arm64/kvm/hyp/fpsimd.S drivers/Kconfig drivers/Makefile drivers/firmware/psci.c drivers/gpu/drm/msm/msm_gem_submit.c drivers/mmc/core/bus.c include/linux/arm-smccc.h Change-Id: Ib22051f60c49ecf3bb7e18f9940ba9a4ac5143af Signed-off-by: Srinivasarao P <spathi@codeaurora.org>
Diffstat (limited to 'arch/x86/include')
-rw-r--r--arch/x86/include/asm/efi.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
index 08b1f2f6ea50..c9e6eab2075b 100644
--- a/arch/x86/include/asm/efi.h
+++ b/arch/x86/include/asm/efi.h
@@ -3,6 +3,7 @@
#include <asm/fpu/api.h>
#include <asm/pgtable.h>
+#include <asm/tlb.h>
/*
* We map the EFI regions needed for runtime services non-contiguously,
@@ -66,6 +67,17 @@ extern u64 asmlinkage efi_call(void *fp, ...);
#define efi_call_phys(f, args...) efi_call((f), args)
+/*
+ * Scratch space used for switching the pagetable in the EFI stub
+ */
+struct efi_scratch {
+ u64 r15;
+ u64 prev_cr3;
+ pgd_t *efi_pgt;
+ bool use_pgd;
+ u64 phys_stack;
+} __packed;
+
#define efi_call_virt(f, ...) \
({ \
efi_status_t __s; \
@@ -73,7 +85,20 @@ extern u64 asmlinkage efi_call(void *fp, ...);
efi_sync_low_kernel_mappings(); \
preempt_disable(); \
__kernel_fpu_begin(); \
+ \
+ if (efi_scratch.use_pgd) { \
+ efi_scratch.prev_cr3 = read_cr3(); \
+ write_cr3((unsigned long)efi_scratch.efi_pgt); \
+ __flush_tlb_all(); \
+ } \
+ \
__s = efi_call((void *)efi.systab->runtime->f, __VA_ARGS__); \
+ \
+ if (efi_scratch.use_pgd) { \
+ write_cr3(efi_scratch.prev_cr3); \
+ __flush_tlb_all(); \
+ } \
+ \
__kernel_fpu_end(); \
preempt_enable(); \
__s; \
@@ -113,6 +138,7 @@ extern void __init efi_memory_uc(u64 addr, unsigned long size);
extern void __init efi_map_region(efi_memory_desc_t *md);
extern void __init efi_map_region_fixed(efi_memory_desc_t *md);
extern void efi_sync_low_kernel_mappings(void);
+extern int __init efi_alloc_page_tables(void);
extern int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages);
extern void __init efi_cleanup_page_tables(unsigned long pa_memmap, unsigned num_pages);
extern void __init old_map_region(efi_memory_desc_t *md);