Linux 4.9.310
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.9.310 kernel.
All users of the 4.9 kernel series must upgrade.
The updated 4.9.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.9.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/arm64/silicon-errata.txt | 1 Documentation/kernel-parameters.txt | 9 Makefile | 2 arch/arm/include/asm/kvm_host.h | 5 arch/arm/kvm/psci.c | 4 arch/arm64/Kconfig | 24 + arch/arm64/include/asm/arch_timer.h | 44 +- arch/arm64/include/asm/assembler.h | 34 + arch/arm64/include/asm/cpu.h | 1 arch/arm64/include/asm/cpucaps.h | 4 arch/arm64/include/asm/cpufeature.h | 232 +++++++++++- arch/arm64/include/asm/cputype.h | 63 +++ arch/arm64/include/asm/fixmap.h | 6 arch/arm64/include/asm/insn.h | 2 arch/arm64/include/asm/kvm_host.h | 4 arch/arm64/include/asm/kvm_mmu.h | 2 arch/arm64/include/asm/mmu.h | 8 arch/arm64/include/asm/processor.h | 6 arch/arm64/include/asm/sections.h | 6 arch/arm64/include/asm/sysreg.h | 5 arch/arm64/include/asm/vectors.h | 74 ++++ arch/arm64/kernel/bpi.S | 55 +++ arch/arm64/kernel/cpu_errata.c | 595 ++++++++++++++++++++++++++------- arch/arm64/kernel/cpufeature.c | 167 ++++++--- arch/arm64/kernel/cpuinfo.c | 1 arch/arm64/kernel/entry.S | 197 ++++++++-- arch/arm64/kernel/fpsimd.c | 1 arch/arm64/kernel/insn.c | 29 + arch/arm64/kernel/smp.c | 6 arch/arm64/kernel/traps.c | 4 arch/arm64/kernel/vmlinux.lds.S | 2 arch/arm64/kvm/hyp/hyp-entry.S | 4 arch/arm64/kvm/hyp/switch.c | 9 arch/arm64/mm/fault.c | 17 arch/arm64/mm/mmu.c | 11 drivers/clocksource/Kconfig | 4 drivers/clocksource/arm_arch_timer.c | 192 ++++++++-- include/linux/arm-smccc.h | 7 38 files changed, 1507 insertions(+), 330 deletions(-)
Anshuman Khandual (1):
arm64: Add Cortex-X2 CPU part definition
Arnd Bergmann (1):
arm64: arch_timer: avoid unused function warning
Dave Martin (1):
arm64: capabilities: Update prototype for enable call back
Ding Tianhong (2):
clocksource/drivers/arm_arch_timer: Remove fsl-a008585 parameter clocksource/drivers/arm_arch_timer: Introduce generic errata handling infrastructure
Greg Kroah-Hartman (1):
Linux 4.9.310
James Morse (20):
arm64: Remove useless UAO IPI and describe how this gets enabled
arm64: entry.S: Add ventry overflow sanity checks
arm64: entry: Make the trampoline cleanup optional
arm64: entry: Free up another register on kpti's tramp_exit path
arm64: entry: Move the trampoline data page before the text page
arm64: entry: Allow tramp_alias to access symbols after the 4K boundary
arm64: entry: Don't assume tramp_vectors is the start of the vectors
arm64: entry: Move trampoline macros out of ifdef'd section
arm64: entry: Make the kpti trampoline's kpti sequence optional
arm64: entry: Allow the trampoline text to occupy multiple pages
arm64: entry: Add non-kpti __bp_harden_el1_vectors for mitigations
arm64: Move arm64_update_smccc_conduit() out of SSBD ifdef
arm64: entry: Add vectors that have the bhb mitigation sequences
arm64: entry: Add macro for reading symbol addresses from the trampoline
arm64: Add percpu vectors for EL1
KVM: arm64: Add templates for BHB mitigation sequences
arm64: Mitigate spectre style branch history side channels
KVM: arm64: Allow SMCCC_ARCH_WORKAROUND_3 to be discovered and migrated
arm64: add ID_AA64ISAR2_EL1 sys register
arm64: Use the clearbhb instruction in mitigations
Marc Zyngier (6):
arm64: arch_timer: Add infrastructure for multiple erratum detection methods
arm64: arch_timer: Add erratum handler for CPU-specific capability
arm64: arch_timer: Add workaround for ARM erratum 1188873
arm64: Add silicon-errata.txt entry for ARM erratum 1188873
arm64: Make ARM64_ERRATUM_1188873 depend on COMPAT
arm64: Add part number for Neoverse N1
Rob Herring (1):
arm64: Add part number for Arm Cortex-A77
Robert Richter (1):
arm64: errata: Provide macro for major and minor cpu revisions
Suzuki K Poulose (10):
arm64: Add MIDR encoding for Arm Cortex-A55 and Cortex-A35
arm64: capabilities: Move errata work around check on boot CPU
arm64: capabilities: Move errata processing code
arm64: capabilities: Prepare for fine grained capabilities
arm64: capabilities: Add flags to handle the conflicts on late CPU
arm64: capabilities: Clean up midr range helpers
arm64: Add helpers for checking CPU MIDR against a range
arm64: capabilities: Add support for checks based on a list of MIDRs
arm64: Add Neoverse-N2, Cortex-A710 CPU part definition
arm64: Add helper to decode register from instruction
Greg Kroah-Hartman
maintainerDocumentation/arm64/silicon-errata.txt +1 -0
@@ -55,6 +55,7 @@ stable kernels. | ARM | Cortex-A57 | #834220 | ARM64_ERRATUM_834220 | | ARM | Cortex-A72 | #853709 | N/A | | ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 | +| ARM | Cortex-A76 | #1188873 | ARM64_ERRATUM_1188873 | | ARM | MMU-500 | #841119,#826419 | N/A | | | | | | | Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 |
Documentation/kernel-parameters.txt +0 -9
@@ -751,15 +751,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted. loops can be debugged more effectively on production systems. - clocksource.arm_arch_timer.fsl-a008585= - [ARM64] - Format: <bool> - Enable/disable the workaround of Freescale/NXP - erratum A-008585. This can be useful for KVM - guests, if the guest device tree doesn't show the - erratum. If unspecified, the workaround is - enabled based on the device tree. - clearcpuid=BITNUM [X86] Disable CPUID feature X for the kernel. See arch/x86/include/asm/cpufeatures.h for the valid bit
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 9 -SUBLEVEL = 309 +SUBLEVEL = 310 EXTRAVERSION = NAME = Roaring Lionus
arch/arm/include/asm/kvm_host.h +5 -0
@@ -349,4 +349,9 @@ static inline int kvm_arm_have_ssbd(void) return KVM_SSBD_UNKNOWN; } +static inline bool kvm_arm_spectre_bhb_mitigated (void ) +{ +/* 32bit guests don't need firmware for this */ +return false; +}#endif /* __ARM_KVM_HOST_H__ */
arch/arm/kvm/psci.c +4 -0
@@ -431,6 +431,10 @@ int kvm_hvc_call_handler(struct kvm_vcpu *vcpu)break ; }break ; +case ARM_SMCCC_ARCH_WORKAROUND_3 : +if (kvm_arm_spectre_bhb_mitigated ()) + val =SMCCC_RET_SUCCESS ; +break ; }break ;default :
arch/arm64/Kconfig +24 -0
@@ -441,6 +441,20 @@ config ARM64_ERRATUM_1024718 If unsure, say Y. +config ARM64_ERRATUM_1188873 + bool "Cortex-A76: MRC read following MRRC read of specific Generic Timer in AArch32 might give incorrect result" + default y + depends on COMPAT + select ARM_ARCH_TIMER_OOL_WORKAROUND + help + This option adds work arounds for ARM Cortex-A76 erratum 1188873 + + Affected Cortex-A76 cores (r0p0, r1p0, r2p0) could cause + register corruption when accessing the timer registers from + AArch32 userspace. + + If unsure, say Y. + config CAVIUM_ERRATUM_22375 bool "Cavium erratum 22375, 24313" default y
@@ -785,6 +799,16 @@ config ARM64_SSBD If unsure, say Y. +config MITIGATE_SPECTRE_BRANCH_HISTORY + bool "Mitigate Spectre style attacks against branch history" if EXPERT + default y + depends on HARDEN_BRANCH_PREDICTOR || !KVM + help + Speculation attacks against some high-performance processors can + make use of branch history to influence future speculation. + When taking an exception from user-space, a sequence of branches + or a firmware call overwrites the branch history. + menuconfig ARMV8_DEPRECATED bool "Emulate deprecated/obsolete ARMv8 instructions" depends on COMPAT
arch/arm64/include/asm/arch_timer.h +19 -25
60 lines not on this page · raw message
arch/arm64/include/asm/assembler.h +34 -0
@@ -94,6 +94,13 @@ hint #20 .endm +/* +* Clear Branch History instruction +*/ + .macro clearbhb + hint #22 + .endm +/* * Sanitise a 64-bit bounded index wrt speculation, returning zero if out * of bounds.
@@ -494,4 +501,31 @@ alternative_endif .Ldone\@: .endm + .macro __mitigate_spectre_bhb_loop tmp +#ifdef CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY +alternative_cb spectre_bhb_patch_loop_iter + mov \tmp, #32 // Patched to correct the immediate +alternative_cb_end +.Lspectre_bhb_loop\@: + b . + 4 + subs \tmp, \tmp, #1 + b.ne .Lspectre_bhb_loop\@ + dsb nsh + isb +#endif /* CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY */ + .endm + + /* Save/restores x0-x3 to the stack */ + .macro __mitigate_spectre_bhb_fw +#ifdef CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY + stp x0, x1, [sp, #-16]! + stp x2, x3, [sp, #-16]! + mov w0, #ARM_SMCCC_ARCH_WORKAROUND_3 +alternative_cb arm64_update_smccc_conduit + nop // Patched to SMC/HVC #0 +alternative_cb_end + ldp x2, x3, [sp], #16 + ldp x0, x1, [sp], #16 +#endif /* CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY */ + .endm #endif /* __ASM_ASSEMBLER_H */
arch/arm64/include/asm/cpu.h +1 -0
@@ -36,6 +36,7 @@ struct cpuinfo_arm64 {u64 reg_id_aa64dfr1;u64 reg_id_aa64isar0;u64 reg_id_aa64isar1; +u64 reg_id_aa64isar2;u64 reg_id_aa64mmfr0;u64 reg_id_aa64mmfr1;u64 reg_id_aa64mmfr2;
arch/arm64/include/asm/cpucaps.h +3 -1
@@ -38,7 +38,9 @@#define ARM64_HARDEN_BRANCH_PREDICTOR 17#define ARM64_SSBD 18#define ARM64_MISMATCHED_CACHE_TYPE 19 +#define ARM64_WORKAROUND_1188873 20 +#define ARM64_SPECTRE_BHB 21 -#define ARM64_NCAPS 20 +#define ARM64_NCAPS 22#endif /* __ASM_CPUCAPS_H */
arch/arm64/include/asm/cpufeature.h +216 -16
279 lines not on this page · raw message
arch/arm64/include/asm/cputype.h +63 -0
81 lines not on this page · raw message
arch/arm64/include/asm/fixmap.h +4 -2
@@ -53,9 +53,11 @@ enum fixed_addresses { FIX_TEXT_POKE0,#ifdef CONFIG_UNMAP_KERNEL_AT_EL0 +FIX_ENTRY_TRAMP_TEXT3 , +FIX_ENTRY_TRAMP_TEXT2 , +FIX_ENTRY_TRAMP_TEXT1 ,FIX_ENTRY_TRAMP_DATA , -FIX_ENTRY_TRAMP_TEXT , -#define TRAMP_VALIAS (__fix_to_virt(FIX_ENTRY_TRAMP_TEXT)) +#define TRAMP_VALIAS (__fix_to_virt(FIX_ENTRY_TRAMP_TEXT1))#endif /* CONFIG_UNMAP_KERNEL_AT_EL0 */ __end_of_permanent_fixed_addresses,
arch/arm64/include/asm/insn.h +2 -0
@@ -332,6 +332,8 @@ bool aarch64_insn_is_branch(u32 insn);u64 aarch64_insn_decode_immediate (enum aarch64_insn_imm_type type,u32 insn);u32 aarch64_insn_encode_immediate (enum aarch64_insn_imm_type type,u32 insn,u64 imm); +u32 aarch64_insn_decode_register (enum aarch64_insn_register_type type, +u32 insn);u32 aarch64_insn_gen_branch_imm (unsigned long pc,unsigned long addr,enum aarch64_insn_branch_type type); u32 aarch64_insn_gen_comp_branch_imm(unsigned long pc, unsigned long addr,
arch/arm64/include/asm/kvm_host.h +4 -0
@@ -452,4 +452,8 @@ static inline int kvm_arm_have_ssbd(void) } } +static inline bool kvm_arm_spectre_bhb_mitigated (void ) +{ +return arm64_get_spectre_bhb_state () ==SPECTRE_MITIGATED ; +}#endif /* __ARM64_KVM_HOST_H__ */
arch/arm64/include/asm/kvm_mmu.h +1 -1
@@ -362,7 +362,7 @@ static inline void *kvm_get_hyp_vector(void)struct bp_hardening_data *data =arm64_get_bp_hardening_data ();void *vect =kvm_ksym_ref (__kvm_hyp_vector); -if (data->fn) { +if (data->template_start) { vect = __bp_harden_hyp_vecs_start + data->hyp_vectors_slot *SZ_2K ;
arch/arm64/include/asm/mmu.h +7 -1
@@ -34,7 +34,7 @@ typedef struct {*/ #define ASID (mm) ((mm)->context.id.counter & 0xffff) -static inline bool arm64_kernel_unmapped_at_el0 (void ) +static __always_inline bool arm64_kernel_unmapped_at_el0(void) {return IS_ENABLED (CONFIG_UNMAP_KERNEL_AT_EL0 ) &&cpus_have_const_cap (ARM64_UNMAP_KERNEL_AT_EL0 );
@@ -45,6 +45,12 @@ typedef void (*bp_hardening_cb_t)(void);struct bp_hardening_data {int hyp_vectors_slot;bp_hardening_cb_t fn; + +/* +* template_start is only used by the BHB mitigation to identify the +* hyp_vectors_slot sequence. +*/ +const char *template_start; };#ifdef CONFIG_HARDEN_BRANCH_PREDICTOR
arch/arm64/include/asm/processor.h +3 -3
@@ -37,6 +37,7 @@#include <linux/string.h> #include <asm/alternative.h> +#include <asm/cpufeature.h> #include <asm/fpsimd.h> #include <asm/hw_breakpoint.h> #include <asm/lse.h>
@@ -219,9 +220,8 @@ static inline void spin_lock_prefetch(const void *ptr)#endif -int cpu_enable_pan (void *__unused); -int cpu_enable_uao (void *__unused); -int cpu_enable_cache_maint_trap (void *__unused); +void cpu_enable_pan (const struct arm64_cpu_capabilities *__unused); +void cpu_enable_cache_maint_trap (const struct arm64_cpu_capabilities *__unused);#endif /* __ASSEMBLY__ */ #endif /* __ASM_PROCESSOR_H */
arch/arm64/include/asm/sections.h +6 -0
@@ -26,5 +26,11 @@ extern char __hyp_text_start[], __hyp_text_end[];extern char __idmap_text_start[], __idmap_text_end[];extern char __irqentry_text_start[], __irqentry_text_end[];extern char __mmuoff_data_start[], __mmuoff_data_end[]; +extern char __entry_tramp_text_start[], __entry_tramp_text_end[]; + +static inline size_t entry_tramp_text_size (void ) +{ +return __entry_tramp_text_end - __entry_tramp_text_start; +}#endif /* __ASM_SECTIONS_H */
arch/arm64/include/asm/sysreg.h +5 -0
@@ -70,6 +70,7 @@#define SYS_ID_AA64ISAR0_EL1 sys_reg(3, 0, 0, 6, 0)#define SYS_ID_AA64ISAR1_EL1 sys_reg(3, 0, 0, 6, 1) +#define SYS_ID_AA64ISAR2_EL1 sys_reg(3, 0, 0, 6, 2)#define SYS_ID_AA64MMFR0_EL1 sys_reg(3, 0, 0, 7, 0)#define SYS_ID_AA64MMFR1_EL1 sys_reg(3, 0, 0, 7, 1)
@@ -173,6 +174,9 @@#define ID_AA64ISAR0_SHA1_SHIFT 8#define ID_AA64ISAR0_AES_SHIFT 4 +/* id_aa64isar2 */ +#define ID_AA64ISAR2_CLEARBHB_SHIFT 28 +/* id_aa64pfr0 */ #define ID_AA64PFR0_CSV3_SHIFT 60#define ID_AA64PFR0_CSV2_SHIFT 56
@@ -211,6 +215,7 @@#define ID_AA64MMFR0_TGRAN16_SUPPORTED 0x1/* id_aa64mmfr1 */ +#define ID_AA64MMFR1_ECBHB_SHIFT 60#define ID_AA64MMFR1_PAN_SHIFT 20#define ID_AA64MMFR1_LOR_SHIFT 16#define ID_AA64MMFR1_HPD_SHIFT 12
arch/arm64/include/asm/vectors.h new file +74 -0
74 lines not on this page · raw message
arch/arm64/kernel/bpi.S +55 -0
58 lines not on this page · raw message
arch/arm64/kernel/cpu_errata.c +481 -114
785 lines not on this page · raw message
arch/arm64/kernel/cpufeature.c +121 -46
407 lines not on this page · raw message
arch/arm64/kernel/cpuinfo.c +1 -0
@@ -335,6 +335,7 @@ static void __cpuinfo_store_cpu(struct cpuinfo_arm64 *info) info->reg_id_aa64dfr1 =read_cpuid (ID_AA64DFR1_EL1 ); info->reg_id_aa64isar0 =read_cpuid (ID_AA64ISAR0_EL1 ); info->reg_id_aa64isar1 =read_cpuid (ID_AA64ISAR1_EL1 ); + info->reg_id_aa64isar2 =read_cpuid (ID_AA64ISAR2_EL1 ); info->reg_id_aa64mmfr0 =read_cpuid (ID_AA64MMFR0_EL1 ); info->reg_id_aa64mmfr1 =read_cpuid (ID_AA64MMFR1_EL1 ); info->reg_id_aa64mmfr2 =read_cpuid (ID_AA64MMFR2_EL1 );
arch/arm64/kernel/entry.S +156 -41
281 lines not on this page · raw message
arch/arm64/kernel/fpsimd.c +1 -0
@@ -26,6 +26,7 @@#include <linux/hardirq.h> #include <asm/fpsimd.h> +#include <asm/cpufeature.h> #include <asm/cputype.h> #define FPEXC_IOF (1 << 0)
arch/arm64/kernel/insn.c +29 -0
@@ -418,6 +418,35 @@ u32 __kprobes aarch64_insn_encode_immediate(enum aarch64_insn_imm_type type,return insn; } +u32 aarch64_insn_decode_register (enum aarch64_insn_register_type type, +u32 insn) +{ +int shift; + +switch (type) { +case AARCH64_INSN_REGTYPE_RT : +case AARCH64_INSN_REGTYPE_RD : + shift =0 ; +break ; +case AARCH64_INSN_REGTYPE_RN : + shift =5 ; +break ; +case AARCH64_INSN_REGTYPE_RT2 : +case AARCH64_INSN_REGTYPE_RA : + shift =10 ; +break ; +case AARCH64_INSN_REGTYPE_RM : + shift =16 ; +break ; +default : +pr_err ("%s: unknown register type encoding %d\n" , __func__, + type); +return 0 ; + } + +return (insn >> shift) &GENMASK (4 ,0 ); +} +static u32 aarch64_insn_encode_register (enum aarch64_insn_register_type type,u32 insn,enum aarch64_insn_register reg)
arch/arm64/kernel/smp.c +0 -6
@@ -444,12 +444,6 @@ void __init smp_prepare_boot_cpu(void)jump_label_init ();cpuinfo_store_boot_cpu ();save_boot_cpu_run_el (); -/* -* Run the errata work around checks on the boot CPU, once we have -* initialised the cpu feature infrastructure from -* cpuinfo_store_boot_cpu() above. -*/ -update_cpu_errata_workarounds (); }static u64 __init of_get_cpu_mpidr (struct device_node *dn)
arch/arm64/kernel/traps.c +2 -2
@@ -34,6 +34,7 @@#include <asm/atomic.h> #include <asm/bug.h> +#include <asm/cpufeature.h> #include <asm/debug-monitors.h> #include <asm/esr.h> #include <asm/insn.h>
@@ -432,10 +433,9 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs)force_signal_inject (SIGILL ,ILL_ILLOPC , regs,0 ); } -int cpu_enable_cache_maint_trap (void *__unused) +void cpu_enable_cache_maint_trap (const struct arm64_cpu_capabilities *__unused) {config_sctlr_el1 (SCTLR_EL1_UCI ,0 ); -return 0 ; }#define __user_cache_maint (insn, address, res) \
arch/arm64/kernel/vmlinux.lds.S +1 -1
@@ -261,7 +261,7 @@ ASSERT(__hibernate_exit_text_end - (__hibernate_exit_text_start & ~(SZ_4K - 1)) <= SZ_4K, "Hibernate exit text too big or misaligned") #endif #ifdef CONFIG_UNMAP_KERNEL_AT_EL0 -ASSERT((__entry_tramp_text_end - __entry_tramp_text_start) == PAGE_SIZE, +ASSERT((__entry_tramp_text_end - __entry_tramp_text_start) <= 3*PAGE_SIZE, "Entry trampoline text too big") #endif /*
arch/arm64/kvm/hyp/hyp-entry.S +4 -0
@@ -136,6 +136,10 @@ el1_hvc_guest: /* ARM_SMCCC_ARCH_WORKAROUND_2 handling */ eor w1, w1, #(ARM_SMCCC_ARCH_WORKAROUND_1 ^ \ ARM_SMCCC_ARCH_WORKAROUND_2) + cbz w1, wa_epilogue + + eor w1, w1, #(ARM_SMCCC_ARCH_WORKAROUND_2 ^ \ + ARM_SMCCC_ARCH_WORKAROUND_3) cbnz w1, el1_trap #ifdef CONFIG_ARM64_SSBD
arch/arm64/kvm/hyp/switch.c +6 -3
@@ -26,7 +26,7 @@#include <asm/kvm_emulate.h> #include <asm/kvm_hyp.h> #include <asm/uaccess.h> - +#include <asm/vectors.h> extern struct exception_table_entry __start___kvm_ex_table;extern struct exception_table_entry __stop___kvm_ex_table;
@@ -107,11 +107,14 @@ static void __hyp_text __activate_traps(struct kvm_vcpu *vcpu) static void __hyp_text __deactivate_traps_vhe(void) { -extern char vectors[];/* kernel exception vectors */ +const char *host_vectors = vectors;write_sysreg (HCR_HOST_VHE_FLAGS , hcr_el2);write_sysreg (CPACR_EL1_FPEN , cpacr_el1); -write_sysreg (vectors, vbar_el1); + +if (!arm64_kernel_unmapped_at_el0 ()) + host_vectors =__this_cpu_read (this_cpu_vector); +write_sysreg (host_vectors, vbar_el1); } static void __hyp_text __deactivate_traps_nvhe(void)
arch/arm64/mm/fault.c +1 -16
@@ -727,7 +727,7 @@ asmlinkage int __exception do_debug_exception(unsigned long addr_if_watchpoint,NOKPROBE_SYMBOL (do_debug_exception);#ifdef CONFIG_ARM64_PAN -int cpu_enable_pan (void *__unused) +void cpu_enable_pan (const struct arm64_cpu_capabilities *__unused) {/* * We modify PSTATE. This won't work from irq context as the PSTATE
@@ -737,20 +737,5 @@ int cpu_enable_pan(void *__unused)config_sctlr_el1 (SCTLR_EL1_SPAN ,0 ); asm(SET_PSTATE_PAN(1)); -return 0 ; }#endif /* CONFIG_ARM64_PAN */ - -#ifdef CONFIG_ARM64_UAO -/* -* Kernel threads have fs=KERNEL_DS by default, and don't need to call -* set_fs(), devtmpfs in particular relies on this behaviour. -* We need to enable the feature at runtime (instead of adding it to -* PSR_MODE_EL1h) as the feature may not be implemented by the cpu. -*/ -int cpu_enable_uao (void *__unused) -{ - asm(SET_PSTATE_UAO(1)); -return 0 ; -} -#endif /* CONFIG_ARM64_UAO */
arch/arm64/mm/mmu.c +8 -3
@@ -438,6 +438,7 @@ static void __init map_kernel_segment(pgd_t *pgd, void *va_start, void *va_end,#ifdef CONFIG_UNMAP_KERNEL_AT_EL0 static int __init map_entry_trampoline (void ) { +int i;extern char __entry_tramp_text_start[];pgprot_t prot = rodata_enabled ?PAGE_KERNEL_ROX :PAGE_KERNEL_EXEC ;
@@ -448,11 +449,15 @@ static int __init map_entry_trampoline(void)/* Map only the text into the trampoline page table */ memset (tramp_pg_dir,0 ,PGD_SIZE ); -__create_pgd_mapping (tramp_pg_dir, pa_start,TRAMP_VALIAS ,PAGE_SIZE , - prot, pgd_pgtable_alloc,0 ); +__create_pgd_mapping (tramp_pg_dir, pa_start,TRAMP_VALIAS , +entry_tramp_text_size (), prot, pgd_pgtable_alloc, +0 );/* Map both the text and data into the kernel page table */ -__set_fixmap (FIX_ENTRY_TRAMP_TEXT , pa_start, prot); +for (i =0 ; i <DIV_ROUND_UP (entry_tramp_text_size (),PAGE_SIZE ); i++) +__set_fixmap (FIX_ENTRY_TRAMP_TEXT1 - i, + pa_start + i *PAGE_SIZE , prot); +if (IS_ENABLED (CONFIG_RANDOMIZE_BASE )) {extern char __entry_tramp_data_start[];
drivers/clocksource/Kconfig +4 -0
@@ -305,10 +305,14 @@ config ARM_ARCH_TIMER_EVTSTREAM This must be disabled for hardware validation purposes to detect any hardware anomalies of missing events. +config ARM_ARCH_TIMER_OOL_WORKAROUND + bool + config FSL_ERRATUM_A008585 bool "Workaround for Freescale/NXP Erratum A-008585" default y depends on ARM_ARCH_TIMER && ARM64 + select ARM_ARCH_TIMER_OOL_WORKAROUND help This option enables a workaround for Freescale/NXP Erratum A-008585 ("ARM generic timer may contain an erroneous
drivers/clocksource/arm_arch_timer.c +153 -39
266 lines not on this page · raw message
include/linux/arm-smccc.h +7 -0
@@ -85,6 +85,13 @@ ARM_SMCCC_SMC_32, \ 0, 0x7fff) +#define ARM_SMCCC_ARCH_WORKAROUND_3 \ + ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ + ARM_SMCCC_SMC_32, \ + 0, 0x3fff) + +#define SMCCC_ARCH_WORKAROUND_RET_UNAFFECTED 1 +#ifndef __ASSEMBLY__#include <linux/linkage.h>