aboutsummaryrefslogtreecommitdiffstats
path: root/arch/hexagon
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-05-08 18:08:59 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-05-08 18:08:59 -0400
commit246e6a0d781091c4657890ffa497c2576bd99095 (patch)
tree2d53b23849eb5482a6cdfd8ad23e06ffde2bedf5 /arch/hexagon
parent956e46efb2478ebff7a871138458fa8124fd18dd (diff)
parentde44443a45e36b7467af2518d3bf7ec6ec909549 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rkuo/linux-hexagon-kernel
Pull Hexagon fixes from Richard Kuo: "A bug fix and a Kconfig cleanup" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rkuo/linux-hexagon-kernel: HEXAGON: Remove non existent reference to GENERIC_KERNEL_EXECVE & GENERIC_KERNEL_THREAD Hexagon: fix register used to call do_work_pending
Diffstat (limited to 'arch/hexagon')
-rw-r--r--arch/hexagon/Kconfig2
-rw-r--r--arch/hexagon/kernel/vm_entry.S12
2 files changed, 6 insertions, 8 deletions
diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig
index 04dff5bdcbf7..841325f60df8 100644
--- a/arch/hexagon/Kconfig
+++ b/arch/hexagon/Kconfig
@@ -30,8 +30,6 @@ config HEXAGON
30 select GENERIC_CLOCKEVENTS_BROADCAST 30 select GENERIC_CLOCKEVENTS_BROADCAST
31 select MODULES_USE_ELF_RELA 31 select MODULES_USE_ELF_RELA
32 select GENERIC_CPU_DEVICES 32 select GENERIC_CPU_DEVICES
33 select GENERIC_KERNEL_THREAD
34 select GENERIC_KERNEL_EXECVE
35 ---help--- 33 ---help---
36 Qualcomm Hexagon is a processor architecture designed for high 34 Qualcomm Hexagon is a processor architecture designed for high
37 performance and low power across a wide variety of applications. 35 performance and low power across a wide variety of applications.
diff --git a/arch/hexagon/kernel/vm_entry.S b/arch/hexagon/kernel/vm_entry.S
index e3086185fc9f..67c6ccc14770 100644
--- a/arch/hexagon/kernel/vm_entry.S
+++ b/arch/hexagon/kernel/vm_entry.S
@@ -291,12 +291,12 @@ event_dispatch:
291 /* "Nested control path" -- if the previous mode was kernel */ 291 /* "Nested control path" -- if the previous mode was kernel */
292 { 292 {
293 R0 = memw(R29 + #_PT_ER_VMEST); 293 R0 = memw(R29 + #_PT_ER_VMEST);
294 R16.L = #LO(do_work_pending); 294 R26.L = #LO(do_work_pending);
295 } 295 }
296 { 296 {
297 P0 = tstbit(R0, #HVM_VMEST_UM_SFT); 297 P0 = tstbit(R0, #HVM_VMEST_UM_SFT);
298 if (!P0.new) jump:nt restore_all; 298 if (!P0.new) jump:nt restore_all;
299 R16.H = #HI(do_work_pending); 299 R26.H = #HI(do_work_pending);
300 R0 = #VM_INT_DISABLE; 300 R0 = #VM_INT_DISABLE;
301 } 301 }
302 302
@@ -304,7 +304,7 @@ event_dispatch:
304 * Check also the return from fork/system call, normally coming back from 304 * Check also the return from fork/system call, normally coming back from
305 * user mode 305 * user mode
306 * 306 *
307 * R16 needs to have do_work_pending, and R0 should have VM_INT_DISABLE 307 * R26 needs to have do_work_pending, and R0 should have VM_INT_DISABLE
308 */ 308 */
309 309
310check_work_pending: 310check_work_pending:
@@ -313,7 +313,7 @@ check_work_pending:
313 { 313 {
314 R0 = R29; /* regs should still be at top of stack */ 314 R0 = R29; /* regs should still be at top of stack */
315 R1 = memw(THREADINFO_REG + #_THREAD_INFO_FLAGS); 315 R1 = memw(THREADINFO_REG + #_THREAD_INFO_FLAGS);
316 callr R16; 316 callr R26;
317 } 317 }
318 318
319 { 319 {
@@ -375,11 +375,11 @@ _K_enter_debug:
375ret_from_fork: 375ret_from_fork:
376 { 376 {
377 call schedule_tail 377 call schedule_tail
378 R16.H = #HI(do_work_pending); 378 R26.H = #HI(do_work_pending);
379 } 379 }
380 { 380 {
381 P0 = cmp.eq(R24, #0); 381 P0 = cmp.eq(R24, #0);
382 R16.L = #LO(do_work_pending); 382 R26.L = #LO(do_work_pending);
383 R0 = #VM_INT_DISABLE; 383 R0 = #VM_INT_DISABLE;
384 } 384 }
385 if P0 jump check_work_pending 385 if P0 jump check_work_pending