aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@mandriva.com>2006-11-27 14:58:59 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-12-03 00:30:48 -0500
commit46ca5f5dc4f1c9b5ac02c0090ae8ff4ac8560446 (patch)
tree314b4ec3bfb52d536dff6e9cb201b76571e0d502
parentd5c42c0ec4f7fd5a4e19e33a2d561758b67c55c8 (diff)
[XFRM]: Pack struct xfrm_policy
[acme@newtoy net-2.6.20]$ pahole net/ipv4/tcp.o xfrm_policy /* /pub/scm/linux/kernel/git/acme/net-2.6.20/include/linux/security.h:67 */ struct xfrm_policy { struct xfrm_policy * next; /* 0 4 */ struct hlist_node bydst; /* 4 8 */ struct hlist_node byidx; /* 12 8 */ rwlock_t lock; /* 20 36 */ atomic_t refcnt; /* 56 4 */ struct timer_list timer; /* 60 24 */ u8 type; /* 84 1 */ /* XXX 3 bytes hole, try to pack */ u32 priority; /* 88 4 */ u32 index; /* 92 4 */ struct xfrm_selector selector; /* 96 56 */ struct xfrm_lifetime_cfg lft; /* 152 64 */ struct xfrm_lifetime_cur curlft; /* 216 32 */ struct dst_entry * bundles; /* 248 4 */ __u16 family; /* 252 2 */ __u8 action; /* 254 1 */ __u8 flags; /* 255 1 */ __u8 dead; /* 256 1 */ __u8 xfrm_nr; /* 257 1 */ /* XXX 2 bytes hole, try to pack */ struct xfrm_sec_ctx * security; /* 260 4 */ struct xfrm_tmpl xfrm_vec[6]; /* 264 360 */ }; /* size: 624, sum members: 619, holes: 2, sum holes: 5 */ So lets have just one hole instead of two, by moving 'type' to just before 'action', end result: [acme@newtoy net-2.6.20]$ codiff -s /tmp/tcp.o.before net/ipv4/tcp.o /pub/scm/linux/kernel/git/acme/net-2.6.20/net/ipv4/tcp.c: struct xfrm_policy | -4 1 struct changed [acme@newtoy net-2.6.20]$ [acme@newtoy net-2.6.20]$ pahole -c 64 net/ipv4/tcp.o xfrm_policy /* /pub/scm/linux/kernel/git/acme/net-2.6.20/include/linux/security.h:67 */ struct xfrm_policy { struct xfrm_policy * next; /* 0 4 */ struct hlist_node bydst; /* 4 8 */ struct hlist_node byidx; /* 12 8 */ rwlock_t lock; /* 20 36 */ atomic_t refcnt; /* 56 4 */ struct timer_list timer; /* 60 24 */ u32 priority; /* 84 4 */ u32 index; /* 88 4 */ struct xfrm_selector selector; /* 92 56 */ struct xfrm_lifetime_cfg lft; /* 148 64 */ struct xfrm_lifetime_cur curlft; /* 212 32 */ struct dst_entry * bundles; /* 244 4 */ u16 family; /* 248 2 */ u8 type; /* 250 1 */ u8 action; /* 251 1 */ u8 flags; /* 252 1 */ u8 dead; /* 253 1 */ u8 xfrm_nr; /* 254 1 */ /* XXX 1 byte hole, try to pack */ struct xfrm_sec_ctx * security; /* 256 4 */ struct xfrm_tmpl xfrm_vec[6]; /* 260 360 */ }; /* size: 620, sum members: 619, holes: 1, sum holes: 1 */ Are there any fugly data dependencies here? None that I know. In the process changed the removed the __ prefixed types, that are just for userspace visible headers. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
-rw-r--r--include/net/xfrm.h13
1 files changed, 7 insertions, 6 deletions
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 3878a88ff618..984e5c45265c 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -340,18 +340,19 @@ struct xfrm_policy
340 atomic_t refcnt; 340 atomic_t refcnt;
341 struct timer_list timer; 341 struct timer_list timer;
342 342
343 u8 type;
344 u32 priority; 343 u32 priority;
345 u32 index; 344 u32 index;
346 struct xfrm_selector selector; 345 struct xfrm_selector selector;
347 struct xfrm_lifetime_cfg lft; 346 struct xfrm_lifetime_cfg lft;
348 struct xfrm_lifetime_cur curlft; 347 struct xfrm_lifetime_cur curlft;
349 struct dst_entry *bundles; 348 struct dst_entry *bundles;
350 __u16 family; 349 u16 family;
351 __u8 action; 350 u8 type;
352 __u8 flags; 351 u8 action;
353 __u8 dead; 352 u8 flags;
354 __u8 xfrm_nr; 353 u8 dead;
354 u8 xfrm_nr;
355 /* XXX 1 byte hole, try to pack */
355 struct xfrm_sec_ctx *security; 356 struct xfrm_sec_ctx *security;
356 struct xfrm_tmpl xfrm_vec[XFRM_MAX_DEPTH]; 357 struct xfrm_tmpl xfrm_vec[XFRM_MAX_DEPTH];
357}; 358};