From: Paolo Abeni <pabeni@redhat.com>
To: Tony Nguyen <anthony.l.nguyen@intel.com>,
davem@davemloft.net, kuba@kernel.org, edumazet@google.com,
andrew+netdev@lunn.ch, netdev@vger.kernel.org
Cc: Phani R Burra <phani.r.burra@intel.com>,
larysa.zaremba@intel.com, przemyslaw.kitszel@intel.com,
aleksander.lobakin@intel.com, sridhar.samudrala@intel.com,
anjali.singhai@intel.com, michal.swiatkowski@linux.intel.com,
maciej.fijalkowski@intel.com, emil.s.tantilov@intel.com,
madhu.chittim@intel.com, joshua.a.hay@intel.com,
jacob.e.keller@intel.com, jayaprakash.shanmugam@intel.com,
jiri@resnulli.us, horms@kernel.org, corbet@lwn.net,
richardcochran@gmail.com, linux-doc@vger.kernel.org,
Bharath R <bharath.r@intel.com>,
Samuel Salin <Samuel.salin@intel.com>,
Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Subject: Re: [PATCH net-next v2 05/14] libie: add bookkeeping support for control queue messages
Date: Thu, 9 Apr 2026 11:07:02 +0200 [thread overview]
Message-ID: <b559c877-7712-4ed7-adb4-d2b667e16e74@redhat.com> (raw)
In-Reply-To: <20260403194938.3577011-6-anthony.l.nguyen@intel.com>
On 4/3/26 9:49 PM, Tony Nguyen wrote:
> +static bool
> +libie_ctlq_xn_process_recv(struct libie_ctlq_xn_recv_params *params,
> + struct libie_ctlq_msg *ctlq_msg)
> +{
> + struct libie_ctlq_xn_manager *xnm = params->xnm;
> + struct libie_ctlq_xn *xn;
> + u16 msg_cookie, xn_index;
> + struct kvec *response;
> + int status;
> + u16 data;
> +
> + data = ctlq_msg->sw_cookie;
> + xn_index = FIELD_GET(LIBIE_CTLQ_XN_INDEX_M, data);
> + msg_cookie = FIELD_GET(LIBIE_CTLQ_XN_COOKIE_M, data);
> + status = ctlq_msg->chnl_retval ? -EFAULT : 0;
> +
> + xn = &xnm->ring[xn_index];
> + if (ctlq_msg->chnl_opcode != xn->virtchnl_opcode ||
> + msg_cookie != xn->cookie)
> + return false;
> +
> + spin_lock(&xn->xn_lock);
Sashiko says:
---
Because the cookie and opcode are checked before acquiring the lock, is
it possible for the transaction to time out, be returned to the free
list, and get reallocated for a new message before the lock is acquired?
If that happens, could the old delayed response falsely complete the
newly allocated transaction since the identifiers are not re-verified
inside the lock?
---
> +/**
> + * libie_xn_check_async_timeout - Check for asynchronous message timeouts
> + * @xnm: Xn transaction manager
> + *
> + * Call the corresponding callback to notify the caller about the timeout.
> + */
> +static void libie_xn_check_async_timeout(struct libie_ctlq_xn_manager *xnm)
> +{
> + u32 idx;
> +
> + for_each_clear_bit(idx, xnm->free_xns_bm, LIBIE_CTLQ_MAX_XN_ENTRIES) {
Sashiko says:
---
This iterates over the bitmap without holding the lock. Concurrently,
other paths modify this bitmap using non-atomic bitwise operations like
__clear_bit() and __set_bit() under the lock. Will this cause torn reads
or data races that might lead the timeout handler to skip valid
transactions or examine invalid ones?
---
> + params->ctlq_msg->sw_cookie = cookie;
> + params->ctlq_msg->send_mem = *dma_mem;
> + params->ctlq_msg->data_len = buf_len;
> + params->ctlq_msg->chnl_opcode = params->chnl_opcode;
> + ret = libie_ctlq_send(params->ctlq, params->ctlq_msg, 1);
> + }
> +
> + if (ret && !libie_cp_can_send_onstack(buf_len))
> + libie_cp_unmap_dma_mem(dev, dma_mem);
Sashiko says:
---
When libie_ctlq_send() fails here, the DMA memory is unmapped and the
buffer is freed by the caller. However, the software tracking ring at
tx_msg[next_to_use] still contains the populated send_mem details and a
non-zero data_len.
During driver teardown, libie_ctlq_xn_send_clean() is invoked with
params->force = true, which processes the ring without checking the
hardware completion bit. Could this cause the cleanup routine to process
the failed slot again, resulting in a double-free and double-unmap?
---
There are more remarks on the following patch, please have a look.
Also, it would be very helpful if you could help triaging such
(overwhelming amount of) feedback on future submissions, explicitly
commenting on the ML. Sashiko tends to be quite noise on device driver code.
Thanks,
Paolo
next prev parent reply other threads:[~2026-04-09 9:07 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-03 19:49 [PATCH net-next v2 00/14][pull request] Introduce iXD driver Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 01/14] virtchnl: create 'include/linux/intel' and move necessary header files Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 02/14] libie: add PCI device initialization helpers to libie Tony Nguyen
2026-04-09 8:56 ` Paolo Abeni
2026-04-03 19:49 ` [PATCH net-next v2 03/14] libeth: allow to create fill queues without NAPI Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 04/14] libie: add control queue support Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 05/14] libie: add bookkeeping support for control queue messages Tony Nguyen
2026-04-09 9:07 ` Paolo Abeni [this message]
2026-04-03 19:49 ` [PATCH net-next v2 06/14] idpf: remove 'vport_params_reqd' field Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 07/14] idpf: refactor idpf to use libie_pci APIs Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 08/14] idpf: refactor idpf to use libie control queues Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 09/14] idpf: make mbx_task queueing and cancelling more consistent Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 10/14] idpf: print a debug message and bail in case of non-event ctlq message Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 11/14] ixd: add basic driver framework for Intel(R) Control Plane Function Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 12/14] ixd: add reset checks and initialize the mailbox Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 13/14] ixd: add the core initialization Tony Nguyen
2026-04-03 19:49 ` [PATCH net-next v2 14/14] ixd: add devlink support Tony Nguyen
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=b559c877-7712-4ed7-adb4-d2b667e16e74@redhat.com \
--to=pabeni@redhat.com \
--cc=Samuel.salin@intel.com \
--cc=aleksander.lobakin@intel.com \
--cc=aleksandr.loktionov@intel.com \
--cc=andrew+netdev@lunn.ch \
--cc=anjali.singhai@intel.com \
--cc=anthony.l.nguyen@intel.com \
--cc=bharath.r@intel.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=emil.s.tantilov@intel.com \
--cc=horms@kernel.org \
--cc=jacob.e.keller@intel.com \
--cc=jayaprakash.shanmugam@intel.com \
--cc=jiri@resnulli.us \
--cc=joshua.a.hay@intel.com \
--cc=kuba@kernel.org \
--cc=larysa.zaremba@intel.com \
--cc=linux-doc@vger.kernel.org \
--cc=maciej.fijalkowski@intel.com \
--cc=madhu.chittim@intel.com \
--cc=michal.swiatkowski@linux.intel.com \
--cc=netdev@vger.kernel.org \
--cc=phani.r.burra@intel.com \
--cc=przemyslaw.kitszel@intel.com \
--cc=richardcochran@gmail.com \
--cc=sridhar.samudrala@intel.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