RE: [PATCH v4 5/6] net: fec: Add Scatter/gather support
From: David Laight <hidden>
Date: 2014-06-10 12:03:28
From: fugang.duan@freescale.com
From: David Laight <redacted> Sent: Tuesday, June 10, 2014 7:11 PMquoted
To: Duan Fugang-B38611; davem@davemloft.net Cc: netdev@vger.kernel.org; ezequiel.garcia@free-electrons.com; Li Frank- B20596; eric.dumazet@gmail.com Subject: RE: [PATCH v4 5/6] net: fec: Add Scatter/gather support From: Fugang Duanquoted
Add Scatter/gather support for FEC. This feature allows to improve outbound throughput performance....quoted
+static int fec_enet_get_free_txdesc_num(struct fec_enet_private *fep) +{ + int entries; + + entries = ((const char *)fep->dirty_tx - + (const char *)fep->cur_tx) / fep->bufdesc_size; + + return (fep->cur_tx >= fep->dirty_tx) ? + entries += fep->tx_ring_size : entries; }
...
quoted
Actually do you ever use the last entry? If you do then the full and empty conditions are not separated.
Don't use the last entry. When it is full condition, cur_tx is the last entry. If (fep->cur_tx == fep->dirty_tx) Empty If (fep->cur_tx == fep->dirty_tx - 1) Full Since the patch set introduces tx_stop_threshold and tx_wake_threshold, it never uses the rest of entry while Free entry number is less than tx_stop_threshold.
In which case I'd expect fec_enet_get_free_txdesc_num() to return one less than it does currently. Maybe the check for 'enough space' is 'needed < fec_enet_get_free_txdesc_num()' (rather than <=) David