The branch main has been updated by kbowling:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=5d3c982549278c72d59debae7227366453d3c4a8

commit 5d3c982549278c72d59debae7227366453d3c4a8
Author:     Kevin Bowling <kbowl...@freebsd.org>
AuthorDate: 2023-07-22 04:42:23 +0000
Commit:     Kevin Bowling <kbowl...@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 */

Reply via email to