From: sashiko-bot@kernel.org
To: "Wei Fang" <wei.fang@nxp.com>
Cc: Frank.Li@kernel.org, imx@lists.linux.dev
Subject: Re: [PATCH net-next 13/15] net: enetc: dynamically allocate rxmsg based on VF count
Date: Tue, 12 May 2026 23:59:32 +0000 [thread overview]
Message-ID: <20260512235932.EF9A9C2BCF5@smtp.kernel.org> (raw)
In-Reply-To: <20260511080805.2052495-14-wei.fang@nxp.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Teardown race leading to a permanent infinite loop in the msg_task workqueue.
- [High] Uninitialized work struct race in enetc_msg_psi_init causes workqueue list corruption.
--
commit 2a9ca5a7c76f884ea46d71ecd971d43269b7a246
Author: Wei Fang <wei.fang@nxp.com>
net: enetc: dynamically allocate rxmsg based on VF count
To better match hardware capabilities and avoid unnecessary memory usage,
this patch changes rxmsg memory allocation from a fixed-size array to
dynamic allocation based on the actual VF count.
[ ... ]
> diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.h b/drivers/net/ethernet/freescale/enetc/enetc_pf.h
> index 9fcf1c58d59b4..d4f1041587f7a 100644
> --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.h
> +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.h
> @@ -42,7 +42,7 @@ struct enetc_pf {
>
> struct enetc_mac_filter mac_filter[MADDR_TYPE];
>
> - struct enetc_msg_swbd rxmsg[ENETC_MAX_NUM_VFS];
> + struct enetc_msg_swbd *rxmsg;
> struct work_struct msg_task;
This problem wasn't introduced by this patch, but I noticed a potential
teardown race involving msg_task.
In enetc_msg_psi_free(), cancel_work_sync(&pf->msg_task) is called before
free_irq(). If an MR interrupt is delivered immediately after
cancel_work_sync() returns, the ISR (enetc_msg_psi_msix) could execute and
re-queue the work via schedule_work().
Subsequently, enetc_sriov_configure() sets pf->num_vfs = 0.
When the improperly scheduled msg_task eventually executes, it reads a
non-zero mr_mask from the hardware. However, because pf->num_vfs is now 0,
the inner for (i = 0; i < pf->num_vfs; i++) loop is skipped. Consequently,
the hardware's write-1-to-clear (w1c) register is never written to clear the
interrupt status.
Could this cause the outer for (;;) loop to read the exact same non-zero
mr_mask on every iteration, spinning in a permanent infinite loop and
stalling the workqueue?
Furthermore, in the error path of enetc_msg_psi_init(), cancel_work_sync() is
missing entirely. Could this lead to the exact same infinite loop if an
interrupt fired prior to the failure?
Also related to msg_task, in enetc_msg_psi_init(), request_irq() is called to
register the interrupt handler enetc_msg_psi_msix before
INIT_WORK(&pf->msg_task, enetc_msg_task) initializes the work structure.
If the hardware asserts an interrupt from a previous boot or kexec state, or
if a spurious interrupt occurs, the ISR will execute immediately upon
registration and call schedule_work(&pf->msg_task) on an uninitialized,
zero-filled work_struct.
Could this cause list corruption and crash the kernel's workqueue subsystem
because the internal list pointers are NULL? Should INIT_WORK() always be
called before request_irq()?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260511080805.2052495-1-wei.fang@nxp.com?part=13
next prev parent reply other threads:[~2026-05-12 23:59 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-11 8:07 [PATCH net-next 00/15] net: enetc: Prepare for ENETC v4 VF support Wei Fang
2026-05-11 8:07 ` [PATCH net-next 01/15] net: enetc: switch VF primary MAC setter to PF ops for commonization Wei Fang
2026-05-11 15:41 ` Vladimir Oltean
2026-05-12 1:54 ` Wei Fang
2026-05-11 8:07 ` [PATCH net-next 02/15] net: enetc: move VF message handlers to enetc_msg.c Wei Fang
2026-05-11 8:07 ` [PATCH net-next 03/15] net: enetc: avoid VF->PF mailbox timeout during SR-IOV teardown Wei Fang
2026-05-11 8:07 ` [PATCH net-next 04/15] net: enetc: relocate SR-IOV configuration helper for common PF support Wei Fang
2026-05-11 8:07 ` [PATCH net-next 05/15] net: enetc: integrate enetc_msg.c into enetc-pf-common driver Wei Fang
2026-05-11 8:07 ` [PATCH net-next 06/15] net: enetc: use read_poll_timeout() for VF mailbox polling Wei Fang
2026-05-11 8:07 ` [PATCH net-next 07/15] net: enetc: convert mailbox messages to new formats Wei Fang
2026-05-11 8:07 ` [PATCH net-next 08/15] net: enetc: add VF-PF messaging support for IP minor revision query Wei Fang
2026-05-11 8:07 ` [PATCH net-next 09/15] net: enetc: align v1 CBDR API with v4 for VF driver sharing Wei Fang
2026-05-11 8:08 ` [PATCH net-next 10/15] net: enetc: add CBDR setup/teardown hooks to enetc_si_ops for VF support Wei Fang
2026-05-11 8:08 ` [PATCH net-next 11/15] net: enetc: add generic helper to initialize SR-IOV resources Wei Fang
2026-05-11 8:08 ` [PATCH net-next 12/15] net: enetc: use MADDR_TYPE for MAC filter array size Wei Fang
2026-05-11 8:08 ` [PATCH net-next 13/15] net: enetc: dynamically allocate rxmsg based on VF count Wei Fang
2026-05-12 23:59 ` sashiko-bot [this message]
2026-05-11 8:08 ` [PATCH net-next 14/15] net: enetc: refactor MR interrupt enable/disable helpers Wei Fang
2026-05-12 23:34 ` sashiko-bot
2026-05-13 10:20 ` Wei Fang
2026-05-11 8:08 ` [PATCH net-next 15/15] net: enetc: generate MR interrupt mask based on the number of enabled VFs Wei Fang
2026-05-12 23:48 ` sashiko-bot
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=20260512235932.EF9A9C2BCF5@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=Frank.Li@kernel.org \
--cc=imx@lists.linux.dev \
--cc=sashiko-reviews@lists.linux.dev \
--cc=wei.fang@nxp.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