diff options
author | Andrea Arcangeli <andrea@cpushare.com> | 2007-07-16 02:41:33 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-16 12:05:50 -0400 |
commit | cf99abace7e07dd8491e7093a9a9ef11d48838ed (patch) | |
tree | 3b7cfd7c76c2c43e6ae3fdaaff3a50a752072424 /include | |
parent | 1d9d02feeee89e9132034d504c9a45eeaf618a3d (diff) |
make seccomp zerocost in schedule
This follows a suggestion from Chuck Ebbert on how to make seccomp
absolutely zerocost in schedule too. The only remaining footprint of
seccomp is in terms of the bzImage size that becomes a few bytes (perhaps
even a few kbytes) larger, measure it if you care in the embedded.
Signed-off-by: Andrea Arcangeli <andrea@cpushare.com>
Cc: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-i386/processor.h | 4 | ||||
-rw-r--r-- | include/asm-i386/thread_info.h | 5 | ||||
-rw-r--r-- | include/linux/seccomp.h | 10 |
3 files changed, 8 insertions, 11 deletions
diff --git a/include/asm-i386/processor.h b/include/asm-i386/processor.h index 94e0c147c165..422cffef00c9 100644 --- a/include/asm-i386/processor.h +++ b/include/asm-i386/processor.h | |||
@@ -228,6 +228,10 @@ extern int bootloader_type; | |||
228 | 228 | ||
229 | #define HAVE_ARCH_PICK_MMAP_LAYOUT | 229 | #define HAVE_ARCH_PICK_MMAP_LAYOUT |
230 | 230 | ||
231 | extern void hard_disable_TSC(void); | ||
232 | extern void disable_TSC(void); | ||
233 | extern void hard_enable_TSC(void); | ||
234 | |||
231 | /* | 235 | /* |
232 | * Size of io_bitmap. | 236 | * Size of io_bitmap. |
233 | */ | 237 | */ |
diff --git a/include/asm-i386/thread_info.h b/include/asm-i386/thread_info.h index 4cb0f91ae64f..54424e045e01 100644 --- a/include/asm-i386/thread_info.h +++ b/include/asm-i386/thread_info.h | |||
@@ -137,6 +137,7 @@ static inline struct thread_info *current_thread_info(void) | |||
137 | #define TIF_DEBUG 17 /* uses debug registers */ | 137 | #define TIF_DEBUG 17 /* uses debug registers */ |
138 | #define TIF_IO_BITMAP 18 /* uses I/O bitmap */ | 138 | #define TIF_IO_BITMAP 18 /* uses I/O bitmap */ |
139 | #define TIF_FREEZE 19 /* is freezing for suspend */ | 139 | #define TIF_FREEZE 19 /* is freezing for suspend */ |
140 | #define TIF_NOTSC 20 /* TSC is not accessible in userland */ | ||
140 | 141 | ||
141 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) | 142 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) |
142 | #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) | 143 | #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) |
@@ -151,6 +152,7 @@ static inline struct thread_info *current_thread_info(void) | |||
151 | #define _TIF_DEBUG (1<<TIF_DEBUG) | 152 | #define _TIF_DEBUG (1<<TIF_DEBUG) |
152 | #define _TIF_IO_BITMAP (1<<TIF_IO_BITMAP) | 153 | #define _TIF_IO_BITMAP (1<<TIF_IO_BITMAP) |
153 | #define _TIF_FREEZE (1<<TIF_FREEZE) | 154 | #define _TIF_FREEZE (1<<TIF_FREEZE) |
155 | #define _TIF_NOTSC (1<<TIF_NOTSC) | ||
154 | 156 | ||
155 | /* work to do on interrupt/exception return */ | 157 | /* work to do on interrupt/exception return */ |
156 | #define _TIF_WORK_MASK \ | 158 | #define _TIF_WORK_MASK \ |
@@ -160,7 +162,8 @@ static inline struct thread_info *current_thread_info(void) | |||
160 | #define _TIF_ALLWORK_MASK (0x0000FFFF & ~_TIF_SECCOMP) | 162 | #define _TIF_ALLWORK_MASK (0x0000FFFF & ~_TIF_SECCOMP) |
161 | 163 | ||
162 | /* flags to check in __switch_to() */ | 164 | /* flags to check in __switch_to() */ |
163 | #define _TIF_WORK_CTXSW (_TIF_DEBUG|_TIF_IO_BITMAP) | 165 | #define _TIF_WORK_CTXSW_NEXT (_TIF_IO_BITMAP | _TIF_NOTSC | _TIF_DEBUG) |
166 | #define _TIF_WORK_CTXSW_PREV (_TIF_IO_BITMAP | _TIF_NOTSC) | ||
164 | 167 | ||
165 | /* | 168 | /* |
166 | * Thread-synchronous status. | 169 | * Thread-synchronous status. |
diff --git a/include/linux/seccomp.h b/include/linux/seccomp.h index d708974dbfe3..262a8dccfa81 100644 --- a/include/linux/seccomp.h +++ b/include/linux/seccomp.h | |||
@@ -16,11 +16,6 @@ static inline void secure_computing(int this_syscall) | |||
16 | __secure_computing(this_syscall); | 16 | __secure_computing(this_syscall); |
17 | } | 17 | } |
18 | 18 | ||
19 | static inline int has_secure_computing(struct thread_info *ti) | ||
20 | { | ||
21 | return unlikely(test_ti_thread_flag(ti, TIF_SECCOMP)); | ||
22 | } | ||
23 | |||
24 | extern long prctl_get_seccomp(void); | 19 | extern long prctl_get_seccomp(void); |
25 | extern long prctl_set_seccomp(unsigned long); | 20 | extern long prctl_set_seccomp(unsigned long); |
26 | 21 | ||
@@ -29,11 +24,6 @@ extern long prctl_set_seccomp(unsigned long); | |||
29 | typedef struct { } seccomp_t; | 24 | typedef struct { } seccomp_t; |
30 | 25 | ||
31 | #define secure_computing(x) do { } while (0) | 26 | #define secure_computing(x) do { } while (0) |
32 | /* static inline to preserve typechecking */ | ||
33 | static inline int has_secure_computing(struct thread_info *ti) | ||
34 | { | ||
35 | return 0; | ||
36 | } | ||
37 | 27 | ||
38 | static inline long prctl_get_seccomp(void) | 28 | static inline long prctl_get_seccomp(void) |
39 | { | 29 | { |