diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-08 18:08:59 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-05-08 18:08:59 -0400 |
commit | 246e6a0d781091c4657890ffa497c2576bd99095 (patch) | |
tree | 2d53b23849eb5482a6cdfd8ad23e06ffde2bedf5 /arch/hexagon | |
parent | 956e46efb2478ebff7a871138458fa8124fd18dd (diff) | |
parent | de44443a45e36b7467af2518d3bf7ec6ec909549 (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/Kconfig | 2 | ||||
-rw-r--r-- | arch/hexagon/kernel/vm_entry.S | 12 |
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 | ||
310 | check_work_pending: | 310 | check_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: | |||
375 | ret_from_fork: | 375 | ret_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 |