diff options
| -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 |
