diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-09-30 09:08:44 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-02-20 18:46:55 +0100 |
commit | 739421ac52472d8dd2f23c141d449ff112fbf9b6 (patch) | |
tree | 43ae3d1931109f43c4532b9ead5554822bc21d6e /kern/thread.h | |
parent | b0fa32c1d7de74a8b83b33833640ff30c84e9fbd (diff) | |
download | gnumach-739421ac52472d8dd2f23c141d449ff112fbf9b6.tar.gz gnumach-739421ac52472d8dd2f23c141d449ff112fbf9b6.tar.bz2 gnumach-739421ac52472d8dd2f23c141d449ff112fbf9b6.zip |
kern: reduce the size of `struct thread'
Reduce the size of `struct thread' by twelve bytes making it fit into
exactly five cache lines (on 32-bit platforms).
* kern/thread.h (struct thread): Group the state and all flags in a
bitfield.
(TH_EV_WAKE_ACTIVE, TH_EV_STATE): Provide macros that generate keys
for synchronization primitives like `thread_wakeup'.
* kern/thread.c (thread_halt, thread_dowait, thread_suspend): Use the
new keys instead of addresses of fields for the synchronisation.
* kern/ipc_sched.c (thread_handoff): Likewise.
* kern/sched_prim.c (thread_invoke, thread_dispatch): Likewise.
Diffstat (limited to 'kern/thread.h')
-rw-r--r-- | kern/thread.h | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/kern/thread.h b/kern/thread.h index d088c274..0e85d8c4 100644 --- a/kern/thread.h +++ b/kern/thread.h @@ -70,6 +70,22 @@ struct thread { task_t task; /* Task to which I belong */ queue_chain_t thread_list; /* list of threads in task */ + /* Flags */ + /* The flags are grouped here, but documented at the original + position. */ + union { + struct { + unsigned state:16; + unsigned wake_active:1; + unsigned vm_privilege:1; + unsigned active:1; + }; + event_t event_key; +/* These keys can be used with thread_wakeup and friends. */ +#define TH_EV_WAKE_ACTIVE(t) ((event_t) (&(t)->event_key + 0)) +#define TH_EV_STATE(t) ((event_t) (&(t)->event_key + 1)) + }; + /* Thread bookkeeping */ queue_chain_t pset_threads; /* list of all threads in proc set*/ @@ -92,9 +108,10 @@ struct thread { kern_return_t wait_result; /* outcome of wait - may be examined by this thread WITHOUT locking */ - boolean_t wake_active; /* someone is waiting for this + /* Defined above */ + /* boolean_t wake_active; someone is waiting for this thread to become suspended */ - int state; /* Thread state: */ + /* int state; Thread state: */ /* * Thread states [bits or'ed] */ @@ -129,7 +146,8 @@ struct thread { /* VM global variables */ vm_offset_t recover; /* page fault recovery (copyin/out) */ - boolean_t vm_privilege; /* Can use reserved memory? */ + /* Defined above */ + /* boolean_t vm_privilege; Can use reserved memory? */ /* User-visible scheduling state */ int user_stop_count; /* outstanding stops */ @@ -194,7 +212,8 @@ struct thread { timer_elt_data_t depress_timer; /* timer for priority depression */ /* Ast/Halt data structures */ - boolean_t active; /* how alive is the thread */ + /* Defined above */ + /* boolean_t active; how alive is the thread */ int ast; /* ast's needed. See ast.h */ /* Processor data structures */ |