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;
        };
};

> .
> 

Reply via email to