On 2020/11/28 9:56, Jakub Kicinski wrote: > On Sat, 28 Nov 2020 12:28:19 +1100 Stephen Rothwell wrote: >> There are 2 drivers that have arrays of packed structures that contain >> pointers that end up at unaligned offsets. These produce warnings in >> the PowerPC allyesconfig build like this: >> >> WARNING: 148 bad relocations >> c00000000e56510b R_PPC64_UADDR64 .rodata+0x0000000001c72378 >> c00000000e565126 R_PPC64_UADDR64 .rodata+0x0000000001c723c0 >> >> They are not drivers that are used on PowerPC (I assume), so mark them >> to not be built on PPC64 when CONFIG_RELOCATABLE is enabled. > > 😳😳 > > What's the offending structure in hisilicon? I'd rather have a look > packing structs with pointers in 'em sounds questionable. > > I only see these two: > > $ git grep packed drivers/net/ethernet/hisilicon/ > drivers/net/ethernet/hisilicon/hns/hnae.h:struct __packed hnae_desc { > drivers/net/ethernet/hisilicon/hns3/hns3_enet.h:struct __packed hns3_desc { I assmue "struct __packed hnae_desc" is the offending structure, because flag_ipoffset field is defined as __le32 and is not 32 bit aligned. struct __packed hnae_desc { __le64 addr; //0 union { struct { //64 union { __le16 asid_bufnum_pid; __le16 asid; }; __le16 send_size; //92 union { __le32 flag_ipoffset; //*108* struct { __u8 bn_pid; __u8 ra_ri_cs_fe_vld; __u8 ip_offset; __u8 tse_vlan_snap_v6_sctp_nth; }; }; __le16 mss; __u8 l4_len; __u8 reserved1; __le16 paylen; __u8 vmid; __u8 qid; __le32 reserved2[2]; } tx; struct { __le32 ipoff_bnum_pid_flag; __le16 pkt_len; __le16 size; union { __le32 vlan_pri_asid; struct { __le16 asid; __le16 vlan_cfi_pri; }; }; __le32 rss_hash; __le32 reserved_1[2]; } rx; }; }; > . >