All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vincent Mailhol <mailhol@kernel.org>
To: Celeste Liu <uwu@coelacanthus.name>
Cc: Maximilian Schneider <max@schneidersoft.net>,
	Henrik Brix Andersen <henrik@brixandersen.dk>,
	Wolfgang Grandegger <wg@grandegger.com>,
	Kees Cook <kees@kernel.org>,
	"Gustavo A. R. Silva" <gustavoars@kernel.org>,
	linux-can@vger.kernel.org, linux-kernel@vger.kernel.org,
	Runcheng Lu <runcheng.lu@hpmicro.com>,
	stable@vger.kernel.org, Marc Kleine-Budde <mkl@pengutronix.de>
Subject: Re: [PATCH v3] net/can/gs_usb: increase max interface to U8_MAX
Date: Tue, 30 Sep 2025 14:57:20 +0900	[thread overview]
Message-ID: <7a2a0124-7269-40b5-a423-e4b704f51628@kernel.org> (raw)
In-Reply-To: <20250930-gs-usb-max-if-v3-1-21d97d7f1c34@coelacanthus.name>

Hi Celeste,

Sorry, one last minute comment which I forgot in my previous message.

On 9/30/25 12:06 PM, Celeste Liu wrote:
> This issue was found by Runcheng Lu when develop HSCanT USB to CAN FD
> converter[1]. The original developers may have only 3 intefaces device to
> test so they write 3 here and wait for future change.
> 
> During the HSCanT development, we actually used 4 interfaces, so the
> limitation of 3 is not enough now. But just increase one is not
> future-proofed. Since the channel type in gs_host_frame is u8, just
> increase interface number limit to max size of u8 safely.
> 
> [1]: https://github.com/cherry-embedded/HSCanT-hardware
> 
> Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
> Reported-by: Runcheng Lu <runcheng.lu@hpmicro.com>
> Cc: stable@vger.kernel.org
> Signed-off-by: Celeste Liu <uwu@coelacanthus.name>
> ---
> Changes in v3:
> - Cc stable should in patch instead of cover letter.
> - Link to v2: https://lore.kernel.org/r/20250930-gs-usb-max-if-v2-1-2cf9a44e6861@coelacanthus.name
> 
> Changes in v2:
> - Use flexible array member instead of fixed array.
> - Link to v1: https://lore.kernel.org/r/20250929-gs-usb-max-if-v1-1-e41b5c09133a@coelacanthus.name
> ---
>  drivers/net/can/usb/gs_usb.c | 22 ++++++++++------------
>  1 file changed, 10 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
> index c9482d6e947b0c7b033dc4f0c35f5b111e1bfd92..69b068c8fa8fbab42337e2b0a3d0860ac678c792 100644
> --- a/drivers/net/can/usb/gs_usb.c
> +++ b/drivers/net/can/usb/gs_usb.c
> @@ -289,11 +289,6 @@ struct gs_host_frame {
>  #define GS_MAX_RX_URBS 30
>  #define GS_NAPI_WEIGHT 32
>  
> -/* Maximum number of interfaces the driver supports per device.
> - * Current hardware only supports 3 interfaces. The future may vary.
> - */
> -#define GS_MAX_INTF 3
> -
>  struct gs_tx_context {
>  	struct gs_can *dev;
>  	unsigned int echo_id;
> @@ -324,7 +319,6 @@ struct gs_can {
>  
>  /* usb interface struct */
>  struct gs_usb {
> -	struct gs_can *canch[GS_MAX_INTF];
>  	struct usb_anchor rx_submitted;
>  	struct usb_device *udev;
>  
> @@ -336,9 +330,11 @@ struct gs_usb {
>  
>  	unsigned int hf_size_rx;
>  	u8 active_channels;
> +	u8 channel_cnt;
>  
>  	unsigned int pipe_in;
>  	unsigned int pipe_out;
> +	struct gs_can *canch[] __counted_by(channel_cnt);
>  };
>  
>  /* 'allocate' a tx context.
> @@ -599,7 +595,7 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)
>  	}
>  
>  	/* device reports out of range channel id */
> -	if (hf->channel >= GS_MAX_INTF)
> +	if (hf->channel >= parent->channel_cnt)
>  		goto device_detach;
>  
>  	dev = parent->canch[hf->channel];
> @@ -699,7 +695,7 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)
>  	/* USB failure take down all interfaces */
>  	if (rc == -ENODEV) {
>  device_detach:
> -		for (rc = 0; rc < GS_MAX_INTF; rc++) {
> +		for (rc = 0; rc < parent->channel_cnt; rc++) {
>  			if (parent->canch[rc])
>  				netif_device_detach(parent->canch[rc]->netdev);
>  		}
> @@ -1460,17 +1456,19 @@ static int gs_usb_probe(struct usb_interface *intf,
>  	icount = dconf.icount + 1;
>  	dev_info(&intf->dev, "Configuring for %u interfaces\n", icount);
>  
> -	if (icount > GS_MAX_INTF) {
> +	if (icount > type_max(typeof(parent->channel_cnt))) {
                              ^^^^^^
If you send a v4 to fix the typo, can you also remove this typeof()?

It used to be required, but this is not the case anymore since commit
bd1ebf2467f9 ("overflow: Allow non-type arg to type_max() and type_min()").

(my Reviewed-by tag is still valid).

>  		dev_err(&intf->dev,
>  			"Driver cannot handle more that %u CAN interfaces\n",
> -			GS_MAX_INTF);
> +			type_max(typeof(parent->channel_cnt)));
                                 ^^^^^^
same

>  		return -EINVAL;
>  	}
>  
> -	parent = kzalloc(sizeof(*parent), GFP_KERNEL);
> +	parent = kzalloc(struct_size(parent, canch, icount), GFP_KERNEL);
>  	if (!parent)
>  		return -ENOMEM;
>  
> +	parent->channel_cnt = icount;
> +
>  	init_usb_anchor(&parent->rx_submitted);
>  
>  	usb_set_intfdata(intf, parent);
> @@ -1531,7 +1529,7 @@ static void gs_usb_disconnect(struct usb_interface *intf)
>  		return;
>  	}
>  
> -	for (i = 0; i < GS_MAX_INTF; i++)
> +	for (i = 0; i < parent->channel_cnt; i++)
>  		if (parent->canch[i])
>  			gs_destroy_candev(parent->canch[i]);


-- 
Yours sincerely,
Vincent Mailhol


      parent reply	other threads:[~2025-09-30  5:57 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-30  3:06 [PATCH v3] net/can/gs_usb: increase max interface to U8_MAX Celeste Liu
2025-09-30  5:44 ` Vincent Mailhol
2025-09-30  6:19   ` Celeste Liu
2025-09-30  5:57 ` Vincent Mailhol [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7a2a0124-7269-40b5-a423-e4b704f51628@kernel.org \
    --to=mailhol@kernel.org \
    --cc=gustavoars@kernel.org \
    --cc=henrik@brixandersen.dk \
    --cc=kees@kernel.org \
    --cc=linux-can@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=max@schneidersoft.net \
    --cc=mkl@pengutronix.de \
    --cc=runcheng.lu@hpmicro.com \
    --cc=stable@vger.kernel.org \
    --cc=uwu@coelacanthus.name \
    --cc=wg@grandegger.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.