No need to ask for completion for every packet being sent.
So the method is to ask for a completion every 16 packets,
or when the queue is about to be full.
Signed-off-by: Yevgeny Petrilin <redacted>
---
drivers/net/ethernet/mellanox/mlx4/en_tx.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
@@ -638,8 +639,8 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)vlan_tag=vlan_tx_tag_get(skb);/* Check available TXBBs And 2K spare for prefetch */-if(unlikely(((int)(ring->prod-ring->cons))>-ring->size-HEADROOM-MAX_DESC_TXBBS)){+ring_busy=(int)(ring->prod-ring->cons)-(ring->size-HEADROOM-MAX_DESC_TXBBS);+if(unlikely(ring_busy>0)){/* every full Tx ring stops queue */netif_tx_stop_queue(netdev_get_tx_queue(dev,tx_ind));ring->blocked=1;
No need to ask for completion for every packet being sent.
So the method is to ask for a completion every 16 packets,
or when the queue is about to be full.
Signed-off-by: Yevgeny Petrilin <redacted>
You absolutely cannot do this, you must signal completion and free up
TX queue packets in a finite amount of time.
This means that if you suddenly stop getting new packets to send
you must still free up all the pending TX SKBs even if no more
packets are given to the driver.
Does your hardware unconditionally give a TX completion interrupt when
the TX queue empties completely? If not, then you cannot make the
change contained in this patch.
No need to ask for completion for every packet being sent.
So the method is to ask for a completion every 16 packets,
or when the queue is about to be full.
Signed-off-by: Yevgeny Petrilin <redacted>
You absolutely cannot do this, you must signal completion and free up
TX queue packets in a finite amount of time.
Really, sfc has been doing this forever.
Ben.
This means that if you suddenly stop getting new packets to send
you must still free up all the pending TX SKBs even if no more
packets are given to the driver.
Does your hardware unconditionally give a TX completion interrupt when
the TX queue empties completely? If not, then you cannot make the
change contained in this patch.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
No need to ask for completion for every packet being sent.
So the method is to ask for a completion every 16 packets,
or when the queue is about to be full.
Signed-off-by: Yevgeny Petrilin <redacted>
You absolutely cannot do this, you must signal completion and free up
TX queue packets in a finite amount of time.
Really, sfc has been doing this forever.
Ben.
quoted
This means that if you suddenly stop getting new packets to send
you must still free up all the pending TX SKBs even if no more
packets are given to the driver.
Does your hardware unconditionally give a TX completion interrupt when
the TX queue empties completely? If not, then you cannot make the
change contained in this patch.
And it's pretty obvious the hardware has to also send a completion when
the queue is empty. I hope.
Ben.
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
No need to ask for completion for every packet being sent.
So the method is to ask for a completion every 16 packets,
or when the queue is about to be full.
Signed-off-by: Yevgeny Petrilin <redacted>
You absolutely cannot do this, you must signal completion and free up
TX queue packets in a finite amount of time.
Really, sfc has been doing this forever.
You have to stop, because otherwise sockets can hang since those
packets can hold a reference to the socket so they must be
released in a finite amount of time regardless of network
traffic.