[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20231009-onshore-underage-c58415adfd92-mkl@pengutronix.de>
Date: Mon, 9 Oct 2023 11:15:13 +0200
From: Marc Kleine-Budde <mkl@...gutronix.de>
To: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
Cc: Mark Brown <broonie@...nel.org>, linux-spi@...r.kernel.org,
linux-kernel@...r.kernel.org,
Sebastian Reichel <sebastian.reichel@...labora.com>,
linux-can <linux-can@...r.kernel.org>, kernel@...gutronix.de
Subject: Re: [PATCH v4 4/4] spi: Use struct_size() helper
Hello,
this change (75e308ffc4f0 ("spi: Use struct_size() helper")) reached
mainline with v6.6-rc1 and causes the following warning in my mcp251xfd
CAN driver.
On 14.07.2023 12:17:48, Andy Shevchenko wrote:
> The Documentation/process/deprecated.rst suggests to use flexible array
> members to provide a way to declare having a dynamically sized set of
> trailing elements in a structure.This makes code robust agains bunch of
> the issues described in the documentation, main of which is about the
> correctness of the sizeof() calculation for this data structure.
>
> Due to above, prefer struct_size() over open-coded versions.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@...ux.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 04daf61dfd3f..7f8b478fdeb3 100644
> --- a/include/linux/spi/spi.h
> +++ b/include/linux/spi/spi.h
> @@ -13,6 +13,7 @@
> #include <linux/gpio/consumer.h>
> #include <linux/kthread.h>
> #include <linux/mod_devicetable.h>
> +#include <linux/overflow.h>
> #include <linux/scatterlist.h>
> #include <linux/slab.h>
> #include <linux/u64_stats_sync.h>
> @@ -1085,6 +1086,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"
> @@ -1139,6 +1142,9 @@ struct spi_message {
>
> /* List of spi_res resources when the SPI message is processed */
> struct list_head resources;
> +
> + /* For embedding transfers into the memory of the message */
> + struct spi_transfer t[];
| CHECK drivers/net/can/spi/mcp251xfd/mcp251xfd-chip-fifo.c
| drivers/net/can/spi/mcp251xfd/mcp251xfd-chip-fifo.c: note: in included file:
| drivers/net/can/spi/mcp251xfd/mcp251xfd.h:632:38: warning: array of flexible structures
| drivers/net/can/spi/mcp251xfd/mcp251xfd.h:547:36: warning: array of flexible structures
Line 632 is an array of struct mcp251xfd_tef_ring in the struct mcp251xfd_priv:
| struct mcp251xfd_priv {
[...]
| struct mcp251xfd_tef_ring tef[MCP251XFD_FIFO_TEF_NUM];
[...]
| }
...and struct mcp251xfd_tef_ring contains a struct spi_transfer:
| struct mcp251xfd_tef_ring {
| unsigned int head;
| unsigned int tail;
|
| /* u8 obj_num equals tx_ring->obj_num */
| /* u8 obj_size equals sizeof(struct mcp251xfd_hw_tef_obj) */
|
| union mcp251xfd_write_reg_buf irq_enable_buf;
| struct spi_transfer irq_enable_xfer;
| struct spi_message irq_enable_msg;
|
| union mcp251xfd_write_reg_buf uinc_buf;
| union mcp251xfd_write_reg_buf uinc_irq_disable_buf;
| struct spi_transfer uinc_xfer[MCP251XFD_TX_OBJ_NUM_MAX];
| };
The warning in line 547 is similar, but for the TX ring.
regards,
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung Nürnberg | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
Download attachment "signature.asc" of type "application/pgp-signature" (489 bytes)
Powered by blists - more mailing lists