Signed-off-by: Sven Eckelmann sven@narfation.org --- Just found pahole from "dwarves" and had to try it out :D
This can save from 8 to 24 bytes per struct on amd64
types.h | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-)
diff --git a/types.h b/types.h index ae9ac9a..ae8bc33 100644 --- a/types.h +++ b/types.h @@ -55,8 +55,8 @@ struct batadv_hard_iface { struct list_head list; int16_t if_num; char if_status; - struct net_device *net_dev; atomic_t frag_seqno; + struct net_device *net_dev; struct kobject *hardif_obj; atomic_t refcount; struct packet_type batman_adv_ptype; @@ -83,28 +83,29 @@ struct batadv_hard_iface { struct batadv_orig_node { uint8_t orig[ETH_ALEN]; uint8_t primary_addr[ETH_ALEN]; - struct batadv_neigh_node __rcu *router; /* rcu protected pointer */ #ifdef CONFIG_BATMAN_ADV_DAT batadv_dat_addr_t dat_addr; #endif + uint8_t flags; + uint8_t gw_flags; + struct batadv_neigh_node __rcu *router; /* rcu protected pointer */ unsigned long *bcast_own; uint8_t *bcast_own_sum; unsigned long last_seen; unsigned long bcast_seqno_reset; unsigned long batman_seqno_reset; - uint8_t gw_flags; - uint8_t flags; - atomic_t last_ttvn; /* last seen translation table version number */ uint16_t tt_crc; - unsigned char *tt_buff; int16_t tt_buff_len; + atomic_t last_ttvn; /* last seen translation table version number */ + unsigned char *tt_buff; + bool tt_initialised; + uint8_t last_ttl; spinlock_t tt_buff_lock; /* protects tt_buff */ atomic_t tt_size; - bool tt_initialised; + atomic_t bond_candidates; uint32_t last_real_seqno; - uint8_t last_ttl; - DECLARE_BITMAP(bcast_bits, BATADV_TQ_LOCAL_WINDOW_SIZE); uint32_t last_bcast_seqno; + DECLARE_BITMAP(bcast_bits, BATADV_TQ_LOCAL_WINDOW_SIZE); struct hlist_head neigh_list; struct list_head frag_list; spinlock_t neigh_list_lock; /* protects neigh_list and router */ @@ -120,7 +121,6 @@ struct batadv_orig_node { /* bcast_seqno_lock protects bcast_bits, last_bcast_seqno */ spinlock_t bcast_seqno_lock; spinlock_t tt_list_lock; /* protects tt_list */ - atomic_t bond_candidates; struct list_head bond_list; };
@@ -147,10 +147,10 @@ struct batadv_neigh_node { unsigned long last_seen; DECLARE_BITMAP(real_bits, BATADV_TQ_LOCAL_WINDOW_SIZE); atomic_t refcount; + spinlock_t lq_update_lock; /* protects: tq_recv, tq_index */ struct rcu_head rcu; struct batadv_orig_node *orig_node; struct batadv_hard_iface *if_incoming; - spinlock_t lq_update_lock; /* protects: tq_recv, tq_index */ };
#ifdef CONFIG_BATMAN_ADV_BLA @@ -205,6 +205,8 @@ struct batadv_priv_tt { atomic_t vn; atomic_t ogm_append_cnt; atomic_t local_changes; + uint16_t local_crc; + int16_t last_changeset_len; struct list_head changes_list; struct batadv_hashtable *local_hash; struct batadv_hashtable *global_hash; @@ -214,9 +216,7 @@ struct batadv_priv_tt { spinlock_t req_list_lock; /* protects req_list */ spinlock_t roam_list_lock; /* protects roam_list */ atomic_t local_entry_num; - uint16_t local_crc; unsigned char *last_changeset; - int16_t last_changeset_len; spinlock_t last_changeset_lock; /* protects last_changeset */ struct delayed_work work; }; @@ -224,12 +224,12 @@ struct batadv_priv_tt { #ifdef CONFIG_BATMAN_ADV_BLA struct batadv_priv_bla { atomic_t num_requests; /* number of bla requests in flight */ + /* protects bcast_duplist and bcast_duplist_curr */ + spinlock_t bcast_duplist_lock; struct batadv_hashtable *claim_hash; struct batadv_hashtable *backbone_hash; struct batadv_bcast_duplist_entry bcast_duplist[BATADV_DUPLIST_SIZE]; int bcast_duplist_curr; - /* protects bcast_duplist and bcast_duplist_curr */ - spinlock_t bcast_duplist_lock; struct batadv_bla_claim_dst claim_dest; struct delayed_work work; }; @@ -238,8 +238,8 @@ struct batadv_priv_bla { struct batadv_priv_gw { struct hlist_head list; spinlock_t list_lock; /* protects gw_list and curr_gw */ - struct batadv_gw_node __rcu *curr_gw; /* rcu protected pointer */ atomic_t reselect; + struct batadv_gw_node __rcu *curr_gw; /* rcu protected pointer */ };
struct batadv_priv_vis { @@ -266,8 +266,9 @@ struct batadv_priv_dat { #endif
struct batadv_priv { - atomic_t mesh_state; struct net_device_stats stats; + atomic_t mesh_state; + char num_ifaces; uint64_t __percpu *bat_counters; /* Per cpu counters */ atomic_t aggregated_ogms; /* boolean */ atomic_t bonding; /* boolean */ @@ -287,7 +288,6 @@ struct batadv_priv { atomic_t bcast_seqno; atomic_t bcast_queue_left; atomic_t batman_queue_left; - char num_ifaces; struct batadv_debug_log *debug_log; struct kobject *mesh_obj; struct dentry *debug_dir; @@ -327,8 +327,8 @@ struct batadv_socket_packet {
struct batadv_tt_common_entry { uint8_t addr[ETH_ALEN]; - struct hlist_node hash_entry; uint16_t flags; + struct hlist_node hash_entry; unsigned long added_at; atomic_t refcount; struct rcu_head rcu; @@ -364,8 +364,8 @@ struct batadv_backbone_gw { atomic_t wait_periods; atomic_t request_sent; atomic_t refcount; - struct rcu_head rcu; uint16_t crc; /* crc checksum over all claims */ + struct rcu_head rcu; };
struct batadv_claim { @@ -404,10 +404,10 @@ struct batadv_forw_packet { struct hlist_node list; unsigned long send_time; uint8_t own; - struct sk_buff *skb; + uint8_t num_packets; uint16_t packet_len; uint32_t direct_link_flags; - uint8_t num_packets; + struct sk_buff *skb; struct delayed_work delayed_work; struct batadv_hard_iface *if_incoming; }; @@ -494,9 +494,9 @@ struct batadv_algo_ops { struct batadv_dat_entry { __be32 ip; uint8_t mac_addr[ETH_ALEN]; + atomic_t refcount; unsigned long last_update; struct hlist_node hash_entry; - atomic_t refcount; struct rcu_head rcu; };