Commit fe45736f4134b9656c656ac5e15b915192f2704a

Authored by Linus Torvalds

Merge branch 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm

Pull ARM fixes from Russell King:
 "The usual random collection of relatively small ARM fixes"

* 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm:
  ARM: 8063/1: bL_switcher: fix individual online status reporting of removed CPUs
  ARM: 8064/1: fix v7-M signal return
  ARM: 8057/1: amba: Add Qualcomm vendor ID.
  ARM: 8052/1: unwind: Fix handling of "Pop r4-r[4+nnn],r14" opcode
  ARM: 8051/1: put_user: fix possible data corruption in put_user
  ARM: 8048/1: fix v7-M setup stack location

Showing 6 changed files Side-by-side Diff

arch/arm/common/bL_switcher.c
... ... @@ -433,8 +433,12 @@
433 433 {
434 434 int i;
435 435  
436   - for_each_cpu(i, &bL_switcher_removed_logical_cpus)
437   - cpu_up(i);
  436 + for_each_cpu(i, &bL_switcher_removed_logical_cpus) {
  437 + struct device *cpu_dev = get_cpu_device(i);
  438 + int ret = device_online(cpu_dev);
  439 + if (ret)
  440 + dev_err(cpu_dev, "switcher: unable to restore CPU\n");
  441 + }
438 442 }
439 443  
440 444 static int bL_switcher_halve_cpus(void)
... ... @@ -521,7 +525,7 @@
521 525 continue;
522 526 }
523 527  
524   - ret = cpu_down(i);
  528 + ret = device_offline(get_cpu_device(i));
525 529 if (ret) {
526 530 bL_switcher_restore_cpus();
527 531 return ret;
arch/arm/include/asm/uaccess.h
... ... @@ -171,8 +171,9 @@
171 171 #define __put_user_check(x,p) \
172 172 ({ \
173 173 unsigned long __limit = current_thread_info()->addr_limit - 1; \
  174 + const typeof(*(p)) __user *__tmp_p = (p); \
174 175 register const typeof(*(p)) __r2 asm("r2") = (x); \
175   - register const typeof(*(p)) __user *__p asm("r0") = (p);\
  176 + register const typeof(*(p)) __user *__p asm("r0") = __tmp_p; \
176 177 register unsigned long __l asm("r1") = __limit; \
177 178 register int __e asm("r0"); \
178 179 switch (sizeof(*(__p))) { \
arch/arm/kernel/entry-header.S
... ... @@ -132,6 +132,10 @@
132 132 orrne r5, V7M_xPSR_FRAMEPTRALIGN
133 133 biceq r5, V7M_xPSR_FRAMEPTRALIGN
134 134  
  135 + @ ensure bit 0 is cleared in the PC, otherwise behaviour is
  136 + @ unpredictable
  137 + bic r4, #1
  138 +
135 139 @ write basic exception frame
136 140 stmdb r2!, {r1, r3-r5}
137 141 ldmia sp, {r1, r3-r5}
arch/arm/kernel/unwind.c
... ... @@ -285,7 +285,7 @@
285 285 if (unwind_pop_register(ctrl, &vsp, reg))
286 286 return -URC_FAILURE;
287 287  
288   - if (insn & 0x80)
  288 + if (insn & 0x8)
289 289 if (unwind_pop_register(ctrl, &vsp, 14))
290 290 return -URC_FAILURE;
291 291  
arch/arm/mm/proc-v7m.S
... ... @@ -123,6 +123,11 @@
123 123 mov pc, lr
124 124 ENDPROC(__v7m_setup)
125 125  
  126 + .align 2
  127 +__v7m_setup_stack:
  128 + .space 4 * 8 @ 8 registers
  129 +__v7m_setup_stack_top:
  130 +
126 131 define_processor_functions v7m, dabort=nommu_early_abort, pabort=legacy_pabort, nommu=1
127 132  
128 133 .section ".rodata"
... ... @@ -151,8 +156,4 @@
151 156 .long 0 @ proc_info_list.user
152 157 .long nop_cache_fns @ proc_info_list.cache
153 158 .size __v7m_proc_info, . - __v7m_proc_info
154   -
155   -__v7m_setup_stack:
156   - .space 4 * 8 @ 8 registers
157   -__v7m_setup_stack_top:
include/linux/amba/bus.h
... ... @@ -47,6 +47,7 @@
47 47 enum amba_vendor {
48 48 AMBA_VENDOR_ARM = 0x41,
49 49 AMBA_VENDOR_ST = 0x80,
  50 + AMBA_VENDOR_QCOM = 0x51,
50 51 };
51 52  
52 53 extern struct bus_type amba_bustype;