sfxge(4): rollback last seen VLAN TCI if Tx packet is dropped
Early processing of a packet on transmit may change last seen VLAN TCI in the queue context. If such a packet is eventually dropped, last seen VLAN TCI must be set to its previous value. Submitted by: Ivan Malov <Ivan.Malov at oktetlabs.ru> Sponsored by: Solarflare Communications, Inc. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D18288
This commit is contained in:
parent
b162acfe52
commit
ad72d03040
@ -361,6 +361,7 @@ static int sfxge_tx_queue_mbuf(struct sfxge_txq *txq, struct mbuf *mbuf)
|
||||
int rc;
|
||||
int i;
|
||||
int eop;
|
||||
uint16_t hw_vlan_tci_prev;
|
||||
int vlan_tagged;
|
||||
|
||||
KASSERT(!txq->blocked, ("txq->blocked"));
|
||||
@ -412,6 +413,8 @@ static int sfxge_tx_queue_mbuf(struct sfxge_txq *txq, struct mbuf *mbuf)
|
||||
|
||||
used_map = &stmp->map;
|
||||
|
||||
hw_vlan_tci_prev = txq->hw_vlan_tci;
|
||||
|
||||
vlan_tagged = sfxge_tx_maybe_insert_tag(txq, mbuf);
|
||||
if (vlan_tagged) {
|
||||
sfxge_next_stmp(txq, &stmp);
|
||||
@ -463,6 +466,7 @@ static int sfxge_tx_queue_mbuf(struct sfxge_txq *txq, struct mbuf *mbuf)
|
||||
return (0);
|
||||
|
||||
reject_mapped:
|
||||
txq->hw_vlan_tci = hw_vlan_tci_prev;
|
||||
bus_dmamap_unload(txq->packet_dma_tag, *used_map);
|
||||
reject:
|
||||
/* Drop the packet on the floor. */
|
||||
|
Loading…
Reference in New Issue
Block a user