[acme@filo pahole]$ pahole --expand_types -C task_struct /usr/lib/debug/lib/modules/2.6.19-1.2895.fc6/vmlinux /* include/asm/vm86.h:212 */ struct task_struct { volatile long int state; /* 0 4 */ struct thread_info * thread_info; /* 4 4 */ atomic_t usage; /* 8 4 */ long unsigned int flags; /* 12 4 */ int lock_depth; /* 16 4 */ int load_weight; /* 20 4 */ int prio; /* 24 4 */ int static_prio; /* 28 4 */ int normal_prio; /* 32 4 */ struct list_head { struct list_head * next; /* 0 4 */ struct list_head * prev; /* 4 4 */ } run_list; /* 36 8 */ struct prio_array * array; /* 44 4 */ short unsigned int ioprio; /* 48 2 */ /* XXX 2 bytes hole, try to pack */ unsigned int btrace_seq; /* 52 4 */ long unsigned int sleep_avg; /* 56 4 */ long long unsigned int timestamp; /* 60 8 */ /* --- cacheline 1 boundary (64 bytes) was 4 bytes ago --- */ long long unsigned int last_ran; /* 68 8 */ long long unsigned int sched_time; /* 76 8 */ enum sleep_type sleep_type; /* 84 4 */ long unsigned int policy; /* 88 4 */ cpumask_t cpus_allowed; /* 92 4 */ unsigned int time_slice; /* 96 4 */ unsigned int first_time_slice; /* 100 4 */ struct sched_info { long unsigned int cpu_time; /* 0 4 */ long unsigned int run_delay; /* 4 4 */ long unsigned int pcnt; /* 8 4 */ long unsigned int last_arrival; /* 12 4 */ long unsigned int last_queued; /* 16 4 */ } sched_info; /* 104 20 */ struct list_head { struct list_head * next; /* 0 4 */ struct list_head * prev; /* 4 4 */ } tasks; /* 124 8 */ /* --- cacheline 2 boundary (128 bytes) was 4 bytes ago --- */ struct mm_struct * mm; /* 132 4 */ struct mm_struct * active_mm; /* 136 4 */ struct linux_binfmt * binfmt; /* 140 4 */ long int exit_state; /* 144 4 */ int exit_code; /* 148 4 */ int exit_signal; /* 152 4 */ int pdeath_signal; /* 156 4 */ long unsigned int personality; /* 160 4 */ unsigned int did_exec:1; /* 164 4 */ /* XXX 31 bits hole, try to pack */ pid_t pid; /* 168 4 */ pid_t tgid; /* 172 4 */ struct task_struct * parent; /* 176 4 */ struct list_head { struct list_head * next; /* 0 4 */ struct list_head * prev; /* 4 4 */ } children; /* 180 8 */ struct list_head { struct list_head * next; /* 0 4 */ struct list_head * prev; /* 4 4 */ } sibling; /* 188 8 */ /* --- cacheline 3 boundary (192 bytes) was 4 bytes ago --- */ struct task_struct * group_leader; /* 196 4 */ struct pid_link pids[3]; /* 200 36 */ struct list_head { struct list_head * next; /* 0 4 */ struct list_head * prev; /* 4 4 */ } thread_group; /* 236 8 */ struct completion * vfork_done; /* 244 4 */ int * set_child_tid; /* 248 4 */ int * clear_child_tid; /* 252 4 */ /* --- cacheline 4 boundary (256 bytes) --- */ long unsigned int rt_priority; /* 256 4 */ cputime_t utime; /* 260 4 */ cputime_t stime; /* 264 4 */ long unsigned int nvcsw; /* 268 4 */ long unsigned int nivcsw; /* 272 4 */ struct timespec { time_t tv_sec; /* 0 4 */ long int tv_nsec; /* 4 4 */ } start_time; /* 276 8 */ long unsigned int min_flt; /* 284 4 */ long unsigned int maj_flt; /* 288 4 */ cputime_t it_prof_expires; /* 292 4 */ cputime_t it_virt_expires; /* 296 4 */ long long unsigned int it_sched_expires; /* 300 8 */ struct list_head cpu_timers[3]; /* 308 24 */ /* --- cacheline 5 boundary (320 bytes) was 12 bytes ago --- */ uid_t uid; /* 332 4 */ uid_t euid; /* 336 4 */ uid_t suid; /* 340 4 */ uid_t fsuid; /* 344 4 */ gid_t gid; /* 348 4 */ gid_t egid; /* 352 4 */ gid_t sgid; /* 356 4 */ gid_t fsgid; /* 360 4 */ struct group_info * group_info; /* 364 4 */ kernel_cap_t cap_effective; /* 368 4 */ kernel_cap_t cap_inheritable; /* 372 4 */ kernel_cap_t cap_permitted; /* 376 4 */ unsigned int keep_capabilities:1; /* 380 4 */ /* XXX 31 bits hole, try to pack */ /* --- cacheline 6 boundary (384 bytes) --- */ struct user_struct * user; /* 384 4 */ struct key * request_key_auth; /* 388 4 */ struct key * thread_keyring; /* 392 4 */ unsigned char jit_keyring; /* 396 1 */ unsigned char fpu_counter; /* 397 1 */ /* XXX 2 bytes hole, try to pack */ int oomkilladj; /* 400 4 */ char comm[16]; /* 404 16 */ int link_count; /* 420 4 */ int total_link_count; /* 424 4 */ struct sysv_sem { struct sem_undo_list * undo_list; /* 0 4 */ } sysvsem; /* 428 4 */ struct thread_struct { struct desc_struct tls_array[3]; /* 0 24 */ long unsigned int esp0; /* 24 4 */ long unsigned int sysenter_cs; /* 28 4 */ long unsigned int eip; /* 32 4 */ long unsigned int esp; /* 36 4 */ long unsigned int fs; /* 40 4 */ long unsigned int gs; /* 44 4 */ long unsigned int debugreg[8]; /* 48 32 */ /* --- cacheline 1 boundary (64 bytes) was 16 bytes ago --- */ long unsigned int cr2; /* 80 4 */ long unsigned int trap_no; /* 84 4 */ long unsigned int error_code; /* 88 4 */ /* XXX 4 bytes hole, try to pack */ union i387_union { struct i387_fsave_struct { long int cwd; /* 0 4 */ long int swd; /* 4 4 */ long int twd; /* 8 4 */ long int fip; /* 12 4 */ long int fcs; /* 16 4 */ long int foo; /* 20 4 */ long int fos; /* 24 4 */ long int st_space[20]; /* 28 80 */ /* --- cacheline 1 boundary (64 bytes) was 44 bytes ago --- */ long int status; /* 108 4 */ } fsave; /* 112 */ struct i387_fxsave_struct { short unsigned int cwd; /* 0 2 */ short unsigned int swd; /* 2 2 */ short unsigned int twd; /* 4 2 */ short unsigned int fop; /* 6 2 */ long int fip; /* 8 4 */ long int fcs; /* 12 4 */ long int foo; /* 16 4 */ long int fos; /* 20 4 */ long int mxcsr; /* 24 4 */ long int mxcsr_mask; /* 28 4 */ long int st_space[32]; /* 32 128 */ /* --- cacheline 2 boundary (128 bytes) was 32 bytes ago --- */ long int xmm_space[32]; /* 160 128 */ /* --- cacheline 4 boundary (256 bytes) was 32 bytes ago --- */ long int padding[56]; /* 288 224 */ /* --- cacheline 8 boundary (512 bytes) --- */ } fxsave; /* 512 */ struct i387_soft_struct { long int cwd; /* 0 4 */ long int swd; /* 4 4 */ long int twd; /* 8 4 */ long int fip; /* 12 4 */ long int fcs; /* 16 4 */ long int foo; /* 20 4 */ long int fos; /* 24 4 */ long int st_space[20]; /* 28 80 */ /* --- cacheline 1 boundary (64 bytes) was 44 bytes ago --- */ unsigned char ftop; /* 108 1 */ unsigned char changed; /* 109 1 */ unsigned char lookahead; /* 110 1 */ unsigned char no_update; /* 111 1 */ unsigned char rm; /* 112 1 */ unsigned char alimit; /* 113 1 */ /* XXX 2 bytes hole, try to pack */ struct info * info; /* 116 4 */ long unsigned int entry_eip; /* 120 4 */ } soft; /* 124 */ } i387; /* 96 512 */ /* --- cacheline 9 boundary (576 bytes) was 32 bytes ago --- */ struct vm86_struct * vm86_info; /* 608 4 */ long unsigned int screen_bitmap; /* 612 4 */ long unsigned int v86flags; /* 616 4 */ long unsigned int v86mask; /* 620 4 */ long unsigned int saved_esp0; /* 624 4 */ unsigned int saved_fs; /* 628 4 */ unsigned int saved_gs; /* 632 4 */ long unsigned int * io_bitmap_ptr; /* 636 4 */ /* --- cacheline 10 boundary (640 bytes) --- */ long unsigned int iopl; /* 640 4 */ long unsigned int io_bitmap_max; /* 644 4 */ } thread; /* 432 656 */ /* XXX last struct has 8 bytes of padding */ /* --- cacheline 17 boundary (1088 bytes) --- */ struct fs_struct * fs; /* 1088 4 */ struct files_struct * files; /* 1092 4 */ struct nsproxy * nsproxy; /* 1096 4 */ struct signal_struct * signal; /* 1100 4 */ struct sighand_struct * sighand; /* 1104 4 */ sigset_t blocked; /* 1108 8 */ sigset_t real_blocked; /* 1116 8 */ sigset_t saved_sigmask; /* 1124 8 */ struct sigpending { struct list_head { struct list_head * next; /* 0 4 */ struct list_head * prev; /* 4 4 */ } list; /* 0 8 */ sigset_t signal; /* 8 8 */ } pending; /* 1132 16 */ long unsigned int sas_ss_sp; /* 1148 4 */ /* --- cacheline 18 boundary (1152 bytes) --- */ size_t sas_ss_size; /* 1152 4 */ int (*notifier)(void *); /* 1156 4 */ void * notifier_data; /* 1160 4 */ sigset_t * notifier_mask; /* 1164 4 */ void * security; /* 1168 4 */ struct audit_context * audit_context; /* 1172 4 */ seccomp_t seccomp; /* 1176 0 */ struct utrace * utrace; /* 1176 4 */ long unsigned int utrace_flags; /* 1180 4 */ u32 parent_exec_id; /* 1184 4 */ u32 self_exec_id; /* 1188 4 */ spinlock_t alloc_lock; /* 1192 16 */ spinlock_t pi_lock; /* 1208 16 */ /* --- cacheline 19 boundary (1216 bytes) was 8 bytes ago --- */ struct plist_head { struct list_head { struct list_head * next; /* 0 4 */ struct list_head * prev; /* 4 4 */ } prio_list; /* 0 8 */ struct list_head { struct list_head * next; /* 0 4 */ struct list_head * prev; /* 4 4 */ } node_list; /* 8 8 */ } pi_waiters; /* 1224 16 */ struct rt_mutex_waiter * pi_blocked_on; /* 1240 4 */ void * journal_info; /* 1244 4 */ struct reclaim_state * reclaim_state; /* 1248 4 */ struct backing_dev_info * backing_dev_info; /* 1252 4 */ struct io_context * io_context; /* 1256 4 */ wait_queue_t * io_wait; /* 1260 4 */ u64 rchar; /* 1264 8 */ u64 wchar; /* 1272 8 */ /* --- cacheline 20 boundary (1280 bytes) --- */ u64 syscr; /* 1280 8 */ u64 syscw; /* 1288 8 */ u64 acct_rss_mem1; /* 1296 8 */ u64 acct_vm_mem1; /* 1304 8 */ cputime_t acct_stimexpd; /* 1312 4 */ struct cpuset * cpuset; /* 1316 4 */ nodemask_t mems_allowed; /* 1320 4 */ int cpuset_mems_generation; /* 1324 4 */ int cpuset_mem_spread_rotor; /* 1328 4 */ struct robust_list_head * robust_list; /* 1332 4 */ struct list_head { struct list_head * next; /* 0 4 */ struct list_head * prev; /* 4 4 */ } pi_state_list; /* 1336 8 */ /* --- cacheline 21 boundary (1344 bytes) --- */ struct futex_pi_state * pi_state_cache; /* 1344 4 */ atomic_t fs_excl; /* 1348 4 */ struct rcu_head { struct rcu_head * next; /* 0 4 */ void (*func)(struct rcu_head *); /* 4 4 */ } rcu; /* 1352 8 */ struct list_head { struct list_head * next; /* 0 4 */ struct list_head * prev; /* 4 4 */ } ptracees; /* 1360 8 */ struct pipe_inode_info * splice_pipe; /* 1368 4 */ struct task_delay_info * delays; /* 1372 4 */ }; /* size: 1376, cachelines: 22 */ /* sum members: 1372, holes: 2, sum holes: 4 */ /* bit holes: 2, sum bit holes: 62 bits */ /* paddings: 1, sum paddings: 8 */ /* last cacheline: 32 bytes */