Page MenuHomeFreeBSD

D33156.id100290.diff
No OneTemporary

D33156.id100290.diff

diff --git a/sys/dev/e1000/em_txrx.c b/sys/dev/e1000/em_txrx.c
--- a/sys/dev/e1000/em_txrx.c
+++ b/sys/dev/e1000/em_txrx.c
@@ -671,9 +671,9 @@
u32 pkt_info;
u32 staterr = 0;
bool eop;
- int i, cidx, vtag;
+ int i, cidx;
- i = vtag = 0;
+ i = 0;
cidx = ri->iri_cidx;
do {
@@ -706,16 +706,13 @@
i++;
} while (!eop);
- if (if_getcapenable(ri->iri_ifp) & IFCAP_RXCSUM)
+ if (scctx->isc_capenable & IFCAP_RXCSUM)
em_receive_checksum(staterr, staterr >> 24, ri);
if (staterr & E1000_RXD_STAT_VP) {
- vtag = le16toh(rxd->wb.upper.vlan);
- }
-
- ri->iri_vtag = vtag;
- if (vtag)
+ ri->iri_vtag = le16toh(rxd->wb.upper.vlan);
ri->iri_flags |= M_VLANTAG;
+ }
ri->iri_flowid = le32toh(rxd->wb.lower.hi_dword.rss);
ri->iri_rsstype = em_determine_rsstype(pkt_info);
diff --git a/sys/dev/e1000/igb_txrx.c b/sys/dev/e1000/igb_txrx.c
--- a/sys/dev/e1000/igb_txrx.c
+++ b/sys/dev/e1000/igb_txrx.c
@@ -436,12 +436,12 @@
struct rx_ring *rxr = &que->rxr;
union e1000_adv_rx_desc *rxd;
- uint16_t pkt_info, len, vtag;
+ uint16_t pkt_info, len;
uint32_t ptype, staterr;
int i, cidx;
bool eop;
- staterr = i = vtag = 0;
+ staterr = i = 0;
cidx = ri->iri_cidx;
do {
@@ -460,13 +460,6 @@
rxd->wb.upper.status_error = 0;
eop = ((staterr & E1000_RXD_STAT_EOP) == E1000_RXD_STAT_EOP);
- if (((sc->hw.mac.type == e1000_i350) ||
- (sc->hw.mac.type == e1000_i354)) &&
- (staterr & E1000_RXDEXT_STATERR_LB))
- vtag = be16toh(rxd->wb.upper.vlan);
- else
- vtag = le16toh(rxd->wb.upper.vlan);
-
/* Make sure bad packets are discarded */
if (eop && ((staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK) != 0)) {
sc->dropped_pkts++;
@@ -495,9 +488,13 @@
if ((scctx->isc_capenable & IFCAP_RXCSUM) != 0)
igb_rx_checksum(staterr, ri, ptype);
- if ((scctx->isc_capenable & IFCAP_VLAN_HWTAGGING) != 0 &&
- (staterr & E1000_RXD_STAT_VP) != 0) {
- ri->iri_vtag = vtag;
+ if (staterr & E1000_RXD_STAT_VP) {
+ if (((sc->hw.mac.type == e1000_i350) ||
+ (sc->hw.mac.type == e1000_i354)) &&
+ (staterr & E1000_RXDEXT_STATERR_LB))
+ ri->iri_vtag = be16toh(rxd->wb.upper.vlan);
+ else
+ ri->iri_vtag = le16toh(rxd->wb.upper.vlan);
ri->iri_flags |= M_VLANTAG;
}
diff --git a/sys/dev/iavf/iavf_txrx_iflib.c b/sys/dev/iavf/iavf_txrx_iflib.c
--- a/sys/dev/iavf/iavf_txrx_iflib.c
+++ b/sys/dev/iavf/iavf_txrx_iflib.c
@@ -665,11 +665,12 @@
iavf_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri)
{
struct iavf_vsi *vsi = arg;
+ if_softc_ctx_t scctx = vsi->shared;
struct iavf_rx_queue *que = &vsi->rx_queues[ri->iri_qsidx];
struct rx_ring *rxr = &que->rxr;
union iavf_rx_desc *cur;
u32 status, error;
- u16 plen, vtag;
+ u16 plen;
u64 qword;
u8 ptype;
bool eop;
@@ -700,10 +701,6 @@
cur->wb.qword1.status_error_len = 0;
eop = (status & (1 << IAVF_RX_DESC_STATUS_EOF_SHIFT));
- if (status & (1 << IAVF_RX_DESC_STATUS_L2TAG1P_SHIFT))
- vtag = le16toh(cur->wb.qword0.lo_dword.l2tag1);
- else
- vtag = 0;
/*
** Make sure bad packets are discarded,
@@ -726,14 +723,15 @@
rxr->packets++;
rxr->rx_packets++;
- if ((if_getcapenable(vsi->ifp) & IFCAP_RXCSUM) != 0)
+ if ((scctx->isc_capenable & IFCAP_RXCSUM) != 0)
iavf_rx_checksum(ri, status, error, ptype);
ri->iri_flowid = le32toh(cur->wb.qword0.hi_dword.rss);
ri->iri_rsstype = iavf_ptype_to_hash(ptype);
- ri->iri_vtag = vtag;
- ri->iri_nfrags = i;
- if (vtag)
+ if (status & (1 << IAVF_RX_DESC_STATUS_L2TAG1P_SHIFT)) {
+ ri->iri_vtag = le16toh(cur->wb.qword0.lo_dword.l2tag1);
ri->iri_flags |= M_VLANTAG;
+ }
+ ri->iri_nfrags = i;
return (0);
}
diff --git a/sys/dev/ice/ice_iflib_txrx.c b/sys/dev/ice/ice_iflib_txrx.c
--- a/sys/dev/ice/ice_iflib_txrx.c
+++ b/sys/dev/ice/ice_iflib_txrx.c
@@ -282,9 +282,10 @@
ice_ift_rxd_pkt_get(void *arg, if_rxd_info_t ri)
{
struct ice_softc *sc = (struct ice_softc *)arg;
+ if_softc_ctx_t scctx = sc->scctx;
struct ice_rx_queue *rxq = &sc->pf_vsi.rx_queues[ri->iri_qsidx];
union ice_32b_rx_flex_desc *cur;
- u16 status0, plen, vtag, ptype;
+ u16 status0, plen, ptype;
bool eop;
size_t cidx;
int i;
@@ -309,10 +310,6 @@
cur->wb.status_error0 = 0;
eop = (status0 & BIT(ICE_RX_FLEX_DESC_STATUS0_EOF_S));
- if (status0 & BIT(ICE_RX_FLEX_DESC_STATUS0_L2TAG1P_S))
- vtag = le16toh(cur->wb.l2tag1);
- else
- vtag = 0;
/*
* Make sure packets with bad L2 values are discarded.
@@ -334,15 +331,16 @@
rxq->stats.rx_packets++;
rxq->stats.rx_bytes += ri->iri_len;
- if ((iflib_get_ifp(sc->ctx)->if_capenable & IFCAP_RXCSUM) != 0)
+ if ((scctx->isc_capenable & IFCAP_RXCSUM) != 0)
ice_rx_checksum(rxq, &ri->iri_csum_flags,
&ri->iri_csum_data, status0, ptype);
ri->iri_flowid = le32toh(RX_FLEX_NIC(&cur->wb, rss_hash));
ri->iri_rsstype = ice_ptype_to_hash(ptype);
- ri->iri_vtag = vtag;
- ri->iri_nfrags = i;
- if (vtag)
+ if (status0 & BIT(ICE_RX_FLEX_DESC_STATUS0_L2TAG1P_S)) {
+ ri->iri_vtag = le16toh(cur->wb.l2tag1);
ri->iri_flags |= M_VLANTAG;
+ }
+ ri->iri_nfrags = i;
return (0);
}
diff --git a/sys/dev/igc/igc_txrx.c b/sys/dev/igc/igc_txrx.c
--- a/sys/dev/igc/igc_txrx.c
+++ b/sys/dev/igc/igc_txrx.c
@@ -461,12 +461,12 @@
struct rx_ring *rxr = &que->rxr;
union igc_adv_rx_desc *rxd;
- uint16_t pkt_info, len, vtag;
+ uint16_t pkt_info, len;
uint32_t ptype, staterr;
int i, cidx;
bool eop;
- staterr = i = vtag = 0;
+ staterr = i = 0;
cidx = ri->iri_cidx;
do {
@@ -485,8 +485,6 @@
rxd->wb.upper.status_error = 0;
eop = ((staterr & IGC_RXD_STAT_EOP) == IGC_RXD_STAT_EOP);
- vtag = le16toh(rxd->wb.upper.vlan);
-
/* Make sure bad packets are discarded */
if (eop && ((staterr & IGC_RXDEXT_STATERR_RXE) != 0)) {
adapter->dropped_pkts++;
@@ -517,7 +515,7 @@
if ((scctx->isc_capenable & IFCAP_VLAN_HWTAGGING) != 0 &&
(staterr & IGC_RXD_STAT_VP) != 0) {
- ri->iri_vtag = vtag;
+ ri->iri_vtag = le16toh(rxd->wb.upper.vlan);
ri->iri_flags |= M_VLANTAG;
}
diff --git a/sys/dev/ixgbe/ix_txrx.c b/sys/dev/ixgbe/ix_txrx.c
--- a/sys/dev/ixgbe/ix_txrx.c
+++ b/sys/dev/ixgbe/ix_txrx.c
@@ -393,13 +393,12 @@
ixgbe_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri)
{
struct ixgbe_softc *sc = arg;
+ if_softc_ctx_t scctx = sc->shared;
struct ix_rx_queue *que = &sc->rx_queues[ri->iri_qsidx];
struct rx_ring *rxr = &que->rxr;
- struct ifnet *ifp = iflib_get_ifp(sc->ctx);
union ixgbe_adv_rx_desc *rxd;
uint16_t pkt_info, len, cidx, i;
- uint16_t vtag = 0;
uint32_t ptype;
uint32_t staterr = 0;
bool eop;
@@ -424,16 +423,10 @@
rxd->wb.upper.status_error = 0;
eop = ((staterr & IXGBE_RXD_STAT_EOP) != 0);
- if ( (rxr->vtag_strip) && (staterr & IXGBE_RXD_STAT_VP) ) {
- vtag = le16toh(rxd->wb.upper.vlan);
- } else {
- vtag = 0;
- }
-
/* Make sure bad packets are discarded */
if (eop && (staterr & IXGBE_RXDADV_ERR_FRAME_ERR_MASK) != 0) {
if (sc->feat_en & IXGBE_FEATURE_VF)
- if_inc_counter(ifp, IFCOUNTER_IERRORS, 1);
+ if_inc_counter(ri->iri_ifp, IFCOUNTER_IERRORS, 1);
rxr->rx_discarded++;
return (EBADMSG);
@@ -452,7 +445,7 @@
rxr->packets++;
rxr->rx_bytes += ri->iri_len;
- if ((ifp->if_capenable & IFCAP_RXCSUM) != 0)
+ if ((scctx->isc_capenable & IFCAP_RXCSUM) != 0)
ixgbe_rx_checksum(staterr, ri, ptype);
ri->iri_flowid = le32toh(rxd->wb.lower.hi_dword.rss);
@@ -463,10 +456,12 @@
else
ri->iri_rsstype = M_HASHTYPE_OPAQUE_HASH;
}
- ri->iri_vtag = vtag;
- ri->iri_nfrags = i;
- if (vtag)
+ if ((rxr->vtag_strip) && (staterr & IXGBE_RXD_STAT_VP)) {
+ ri->iri_vtag = le16toh(rxd->wb.upper.vlan);
ri->iri_flags |= M_VLANTAG;
+ }
+
+ ri->iri_nfrags = i;
return (0);
} /* ixgbe_isc_rxd_pkt_get */
diff --git a/sys/dev/ixl/ixl_txrx.c b/sys/dev/ixl/ixl_txrx.c
--- a/sys/dev/ixl/ixl_txrx.c
+++ b/sys/dev/ixl/ixl_txrx.c
@@ -658,11 +658,12 @@
ixl_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri)
{
struct ixl_vsi *vsi = arg;
+ if_softc_ctx_t scctx = vsi->shared;
struct ixl_rx_queue *que = &vsi->rx_queues[ri->iri_qsidx];
struct rx_ring *rxr = &que->rxr;
union i40e_rx_desc *cur;
u32 status, error;
- u16 plen, vtag;
+ u16 plen;
u64 qword;
u8 ptype;
bool eop;
@@ -693,10 +694,6 @@
cur->wb.qword1.status_error_len = 0;
eop = (status & (1 << I40E_RX_DESC_STATUS_EOF_SHIFT));
- if (status & (1 << I40E_RX_DESC_STATUS_L2TAG1P_SHIFT))
- vtag = le16toh(cur->wb.qword0.lo_dword.l2tag1);
- else
- vtag = 0;
/*
** Make sure bad packets are discarded,
@@ -719,14 +716,15 @@
rxr->packets++;
rxr->rx_packets++;
- if ((if_getcapenable(vsi->ifp) & IFCAP_RXCSUM) != 0)
+ if ((scctx->isc_capenable & IFCAP_RXCSUM) != 0)
rxr->csum_errs += ixl_rx_checksum(ri, status, error, ptype);
ri->iri_flowid = le32toh(cur->wb.qword0.hi_dword.rss);
ri->iri_rsstype = ixl_ptype_to_hash(ptype);
- ri->iri_vtag = vtag;
- ri->iri_nfrags = i;
- if (vtag)
+ if (status & (1 << I40E_RX_DESC_STATUS_L2TAG1P_SHIFT)) {
+ ri->iri_vtag = le16toh(cur->wb.qword0.lo_dword.l2tag1);
ri->iri_flags |= M_VLANTAG;
+ }
+ ri->iri_nfrags = i;
return (0);
}
diff --git a/sys/net/iflib.c b/sys/net/iflib.c
--- a/sys/net/iflib.c
+++ b/sys/net/iflib.c
@@ -4449,6 +4449,7 @@
iflib_stop(ctx);
STATE_LOCK(ctx);
if_togglecapenable(ifp, setmask);
+ ctx->ifc_softc_ctx.isc_capenable ^= setmask;
STATE_UNLOCK(ctx);
if (bits & IFF_DRV_RUNNING && setmask & ~IFCAP_WOL)
iflib_init_locked(ctx);

File Metadata

Mime Type
text/plain
Expires
Sun, Apr 19, 5:25 AM (2 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31748080
Default Alt Text
D33156.id100290.diff (9 KB)

Event Timeline