From: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
To: Paul Moses <p@1g4.org>
Cc: <anthony.l.nguyen@intel.com>, <przemyslaw.kitszel@intel.com>,
<intel-wired-lan@lists.osuosl.org>, <netdev@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <andrew+netdev@lunn.ch>,
<davem@davemloft.net>, <edumazet@kernel.org>, <kuba@kernel.org>,
<pabeni@redhat.com>, <aleksandr.loktionov@intel.com>,
<chwee.lin.choong@intel.com>,
<faizal.abdul.rahim@linux.intel.com>, <horms@kernel.org>,
<vinicius.gomes@intel.com>, <sasha.neftin@intel.com>,
<matthew.vick@intel.com>, <aduyck@mirantis.com>
Subject: Re: [PATCH net 1/3] igc: pad preemptible packets before reserving TX timestamps
Date: Wed, 28 Oct 2026 16:31:41 +0100 [thread overview]
Message-ID: <auIVXcu4Mb8WGLd4@boxer> (raw)
In-Reply-To: <20261026091549.605810-1-p@1g4.org>
On Mon, Oct 26, 2026 at 09:16:07AM +0000, Paul Moses wrote:
> Preemptible queues require software padding so hardware includes the
> padding bytes in the mCRC. Padding currently runs after TX timestamp
> reservation takes an extra skb reference. If padding needs to expand
> the skb, pskb_expand_head() rejects the shared skb.
>
> Commit c7d8bc3dd511 ("net: skbuff: don't BUG() on bad arguments to
> pskb_expand_head()") replaced the BUG_ON() with -EINVAL, exposing the
> padding error path. skb_padto() drops one reference on failure, and
> out_drop drops another. This can free the skb while the pending TX
> timestamp still holds its pointer.
>
> Move padding before TX timestamp reservation and use __skb_put_padto()
> with free_on_error set to false so out_drop handles the skb release.
> Preserve the VLAN flags in first->tx_flags when adding timestamp flags.
>
> Fixes: 17643482e9ff ("igc: add preemptible queue support in taprio")
> Signed-off-by: Paul Moses <p@1g4.org>
I skimmed thru clashiko output and nothing major stands out to me. For
your future contributions - multiple patches sent as change set require to
have the cover letter.
For the series:
Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
> ---
> drivers/net/ethernet/intel/igc/igc_main.c | 39 +++++++++++------------
> 1 file changed, 19 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
> index 1fb5f3cbe93c..f1bf4e462a51 100644
> --- a/drivers/net/ethernet/intel/igc/igc_main.c
> +++ b/drivers/net/ethernet/intel/igc/igc_main.c
> @@ -1661,6 +1661,23 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb,
> goto out_drop;
> }
>
> + if (skb_vlan_tag_present(skb)) {
> + tx_flags |= IGC_TX_FLAGS_VLAN;
> + tx_flags |= (skb_vlan_tag_get(skb) << IGC_TX_FLAGS_VLAN_SHIFT);
> + }
> +
> + /* record initial flags and protocol */
> + first->tx_flags = tx_flags;
> + first->protocol = protocol;
> +
> + /* For preemptible queue, manually pad the skb so that HW includes
> + * padding bytes in mCRC calculation
> + */
> + if (tx_ring->preemptible && skb->len < ETH_ZLEN) {
> + if (__skb_put_padto(skb, ETH_ZLEN, false))
> + goto out_drop;
> + }
> +
> if (unlikely(test_bit(IGC_RING_FLAG_TX_HWTSTAMP, &tx_ring->flags) &&
> skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
> unsigned long flags;
> @@ -1669,10 +1686,10 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb,
> spin_lock_irqsave(&adapter->ptp_tx_lock, flags);
> if (igc_request_tx_tstamp(adapter, skb, &tstamp_flags)) {
> skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
> - tx_flags |= IGC_TX_FLAGS_TSTAMP | tstamp_flags;
> + first->tx_flags |= IGC_TX_FLAGS_TSTAMP | tstamp_flags;
> if (skb->sk &&
> READ_ONCE(skb->sk->sk_tsflags) & SOF_TIMESTAMPING_BIND_PHC)
> - tx_flags |= IGC_TX_FLAGS_TSTAMP_TIMER_1;
> + first->tx_flags |= IGC_TX_FLAGS_TSTAMP_TIMER_1;
> } else {
> adapter->tx_hwtstamp_skipped++;
> }
> @@ -1680,24 +1697,6 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb,
> spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags);
> }
>
> - if (skb_vlan_tag_present(skb)) {
> - tx_flags |= IGC_TX_FLAGS_VLAN;
> - tx_flags |= (skb_vlan_tag_get(skb) << IGC_TX_FLAGS_VLAN_SHIFT);
> - }
> -
> - /* record initial flags and protocol */
> - first->tx_flags = tx_flags;
> - first->protocol = protocol;
> -
> - /* For preemptible queue, manually pad the skb so that HW includes
> - * padding bytes in mCRC calculation
> - */
> - if (tx_ring->preemptible && skb->len < ETH_ZLEN) {
> - if (skb_padto(skb, ETH_ZLEN))
> - goto out_drop;
> - skb_put(skb, ETH_ZLEN - skb->len);
> - }
> -
> tso = igc_tso(tx_ring, first, launch_time, first_flag, &hdr_len);
> if (tso < 0)
> goto out_drop;
>
> base-commit: af32da41b0327b9c6a37856ba82b6760d6c8d10e
>
>
prev parent reply other threads:[~2026-10-28 15:32 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-26 9:16 [PATCH net 1/3] igc: pad preemptible packets before reserving TX timestamps Paul Moses
2026-10-26 9:16 ` [PATCH net 2/3] igc: prepare TSO and checksum offloads before " Paul Moses
2026-10-27 6:42 ` Eric Dumazet
2026-10-27 12:17 ` netdev-bot+sashiko
2026-10-26 9:16 ` [PATCH net 3/3] igb: " Paul Moses
2026-10-27 6:43 ` Eric Dumazet
2026-10-27 12:17 ` netdev-bot+sashiko
2026-10-27 16:04 ` Paul Moses
2026-10-26 9:20 ` [PATCH net 1/3] igc: pad preemptible packets before reserving " netdev-bot+sinfo
2026-10-26 9:40 ` Paul Moses
2026-10-27 6:41 ` Eric Dumazet
2026-10-27 12:17 ` netdev-bot+sashiko
2026-10-27 16:13 ` Paul Moses
2026-10-27 20:44 ` Jacob Keller
2026-10-28 15:31 ` Maciej Fijalkowski [this message]
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=auIVXcu4Mb8WGLd4@boxer \
--to=maciej.fijalkowski@intel.com \
--cc=aduyck@mirantis.com \
--cc=aleksandr.loktionov@intel.com \
--cc=andrew+netdev@lunn.ch \
--cc=anthony.l.nguyen@intel.com \
--cc=chwee.lin.choong@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@kernel.org \
--cc=faizal.abdul.rahim@linux.intel.com \
--cc=horms@kernel.org \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=matthew.vick@intel.com \
--cc=netdev@vger.kernel.org \
--cc=p@1g4.org \
--cc=pabeni@redhat.com \
--cc=przemyslaw.kitszel@intel.com \
--cc=sasha.neftin@intel.com \
--cc=vinicius.gomes@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 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.