netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Francesco Valla <francesco@valla.it>
To: Matias Ezequiel Vara Larsen <mvaralar@redhat.com>
Cc: Marc Kleine-Budde <mkl@pengutronix.de>,
	Paolo Abeni <pabeni@redhat.com>,
	Harald Mommer <harald.mommer@opensynergy.com>,
	Mikhail Golubev-Ciuchea <Mikhail.Golubev-Ciuchea@opensynergy.com>,
	Wolfgang Grandegger <wg@grandegger.com>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
	Damir Shaikhutdinov <Damir.Shaikhutdinov@opensynergy.com>,
	linux-kernel@vger.kernel.org, linux-can@vger.kernel.org,
	netdev@vger.kernel.org, virtualization@lists.linux.dev,
	development@redaril.me
Subject: Re: [PATCH v5] can: virtio: Initial virtio CAN driver.
Date: Mon, 13 Oct 2025 18:29:44 +0200	[thread overview]
Message-ID: <5719046.rdbgypaU67@fedora.fritz.box> (raw)
In-Reply-To: <aOzL8f4C27z361P2@fedora>

Hello Matias,

On Monday, 13 October 2025 at 11:52:49 Matias Ezequiel Vara Larsen <mvaralar@redhat.com> wrote:
> On Fri, Oct 10, 2025 at 11:20:22PM +0200, Francesco Valla wrote:
> > On Friday, 10 October 2025 at 17:46:25 Matias Ezequiel Vara Larsen <mvaralar@redhat.com> wrote:
> > > On Thu, Sep 11, 2025 at 10:59:40PM +0200, Francesco Valla wrote:
> > > > Hello Mikhail, Harald,
> > > > 
> > > > hoping there will be a v6 of this patch soon, a few comments:
> > > > 
> > > 
> > > I am working on the v6 by addressing the comments in this thread.
> > > 
> > > > On Monday, 8 January 2024 at 14:10:35 Mikhail Golubev-Ciuchea <Mikhail.Golubev-Ciuchea@opensynergy.com> wrote:
> > > > 
> > > > [...]
> > > > 
> > > > > +
> > > > > +/* virtio_can private data structure */
> > > > > +struct virtio_can_priv {
> > > > > +	struct can_priv can;	/* must be the first member */
> > > > > +	/* NAPI for RX messages */
> > > > > +	struct napi_struct napi;
> > > > > +	/* NAPI for TX messages */
> > > > > +	struct napi_struct napi_tx;
> > > > > +	/* The network device we're associated with */
> > > > > +	struct net_device *dev;
> > > > > +	/* The virtio device we're associated with */
> > > > > +	struct virtio_device *vdev;
> > > > > +	/* The virtqueues */
> > > > > +	struct virtqueue *vqs[VIRTIO_CAN_QUEUE_COUNT];
> > > > > +	/* I/O callback function pointers for the virtqueues */
> > > > > +	vq_callback_t *io_callbacks[VIRTIO_CAN_QUEUE_COUNT];
> > > > > +	/* Lock for TX operations */
> > > > > +	spinlock_t tx_lock;
> > > > > +	/* Control queue lock. Defensive programming, may be not needed */
> > > > > +	struct mutex ctrl_lock;
> > > > > +	/* Wait for control queue processing without polling */
> > > > > +	struct completion ctrl_done;
> > > > > +	/* List of virtio CAN TX message */
> > > > > +	struct list_head tx_list;
> > > > > +	/* Array of receive queue messages */
> > > > > +	struct virtio_can_rx rpkt[128];
> > > > 
> > > > This array should probably be allocated dynamically at probe - maybe
> > > > using a module parameter instead of a hardcoded value as length? 
> > > > 
> > > 
> > > If I allocate this array in probe(), I would not know sdu[] in advance
> > > if I defined it as a flexible array. That made me wonder: can sdu[] be
> > > defined as flexible array for rx? 
> > > 
> > > Thanks.
> > > 
> > 
> > One thing that can be done is to define struct virtio_can_rx as:
> > 
> > struct virtio_can_rx {
> > #define VIRTIO_CAN_RX                   0x0101
> > 	__le16 msg_type;
> > 	__le16 length; /* 0..8 CC, 0..64 CAN-FD, 0..2048 CAN-XL, 12 bits */
> > 	__u8 reserved_classic_dlc; /* If CAN classic length = 8 then DLC can be 8..15 */
> > 	__u8 padding;
> > 	__le16 reserved_xl_priority; /* May be needed for CAN XL priority */
> > 	__le32 flags;
> > 	__le32 can_id;
> > 	__u8 sdu[] __counted_by(length);
> > };
> > 
> > and then allocate the rpkt[] array using the maximum length for SDU:
> > 
> > priv->rpkt = kcalloc(num_rx_buffers,
> > 		sizeof(struct virtio_can_rx) + VIRTIO_CAN_MAX_DLEN,
> > 		GFP_KERNEL);
> > 
> > In this way, the size of each member of rpkt[] is known and is thus
> > suitable for virtio_can_populate_vqs().
> > 
> > 
> 
> Thanks for your answer. What is the value of VIRTIO_CAN_MAX_DLEN? I
> can't find it nor in the code or in the spec. I guess is 64 bytes? Also,
> IIUC, using __counted_by() would not end up saving space but adding an
> extra check for the compiler. Am I right? In that case, can't I just use
> a fixed array of VIRTIO_CAN_MAX_DLEN bytes?

My bad, I forgot to say that VIRTIO_CAN_MAX_DLEN has to be defined, but:
given some more thoughts, maybe this can be a dynamic value based on
the features received from the virtio framework, to avoid wasting memory?

E.g.:

if (virtio_has_feature(VIRTIO_CAN_F_CAN_FD))
	sdu_len = CANFD_MAX_DLEN;
else
	sdu_len = CAN_MAX_DLEN;

priv->rpkt = kcalloc(num_rx_buffers, sizeof(struct virtio_can_rx) + sdu_len,
		GFP_KERNEL);


My understanding of __counted_by() is the same: additional checks but nothing
more.


CAN-XL appears to be not supported by the virtio specs v1.4 [1], but if/when
it will be, the addition of an additional case would be simple.

[1] https://github.com/oasis-tcs/virtio-spec/blob/virtio-1.4/device-types/can/description.tex#L33


> 
> Thanks, Matias.
> 
>

Many thanks to you for your effort!

Regards,
Francesco




  reply	other threads:[~2025-10-13 16:30 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-08 13:10 [PATCH v5] can: virtio: Initial virtio CAN driver Mikhail Golubev-Ciuchea
2024-01-08 19:34 ` Christophe JAILLET
2024-02-01 18:57   ` Harald Mommer
2025-03-12 10:31     ` Matias Ezequiel Vara Larsen
2025-03-12 10:41       ` Marc Kleine-Budde
2025-03-12 13:28         ` Matias Ezequiel Vara Larsen
2025-03-12 13:36           ` Marc Kleine-Budde
2025-03-12 15:11             ` Matias Ezequiel Vara Larsen
2025-03-13  0:26             ` Jason Wang
2025-03-13 18:48     ` Matias Ezequiel Vara Larsen
2025-09-11 20:59 ` Francesco Valla
2025-10-01 15:23   ` Matias Ezequiel Vara Larsen
2025-10-10 15:46   ` Matias Ezequiel Vara Larsen
2025-10-10 21:20     ` Francesco Valla
2025-10-13  9:52       ` Matias Ezequiel Vara Larsen
2025-10-13 16:29         ` Francesco Valla [this message]
2025-10-13 18:07           ` Matias Ezequiel Vara Larsen
2025-10-13 14:15       ` Matias Ezequiel Vara Larsen
2025-10-13 16:35   ` Matias Ezequiel Vara Larsen
2025-10-14  6:54     ` Francesco Valla
2025-10-14 10:42       ` Matias Ezequiel Vara Larsen
2025-10-14 10:15   ` Matias Ezequiel Vara Larsen
2025-10-14 16:01     ` Francesco Valla
2025-10-20 14:56       ` Matias Ezequiel Vara Larsen
2025-10-20 21:24         ` Francesco Valla
2025-10-21  9:40           ` Matias Ezequiel Vara Larsen
2025-10-21 12:08             ` Francesco Valla
2025-10-21 13:15               ` Matias Ezequiel Vara Larsen
2025-10-31 12:21                 ` Matias Ezequiel Vara Larsen
2025-10-14 10:25   ` Matias Ezequiel Vara Larsen

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=5719046.rdbgypaU67@fedora.fritz.box \
    --to=francesco@valla.it \
    --cc=Damir.Shaikhutdinov@opensynergy.com \
    --cc=Mikhail.Golubev-Ciuchea@opensynergy.com \
    --cc=development@redaril.me \
    --cc=edumazet@google.com \
    --cc=harald.mommer@opensynergy.com \
    --cc=jasowang@redhat.com \
    --cc=kuba@kernel.org \
    --cc=linux-can@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mkl@pengutronix.de \
    --cc=mst@redhat.com \
    --cc=mvaralar@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=virtualization@lists.linux.dev \
    --cc=wg@grandegger.com \
    --cc=xuanzhuo@linux.alibaba.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).