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.

Reviewed by:    gnn
Sponsored by:   Solarflare Communications, Inc.
MFC after:      2 days
Differential Revision: https://reviews.freebsd.org/D2551
This commit is contained in:
Andrew Rybchenko 2015-05-16 05:37:47 +00:00
parent b5bae9f4f2
commit deee1de4bf
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=282997

View File

@ -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);