svn commit: r333456 - head/sys/dev/ena

Marcin Wojtas mw at FreeBSD.org
Thu May 10 09:37:55 UTC 2018


Author: mw
Date: Thu May 10 09:37:54 2018
New Revision: 333456
URL: https://svnweb.freebsd.org/changeset/base/333456

Log:
  Do not pass header length to the ENA controller
  
  Header length is optional hint for the ENA device. Because It is not
  guaranteed that every packet header will be in the first mbuf
  segment, it is better to skip passing any information. If the header
  length will be indicating invalid value (different than 0), then the
  packet will be dropped.
  
  This kind situation can appear, when the UDP packet will be fragmented
  by the stack in the ip_fragment() function.
  
  Submitted by: Michal Krawczyk <mk at semihalf.com>
  Reported by:  Krishna Yenduri <kyenduri at brkt.com>
  Obtained from: Semihalf
  Sponsored by: Amazon, Inc.

Modified:
  head/sys/dev/ena/ena.c

Modified: head/sys/dev/ena/ena.c
==============================================================================
--- head/sys/dev/ena/ena.c	Thu May 10 09:37:50 2018	(r333455)
+++ head/sys/dev/ena/ena.c	Thu May 10 09:37:54 2018	(r333456)
@@ -2742,7 +2742,7 @@ ena_xmit_mbuf(struct ena_ring *tx_ring, struct mbuf **
 	uint16_t req_id;
 	uint16_t push_len;
 	uint16_t ena_qid;
-	uint32_t len, nsegs, header_len;
+	uint32_t nsegs, header_len;
 	int i, rc;
 	int nb_hw_desc;
 
@@ -2766,12 +2766,18 @@ ena_xmit_mbuf(struct ena_ring *tx_ring, struct mbuf **
 	tx_info->num_of_bufs = 0;
 
 	ena_buf = tx_info->bufs;
-	len = (*mbuf)->m_len;
 
 	ena_trace(ENA_DBG | ENA_TXPTH, "Tx: %d bytes", (*mbuf)->m_pkthdr.len);
 
 	push_len = 0;
-	header_len = min_t(uint32_t, len, tx_ring->tx_max_header_size);
+	/*
+	 * header_len is just a hint for the device. Because FreeBSD is not
+	 * giving us information about packet header length and it is not
+	 * guaranteed that all packet headers will be in the 1st mbuf, setting
+	 * header_len to 0 is making the device ignore this value and resolve
+	 * header on it's own.
+	 */
+	header_len = 0;
 	push_hdr = NULL;
 
 	rc = bus_dmamap_load_mbuf_sg(adapter->tx_buf_tag, tx_info->map,


More information about the svn-src-all mailing list