Page MenuHomeFreeBSD

D27639.diff
No OneTemporary

D27639.diff

diff --git a/sys/dev/ixl/ixl.h b/sys/dev/ixl/ixl.h
--- a/sys/dev/ixl/ixl.h
+++ b/sys/dev/ixl/ixl.h
@@ -390,6 +390,7 @@
u64 rx_packets;
u64 rx_bytes;
u64 desc_errs;
+ u64 csum_errs;
};
/*
diff --git a/sys/dev/ixl/ixl_pf_main.c b/sys/dev/ixl/ixl_pf_main.c
--- a/sys/dev/ixl/ixl_pf_main.c
+++ b/sys/dev/ixl/ixl_pf_main.c
@@ -808,6 +808,11 @@
vsi_list = SYSCTL_CHILDREN(vsi->vsi_node);
ixl_add_sysctls_eth_stats(&vsi->sysctl_ctx, vsi_list, &vsi->eth_stats);
+ /* Copy of netstat RX errors counter for validation purposes */
+ SYSCTL_ADD_UQUAD(&vsi->sysctl_ctx, vsi_list, OID_AUTO, "rx_errors",
+ CTLFLAG_RD, &vsi->ierrors,
+ "RX packet errors");
+
if (queues_sysctls)
ixl_vsi_add_queues_stats(vsi, &vsi->sysctl_ctx);
}
@@ -2183,7 +2188,7 @@
struct ixl_pf *pf;
struct ifnet *ifp;
struct i40e_eth_stats *es;
- u64 tx_discards;
+ u64 tx_discards, csum_errs;
struct i40e_hw_port_stats *nsd;
@@ -2196,6 +2201,11 @@
tx_discards = es->tx_discards + nsd->tx_dropped_link_down;
+ csum_errs = 0;
+ for (int i = 0; i < vsi->num_rx_queues; i++)
+ csum_errs += vsi->rx_queues[i].rxr.csum_errs;
+ nsd->checksum_error = csum_errs;
+
/* Update ifnet stats */
IXL_SET_IPACKETS(vsi, es->rx_unicast +
es->rx_multicast +
@@ -2209,7 +2219,8 @@
IXL_SET_OMCASTS(vsi, es->tx_multicast);
IXL_SET_IERRORS(vsi, nsd->crc_errors + nsd->illegal_bytes +
- nsd->rx_undersize + nsd->rx_oversize + nsd->rx_fragments +
+ nsd->checksum_error + nsd->rx_length_errors +
+ nsd->rx_undersize + nsd->rx_fragments + nsd->rx_oversize +
nsd->rx_jabber);
IXL_SET_OERRORS(vsi, es->tx_errors);
IXL_SET_IQDROPS(vsi, es->rx_discards + nsd->eth.rx_discards);
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
@@ -51,7 +51,7 @@
#endif
/* Local Prototypes */
-static void ixl_rx_checksum(if_rxd_info_t ri, u32 status, u32 error, u8 ptype);
+static u8 ixl_rx_checksum(if_rxd_info_t ri, u32 status, u32 error, u8 ptype);
static int ixl_isc_txd_encap(void *arg, if_pkt_info_t pi);
static void ixl_isc_txd_flush(void *arg, uint16_t txqid, qidx_t pidx);
@@ -720,7 +720,7 @@
rxr->rx_packets++;
if ((if_getcapenable(vsi->ifp) & IFCAP_RXCSUM) != 0)
- ixl_rx_checksum(ri, status, error, ptype);
+ 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;
@@ -737,7 +737,7 @@
* doesn't spend time verifying the checksum.
*
*********************************************************************/
-static void
+static u8
ixl_rx_checksum(if_rxd_info_t ri, u32 status, u32 error, u8 ptype)
{
struct i40e_rx_ptype_decoded decoded;
@@ -746,7 +746,7 @@
/* No L3 or L4 checksum was calculated */
if (!(status & (1 << I40E_RX_DESC_STATUS_L3L4P_SHIFT)))
- return;
+ return (0);
decoded = decode_rx_desc_ptype(ptype);
@@ -756,7 +756,7 @@
if (status &
(1 << I40E_RX_DESC_STATUS_IPV6EXADD_SHIFT)) {
ri->iri_csum_flags = 0;
- return;
+ return (1);
}
}
@@ -764,17 +764,19 @@
/* IPv4 checksum error */
if (error & (1 << I40E_RX_DESC_ERROR_IPE_SHIFT))
- return;
+ return (1);
ri->iri_csum_flags |= CSUM_L3_VALID;
ri->iri_csum_flags |= CSUM_L4_CALC;
/* L4 checksum error */
if (error & (1 << I40E_RX_DESC_ERROR_L4E_SHIFT))
- return;
+ return (1);
ri->iri_csum_flags |= CSUM_L4_VALID;
ri->iri_csum_data |= htons(0xffff);
+
+ return (0);
}
/* Set Report Status queue fields to 0 */

File Metadata

Mime Type
text/plain
Expires
Sun, Jul 12, 3:42 PM (10 h, 17 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35001007
Default Alt Text
D27639.diff (3 KB)

Event Timeline