From: Matias Ezequiel Vara Larsen <mvaralar@redhat.com>
To: Francesco Valla <francesco@valla.it>
Cc: Marc Kleine-Budde <mkl@pengutronix.de>,
Vincent Mailhol <mailhol@kernel.org>,
Harald Mommer <harald.mommer@oss.qualcomm.com>,
Mikhail Golubev-Ciuchea
<mikhail.golubev-ciuchea@oss.qualcomm.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Jason Wang <jasowang@redhat.com>,
Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
linux-can@vger.kernel.org, virtualization@lists.linux.dev,
Wolfgang Grandegger <wg@grandegger.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Stefano Garzarella <sgarzare@redhat.com>
Subject: Re: [PATCH v6] can: virtio: Add virtio CAN driver
Date: Mon, 29 Dec 2025 16:47:11 +0100 [thread overview]
Message-ID: <aVKifw2noSECGCGS@fedora> (raw)
In-Reply-To: <aU8Krjsv0_aC3E7A@bywater>
On Fri, Dec 26, 2025 at 11:22:38PM +0100, Francesco Valla wrote:
> On Fri, Dec 26, 2025 at 09:52:48PM +0100, Matias Ezequiel Vara Larsen wrote:
> > > > > > +static int virtio_can_read_tx_queue(struct virtqueue *vq)
> > > > > > +{
> > > > > > + struct virtio_can_priv *can_priv = vq->vdev->priv;
> > > > > > + struct net_device *dev = can_priv->dev;
> > > > > > + struct virtio_can_tx *can_tx_msg;
> > > > > > + struct net_device_stats *stats;
> > > > > > + unsigned long flags;
> > > > > > + unsigned int len;
> > > > > > + u8 result;
> > > > > > +
> > > > > > + stats = &dev->stats;
> > > > > > +
> > > > > > + /* Protect list and virtio queue operations */
> > > > > > + spin_lock_irqsave(&can_priv->tx_lock, flags);
> > > > >
> > > > > The section below seems a pretty big one to protect behind a spin lock.
> > > > >
> > > >
> > > > How can I split it?
> > > >
> > >
> > > Question here is: what needs to be protected? As far as I can tell, the
> > > only entity needing some kind of locking here is the queue, while both
> > > ida_* and tx_inflight operations are already covered (the former by
> > > design [1], the second because it's implemented using an atomic.
> > >
> > > If I'm not wrong (but I might be, so please double check) this can be
> > > limited to:
> > >
> > > /* Protect queue operations */
> > > scoped_guard(spinlock_irqsave, &priv->tx_lock)
> > > err = virtqueue_add_sgs(vq, sgs, 1u, 1u, can_tx_msg, GFP_ATOMIC);
> > >
> > >
> > > Maybe the whole locking pattern is a leftover from a previous version,
> > > where a list of TX messages was kept?
> > >
> >
> > I followed this approach for the three queues. I wonder why the rx queue
> > and the ctrl queue use a mutex instead of spinlock? I added a mutex for
> > the operations to the rx queue.
>
> If I interpreted correctly (but maybe Harald can shine some light on this):
>
Thanks for the explanation.
> - the virtio_can_send_ctrl_msg() uses a mutex because it could be
> executed in parallel by different actors (read: userspace processes
> invoking up and down operations); moreover, is the whole control
> operation that needs to be protected and not only the access to the
> virtqueue_ functions, so a mutex should make sense;
In the code, a comment says that this lock may not be required. The lock
is used in virtio_can_send_ctrl_msg(), which is called only from
virtio_can_start() and virtio_can_stop(). But, the sending of control
msgs is sync,i.e., the driver first sends and then waits for a response
thus blocking the access to the control queue. This semantics requires a
mutex. I do not know if access to control queue may be implemented
differently thus preventing to keep the mutex during the whole access.
> - the rx queue shouldn't actually need any locking, since it is accessed
> only by the poll function and the network framework should guarantee
> that no multiple parallel poll operations are called on a napi;
> - the tx queue needs instead to be protected, since it could
> concurrently be accessed by both the start_xmit callback and the poll
> function; a spinlock there makes more sense, as accesses should be
> very short.
>
> >
> > Matias
> >
> >
>
> Thank you
>
> Regards,
> Francesco
>
next prev parent reply other threads:[~2025-12-29 15:47 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-29 17:40 [PATCH v6] can: virtio: Add virtio CAN driver Matias Ezequiel Vara Larsen
2025-11-03 21:37 ` Francesco Valla
2025-12-11 17:52 ` Matias Ezequiel Vara Larsen
2025-12-14 15:25 ` Francesco Valla
2025-12-18 19:51 ` Harald Mommer
2025-12-18 23:07 ` Francesco Valla
2026-01-06 17:20 ` Harald Mommer
2025-12-21 13:01 ` Michael S. Tsirkin
2025-12-26 19:45 ` Matias Ezequiel Vara Larsen
2025-12-26 15:08 ` Francesco Valla
2026-01-07 16:14 ` Matias Ezequiel Vara Larsen
2026-01-07 18:55 ` Francesco Valla
2026-01-07 23:00 ` Francesco Valla
2026-01-07 23:21 ` Matias Ezequiel Vara Larsen
2026-01-08 20:21 ` Matias Ezequiel Vara Larsen
2026-01-09 16:58 ` Francesco Valla
2025-12-26 20:52 ` Matias Ezequiel Vara Larsen
2025-12-26 22:22 ` Francesco Valla
2025-12-29 15:47 ` Matias Ezequiel Vara Larsen [this message]
2025-12-29 18:53 ` Matias Ezequiel Vara Larsen
2025-12-29 20:55 ` Francesco Valla
2025-12-31 21:08 ` Matias Ezequiel Vara Larsen
2026-01-06 18:17 ` Matias Ezequiel Vara Larsen
2026-01-06 16:50 ` Harald Mommer
2026-01-06 19:43 ` Oliver Hartkopp
2026-01-06 20:39 ` Francesco Valla
2026-01-07 15:42 ` Oliver Hartkopp
2026-01-07 16:01 ` Matias Ezequiel Vara Larsen
2025-12-12 15:35 ` Matias Ezequiel Vara Larsen
2025-12-14 7:20 ` Michael S. Tsirkin
2025-12-14 14:24 ` Francesco Valla
2025-11-17 9:49 ` Michael S. Tsirkin
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=aVKifw2noSECGCGS@fedora \
--to=mvaralar@redhat.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=francesco@valla.it \
--cc=harald.mommer@oss.qualcomm.com \
--cc=jasowang@redhat.com \
--cc=kuba@kernel.org \
--cc=linux-can@vger.kernel.org \
--cc=mailhol@kernel.org \
--cc=mikhail.golubev-ciuchea@oss.qualcomm.com \
--cc=mkl@pengutronix.de \
--cc=mst@redhat.com \
--cc=pabeni@redhat.com \
--cc=sgarzare@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 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.