mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 00:01:35 +00:00 
			
		
		
		
	 3b66a1edb0
			
		
	
	
		3b66a1edb0
		
	
	
	
	
		
			
			Remove task_work structure, use the standard thread flags functions and use shifts in entry.S to test the thread flags. Add a few local labels to entry.S to allow gas to generate short jumps. Finally it changes a number of inline functions in thread_info.h to macros to delay the current_thread_info() usage, which requires on m68k a structure (task_struct) not yet defined at this point. Signed-off-by: Roman Zippel <zippel@linux-m68k.org> Cc: Al Viro <viro@parcelfarce.linux.theplanet.co.uk> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* thread_info.h: common low-level thread information accessors
 | |
|  *
 | |
|  * Copyright (C) 2002  David Howells (dhowells@redhat.com)
 | |
|  * - Incorporating suggestions made by Linus Torvalds
 | |
|  */
 | |
| 
 | |
| #ifndef _LINUX_THREAD_INFO_H
 | |
| #define _LINUX_THREAD_INFO_H
 | |
| 
 | |
| /*
 | |
|  * System call restart block. 
 | |
|  */
 | |
| struct restart_block {
 | |
| 	long (*fn)(struct restart_block *);
 | |
| 	unsigned long arg0, arg1, arg2, arg3;
 | |
| };
 | |
| 
 | |
| extern long do_no_restart_syscall(struct restart_block *parm);
 | |
| 
 | |
| #include <linux/bitops.h>
 | |
| #include <asm/thread_info.h>
 | |
| 
 | |
| #ifdef __KERNEL__
 | |
| 
 | |
| /*
 | |
|  * flag set/clear/test wrappers
 | |
|  * - pass TIF_xxxx constants to these functions
 | |
|  */
 | |
| 
 | |
| static inline void set_ti_thread_flag(struct thread_info *ti, int flag)
 | |
| {
 | |
| 	set_bit(flag,&ti->flags);
 | |
| }
 | |
| 
 | |
| static inline void clear_ti_thread_flag(struct thread_info *ti, int flag)
 | |
| {
 | |
| 	clear_bit(flag,&ti->flags);
 | |
| }
 | |
| 
 | |
| static inline int test_and_set_ti_thread_flag(struct thread_info *ti, int flag)
 | |
| {
 | |
| 	return test_and_set_bit(flag,&ti->flags);
 | |
| }
 | |
| 
 | |
| static inline int test_and_clear_ti_thread_flag(struct thread_info *ti, int flag)
 | |
| {
 | |
| 	return test_and_clear_bit(flag,&ti->flags);
 | |
| }
 | |
| 
 | |
| static inline int test_ti_thread_flag(struct thread_info *ti, int flag)
 | |
| {
 | |
| 	return test_bit(flag,&ti->flags);
 | |
| }
 | |
| 
 | |
| #define set_thread_flag(flag) \
 | |
| 	set_ti_thread_flag(current_thread_info(), flag)
 | |
| #define clear_thread_flag(flag) \
 | |
| 	clear_ti_thread_flag(current_thread_info(), flag)
 | |
| #define test_and_set_thread_flag(flag) \
 | |
| 	test_and_set_ti_thread_flag(current_thread_info(), flag)
 | |
| #define test_and_clear_thread_flag(flag) \
 | |
| 	test_and_clear_ti_thread_flag(current_thread_info(), flag)
 | |
| #define test_thread_flag(flag) \
 | |
| 	test_ti_thread_flag(current_thread_info(), flag)
 | |
| 
 | |
| #define set_need_resched()	set_thread_flag(TIF_NEED_RESCHED)
 | |
| #define clear_need_resched()	clear_thread_flag(TIF_NEED_RESCHED)
 | |
| 
 | |
| #endif
 | |
| 
 | |
| #endif /* _LINUX_THREAD_INFO_H */
 |