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 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.