git: 5d3c98254927 - main - Revert "e1000: lem(4)/em(4) ifcaps, TSO and hwcsum fixes"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 22 Jul 2023 04:44:09 UTC
The branch main has been updated by kbowling:
URL: https://cgit.FreeBSD.org/src/commit/?id=5d3c982549278c72d59debae7227366453d3c4a8
commit 5d3c982549278c72d59debae7227366453d3c4a8
Author: Kevin Bowling <kbowling@FreeBSD.org>
AuthorDate: 2023-07-22 04:42:23 +0000
Commit: Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2023-07-22 04:42:23 +0000
Revert "e1000: lem(4)/em(4) ifcaps, TSO and hwcsum fixes"
Seems to cause a panic when booting under VitrualBox.
Reported by: yasu
This reverts commit 95f7b36e8fac45092b9a4eea5e32732e979989f0.
---
sys/dev/e1000/em_txrx.c | 15 +++++++--------
sys/dev/e1000/if_em.c | 48 ++++++++++++++++--------------------------------
2 files changed, 23 insertions(+), 40 deletions(-)
diff --git a/sys/dev/e1000/em_txrx.c b/sys/dev/e1000/em_txrx.c
index 069a1c00a4b2..47f9b187aa14 100644
--- a/sys/dev/e1000/em_txrx.c
+++ b/sys/dev/e1000/em_txrx.c
@@ -674,12 +674,12 @@ lem_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri)
i++;
} while (!eop);
- if (scctx->isc_capenable & IFCAP_RXCSUM)
+ /* XXX add a faster way to look this up */
+ if (sc->hw.mac.type >= e1000_82543)
em_receive_checksum(status, errors, ri);
- if (scctx->isc_capenable & IFCAP_VLAN_HWTAGGING &&
- status & E1000_RXD_STAT_VP) {
- ri->iri_vtag = le16toh(rxd->special & E1000_RXD_SPC_VLAN_MASK);
+ if (status & E1000_RXD_STAT_VP) {
+ ri->iri_vtag = le16toh(rxd->special);
ri->iri_flags |= M_VLANTAG;
}
@@ -699,11 +699,11 @@ em_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri)
uint16_t len;
uint32_t pkt_info;
- uint32_t staterr;
+ uint32_t staterr = 0;
bool eop;
int i, cidx;
- staterr = i = 0;
+ i = 0;
cidx = ri->iri_cidx;
do {
@@ -739,8 +739,7 @@ em_isc_rxd_pkt_get(void *arg, if_rxd_info_t ri)
if (scctx->isc_capenable & IFCAP_RXCSUM)
em_receive_checksum(staterr, staterr >> 24, ri);
- if (scctx->isc_capenable & IFCAP_VLAN_HWTAGGING &&
- staterr & E1000_RXD_STAT_VP) {
+ if (staterr & E1000_RXD_STAT_VP) {
ri->iri_vtag = le16toh(rxd->wb.upper.vlan);
ri->iri_flags |= M_VLANTAG;
}
diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index b5a6e7e777d3..0b664b155872 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -781,21 +781,19 @@ em_set_num_queues(if_ctx_t ctx)
return (maxqueues);
}
-#define LEM_CAPS \
- IFCAP_HWCSUM | IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | \
- IFCAP_VLAN_HWCSUM | IFCAP_WOL | IFCAP_VLAN_HWFILTER | IFCAP_TSO4 | \
- IFCAP_LRO | IFCAP_JUMBO_MTU
-
-#define EM_CAPS \
- IFCAP_HWCSUM | IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | \
- IFCAP_VLAN_HWCSUM | IFCAP_WOL | IFCAP_VLAN_HWFILTER | IFCAP_TSO4 | \
- IFCAP_LRO | IFCAP_VLAN_HWTSO | IFCAP_JUMBO_MTU | IFCAP_HWCSUM_IPV6 | \
- IFCAP_TSO6
-
-#define IGB_CAPS \
- IFCAP_HWCSUM | IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | \
- IFCAP_VLAN_HWCSUM | IFCAP_WOL | IFCAP_VLAN_HWFILTER | IFCAP_TSO4 | \
- IFCAP_LRO | IFCAP_VLAN_HWTSO | IFCAP_JUMBO_MTU | IFCAP_HWCSUM_IPV6 | \
+#define LEM_CAPS \
+ IFCAP_HWCSUM | IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | \
+ IFCAP_VLAN_HWCSUM | IFCAP_WOL | IFCAP_VLAN_HWFILTER
+
+#define EM_CAPS \
+ IFCAP_HWCSUM | IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | \
+ IFCAP_VLAN_HWCSUM | IFCAP_WOL | IFCAP_VLAN_HWFILTER | IFCAP_TSO4 | \
+ IFCAP_LRO | IFCAP_VLAN_HWTSO
+
+#define IGB_CAPS \
+ IFCAP_HWCSUM | IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING | \
+ IFCAP_VLAN_HWCSUM | IFCAP_WOL | IFCAP_VLAN_HWFILTER | IFCAP_TSO4 | \
+ IFCAP_LRO | IFCAP_VLAN_HWTSO | IFCAP_JUMBO_MTU | IFCAP_HWCSUM_IPV6 |\
IFCAP_TSO6
/*********************************************************************
@@ -899,7 +897,7 @@ em_if_attach_pre(if_ctx_t ctx)
scctx->isc_tx_tso_segsize_max = EM_TSO_SEG_SIZE;
scctx->isc_capabilities = scctx->isc_capenable = EM_CAPS;
/*
- * For EM-class devices, don't enable IFCAP_{TSO4,VLAN_HWTSO,TSO6}
+ * For EM-class devices, don't enable IFCAP_{TSO4,VLAN_HWTSO}
* by default as we don't have workarounds for all associated
* silicon errata. E. g., with several MACs such as 82573E,
* TSO only works at Gigabit speed and otherwise can cause the
@@ -914,9 +912,8 @@ em_if_attach_pre(if_ctx_t ctx)
* work for a few MACs of this class - at least when sticking
* with Gigabit - in which case users may enable TSO manually.
*/
- scctx->isc_capenable &= ~(IFCAP_TSO4 | IFCAP_VLAN_HWTSO | IFCAP_TSO6);
- scctx->isc_tx_csum_flags = CSUM_TCP | CSUM_UDP | CSUM_IP_TSO |
- CSUM_IP6_TCP | CSUM_IP6_UDP;
+ scctx->isc_capenable &= ~(IFCAP_TSO4 | IFCAP_VLAN_HWTSO);
+ scctx->isc_tx_csum_flags = CSUM_TCP | CSUM_UDP | CSUM_IP_TSO;
/*
* We support MSI-X with 82574 only, but indicate to iflib(4)
* that it shall give MSI at least a try with other devices.
@@ -935,19 +932,6 @@ em_if_attach_pre(if_ctx_t ctx)
scctx->isc_tx_csum_flags = CSUM_TCP | CSUM_UDP;
scctx->isc_txrx = &lem_txrx;
scctx->isc_capabilities = LEM_CAPS;
-
- /*
- * For LEM-class devices, don't enable IFCAP {TSO4,VLAN_HWTSO}
- * by default as we don't have workarounds for all associated
- * silicon errata. TSO4 may work on > 82544 but its status
- * is unknown by the authors. Please report any success or failures.
- */
- scctx->isc_capenable &= ~(IFCAP_TSO4 | IFCAP_VLAN_HWTSO);
-
- /* 8254x SDM4.0 page 33 - FDX requirement on these chips */
- if (hw->mac.type == e1000_82547 || hw->mac.type == e1000_82547_rev_2)
- scctx->isc_capenable &= ~(IFCAP_HWCSUM|IFCAP_VLAN_HWCSUM);
-
if (hw->mac.type < e1000_82543)
scctx->isc_capabilities &= ~(IFCAP_HWCSUM|IFCAP_VLAN_HWCSUM);
/* 82541ER doesn't do HW tagging */