| David Gibson | 584224e | 2005-11-09 13:04:06 +1100 | [diff] [blame] | 1 | #ifndef _ASM_POWERPC_CURRENT_H | 
 | 2 | #define _ASM_POWERPC_CURRENT_H | 
| Arnd Bergmann | 88ced03 | 2005-12-16 22:43:46 +0100 | [diff] [blame] | 3 | #ifdef __KERNEL__ | 
| David Gibson | 584224e | 2005-11-09 13:04:06 +1100 | [diff] [blame] | 4 |  | 
 | 5 | /* | 
 | 6 |  * This program is free software; you can redistribute it and/or | 
 | 7 |  * modify it under the terms of the GNU General Public License | 
 | 8 |  * as published by the Free Software Foundation; either version | 
 | 9 |  * 2 of the License, or (at your option) any later version. | 
 | 10 |  */ | 
 | 11 |  | 
 | 12 | struct task_struct; | 
 | 13 |  | 
 | 14 | #ifdef __powerpc64__ | 
| Olaf Hering | dbc11f5 | 2007-02-25 20:04:18 +0100 | [diff] [blame] | 15 | #include <linux/stddef.h> | 
| David Gibson | 584224e | 2005-11-09 13:04:06 +1100 | [diff] [blame] | 16 | #include <asm/paca.h> | 
 | 17 |  | 
| Hugh Dickins | 5fe8e8b | 2006-10-31 18:39:31 +0000 | [diff] [blame] | 18 | static inline struct task_struct *get_current(void) | 
 | 19 | { | 
 | 20 | 	struct task_struct *task; | 
 | 21 |  | 
 | 22 | 	__asm__ __volatile__("ld %0,%1(13)" | 
 | 23 | 	: "=r" (task) | 
 | 24 | 	: "i" (offsetof(struct paca_struct, __current))); | 
 | 25 |  | 
 | 26 | 	return task; | 
 | 27 | } | 
 | 28 | #define current	get_current() | 
| David Gibson | 584224e | 2005-11-09 13:04:06 +1100 | [diff] [blame] | 29 |  | 
 | 30 | #else | 
 | 31 |  | 
 | 32 | /* | 
 | 33 |  * We keep `current' in r2 for speed. | 
 | 34 |  */ | 
 | 35 | register struct task_struct *current asm ("r2"); | 
 | 36 |  | 
 | 37 | #endif | 
 | 38 |  | 
| Arnd Bergmann | 88ced03 | 2005-12-16 22:43:46 +0100 | [diff] [blame] | 39 | #endif /* __KERNEL__ */ | 
| David Gibson | 584224e | 2005-11-09 13:04:06 +1100 | [diff] [blame] | 40 | #endif /* _ASM_POWERPC_CURRENT_H */ |