Re: [PATCH v2] net: stmmac: xgmac2: disable RBUE in default RX interrupt mask
From: Paolo Abeni
Date: Tue Jun 09 2026 - 05:15:35 EST
On 6/8/26 5:27 PM, Simon Horman wrote:
> From: 'Simon Horman' <horms@xxxxxxxxxx>
>
> This is an AI-generated review of your patch. The human sending this
> email has considered the AI review valid, or at least plausible.
> Full review at: https://sashiko.dev
> ---
> net: stmmac: xgmac2: disable RBUE in default RX interrupt mask
>
> This commit removes the RX Buffer Unavailable (RBUE) interrupt from the
> default enable masks for XGMAC2 devices. This is intended to prevent MAC
> interrupt storms that can occur under heavy RX pressure when the DMA
> runs out of RX descriptors.
>
>> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h
>> index 51943705a2b03..b5fdc253a2f24 100644
>> --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h
>> +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2.h
>> @@ -379,9 +379,9 @@
>> #define XGMAC_RIE BIT(6)
>> #define XGMAC_TBUE BIT(2)
>> #define XGMAC_TIE BIT(0)
>> -#define XGMAC_DMA_INT_DEFAULT_EN (XGMAC_NIE | XGMAC_AIE | XGMAC_RBUE | \
>> +#define XGMAC_DMA_INT_DEFAULT_EN (XGMAC_NIE | XGMAC_AIE | \
>> XGMAC_RIE | XGMAC_TIE)
>> -#define XGMAC_DMA_INT_DEFAULT_RX (XGMAC_RBUE | XGMAC_RIE)
>> +#define XGMAC_DMA_INT_DEFAULT_RX (XGMAC_RIE)
>
> [Severity: High]
> Does removing the RBUE interrupt break the driver's ability to recover from
> RX out-of-memory conditions, leading to a permanent RX queue stall?
>
> When stmmac_rx() processes packets, it calls stmmac_rx_refill() to replenish
> the ring descriptors. If page_pool_alloc_pages() fails due to memory
> pressure, the descriptors remain empty:
>
> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:stmmac_rx_refill() {
> ...
> buf->page = page_pool_alloc_pages(rx_q->page_pool, gfp);
> if (!buf->page)
> break;
> ...
> }
>
> stmmac_rx() then returns the number of processed packets, which will be
> less than the NAPI budget if the ring is empty. This causes
> stmmac_napi_poll_rx() to complete NAPI and re-enable interrupts:
>
> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:stmmac_napi_poll_rx() {
> ...
> work_done = stmmac_rx(priv, budget, chan);
> if (work_done < budget && napi_complete_done(napi, work_done)) {
> ...
> stmmac_enable_dma_irq(priv, priv->ioaddr, chan, 1, 0);
> }
> ...
> }
>
> When the hardware subsequently tries to receive a packet, it finds no
> descriptors and enters the Receive Buffer Unavailable (RBU) state. By
> removing XGMAC_RBUE from the RX interrupt enable mask, the MAC will no
> longer trigger an interrupt for the RBU state.
>
> Because no packets can be successfully received without descriptors, the
> normal Receive Interrupt (RIE) will also never fire. With NAPI stopped and
> no interrupts firing, the driver has no polling timer to retry allocation,
> which could result in a permanent stall of the RX queue.
Nazim, you need at least to clarify in the commit message why this patch
is safe.
/P