Re: [PATCH] net: ks8851: Fix another TX stall caused by wrong ISR flag handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, May 13, 2024 at 04:39:22PM +0200, Ronald Wahl wrote:
> From: Ronald Wahl <ronald.wahl@xxxxxxxxxxx>
> 
> Under some circumstances it may happen that the ks8851 Ethernet driver
> stops sending data.
> 
> Currently the interrupt handler resets the interrupt status flags in the
> hardware after handling TX. With this approach we may lose interrupts in
> the time window between handling the TX interrupt and resetting the TX
> interrupt status bit.
> 
> When all of the three following conditions are true then transmitting
> data stops:
> 
>   - TX queue is stopped to wait for room in the hardware TX buffer
>   - no queued SKBs in the driver (txq) that wait for being written to hw
>   - hardware TX buffer is empty and the last TX interrupt was lost
> 
> This is because reenabling the TX queue happens when handling the TX
> interrupt status but if the TX status bit has already been cleared then
> this interrupt will never come.
> 
> With this commit the interrupt status flags will be cleared before they
> are handled. That way we stop losing interrupts.
> 
> The wrong handling of the ISR flags was there from the beginning but
> with commit 3dc5d4454545 ("net: ks8851: Fix TX stall caused by TX
> buffer overrun") the issue becomes apparent.
> 
> Fixes: 3dc5d4454545 ("net: ks8851: Fix TX stall caused by TX buffer overrun")
> Cc: "David S. Miller" <davem@xxxxxxxxxxxxx>
> Cc: Eric Dumazet <edumazet@xxxxxxxxxx>
> Cc: Jakub Kicinski <kuba@xxxxxxxxxx>
> Cc: Paolo Abeni <pabeni@xxxxxxxxxx>
> Cc: Simon Horman <horms@xxxxxxxxxx>
> Cc: netdev@xxxxxxxxxxxxxxx
> Cc: stable@xxxxxxxxxxxxxxx # 5.10+
> Signed-off-by: Ronald Wahl <ronald.wahl@xxxxxxxxxxx>

Reviewed-by: Simon Horman <horms@xxxxxxxxxx>





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux