Differences in pahole output from BTF versus from DWARF

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

	Have you guys noticed something like this? Is there some
outstanding patch I should process?

	I'll try and investigate later, starting to figure out why enums
in BTF are just one byte instead of sizeof(int).

	From a quick look just at patch descriptions, these may be
related:

    btf: fix struct/union/fwd types with kind_flag
    btf: Generate correct struct bitfield member types

This case, for instance:

 struct x86_legacy_features {
-	enum x86_legacy_i8042_state i8042;               /*     0     4 */
+	enum x86_legacy_i8042_state i8042;               /*     0     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	int                        rtc;                  /*     4     4 */

from arch/x86/include/asm/x86_init.h, the original struct is:

struct x86_legacy_features {
        enum x86_legacy_i8042_state i8042;
        int rtc;
        int warm_reset;
        int no_vga;
        int reserve_bios_regions;
        struct x86_legacy_devices devices;
};

- Arnaldo

[acme@quaco pahole]$ pahole -F dwarf ~/git/build/v4.20-rc5+/net/ipv4/tcp.o > /tmp/tcp.o.dwarf.c
[acme@quaco pahole]$ pahole -F btf ~/git/build/v4.20-rc5+/net/ipv4/tcp.o > /tmp/tcp.o.btf.c
[acme@quaco pahole]$ diff -u /tmp/tcp.o.dwarf.c  /tmp/tcp.o.btf.c
--- /tmp/tcp.o.dwarf.c	2019-01-10 12:10:26.890521322 -0300
+++ /tmp/tcp.o.btf.c	2019-01-10 12:10:23.251525277 -0300
@@ -223,7 +223,10 @@
 		} futex;                                 /*     8    40 */
 		struct {
 			clockid_t  clockid;              /*     8     4 */
-			enum timespec_type type;         /*    12     4 */
+			enum timespec_type type;         /*    12     1 */
+
+			/* XXX 3 bytes hole, try to pack */
+
 			union {
 				struct timespec * rmtp;  /*    16     8 */
 				struct old_timespec32 * compat_rmtp; /*    16     8 */
@@ -585,11 +588,17 @@
 	__u16                      vesapm_off;           /*    48     2 */
 	__u16                      pages;                /*    50     2 */
 	__u16                      vesa_attributes;      /*    52     2 */
-	__u32                      capabilities;         /*    54     4 */
-	__u32                      ext_lfb_base;         /*    58     4 */
+	__u32                      capabilities;         /*    52     4 */
+	__u32                      ext_lfb_base;         /*    56     4 */
+
+	/* XXX 2 bytes hole, try to pack */
+
 	__u8                       _reserved[2];         /*    62     2 */
 
 	/* size: 64, cachelines: 1, members: 36 */
+	/* sum members: 60, holes: 1, sum holes: 2 */
+
+	/* BRAIN FART ALERT! 64 != 60 + 2(holes), diff = 2 */
 };
 struct apm_bios_info {
 	__u16                      version;              /*     0     2 */
@@ -630,7 +639,10 @@
 	__u32                      sectors_per_track;    /*    12     4 */
 	__u64                      number_of_sectors;    /*    16     8 */
 	__u16                      bytes_per_sector;     /*    24     2 */
-	__u32                      dpte_ptr;             /*    26     4 */
+	__u32                      dpte_ptr;             /*    24     4 */
+
+	/* XXX 2 bytes hole, try to pack */
+
 	__u16                      key;                  /*    30     2 */
 	__u8                       device_path_info_length; /*    32     1 */
 	__u8                       reserved2;            /*    33     1 */
@@ -683,7 +695,10 @@
 		} atapi;                                 /*    56    16 */
 		struct {
 			__u16      id;                   /*    56     2 */
-			__u64      lun;                  /*    58     8 */
+			__u64      lun;                  /*    56     8 */
+
+			/* XXX 2 bytes hole, try to pack */
+
 			/* --- cacheline 1 boundary (64 bytes) was 2 bytes ago --- */
 			__u16      reserved1;            /*    66     2 */
 			__u32      reserved2;            /*    68     4 */
@@ -733,7 +748,10 @@
 	__u8                       checksum;             /*    73     1 */
 
 	/* size: 74, cachelines: 2, members: 18 */
+	/* sum members: 70, holes: 1, sum holes: 2 */
 	/* last cacheline: 10 bytes */
+
+	/* BRAIN FART ALERT! 74 != 70 + 2(holes), diff = 2 */
 };
 struct edd_info {
 	__u8                       device;               /*     0     1 */
@@ -849,10 +867,13 @@
 };
 struct desc_ptr {
 	short unsigned int         size;                 /*     0     2 */
-	long unsigned int          address;              /*     2     8 */
+	long unsigned int          address;              /*     0     8 */
 
 	/* size: 10, cachelines: 1, members: 2 */
+	/* padding: 2 */
 	/* last cacheline: 10 bytes */
+
+	/* BRAIN FART ALERT! 10 != 2 + 0(holes), diff = 8 */
 };
 struct pgprot {
 	pgprotval_t                pgprot;               /*     0     8 */
@@ -1467,10 +1488,13 @@
 };
 struct x86_hw_tss {
 	u32                        reserved1;            /*     0     4 */
-	u64                        sp0;                  /*     4     8 */
-	u64                        sp1;                  /*    12     8 */
-	u64                        sp2;                  /*    20     8 */
-	u64                        reserved2;            /*    28     8 */
+	u64                        sp0;                  /*     0     8 */
+	u64                        sp1;                  /*     8     8 */
+	u64                        sp2;                  /*    16     8 */
+	u64                        reserved2;            /*    24     8 */
+
+	/* XXX 4 bytes hole, try to pack */
+
 	u64                        ist[7];               /*    36    56 */
 	/* --- cacheline 1 boundary (64 bytes) was 28 bytes ago --- */
 	u32                        reserved3;            /*    92     4 */
@@ -1479,7 +1503,10 @@
 	u16                        io_bitmap_base;       /*   102     2 */
 
 	/* size: 104, cachelines: 2, members: 10 */
+	/* sum members: 96, holes: 1, sum holes: 4 */
 	/* last cacheline: 40 bytes */
+
+	/* BRAIN FART ALERT! 104 != 96 + 4(holes), diff = 4 */
 };
 struct seq_operations {
 	void *                     (*start)(struct seq_file *, loff_t *); /*     0     8 */
@@ -1606,12 +1633,15 @@
 	struct task_struct *       kswapd;               /* 172280     8 */
 	/* --- cacheline 2692 boundary (172288 bytes) --- */
 	int                        kswapd_order;         /* 172288     4 */
-	enum zone_type             kswapd_classzone_idx; /* 172292     4 */
+	enum zone_type             kswapd_classzone_idx; /* 172292     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	int                        kswapd_failures;      /* 172296     4 */
 	int                        kcompactd_max_order;  /* 172300     4 */
-	enum zone_type             kcompactd_classzone_idx; /* 172304     4 */
+	enum zone_type             kcompactd_classzone_idx; /* 172304     1 */
 
-	/* XXX 4 bytes hole, try to pack */
+	/* XXX 7 bytes hole, try to pack */
 
 	wait_queue_head_t          kcompactd_wait;       /* 172312    24 */
 	struct task_struct *       kcompactd;            /* 172336     8 */
@@ -1640,7 +1670,7 @@
 	atomic_long_t              vm_stat[30];          /* 172616   240 */
 
 	/* size: 172864, cachelines: 2701, members: 31 */
-	/* sum members: 172784, holes: 4, sum holes: 72 */
+	/* sum members: 172778, holes: 5, sum holes: 78 */
 	/* padding: 8 */
 };
 struct per_cpu_pages {
@@ -2004,7 +2034,10 @@
 	/* last cacheline: 4 bytes */
 };V
 struct x86_legacy_features {
-	enum x86_legacy_i8042_state i8042;               /*     0     4 */
+	enum x86_legacy_i8042_state i8042;               /*     0     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	int                        rtc;                  /*     4     4 */
 	int                        warm_reset;           /*     8     4 */
 	int                        no_vga;               /*    12     4 */
@@ -2012,6 +2045,7 @@
 	struct x86_legacy_devices  devices;              /*    20     4 */
 
 	/* size: 24, cachelines: 1, members: 6 */
+	/* sum members: 21, holes: 1, sum holes: 3 */
 	/* last cacheline: 24 bytes */
 };
 struct x86_hyper_runtime {
@@ -2143,7 +2177,7 @@
 	void *                     driver_data;          /*   152     8 */
 	struct dev_links_info      links;                /*   160    40 */
 
-	/* XXX last struct has 4 bytes of padding */
+	/* XXX last struct has 7 bytes of padding */
 
 	/* --- cacheline 3 boundary (192 bytes) was 8 bytes ago --- */
 	struct dev_pm_info         power;                /*   200   280 */
@@ -2194,7 +2228,7 @@
 	/* size: 736, cachelines: 12, members: 41 */
 	/* sum members: 721, holes: 2, sum holes: 8 */
 	/* padding: 7 */
-	/* paddings: 2, sum paddings: 8 */
+	/* paddings: 2, sum paddings: 11 */
 	/* bit_padding: 5 bits */
 	/* last cacheline: 32 bytes */
 };
@@ -2409,7 +2443,10 @@
 
 	int                        tcpmem_pressure;      /*  2316     4 */
 	int                        kmemcg_id;            /*  2320     4 */
-	enum memcg_kmem_state      kmem_state;           /*  2324     4 */
+	enum memcg_kmem_state      kmem_state;           /*  2324     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	struct list_head           kmem_caches;          /*  2328    16 */
 	int                        last_scanned_node;    /*  2344     4 */
 
@@ -2431,7 +2468,7 @@
 	struct mem_cgroup_per_node * nodeinfo[0];        /*  2648     0 */
 
 	/* size: 2688, cachelines: 42, members: 49 */
-	/* sum members: 2540, holes: 8, sum holes: 108 */
+	/* sum members: 2537, holes: 9, sum holes: 111 */
 	/* padding: 40 */
 };
 struct upid {
@@ -2956,16 +2993,16 @@
 	/* XXX 4 bytes hole, try to pack */
 
 	long long unsigned int     starttime;            /*     8     8 */
-	enum vtime_state           state;                /*    16     4 */
+	enum vtime_state           state;                /*    16     1 */
 
-	/* XXX 4 bytes hole, try to pack */
+	/* XXX 7 bytes hole, try to pack */
 
 	u64                        utime;                /*    24     8 */
 	u64                        stime;                /*    32     8 */
 	u64                        gtime;                /*    40     8 */
 
 	/* size: 48, cachelines: 1, members: 6 */
-	/* sum members: 40, holes: 2, sum holes: 8 */
+	/* sum members: 37, holes: 2, sum holes: 11 */
 	/* last cacheline: 48 bytes */
 };
 struct sched_info {
@@ -3463,9 +3500,9 @@
 	/* last cacheline: 8 bytes */
 };
 struct uprobe_task {
-	enum uprobe_task_state     state;                /*     0     4 */
+	enum uprobe_task_state     state;                /*     0     1 */
 
-	/* XXX 4 bytes hole, try to pack */
+	/* XXX 7 bytes hole, try to pack */
 
 	union {
 		struct {
@@ -3483,7 +3520,7 @@
 	unsigned int               depth;                /*    56     4 */
 
 	/* size: 64, cachelines: 1, members: 6 */
-	/* sum members: 56, holes: 1, sum holes: 4 */
+	/* sum members: 53, holes: 1, sum holes: 7 */
 	/* padding: 4 */
 };
 union thread_union {
@@ -3695,9 +3732,9 @@
 	/* last cacheline: 8 bytes */
 };
 struct module {
-	enum module_state          state;                /*     0     4 */
+	enum module_state          state;                /*     0     1 */
 
-	/* XXX 4 bytes hole, try to pack */
+	/* XXX 7 bytes hole, try to pack */
 
 	struct list_head           list;                 /*     8    16 */
 	char                       name[56];             /*    24    56 */
@@ -3790,7 +3827,7 @@
 	unsigned int               num_ei_funcs;         /*   808     4 */
 
 	/* size: 832, cachelines: 13, members: 63 */
-	/* sum members: 786, holes: 6, sum holes: 26 */
+	/* sum members: 783, holes: 6, sum holes: 29 */
 	/* padding: 20 */
 };
 struct ablkcipher_tfm {
@@ -3992,7 +4029,10 @@
 	struct inode *             f_inode;              /*    32     8 */
 	const struct file_operations  * f_op;            /*    40     8 */
 	spinlock_t                 f_lock;               /*    48     4 */
-	enum rw_hint               f_write_hint;         /*    52     4 */
+	enum rw_hint               f_write_hint;         /*    52     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	atomic_long_t              f_count;              /*    56     8 */
 	/* --- cacheline 1 boundary (64 bytes) --- */
 	unsigned int               f_flags;              /*    64     4 */
@@ -4013,6 +4053,7 @@
 	errseq_t                   f_wb_err;             /*   248     4 */
 
 	/* size: 256, cachelines: 4, members: 21 */
+	/* sum members: 249, holes: 1, sum holes: 3 */
 	/* padding: 4 */
 };
 struct arch_uprobe_task {
@@ -4080,14 +4121,14 @@
 	struct percpu_ref *        ref;                  /*   128     8 */
 	struct device *            dev;                  /*   136     8 */
 	void *                     data;                 /*   144     8 */
-	enum memory_type           type;                 /*   152     4 */
+	enum memory_type           type;                 /*   152     1 */
 
-	/* XXX 4 bytes hole, try to pack */
+	/* XXX 7 bytes hole, try to pack */
 
 	u64                        pci_p2pdma_bus_offset; /*   160     8 */
 
 	/* size: 168, cachelines: 3, members: 10 */
-	/* sum members: 157, holes: 2, sum holes: 11 */
+	/* sum members: 154, holes: 2, sum holes: 14 */
 	/* last cacheline: 40 bytes */
 };
 struct vm_userfaultfd_ctx {
@@ -4358,9 +4399,9 @@
 	/* last cacheline: 24 bytes */
 };
 struct kobj_ns_type_operations {
-	enum kobj_ns_type          type;                 /*     0     4 */
+	enum kobj_ns_type          type;                 /*     0     1 */
 
-	/* XXX 4 bytes hole, try to pack */
+	/* XXX 7 bytes hole, try to pack */
 
 	bool                       (*current_may_mount)(void); /*     8     8 */
 	void *                     (*grab_current_ns)(void); /*    16     8 */
@@ -4369,7 +4410,7 @@
 	void                       (*drop_ns)(void *);   /*    40     8 */
 
 	/* size: 48, cachelines: 1, members: 6 */
-	/* sum members: 44, holes: 1, sum holes: 4 */
+	/* sum members: 41, holes: 1, sum holes: 7 */
 	/* last cacheline: 48 bytes */
 };
 struct sock {
@@ -5138,16 +5179,16 @@
 	/* XXX 4 bytes hole, try to pack */
 
 	struct callback_head       cb_head;              /*    40    16 */
-	enum rcu_sync_type         gp_type;              /*    56     4 */
+	enum rcu_sync_type         gp_type;              /*    56     1 */
 
 	/* size: 64, cachelines: 1, members: 6 */
-	/* sum members: 56, holes: 1, sum holes: 4 */
-	/* padding: 4 */
+	/* sum members: 53, holes: 1, sum holes: 4 */
+	/* padding: 7 */
 };
 struct percpu_rw_semaphore {
 	struct rcu_sync            rss;                  /*     0    64 */
 
-	/* XXX last struct has 4 bytes of padding */
+	/* XXX last struct has 7 bytes of padding */
 
 	/* --- cacheline 1 boundary (64 bytes) --- */
 	unsigned int *             read_count;           /*    64     8 */
@@ -5157,7 +5198,7 @@
 
 	/* size: 128, cachelines: 2, members: 5 */
 	/* padding: 4 */
-	/* paddings: 1, sum paddings: 4 */
+	/* paddings: 1, sum paddings: 7 */
 };
 struct delayed_call {
 	void                       (*fn)(void *);        /*     0     8 */
@@ -5254,12 +5295,16 @@
 	atomic_t                   dq_count;             /*   100     4 */
 	struct super_block *       dq_sb;                /*   104     8 */
 	struct kqid                dq_id;                /*   112     8 */
+
+	/* XXX last struct has 3 bytes of padding */
+
 	loff_t                     dq_off;               /*   120     8 */
 	/* --- cacheline 2 boundary (128 bytes) --- */
 	long unsigned int          dq_flags;             /*   128     8 */
 	struct mem_dqblk           dq_dqb;               /*   136    72 */
 
 	/* size: 208, cachelines: 4, members: 12 */
+	/* paddings: 1, sum paddings: 3 */
 	/* last cacheline: 16 bytes */
 };
 struct kqid {
@@ -5268,9 +5313,10 @@
 		kgid_t             gid;                  /*     0     4 */
 		kprojid_t          projid;               /*     0     4 */
 	};                                               /*     0     4 */
-	enum quota_type            type;                 /*     4     4 */
+	enum quota_type            type;                 /*     4     1 */
 
 	/* size: 8, cachelines: 1, members: 2 */
+	/* padding: 3 */
 	/* last cacheline: 8 bytes */
 };
 struct mem_dqblk {
@@ -5492,7 +5538,10 @@
 	long int                   pages_skipped;        /*     8     8 */
 	loff_t                     range_start;          /*    16     8 */
 	loff_t                     range_end;            /*    24     8 */
-	enum writeback_sync_modes  sync_mode;            /*    32     4 */
+	enum writeback_sync_modes  sync_mode;            /*    32     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	unsigned int               for_kupdate:1;        /*    36:31  4 */
 	unsigned int               for_background:1;     /*    36:30  4 */
 	unsigned int               tagged_writepages:1;  /*    36:29  4 */
@@ -5516,7 +5565,7 @@
 	size_t                     wb_tcand_bytes;       /*    88     8 */
 
 	/* size: 96, cachelines: 2, members: 19 */
-	/* sum members: 92, holes: 1, sum holes: 4 */
+	/* sum members: 89, holes: 2, sum holes: 7 */
 	/* bit holes: 1, sum bit holes: 26 bits */
 	/* last cacheline: 32 bytes */
 };
@@ -5689,7 +5738,10 @@
 	/* --- cacheline 5 boundary (320 bytes) --- */
 	struct fprop_local_percpu  completions;          /*   320    48 */
 	int                        dirty_exceeded;       /*   368     4 */
-	enum wb_reason             start_all_reason;     /*   372     4 */
+	enum wb_reason             start_all_reason;     /*   372     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	spinlock_t                 work_lock;            /*   376     4 */
 
 	/* XXX 4 bytes hole, try to pack */
@@ -5718,7 +5770,7 @@
 	};                                               /*   664    32 */
 
 	/* size: 696, cachelines: 11, members: 32 */
-	/* sum members: 688, holes: 2, sum holes: 8 */
+	/* sum members: 685, holes: 3, sum holes: 11 */
 	/* paddings: 1, sum paddings: 4 */
 	/* last cacheline: 56 bytes */
 };
@@ -5738,12 +5790,16 @@
 struct fown_struct {
 	rwlock_t                   lock;                 /*     0     8 */
 	struct pid *               pid;                  /*     8     8 */
-	enum pid_type              pid_type;             /*    16     4 */
+	enum pid_type              pid_type;             /*    16     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	kuid_t                     uid;                  /*    20     4 */
 	kuid_t                     euid;                 /*    24     4 */
 	int                        signum;               /*    28     4 */
 
 	/* size: 32, cachelines: 1, members: 6 */
+	/* sum members: 29, holes: 1, sum holes: 3 */
 	/* last cacheline: 32 bytes */
 };
 struct file_ra_state {
@@ -6246,7 +6302,10 @@
 	/* padding: 8 */
 };
 struct socket {
-	socket_state               state;                /*     0     4 */
+	socket_state               state;                /*     0     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	short int                  type;                 /*     4     2 */
 
 	/* XXX 2 bytes hole, try to pack */
@@ -6258,7 +6317,7 @@
 	const struct proto_ops  *  ops;                  /*    40     8 */
 
 	/* size: 48, cachelines: 1, members: 7 */
-	/* sum members: 46, holes: 1, sum holes: 2 */
+	/* sum members: 43, holes: 2, sum holes: 5 */
 	/* last cacheline: 48 bytes */
 };
 struct proto_ops {
@@ -6541,8 +6600,14 @@
 	/* XXX 19 bits hole, try to pack */
 
 	unsigned int               links_count;          /*   204     4 */
-	enum rpm_request           request;              /*   208     4 */
-	enum rpm_status            runtime_status;       /*   212     4 */
+	enum rpm_request           request;              /*   208     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
+	enum rpm_status            runtime_status;       /*   212     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	int                        runtime_error;        /*   216     4 */
 	int                        autosuspend_delay;    /*   220     4 */
 	long unsigned int          last_busy;            /*   224     8 */
@@ -6555,12 +6620,12 @@
 	struct dev_pm_qos *        qos;                  /*   272     8 */
 
 	/* size: 280, cachelines: 5, members: 50 */
-	/* sum members: 271, holes: 2, sum holes: 6 */
+	/* sum members: 265, holes: 4, sum holes: 12 */
 	/* bit holes: 3, sum bit holes: 53 bits */
 	/* paddings: 1, sum paddings: 4 */
 	/* last cacheline: 24 bytes */
 
-	/* BRAIN FART ALERT! 280 != 271 + 6(holes), diff = 3 */
+	/* BRAIN FART ALERT! 280 != 265 + 12(holes), diff = 3 */
 };
 struct wakeup_source {
 	const char  *              name;                 /*     0     8 */
@@ -6695,7 +6760,10 @@
 
 	/* XXX 3 bytes hole, try to pack */
 
-	enum probe_type            probe_type;           /*    36     4 */
+	enum probe_type            probe_type;           /*    36     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	const struct of_device_id  * of_match_table;     /*    40     8 */
 	const struct acpi_device_id  * acpi_match_table; /*    48     8 */
 	int                        (*probe)(struct device *); /*    56     8 */
@@ -6710,7 +6778,7 @@
 	struct driver_private *    p;                    /*   120     8 */
 
 	/* size: 128, cachelines: 2, members: 17 */
-	/* sum members: 125, holes: 1, sum holes: 3 */
+	/* sum members: 122, holes: 2, sum holes: 6 */
 };
 struct device_type {
 	const char  *              name;                 /*     0     8 */
@@ -6758,10 +6826,10 @@
 struct dev_links_info {
 	struct list_head           suppliers;            /*     0    16 */
 	struct list_head           consumers;            /*    16    16 */
-	enum dl_dev_state          status;               /*    32     4 */
+	enum dl_dev_state          status;               /*    32     1 */
 
 	/* size: 40, cachelines: 1, members: 3 */
-	/* padding: 4 */
+	/* padding: 7 */
 	/* last cacheline: 40 bytes */
 };
 struct percpu_ref {
@@ -6974,10 +7042,7 @@
 		BRNF_PROTO_UNCHANGED = 0,
 		BRNF_PROTO_8021Q = 1,
 		BRNF_PROTO_PPPOE = 2,
-	} orig_proto:8;                                    /*     4     4 */
-
-	/* Bitfield combined with next fields */
-
+	} orig_proto:8;                                    /*     4     1 */
 	u8                         pkt_otherhost:1;      /*     5: 7  1 */
 	u8                         in_prerouting:1;      /*     5: 6  1 */
 	u8                         bridged_dnat:1;       /*     5: 5  1 */
@@ -7161,18 +7226,16 @@
 		NETREG_UNREGISTERED = 3,
 		NETREG_RELEASED = 4,
 		NETREG_DUMMY = 5,
-	} reg_state:8;                                     /*  1232     4 */
-
-	/* Bitfield combined with next fields */
-
+	} reg_state:8;                                     /*  1232     1 */
 	bool                       dismantle;            /*  1233     1 */
-
-	/* Bitfield combined with previous fields */
-
 	enum {
 		RTNL_LINK_INITIALIZED = 0,
 		RTNL_LINK_INITIALIZING = 1,
-	} rtnl_link_state:16;                               /*  1232     4 */
+	} rtnl_link_state:16;                               /*  1234     1 */
+
+	/* XXX 248 bits hole, try to pack */
+	/* XXX 1 byte hole, try to pack */
+
 	bool                       needs_free_netdev;    /*  1236     1 */
 
 	/* XXX 3 bytes hole, try to pack */
@@ -7225,7 +7288,8 @@
 	unsigned int               wol_enabled:1;        /*  2216:23  4 */
 
 	/* size: 2240, cachelines: 35, members: 135 */
-	/* sum members: 2176, holes: 9, sum holes: 44 */
+	/* sum members: 2175, holes: 10, sum holes: 45 */
+	/* bit holes: 1, sum bit holes: 248 bits */
 	/* padding: 20 */
 	/* paddings: 5, sum paddings: 23 */
 	/* bit_padding: 31 bits */
@@ -7340,10 +7404,14 @@
 struct memblock_region {
 	phys_addr_t                base;                 /*     0     8 */
 	phys_addr_t                size;                 /*     8     8 */
-	enum memblock_flags        flags;                /*    16     4 */
+	enum memblock_flags        flags;                /*    16     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	int                        nid;                  /*    20     4 */
 
 	/* size: 24, cachelines: 1, members: 4 */
+	/* sum members: 21, holes: 1, sum holes: 3 */
 	/* last cacheline: 24 bytes */
 };
 struct memblock_type {
@@ -7375,10 +7443,11 @@
 	/* XXX 3 bytes hole, try to pack */
 
 	int                        recursion;            /*     4     4 */
-	enum ctx_state             state;                /*     8     4 */
+	enum ctx_state             state;                /*     8     1 */
 
 	/* size: 12, cachelines: 1, members: 3 */
-	/* sum members: 9, holes: 1, sum holes: 3 */
+	/* sum members: 6, holes: 1, sum holes: 3 */
+	/* padding: 3 */
 	/* last cacheline: 12 bytes */
 };
 struct taskstats {
@@ -7795,7 +7864,10 @@
 	const struct bpf_map_ops  * ops;                 /*     0     8 */
 	struct bpf_map *           inner_map_meta;       /*     8     8 */
 	void *                     security;             /*    16     8 */
-	enum bpf_map_type          map_type;             /*    24     4 */
+	enum bpf_map_type          map_type;             /*    24     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	u32                        key_size;             /*    28     4 */
 	u32                        value_size;           /*    32     4 */
 	u32                        max_entries;          /*    36     4 */
@@ -7819,7 +7891,7 @@
 	char                       name[16];             /*   176    16 */
 
 	/* size: 192, cachelines: 3, members: 20 */
-	/* sum members: 137, holes: 1, sum holes: 55 */
+	/* sum members: 134, holes: 2, sum holes: 58 */
 };
 struct bpf_map_dev_ops {
 	int                        (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *); /*     0     8 */
@@ -7848,23 +7920,42 @@
 
 	/* XXX 2 bytes hole, try to pack */
 
-	enum bpf_return_type       ret_type;             /*    12     4 */
-	enum bpf_arg_type          arg1_type;            /*    16     4 */
-	enum bpf_arg_type          arg2_type;            /*    20     4 */
-	enum bpf_arg_type          arg3_type;            /*    24     4 */
-	enum bpf_arg_type          arg4_type;            /*    28     4 */
-	enum bpf_arg_type          arg5_type;            /*    32     4 */
+	enum bpf_return_type       ret_type;             /*    12     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
+	enum bpf_arg_type          arg1_type;            /*    16     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
+	enum bpf_arg_type          arg2_type;            /*    20     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
+	enum bpf_arg_type          arg3_type;            /*    24     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
+	enum bpf_arg_type          arg4_type;            /*    28     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
+	enum bpf_arg_type          arg5_type;            /*    32     1 */
 
 	/* size: 40, cachelines: 1, members: 9 */
-	/* sum members: 34, holes: 1, sum holes: 2 */
-	/* padding: 4 */
+	/* sum members: 16, holes: 6, sum holes: 17 */
+	/* padding: 7 */
 	/* last cacheline: 40 bytes */
 };
 struct bpf_insn_access_aux {
-	enum bpf_reg_type          reg_type;             /*     0     4 */
+	enum bpf_reg_type          reg_type;             /*     0     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	int                        ctx_field_size;       /*     4     4 */
 
 	/* size: 8, cachelines: 1, members: 2 */
+	/* sum members: 5, holes: 1, sum holes: 3 */
 	/* last cacheline: 8 bytes */
 };
 struct bpf_prog_ops {
@@ -7888,8 +7979,14 @@
 
 	/* XXX 6 bits hole, try to pack */
 
-	enum bpf_prog_type         type;                 /*     4     4 */
-	enum bpf_attach_type       expected_attach_type; /*     8     4 */
+	enum bpf_prog_type         type;                 /*     4     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
+	enum bpf_attach_type       expected_attach_type; /*     8     1 */
+
+	/* XXX 3 bytes hole, try to pack */
+
 	u32                        len;                  /*    12     4 */
 	u32                        jited_len;            /*    16     4 */
 	u8                         tag[8];               /*    20     8 */
@@ -7905,7 +8002,7 @@
 	};                                               /*    56     0 */
 
 	/* size: 56, cachelines: 1, members: 20 */
-	/* sum members: 52, holes: 1, sum holes: 4 */
+	/* sum members: 46, holes: 3, sum holes: 10 */
 	/* bit holes: 1, sum bit holes: 6 bits */
 	/* last cacheline: 56 bytes */
 };
@@ -8473,7 +8570,7 @@
 	struct lruvec_stat *       lruvec_stat_cpu;      /*   136     8 */
 	atomic_long_t              lruvec_stat[30];      /*   144   240 */
 	/* --- cacheline 6 boundary (384 bytes) --- */
-	long unsigned int          lru_zone_size[5][5];  /*   384   200 */
+	long unsigned int          lru_zone_size[25];    /*   384   200 */
 	/* --- cacheline 9 boundary (576 bytes) was 8 bytes ago --- */
 	struct mem_cgroup_reclaim_iter iter[13];         /*   584   208 */
 	/* --- cacheline 12 boundary (768 bytes) was 24 bytes ago --- */
@@ -11229,9 +11326,9 @@
 	/* last cacheline: 33 bytes */
 };
 struct netdev_bpf {
-	enum bpf_netdev_command    command;              /*     0     4 */
+	enum bpf_netdev_command    command;              /*     0     1 */
 
-	/* XXX 4 bytes hole, try to pack */
+	/* XXX 7 bytes hole, try to pack */
 
 	union {
 		struct {
@@ -11263,7 +11360,7 @@
 	};                                               /*     8    24 */
 
 	/* size: 32, cachelines: 1, members: 2 */
-	/* sum members: 28, holes: 1, sum holes: 4 */
+	/* sum members: 25, holes: 1, sum holes: 7 */
 	/* last cacheline: 32 bytes */
 };
 struct xfrmdev_ops {



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux