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 {