Message ID | 20230710154932.68377-10-andriy.shevchenko@linux.intel.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | spi: Header and core clean up and refactoring | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
On 10.07.2023 18:49:26, Andy Shevchenko wrote: > Prefer struct_size() over open-coded versions. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > --- > include/linux/spi/spi.h | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h > index c9479badf38c..9fb8efb068c6 100644 > --- a/include/linux/spi/spi.h > +++ b/include/linux/spi/spi.h > @@ -17,6 +17,7 @@ > #include <linux/minmax.h> > #include <linux/mod_devicetable.h> > #include <linux/mutex.h> > +#include <linux/overflow.h> > #include <linux/scatterlist.h> > #include <linux/slab.h> > #include <linux/smp.h> > @@ -1095,6 +1096,8 @@ struct spi_transfer { > * @state: for use by whichever driver currently owns the message > * @resources: for resource management when the spi message is processed > * @prepared: spi_prepare_message was called for the this message > + * @t: for use with spi_message_alloc() when message and transfers have > + * been allocated together > * > * A @spi_message is used to execute an atomic sequence of data transfers, > * each represented by a struct spi_transfer. The sequence is "atomic" > @@ -1147,6 +1150,9 @@ struct spi_message { > > /* List of spi_res reources when the spi message is processed */ > struct list_head resources; > + > + /* For embedding transfers into the memory of the message */ > + struct spi_transfer t[]; You might want to use the DECLARE_FLEX_ARRAY helper here. Marc
On Mon, Jul 10, 2023 at 05:59:55PM +0200, Marc Kleine-Budde wrote: > On 10.07.2023 18:49:26, Andy Shevchenko wrote: ... > > + struct spi_transfer t[]; > > You might want to use the DECLARE_FLEX_ARRAY helper here. Technically, yes, semantically documentation [1] disagrees with you, so I leave it as is. [1]: Documentation/process/deprecated.rst:269
On Mon, Jul 10, 2023 at 07:10:43PM +0300, Andy Shevchenko wrote: > On Mon, Jul 10, 2023 at 05:59:55PM +0200, Marc Kleine-Budde wrote: > > On 10.07.2023 18:49:26, Andy Shevchenko wrote: ... > > > + struct spi_transfer t[]; > > > > You might want to use the DECLARE_FLEX_ARRAY helper here. > > Technically, yes, semantically documentation [1] disagrees with "and [2]" > you, so I leave it as is. > > [1]: Documentation/process/deprecated.rst:269 [2]: Documentation/process/deprecated.rst:350
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index c9479badf38c..9fb8efb068c6 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h @@ -17,6 +17,7 @@ #include <linux/minmax.h> #include <linux/mod_devicetable.h> #include <linux/mutex.h> +#include <linux/overflow.h> #include <linux/scatterlist.h> #include <linux/slab.h> #include <linux/smp.h> @@ -1095,6 +1096,8 @@ struct spi_transfer { * @state: for use by whichever driver currently owns the message * @resources: for resource management when the spi message is processed * @prepared: spi_prepare_message was called for the this message + * @t: for use with spi_message_alloc() when message and transfers have + * been allocated together * * A @spi_message is used to execute an atomic sequence of data transfers, * each represented by a struct spi_transfer. The sequence is "atomic" @@ -1147,6 +1150,9 @@ struct spi_message { /* List of spi_res reources when the spi message is processed */ struct list_head resources; + + /* For embedding transfers into the memory of the message */ + struct spi_transfer t[]; }; static inline void spi_message_init_no_memset(struct spi_message *m) @@ -1207,16 +1213,13 @@ static inline struct spi_message *spi_message_alloc(unsigned ntrans, gfp_t flags { struct spi_message *m; - m = kzalloc(sizeof(struct spi_message) - + ntrans * sizeof(struct spi_transfer), - flags); + m = kzalloc(struct_size(m, t, ntrans), flags); if (m) { unsigned i; - struct spi_transfer *t = (struct spi_transfer *)(m + 1); spi_message_init_no_memset(m); - for (i = 0; i < ntrans; i++, t++) - spi_message_add_tail(t, m); + for (i = 0; i < ntrans; i++) + spi_message_add_tail(&m->t[i], m); } return m; }
Prefer struct_size() over open-coded versions. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- include/linux/spi/spi.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)