RE: [RFC PATCH net-next 7/9] ethtool: cmis_cdb: Add a layer for supporting CDB commands

From: Danielle Ratson
Date: Tue Jan 30 2024 - 02:55:48 EST


> > +int ethtool_cmis_page_init(struct ethtool_module_eeprom *page_data,
> > + u8 page, u32 offset, u32 length) {
> > + page_data->page = page;
> > + page_data->offset = offset;
> > + page_data->length = length;
> > + page_data->i2c_address = ETHTOOL_CMIS_CDB_PAGE_I2C_ADDR;
> > + page_data->data = kmalloc(page_data->length, GFP_KERNEL);
> > + if (!page_data->data)
> > + return -ENOMEM;
>
> Hmm, so every use is forced to use kmalloc() even when it's just one byte?
> That seems rather wasteful.
>
> > +/* See section 9.4.1 "CMD 0040h: Module Features" in CMIS standard
> revision 5.2.
> > + * struct cmis_cdb_module_features_rpl is structured layout of the
> > +flat
> > + * array, ethtool_cmis_cdb_rpl::payload.
> > + */
> > +struct cmis_cdb_module_features_rpl {
> > + u8 resv1[CMIS_CDB_MODULE_FEATURES_RESV_DATA];
> > + __be16 max_completion_time;
> > +};
>
> Does this structure need to be packed? I would suggest it does to ensure that
> the __be16 is correctly placed after the 34 bytes of u8.
>
> Overall, I think the idea of always kmalloc()ing the data is a bad idea at the
> moment. We have no implementations that DMA to/from this buffer, and it
> means extra cycles spent, and an extra failure point each time we want to do a
> CMIS command.
>
> It also introduces extra complexity, where we could just be passing a pointer
> to a function local variable or function local structure.
>
> Unless we decide that the data pointer should be DMA-able from (in which
> case, that needs documenting as such) then I would suggest getting rid of the
> extra kmalloc()...kfree() bits.
>
> Thanks.
>

Will fix, thanks!

> --
> RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
> FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!