RE: [PATCH net-next 07/10] ethtool: cmis_cdb: Add a layer for supporting CDB commands

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

 



> -----Original Message-----
> From: Danielle Ratson <danieller@xxxxxxxxxx>
> Sent: Tuesday, 9 April 2024 16:34
> To: Russell King <linux@xxxxxxxxxxxxxxx>
> Cc: netdev@xxxxxxxxxxxxxxx; davem@xxxxxxxxxxxxx; edumazet@xxxxxxxxxx;
> kuba@xxxxxxxxxx; pabeni@xxxxxxxxxx; corbet@xxxxxxx; sdf@xxxxxxxxxx;
> kory.maincent@xxxxxxxxxxx; maxime.chevallier@xxxxxxxxxxx;
> vladimir.oltean@xxxxxxx; przemyslaw.kitszel@xxxxxxxxx;
> ahmed.zaki@xxxxxxxxx; richardcochran@xxxxxxxxx; shayagr@xxxxxxxxxx;
> paul.greenwalt@xxxxxxxxx; jiri@xxxxxxxxxxx; linux-doc@xxxxxxxxxxxxxxx; linux-
> kernel@xxxxxxxxxxxxxxx; mlxsw <mlxsw@xxxxxxxxxx>; Petr Machata
> <petrm@xxxxxxxxxx>; Ido Schimmel <idosch@xxxxxxxxxx>
> Subject: RE: [PATCH net-next 07/10] ethtool: cmis_cdb: Add a layer for
> supporting CDB commands
> 
> > -----Original Message-----
> > From: Russell King <linux@xxxxxxxxxxxxxxx>
> > Sent: Monday, 8 April 2024 17:55
> > To: Danielle Ratson <danieller@xxxxxxxxxx>
> > Cc: netdev@xxxxxxxxxxxxxxx; davem@xxxxxxxxxxxxx;
> edumazet@xxxxxxxxxx;
> > kuba@xxxxxxxxxx; pabeni@xxxxxxxxxx; corbet@xxxxxxx; sdf@xxxxxxxxxx;
> > kory.maincent@xxxxxxxxxxx; maxime.chevallier@xxxxxxxxxxx;
> > vladimir.oltean@xxxxxxx; przemyslaw.kitszel@xxxxxxxxx;
> > ahmed.zaki@xxxxxxxxx; richardcochran@xxxxxxxxx; shayagr@xxxxxxxxxx;
> > paul.greenwalt@xxxxxxxxx; jiri@xxxxxxxxxxx; linux-doc@xxxxxxxxxxxxxxx;
> > linux- kernel@xxxxxxxxxxxxxxx; mlxsw <mlxsw@xxxxxxxxxx>; Petr Machata
> > <petrm@xxxxxxxxxx>; Ido Schimmel <idosch@xxxxxxxxxx>
> > Subject: Re: [PATCH net-next 07/10] ethtool: cmis_cdb: Add a layer for
> > supporting CDB commands
> >
> > On Mon, Apr 08, 2024 at 03:53:37PM +0300, Danielle Ratson wrote:
> > > +/**
> > > + * struct ethtool_cmis_cdb_request - CDB commands request fields as
> > decribed in
> > > + *				the CMIS standard
> > > + * @id: Command ID.
> > > + * @epl_len: EPL memory length.
> > > + * @lpl_len: LPL memory length.
> > > + * @chk_code: Check code for the previous field and the payload.
> > > + * @resv1: Added to match the CMIS standard request continuity.
> > > + * @resv2: Added to match the CMIS standard request continuity.
> > > + * @payload: Payload for the CDB commands.
> > > + */
> > > +struct ethtool_cmis_cdb_request {
> > > +	__be16 id;
> > > +	struct_group(body,
> > > +		u16 epl_len;
> >
> > u16 with a struct that also uses __be16 looks suspicious.
> >
> > > +		u8 lpl_len;
> > > +		u8 chk_code;
> > > +		u8 resv1;
> > > +		u8 resv2;
> > > +		u8 payload[ETHTOOL_CMIS_CDB_LPL_MAX_PL_LENGTH];
> > > +	);
> >
> > Does it matter if the compiler inserts some padding before this struct group?
> 
> Yes it should matter since I copy this struct into a payload and it should be
> transferred like that to match the CMIS specification, but if I use __be16 for
> both id and epl_len it might resolve the issue isn’t it?
> 
> >
> > > +/**
> > > + * struct ethtool_cmis_cdb_rpl_hdr - CDB commands reply header
> > > +arguments
> > > + * @rpl_len: Reply length.
> > > + * @rpl_chk_code: Reply check code.
> > > + */
> > > +struct ethtool_cmis_cdb_rpl_hdr {
> > > +	u8 rpl_len;
> > > +	u8 rpl_chk_code;
> >
> > Does it matter if the compiler adds some padding here?
> 
> Kind of the same idea, it is matter if the compiler adds padding since the reply
> is read and extracted into this struct like it is written in the CMIS specification.
> >
> > --
> > RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
> > FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

Hi Russell, 

Please see below pahole's output after changing ethtool_cmis_cdb_request ::epl_len from u16 to __be16.

$ pahole -C 'ethtool_cmis_cdb_request' ./vmlinux
struct ethtool_cmis_cdb_request {
        __be16                     id;                   /*     0     2 */
        union {
                struct {
                        __be16     epl_len;              /*     2     2 */
                        u8         lpl_len;              /*     4     1 */
                        u8         chk_code;             /*     5     1 */
                        u8         resv1;                /*     6     1 */
                        u8         resv2;                /*     7     1 */
                        u8         payload[120];         /*     8   120 */
                };                                       /*     2   126 */
                struct {
                        __be16     epl_len;              /*     2     2 */
                        u8         lpl_len;              /*     4     1 */
                        u8         chk_code;             /*     5     1 */
                        u8         resv1;                /*     6     1 */
                        u8         resv2;                /*     7     1 */
                        u8         payload[120];         /*     8   120 */
                } body;                                  /*     2   126 */
        };                                               /*     2   126 */

        /* size: 128, cachelines: 2, members: 2 */
};

[danieller@dev-r-vrt-155 linux_mlxsw]$ pahole -C 'ethtool_cmis_cdb_rpl' ./vmlinux
struct ethtool_cmis_cdb_rpl {
        struct ethtool_cmis_cdb_rpl_hdr hdr;             /*     0     2 */
        u8                         payload[120];         /*     2   120 */

        /* size: 122, cachelines: 2, members: 2 */
        /* last cacheline: 58 bytes */
};

[danieller@dev-r-vrt-155 linux_mlxsw]$ pahole -C 'ethtool_cmis_cdb_rpl_hdr' ./vmlinux
struct ethtool_cmis_cdb_rpl_hdr {
        u8                         rpl_len;              /*     0     1 */
        u8                         rpl_chk_code;         /*     1     1 */

        /* size: 2, cachelines: 1, members: 2 */
        /* last cacheline: 2 bytes */
};

If a further fix is needed, you are welcome to let me know.

Thanks,
Danielle




[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux