diff options
Diffstat (limited to 'arch/blackfin/include/asm/switch_to.h')
| -rw-r--r-- | arch/blackfin/include/asm/switch_to.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/blackfin/include/asm/switch_to.h b/arch/blackfin/include/asm/switch_to.h new file mode 100644 index 000000000000..aaf671be9242 --- /dev/null +++ b/arch/blackfin/include/asm/switch_to.h | |||
| @@ -0,0 +1,39 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2004-2009 Analog Devices Inc. | ||
| 3 | * Tony Kou (tonyko@lineo.ca) | ||
| 4 | * | ||
| 5 | * Licensed under the GPL-2 or later | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef _BLACKFIN_SWITCH_TO_H | ||
| 9 | #define _BLACKFIN_SWITCH_TO_H | ||
| 10 | |||
| 11 | #define prepare_to_switch() do { } while(0) | ||
| 12 | |||
| 13 | /* | ||
| 14 | * switch_to(n) should switch tasks to task ptr, first checking that | ||
| 15 | * ptr isn't the current task, in which case it does nothing. | ||
| 16 | */ | ||
| 17 | |||
| 18 | #include <asm/l1layout.h> | ||
| 19 | #include <asm/mem_map.h> | ||
| 20 | |||
| 21 | asmlinkage struct task_struct *resume(struct task_struct *prev, struct task_struct *next); | ||
| 22 | |||
| 23 | #ifndef CONFIG_SMP | ||
| 24 | #define switch_to(prev,next,last) \ | ||
| 25 | do { \ | ||
| 26 | memcpy (&task_thread_info(prev)->l1_task_info, L1_SCRATCH_TASK_INFO, \ | ||
| 27 | sizeof *L1_SCRATCH_TASK_INFO); \ | ||
| 28 | memcpy (L1_SCRATCH_TASK_INFO, &task_thread_info(next)->l1_task_info, \ | ||
| 29 | sizeof *L1_SCRATCH_TASK_INFO); \ | ||
| 30 | (last) = resume (prev, next); \ | ||
| 31 | } while (0) | ||
| 32 | #else | ||
| 33 | #define switch_to(prev, next, last) \ | ||
| 34 | do { \ | ||
| 35 | (last) = resume(prev, next); \ | ||
| 36 | } while (0) | ||
| 37 | #endif | ||
| 38 | |||
| 39 | #endif /* _BLACKFIN_SWITCH_TO_H */ | ||
