Loading arch/arm64/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,7 @@ config ARM64 select POWER_SUPPLY select SPARSE_IRQ select SYSCTL_EXCEPTION_TRACE select THREAD_INFO_IN_TASK help ARM 64-bit (AArch64) Linux support. Loading arch/arm64/include/asm/Kbuild +0 −1 Original line number Diff line number Diff line generic-y += bugs.h generic-y += clkdev.h generic-y += cputime.h generic-y += current.h generic-y += delay.h generic-y += div64.h generic-y += dma.h Loading arch/arm64/include/asm/assembler.h +15 −4 Original line number Diff line number Diff line Loading @@ -241,14 +241,25 @@ lr .req x30 // link register .endm /* * @dst: Result of per_cpu(sym, smp_processor_id()) * @sym: The name of the per-cpu variable * @reg: Result of per_cpu(sym, smp_processor_id()) * @tmp: scratch register */ .macro this_cpu_ptr, sym, reg, tmp adr_l \reg, \sym .macro adr_this_cpu, dst, sym, tmp adr_l \dst, \sym mrs \tmp, tpidr_el1 add \dst, \dst, \tmp .endm /* * @dst: Result of READ_ONCE(per_cpu(sym, smp_processor_id())) * @sym: The name of the per-cpu variable * @tmp: scratch register */ .macro ldr_this_cpu dst, sym, tmp adr_l \dst, \sym mrs \tmp, tpidr_el1 add \reg, \reg, \tmp ldr \dst, [\dst, \tmp] .endm /* Loading arch/arm64/include/asm/current.h 0 → 100644 +30 −0 Original line number Diff line number Diff line #ifndef __ASM_CURRENT_H #define __ASM_CURRENT_H #include <linux/compiler.h> #include <asm/sysreg.h> #ifndef __ASSEMBLY__ struct task_struct; /* * We don't use read_sysreg() as we want the compiler to cache the value where * possible. */ static __always_inline struct task_struct *get_current(void) { unsigned long sp_el0; asm ("mrs %0, sp_el0" : "=r" (sp_el0)); return (struct task_struct *)sp_el0; } #define current get_current() #endif /* __ASSEMBLY__ */ #endif /* __ASM_CURRENT_H */ arch/arm64/include/asm/smp.h +13 −1 Original line number Diff line number Diff line Loading @@ -29,11 +29,22 @@ #ifndef __ASSEMBLY__ #include <asm/percpu.h> #include <linux/threads.h> #include <linux/cpumask.h> #include <linux/thread_info.h> #define raw_smp_processor_id() (current_thread_info()->cpu) DECLARE_PER_CPU_READ_MOSTLY(int, cpu_number); /* * We don't use this_cpu_read(cpu_number) as that has implicit writes to * preempt_count, and associated (compiler) barriers, that we'd like to avoid * the expense of. If we're preemptible, the value can be stale at use anyway. * And we can't use this_cpu_ptr() either, as that winds up recursing back * here under CONFIG_DEBUG_PREEMPT=y. */ #define raw_smp_processor_id() (*raw_cpu_ptr(&cpu_number)) struct seq_file; Loading Loading @@ -73,6 +84,7 @@ asmlinkage void secondary_start_kernel(void); */ struct secondary_data { void *stack; struct task_struct *task; long status; }; Loading Loading
arch/arm64/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,7 @@ config ARM64 select POWER_SUPPLY select SPARSE_IRQ select SYSCTL_EXCEPTION_TRACE select THREAD_INFO_IN_TASK help ARM 64-bit (AArch64) Linux support. Loading
arch/arm64/include/asm/Kbuild +0 −1 Original line number Diff line number Diff line generic-y += bugs.h generic-y += clkdev.h generic-y += cputime.h generic-y += current.h generic-y += delay.h generic-y += div64.h generic-y += dma.h Loading
arch/arm64/include/asm/assembler.h +15 −4 Original line number Diff line number Diff line Loading @@ -241,14 +241,25 @@ lr .req x30 // link register .endm /* * @dst: Result of per_cpu(sym, smp_processor_id()) * @sym: The name of the per-cpu variable * @reg: Result of per_cpu(sym, smp_processor_id()) * @tmp: scratch register */ .macro this_cpu_ptr, sym, reg, tmp adr_l \reg, \sym .macro adr_this_cpu, dst, sym, tmp adr_l \dst, \sym mrs \tmp, tpidr_el1 add \dst, \dst, \tmp .endm /* * @dst: Result of READ_ONCE(per_cpu(sym, smp_processor_id())) * @sym: The name of the per-cpu variable * @tmp: scratch register */ .macro ldr_this_cpu dst, sym, tmp adr_l \dst, \sym mrs \tmp, tpidr_el1 add \reg, \reg, \tmp ldr \dst, [\dst, \tmp] .endm /* Loading
arch/arm64/include/asm/current.h 0 → 100644 +30 −0 Original line number Diff line number Diff line #ifndef __ASM_CURRENT_H #define __ASM_CURRENT_H #include <linux/compiler.h> #include <asm/sysreg.h> #ifndef __ASSEMBLY__ struct task_struct; /* * We don't use read_sysreg() as we want the compiler to cache the value where * possible. */ static __always_inline struct task_struct *get_current(void) { unsigned long sp_el0; asm ("mrs %0, sp_el0" : "=r" (sp_el0)); return (struct task_struct *)sp_el0; } #define current get_current() #endif /* __ASSEMBLY__ */ #endif /* __ASM_CURRENT_H */
arch/arm64/include/asm/smp.h +13 −1 Original line number Diff line number Diff line Loading @@ -29,11 +29,22 @@ #ifndef __ASSEMBLY__ #include <asm/percpu.h> #include <linux/threads.h> #include <linux/cpumask.h> #include <linux/thread_info.h> #define raw_smp_processor_id() (current_thread_info()->cpu) DECLARE_PER_CPU_READ_MOSTLY(int, cpu_number); /* * We don't use this_cpu_read(cpu_number) as that has implicit writes to * preempt_count, and associated (compiler) barriers, that we'd like to avoid * the expense of. If we're preemptible, the value can be stale at use anyway. * And we can't use this_cpu_ptr() either, as that winds up recursing back * here under CONFIG_DEBUG_PREEMPT=y. */ #define raw_smp_processor_id() (*raw_cpu_ptr(&cpu_number)) struct seq_file; Loading Loading @@ -73,6 +84,7 @@ asmlinkage void secondary_start_kernel(void); */ struct secondary_data { void *stack; struct task_struct *task; long status; }; Loading