diff options
Diffstat (limited to 'arch/mn10300/kernel/switch_to.S')
-rw-r--r-- | arch/mn10300/kernel/switch_to.S | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/mn10300/kernel/switch_to.S b/arch/mn10300/kernel/switch_to.S index 630aad71b946..b08cb2e3aebd 100644 --- a/arch/mn10300/kernel/switch_to.S +++ b/arch/mn10300/kernel/switch_to.S | |||
@@ -15,6 +15,9 @@ | |||
15 | #include <linux/linkage.h> | 15 | #include <linux/linkage.h> |
16 | #include <asm/thread_info.h> | 16 | #include <asm/thread_info.h> |
17 | #include <asm/cpu-regs.h> | 17 | #include <asm/cpu-regs.h> |
18 | #ifdef CONFIG_SMP | ||
19 | #include <proc/smp-regs.h> | ||
20 | #endif /* CONFIG_SMP */ | ||
18 | 21 | ||
19 | .text | 22 | .text |
20 | 23 | ||
@@ -35,7 +38,14 @@ ENTRY(__switch_to) | |||
35 | mov d1,a1 | 38 | mov d1,a1 |
36 | 39 | ||
37 | # save prev context | 40 | # save prev context |
41 | #ifdef CONFIG_SMP | ||
42 | mov (CPUID),a2 | ||
43 | add a2,a2 | ||
44 | add a2,a2 | ||
45 | mov (___frame,a2),d0 | ||
46 | #else /* CONFIG_SMP */ | ||
38 | mov (__frame),d0 | 47 | mov (__frame),d0 |
48 | #endif /* CONFIG_SMP */ | ||
39 | mov d0,(THREAD_FRAME,a0) | 49 | mov d0,(THREAD_FRAME,a0) |
40 | mov __switch_back,d0 | 50 | mov __switch_back,d0 |
41 | mov d0,(THREAD_PC,a0) | 51 | mov d0,(THREAD_PC,a0) |
@@ -59,7 +69,14 @@ ENTRY(__switch_to) | |||
59 | #endif | 69 | #endif |
60 | 70 | ||
61 | mov (THREAD_FRAME,a1),a2 | 71 | mov (THREAD_FRAME,a1),a2 |
72 | #ifdef CONFIG_SMP | ||
73 | mov (CPUID),a0 | ||
74 | add a0,a0 | ||
75 | add a0,a0 | ||
76 | mov a2,(___frame,a0) | ||
77 | #else /* CONFIG_SMP */ | ||
62 | mov a2,(__frame) | 78 | mov a2,(__frame) |
79 | #endif /* CONFIG_SMP */ | ||
63 | mov (THREAD_PC,a1),a2 | 80 | mov (THREAD_PC,a1),a2 |
64 | mov d2,d0 # for ret_from_fork | 81 | mov d2,d0 # for ret_from_fork |
65 | mov d0,a0 # for __switch_to | 82 | mov d0,a0 # for __switch_to |