mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-03 19:08:58 +00:00
MFC: r282997
sfxge: get rid of locked variable in sfxge_tx_packet_add() Now each branch has one and only one possible TxQ lock state. It simplifies understanding of the code. Sponsored by: Solarflare Communications, Inc.
This commit is contained in:
parent
31dbc49ffa
commit
39391d535f
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/10/; revision=283210
@ -602,7 +602,6 @@ sfxge_tx_qdpl_put_unlocked(struct sfxge_txq *txq, struct mbuf *mbuf)
|
||||
int
|
||||
sfxge_tx_packet_add(struct sfxge_txq *txq, struct mbuf *m)
|
||||
{
|
||||
int locked;
|
||||
int rc;
|
||||
|
||||
if (!SFXGE_LINK_UP(txq->sc)) {
|
||||
@ -616,9 +615,7 @@ sfxge_tx_packet_add(struct sfxge_txq *txq, struct mbuf *m)
|
||||
* the packet will be appended to the "get list" of the deferred
|
||||
* packet list. Otherwise, it will be pushed on the "put list".
|
||||
*/
|
||||
locked = SFXGE_TXQ_TRYLOCK(txq);
|
||||
|
||||
if (locked) {
|
||||
if (SFXGE_TXQ_TRYLOCK(txq)) {
|
||||
/* First swizzle put-list to get-list to keep order */
|
||||
sfxge_tx_qdpl_swizzle(txq);
|
||||
|
||||
@ -627,6 +624,10 @@ sfxge_tx_packet_add(struct sfxge_txq *txq, struct mbuf *m)
|
||||
SFXGE_TXQ_UNLOCK(txq);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* Try to service the list. */
|
||||
sfxge_tx_qdpl_service(txq);
|
||||
/* Lock has been dropped. */
|
||||
} else {
|
||||
rc = sfxge_tx_qdpl_put_unlocked(txq, m);
|
||||
if (rc != 0)
|
||||
@ -639,14 +640,13 @@ sfxge_tx_packet_add(struct sfxge_txq *txq, struct mbuf *m)
|
||||
* the deferred packet list. If we are not able to get
|
||||
* the lock, another thread is processing the list.
|
||||
*/
|
||||
locked = SFXGE_TXQ_TRYLOCK(txq);
|
||||
if (SFXGE_TXQ_TRYLOCK(txq)) {
|
||||
sfxge_tx_qdpl_service(txq);
|
||||
/* Lock has been dropped. */
|
||||
}
|
||||
}
|
||||
|
||||
if (locked) {
|
||||
/* Try to service the list. */
|
||||
sfxge_tx_qdpl_service(txq);
|
||||
/* Lock has been dropped. */
|
||||
}
|
||||
SFXGE_TXQ_LOCK_ASSERT_NOTOWNED(txq);
|
||||
|
||||
return (0);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user