Skip to content

Commit 7d2f320

Browse files
ParthibanI17164Paolo Abeni
authored andcommitted
net: ethernet: oa_tc6: fix infinite loop error when tx credits becomes 0
SPI thread wakes up to perform SPI transfer whenever there is an TX skb from n/w stack or interrupt from MAC-PHY. Ethernet frame from TX skb is transferred based on the availability tx credits in the MAC-PHY which is reported from the previous SPI transfer. Sometimes there is a possibility that TX skb is available to transmit but there is no tx credits from MAC-PHY. In this case, there will not be any SPI transfer but the thread will be running in an endless loop until tx credits available again. So checking the availability of tx credits along with TX skb will prevent the above infinite loop. When the tx credits available again that will be notified through interrupt which will trigger the SPI transfer to get the available tx credits. Fixes: 53fbde8 ("net: ethernet: oa_tc6: implement transmit path to transfer tx ethernet frames") Reviewed-by: Jacob Keller <[email protected]> Signed-off-by: Parthiban Veerasooran <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
1 parent 94901b7 commit 7d2f320

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

drivers/net/ethernet/oa_tc6.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,8 +1111,9 @@ static int oa_tc6_spi_thread_handler(void *data)
11111111
/* This kthread will be waken up if there is a tx skb or mac-phy
11121112
* interrupt to perform spi transfer with tx chunks.
11131113
*/
1114-
wait_event_interruptible(tc6->spi_wq, tc6->waiting_tx_skb ||
1115-
tc6->int_flag ||
1114+
wait_event_interruptible(tc6->spi_wq, tc6->int_flag ||
1115+
(tc6->waiting_tx_skb &&
1116+
tc6->tx_credits) ||
11161117
kthread_should_stop());
11171118

11181119
if (kthread_should_stop())

0 commit comments

Comments
 (0)