Hi Jakub, On 16/08/24 10:25 pm, Jakub Kicinski wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > On Mon, 12 Aug 2024 15:56:06 +0530 Parthiban Veerasooran wrote: >> + if (skb_queue_len(&tc6->tx_skb_q) < OA_TC6_TX_SKB_QUEUE_SIZE && >> + netif_queue_stopped(tc6->netdev)) >> + netif_wake_queue(tc6->netdev); > > FWIW I'm not sure you actually need a queue in the driver. > "A queue of 1" may be enough, IIUC calling netif_wake_queue() Ah ok. Actually "A queue of 1" is enough but for holding one tx skb, a queue is too much. So if I understand correctly, I can replace, struct sk_buff_head tx_skb_q ---> struct sk_buff *waiting_tx_skb which holds one tx skb waiting and struct sk_buff *tx_skb ---> struct sk_buff *ongoing_tx_skb which holds one on going tx skb. So that I can remove the queue handling. I did a quick test by doing the above changes and it works as expected. Thanks for the info. I will update this in the next version. > will cause something like an interrupt to fire immediately, > and start_xmit for the next frame should get called before > netif_wake_queue() returns. I could be wrong :) I think, it is ok as the while will be executed immediately once returning from netif_wake_queue() which is the expected behavior. Best regards, Parthiban V >