diff options
Diffstat (limited to 'arch/arm64/kernel')
| -rw-r--r-- | arch/arm64/kernel/fpsimd.c | 2 | ||||
| -rw-r--r-- | arch/arm64/kernel/process.c | 21 | ||||
| -rw-r--r-- | arch/arm64/kernel/setup.c | 2 |
3 files changed, 19 insertions, 6 deletions
diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index 1f2e4d5a5c0f..bb785d23dbde 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c | |||
| @@ -80,8 +80,10 @@ void fpsimd_thread_switch(struct task_struct *next) | |||
| 80 | 80 | ||
| 81 | void fpsimd_flush_thread(void) | 81 | void fpsimd_flush_thread(void) |
| 82 | { | 82 | { |
| 83 | preempt_disable(); | ||
| 83 | memset(¤t->thread.fpsimd_state, 0, sizeof(struct fpsimd_state)); | 84 | memset(¤t->thread.fpsimd_state, 0, sizeof(struct fpsimd_state)); |
| 84 | fpsimd_load_state(¤t->thread.fpsimd_state); | 85 | fpsimd_load_state(¤t->thread.fpsimd_state); |
| 86 | preempt_enable(); | ||
| 85 | } | 87 | } |
| 86 | 88 | ||
| 87 | #ifdef CONFIG_KERNEL_MODE_NEON | 89 | #ifdef CONFIG_KERNEL_MODE_NEON |
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index 57fb55c44c90..7ae8a1f00c3c 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c | |||
| @@ -143,15 +143,26 @@ void machine_restart(char *cmd) | |||
| 143 | 143 | ||
| 144 | void __show_regs(struct pt_regs *regs) | 144 | void __show_regs(struct pt_regs *regs) |
| 145 | { | 145 | { |
| 146 | int i; | 146 | int i, top_reg; |
| 147 | u64 lr, sp; | ||
| 148 | |||
| 149 | if (compat_user_mode(regs)) { | ||
| 150 | lr = regs->compat_lr; | ||
| 151 | sp = regs->compat_sp; | ||
| 152 | top_reg = 12; | ||
| 153 | } else { | ||
| 154 | lr = regs->regs[30]; | ||
| 155 | sp = regs->sp; | ||
| 156 | top_reg = 29; | ||
| 157 | } | ||
| 147 | 158 | ||
| 148 | show_regs_print_info(KERN_DEFAULT); | 159 | show_regs_print_info(KERN_DEFAULT); |
| 149 | print_symbol("PC is at %s\n", instruction_pointer(regs)); | 160 | print_symbol("PC is at %s\n", instruction_pointer(regs)); |
| 150 | print_symbol("LR is at %s\n", regs->regs[30]); | 161 | print_symbol("LR is at %s\n", lr); |
| 151 | printk("pc : [<%016llx>] lr : [<%016llx>] pstate: %08llx\n", | 162 | printk("pc : [<%016llx>] lr : [<%016llx>] pstate: %08llx\n", |
| 152 | regs->pc, regs->regs[30], regs->pstate); | 163 | regs->pc, lr, regs->pstate); |
| 153 | printk("sp : %016llx\n", regs->sp); | 164 | printk("sp : %016llx\n", sp); |
| 154 | for (i = 29; i >= 0; i--) { | 165 | for (i = top_reg; i >= 0; i--) { |
| 155 | printk("x%-2d: %016llx ", i, regs->regs[i]); | 166 | printk("x%-2d: %016llx ", i, regs->regs[i]); |
| 156 | if (i % 2 == 0) | 167 | if (i % 2 == 0) |
| 157 | printk("\n"); | 168 | printk("\n"); |
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c index 12ad8f3d0cfd..055cfb80e05c 100644 --- a/arch/arm64/kernel/setup.c +++ b/arch/arm64/kernel/setup.c | |||
| @@ -57,7 +57,7 @@ | |||
| 57 | unsigned int processor_id; | 57 | unsigned int processor_id; |
| 58 | EXPORT_SYMBOL(processor_id); | 58 | EXPORT_SYMBOL(processor_id); |
| 59 | 59 | ||
| 60 | unsigned int elf_hwcap __read_mostly; | 60 | unsigned long elf_hwcap __read_mostly; |
| 61 | EXPORT_SYMBOL_GPL(elf_hwcap); | 61 | EXPORT_SYMBOL_GPL(elf_hwcap); |
| 62 | 62 | ||
| 63 | static const char *cpu_name; | 63 | static const char *cpu_name; |
