diff options
Diffstat (limited to 'arch/microblaze/kernel/entry.S')
-rw-r--r-- | arch/microblaze/kernel/entry.S | 116 |
1 files changed, 57 insertions, 59 deletions
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S index 3bad4ff49471..c0ede25c5b99 100644 --- a/arch/microblaze/kernel/entry.S +++ b/arch/microblaze/kernel/entry.S | |||
@@ -305,7 +305,7 @@ C_ENTRY(_user_exception): | |||
305 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ | 305 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ |
306 | addi r11, r0, 1; | 306 | addi r11, r0, 1; |
307 | swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode. */ | 307 | swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode. */ |
308 | 2: lwi r31, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); /* get saved current */ | 308 | 2: lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); |
309 | /* Save away the syscall number. */ | 309 | /* Save away the syscall number. */ |
310 | swi r12, r1, PTO+PT_R0; | 310 | swi r12, r1, PTO+PT_R0; |
311 | tovirt(r1,r1) | 311 | tovirt(r1,r1) |
@@ -322,8 +322,7 @@ C_ENTRY(_user_exception): | |||
322 | rtid r11, 0 | 322 | rtid r11, 0 |
323 | nop | 323 | nop |
324 | 3: | 324 | 3: |
325 | add r11, r0, CURRENT_TASK /* Get current task ptr into r11 */ | 325 | lwi r11, CURRENT_TASK, TS_THREAD_INFO /* get thread info */ |
326 | lwi r11, r11, TS_THREAD_INFO /* get thread info */ | ||
327 | lwi r11, r11, TI_FLAGS /* get flags in thread info */ | 326 | lwi r11, r11, TI_FLAGS /* get flags in thread info */ |
328 | andi r11, r11, _TIF_WORK_SYSCALL_MASK | 327 | andi r11, r11, _TIF_WORK_SYSCALL_MASK |
329 | beqi r11, 4f | 328 | beqi r11, 4f |
@@ -382,60 +381,50 @@ C_ENTRY(ret_from_trap): | |||
382 | /* See if returning to kernel mode, if so, skip resched &c. */ | 381 | /* See if returning to kernel mode, if so, skip resched &c. */ |
383 | bnei r11, 2f; | 382 | bnei r11, 2f; |
384 | 383 | ||
384 | swi r3, r1, PTO + PT_R3 | ||
385 | swi r4, r1, PTO + PT_R4 | ||
386 | |||
385 | /* We're returning to user mode, so check for various conditions that | 387 | /* We're returning to user mode, so check for various conditions that |
386 | * trigger rescheduling. */ | 388 | * trigger rescheduling. */ |
387 | # FIXME: Restructure all these flag checks. | 389 | /* FIXME: Restructure all these flag checks. */ |
388 | add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | 390 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ |
389 | lwi r11, r11, TS_THREAD_INFO; /* get thread info */ | ||
390 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 391 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
391 | andi r11, r11, _TIF_WORK_SYSCALL_MASK | 392 | andi r11, r11, _TIF_WORK_SYSCALL_MASK |
392 | beqi r11, 1f | 393 | beqi r11, 1f |
393 | 394 | ||
394 | swi r3, r1, PTO + PT_R3 | ||
395 | swi r4, r1, PTO + PT_R4 | ||
396 | brlid r15, do_syscall_trace_leave | 395 | brlid r15, do_syscall_trace_leave |
397 | addik r5, r1, PTO + PT_R0 | 396 | addik r5, r1, PTO + PT_R0 |
398 | lwi r3, r1, PTO + PT_R3 | ||
399 | lwi r4, r1, PTO + PT_R4 | ||
400 | 1: | 397 | 1: |
401 | |||
402 | /* We're returning to user mode, so check for various conditions that | 398 | /* We're returning to user mode, so check for various conditions that |
403 | * trigger rescheduling. */ | 399 | * trigger rescheduling. */ |
404 | /* Get current task ptr into r11 */ | 400 | /* get thread info from current task */ |
405 | add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | 401 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; |
406 | lwi r11, r11, TS_THREAD_INFO; /* get thread info */ | ||
407 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 402 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
408 | andi r11, r11, _TIF_NEED_RESCHED; | 403 | andi r11, r11, _TIF_NEED_RESCHED; |
409 | beqi r11, 5f; | 404 | beqi r11, 5f; |
410 | 405 | ||
411 | swi r3, r1, PTO + PT_R3; /* store syscall result */ | ||
412 | swi r4, r1, PTO + PT_R4; | ||
413 | bralid r15, schedule; /* Call scheduler */ | 406 | bralid r15, schedule; /* Call scheduler */ |
414 | nop; /* delay slot */ | 407 | nop; /* delay slot */ |
415 | lwi r3, r1, PTO + PT_R3; /* restore syscall result */ | ||
416 | lwi r4, r1, PTO + PT_R4; | ||
417 | 408 | ||
418 | /* Maybe handle a signal */ | 409 | /* Maybe handle a signal */ |
419 | 5: add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | 410 | 5: /* get thread info from current task*/ |
420 | lwi r11, r11, TS_THREAD_INFO; /* get thread info */ | 411 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; |
421 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 412 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
422 | andi r11, r11, _TIF_SIGPENDING; | 413 | andi r11, r11, _TIF_SIGPENDING; |
423 | beqi r11, 1f; /* Signals to handle, handle them */ | 414 | beqi r11, 1f; /* Signals to handle, handle them */ |
424 | 415 | ||
425 | swi r3, r1, PTO + PT_R3; /* store syscall result */ | ||
426 | swi r4, r1, PTO + PT_R4; | ||
427 | la r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ | 416 | la r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ |
428 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ | ||
429 | addi r7, r0, 1; /* Arg 3: int in_syscall */ | 417 | addi r7, r0, 1; /* Arg 3: int in_syscall */ |
430 | bralid r15, do_signal; /* Handle any signals */ | 418 | bralid r15, do_signal; /* Handle any signals */ |
431 | nop; | 419 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ |
420 | |||
421 | /* Finally, return to user state. */ | ||
422 | 1: | ||
432 | lwi r3, r1, PTO + PT_R3; /* restore syscall result */ | 423 | lwi r3, r1, PTO + PT_R3; /* restore syscall result */ |
433 | lwi r4, r1, PTO + PT_R4; | 424 | lwi r4, r1, PTO + PT_R4; |
434 | 425 | ||
435 | /* Finally, return to user state. */ | 426 | swi r0, r0, PER_CPU(KM); /* Now officially in user state. */ |
436 | 1: swi r0, r0, PER_CPU(KM); /* Now officially in user state. */ | 427 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ |
437 | add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | ||
438 | swi r11, r0, PER_CPU(CURRENT_SAVE); /* save current */ | ||
439 | VM_OFF; | 428 | VM_OFF; |
440 | tophys(r1,r1); | 429 | tophys(r1,r1); |
441 | RESTORE_REGS; | 430 | RESTORE_REGS; |
@@ -565,7 +554,7 @@ C_ENTRY(sys_rt_sigreturn_wrapper): | |||
565 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ \ | 554 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ \ |
566 | addi r11, r0, 1; \ | 555 | addi r11, r0, 1; \ |
567 | swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode.*/\ | 556 | swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode.*/\ |
568 | 2: lwi r31, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); /* get saved current */\ | 557 | 2: lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); \ |
569 | /* Save away the syscall number. */ \ | 558 | /* Save away the syscall number. */ \ |
570 | swi r0, r1, PTO+PT_R0; \ | 559 | swi r0, r1, PTO+PT_R0; \ |
571 | tovirt(r1,r1) | 560 | tovirt(r1,r1) |
@@ -673,9 +662,7 @@ C_ENTRY(ret_from_exc): | |||
673 | 662 | ||
674 | /* We're returning to user mode, so check for various conditions that | 663 | /* We're returning to user mode, so check for various conditions that |
675 | trigger rescheduling. */ | 664 | trigger rescheduling. */ |
676 | /* Get current task ptr into r11 */ | 665 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ |
677 | add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | ||
678 | lwi r11, r11, TS_THREAD_INFO; /* get thread info */ | ||
679 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 666 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
680 | andi r11, r11, _TIF_NEED_RESCHED; | 667 | andi r11, r11, _TIF_NEED_RESCHED; |
681 | beqi r11, 5f; | 668 | beqi r11, 5f; |
@@ -685,8 +672,7 @@ C_ENTRY(ret_from_exc): | |||
685 | nop; /* delay slot */ | 672 | nop; /* delay slot */ |
686 | 673 | ||
687 | /* Maybe handle a signal */ | 674 | /* Maybe handle a signal */ |
688 | 5: add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | 675 | 5: lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ |
689 | lwi r11, r11, TS_THREAD_INFO; /* get thread info */ | ||
690 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 676 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
691 | andi r11, r11, _TIF_SIGPENDING; | 677 | andi r11, r11, _TIF_SIGPENDING; |
692 | beqi r11, 1f; /* Signals to handle, handle them */ | 678 | beqi r11, 1f; /* Signals to handle, handle them */ |
@@ -705,15 +691,13 @@ C_ENTRY(ret_from_exc): | |||
705 | * store return registers separately because this macros is use | 691 | * store return registers separately because this macros is use |
706 | * for others exceptions */ | 692 | * for others exceptions */ |
707 | la r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ | 693 | la r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ |
708 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ | ||
709 | addi r7, r0, 0; /* Arg 3: int in_syscall */ | 694 | addi r7, r0, 0; /* Arg 3: int in_syscall */ |
710 | bralid r15, do_signal; /* Handle any signals */ | 695 | bralid r15, do_signal; /* Handle any signals */ |
711 | nop; | 696 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ |
712 | 697 | ||
713 | /* Finally, return to user state. */ | 698 | /* Finally, return to user state. */ |
714 | 1: swi r0, r0, PER_CPU(KM); /* Now officially in user state. */ | 699 | 1: swi r0, r0, PER_CPU(KM); /* Now officially in user state. */ |
715 | add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | 700 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ |
716 | swi r11, r0, PER_CPU(CURRENT_SAVE); /* save current */ | ||
717 | VM_OFF; | 701 | VM_OFF; |
718 | tophys(r1,r1); | 702 | tophys(r1,r1); |
719 | 703 | ||
@@ -802,7 +786,7 @@ C_ENTRY(_interrupt): | |||
802 | swi r11, r0, TOPHYS(PER_CPU(KM)); | 786 | swi r11, r0, TOPHYS(PER_CPU(KM)); |
803 | 787 | ||
804 | 2: | 788 | 2: |
805 | lwi r31, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); | 789 | lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); |
806 | swi r0, r1, PTO + PT_R0; | 790 | swi r0, r1, PTO + PT_R0; |
807 | tovirt(r1,r1) | 791 | tovirt(r1,r1) |
808 | la r5, r1, PTO; | 792 | la r5, r1, PTO; |
@@ -817,8 +801,7 @@ ret_from_irq: | |||
817 | lwi r11, r1, PTO + PT_MODE; | 801 | lwi r11, r1, PTO + PT_MODE; |
818 | bnei r11, 2f; | 802 | bnei r11, 2f; |
819 | 803 | ||
820 | add r11, r0, CURRENT_TASK; | 804 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; |
821 | lwi r11, r11, TS_THREAD_INFO; | ||
822 | lwi r11, r11, TI_FLAGS; /* MS: get flags from thread info */ | 805 | lwi r11, r11, TI_FLAGS; /* MS: get flags from thread info */ |
823 | andi r11, r11, _TIF_NEED_RESCHED; | 806 | andi r11, r11, _TIF_NEED_RESCHED; |
824 | beqi r11, 5f | 807 | beqi r11, 5f |
@@ -826,8 +809,7 @@ ret_from_irq: | |||
826 | nop; /* delay slot */ | 809 | nop; /* delay slot */ |
827 | 810 | ||
828 | /* Maybe handle a signal */ | 811 | /* Maybe handle a signal */ |
829 | 5: add r11, r0, CURRENT_TASK; | 812 | 5: lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* MS: get thread info */ |
830 | lwi r11, r11, TS_THREAD_INFO; /* MS: get thread info */ | ||
831 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 813 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
832 | andi r11, r11, _TIF_SIGPENDING; | 814 | andi r11, r11, _TIF_SIGPENDING; |
833 | beqid r11, no_intr_resched | 815 | beqid r11, no_intr_resched |
@@ -842,8 +824,7 @@ no_intr_resched: | |||
842 | /* Disable interrupts, we are now committed to the state restore */ | 824 | /* Disable interrupts, we are now committed to the state restore */ |
843 | disable_irq | 825 | disable_irq |
844 | swi r0, r0, PER_CPU(KM); /* MS: Now officially in user state. */ | 826 | swi r0, r0, PER_CPU(KM); /* MS: Now officially in user state. */ |
845 | add r11, r0, CURRENT_TASK; | 827 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); |
846 | swi r11, r0, PER_CPU(CURRENT_SAVE); | ||
847 | VM_OFF; | 828 | VM_OFF; |
848 | tophys(r1,r1); | 829 | tophys(r1,r1); |
849 | lwi r3, r1, PTO + PT_R3; /* MS: restore saved r3, r4 registers */ | 830 | lwi r3, r1, PTO + PT_R3; /* MS: restore saved r3, r4 registers */ |
@@ -853,7 +834,28 @@ no_intr_resched: | |||
853 | lwi r1, r1, PT_R1 - PT_SIZE; | 834 | lwi r1, r1, PT_R1 - PT_SIZE; |
854 | bri 6f; | 835 | bri 6f; |
855 | /* MS: Return to kernel state. */ | 836 | /* MS: Return to kernel state. */ |
856 | 2: VM_OFF /* MS: turn off MMU */ | 837 | 2: |
838 | #ifdef CONFIG_PREEMPT | ||
839 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; | ||
840 | /* MS: get preempt_count from thread info */ | ||
841 | lwi r5, r11, TI_PREEMPT_COUNT; | ||
842 | bgti r5, restore; | ||
843 | |||
844 | lwi r5, r11, TI_FLAGS; /* get flags in thread info */ | ||
845 | andi r5, r5, _TIF_NEED_RESCHED; | ||
846 | beqi r5, restore /* if zero jump over */ | ||
847 | |||
848 | preempt: | ||
849 | /* interrupts are off that's why I am calling preempt_chedule_irq */ | ||
850 | bralid r15, preempt_schedule_irq | ||
851 | nop | ||
852 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ | ||
853 | lwi r5, r11, TI_FLAGS; /* get flags in thread info */ | ||
854 | andi r5, r5, _TIF_NEED_RESCHED; | ||
855 | bnei r5, preempt /* if non zero jump to resched */ | ||
856 | restore: | ||
857 | #endif | ||
858 | VM_OFF /* MS: turn off MMU */ | ||
857 | tophys(r1,r1) | 859 | tophys(r1,r1) |
858 | lwi r3, r1, PTO + PT_R3; /* MS: restore saved r3, r4 registers */ | 860 | lwi r3, r1, PTO + PT_R3; /* MS: restore saved r3, r4 registers */ |
859 | lwi r4, r1, PTO + PT_R4; | 861 | lwi r4, r1, PTO + PT_R4; |
@@ -915,7 +917,7 @@ C_ENTRY(_debug_exception): | |||
915 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ | 917 | swi r11, r1, PTO+PT_R1; /* Store user SP. */ |
916 | addi r11, r0, 1; | 918 | addi r11, r0, 1; |
917 | swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode. */ | 919 | swi r11, r0, TOPHYS(PER_CPU(KM)); /* Now we're in kernel-mode. */ |
918 | 2: lwi r31, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); /* get saved current */ | 920 | 2: lwi CURRENT_TASK, r0, TOPHYS(PER_CPU(CURRENT_SAVE)); |
919 | /* Save away the syscall number. */ | 921 | /* Save away the syscall number. */ |
920 | swi r0, r1, PTO+PT_R0; | 922 | swi r0, r1, PTO+PT_R0; |
921 | tovirt(r1,r1) | 923 | tovirt(r1,r1) |
@@ -935,8 +937,7 @@ dbtrap_call: rtbd r11, 0; | |||
935 | bnei r11, 2f; | 937 | bnei r11, 2f; |
936 | 938 | ||
937 | /* Get current task ptr into r11 */ | 939 | /* Get current task ptr into r11 */ |
938 | add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | 940 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ |
939 | lwi r11, r11, TS_THREAD_INFO; /* get thread info */ | ||
940 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 941 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
941 | andi r11, r11, _TIF_NEED_RESCHED; | 942 | andi r11, r11, _TIF_NEED_RESCHED; |
942 | beqi r11, 5f; | 943 | beqi r11, 5f; |
@@ -949,8 +950,7 @@ dbtrap_call: rtbd r11, 0; | |||
949 | /* XXX m68knommu also checks TASK_STATE & TASK_COUNTER here. */ | 950 | /* XXX m68knommu also checks TASK_STATE & TASK_COUNTER here. */ |
950 | 951 | ||
951 | /* Maybe handle a signal */ | 952 | /* Maybe handle a signal */ |
952 | 5: add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | 953 | 5: lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ |
953 | lwi r11, r11, TS_THREAD_INFO; /* get thread info */ | ||
954 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 954 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
955 | andi r11, r11, _TIF_SIGPENDING; | 955 | andi r11, r11, _TIF_SIGPENDING; |
956 | beqi r11, 1f; /* Signals to handle, handle them */ | 956 | beqi r11, 1f; /* Signals to handle, handle them */ |
@@ -966,16 +966,14 @@ dbtrap_call: rtbd r11, 0; | |||
966 | (in a possibly modified form) after do_signal returns. */ | 966 | (in a possibly modified form) after do_signal returns. */ |
967 | 967 | ||
968 | la r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ | 968 | la r5, r1, PTO; /* Arg 1: struct pt_regs *regs */ |
969 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ | ||
970 | addi r7, r0, 0; /* Arg 3: int in_syscall */ | 969 | addi r7, r0, 0; /* Arg 3: int in_syscall */ |
971 | bralid r15, do_signal; /* Handle any signals */ | 970 | bralid r15, do_signal; /* Handle any signals */ |
972 | nop; | 971 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ |
973 | 972 | ||
974 | 973 | ||
975 | /* Finally, return to user state. */ | 974 | /* Finally, return to user state. */ |
976 | 1: swi r0, r0, PER_CPU(KM); /* Now officially in user state. */ | 975 | 1: swi r0, r0, PER_CPU(KM); /* Now officially in user state. */ |
977 | add r11, r0, CURRENT_TASK; /* Get current task ptr into r11 */ | 976 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ |
978 | swi r11, r0, PER_CPU(CURRENT_SAVE); /* save current */ | ||
979 | VM_OFF; | 977 | VM_OFF; |
980 | tophys(r1,r1); | 978 | tophys(r1,r1); |
981 | 979 | ||
@@ -1007,7 +1005,7 @@ DBTRAP_return: /* Make global symbol for debugging */ | |||
1007 | 1005 | ||
1008 | ENTRY(_switch_to) | 1006 | ENTRY(_switch_to) |
1009 | /* prepare return value */ | 1007 | /* prepare return value */ |
1010 | addk r3, r0, r31 | 1008 | addk r3, r0, CURRENT_TASK |
1011 | 1009 | ||
1012 | /* save registers in cpu_context */ | 1010 | /* save registers in cpu_context */ |
1013 | /* use r11 and r12, volatile registers, as temp register */ | 1011 | /* use r11 and r12, volatile registers, as temp register */ |
@@ -1051,10 +1049,10 @@ ENTRY(_switch_to) | |||
1051 | nop | 1049 | nop |
1052 | swi r12, r11, CC_FSR | 1050 | swi r12, r11, CC_FSR |
1053 | 1051 | ||
1054 | /* update r31, the current */ | 1052 | /* update r31, the current-give me pointer to task which will be next */ |
1055 | lwi r31, r6, TI_TASK/* give me pointer to task which will be next */ | 1053 | lwi CURRENT_TASK, r6, TI_TASK |
1056 | /* stored it to current_save too */ | 1054 | /* stored it to current_save too */ |
1057 | swi r31, r0, PER_CPU(CURRENT_SAVE) | 1055 | swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE) |
1058 | 1056 | ||
1059 | /* get new process' cpu context and restore */ | 1057 | /* get new process' cpu context and restore */ |
1060 | /* give me start where start context of next task */ | 1058 | /* give me start where start context of next task */ |