Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Dec 2013 23:02:26 +0000 (UTC)
From:      Eric Davis <edavis@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r260113 - head/sys/dev/bxe
Message-ID:  <201312302302.rBUN2QIk068426@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: edavis
Date: Mon Dec 30 23:02:26 2013
New Revision: 260113
URL: http://svnweb.freebsd.org/changeset/base/260113

Log:
  For TSO, when the first mbuf contains both the packet header and data, the
  header is split out into its own BD for processing by the firmware. When
  this split occurred the data length in the BD was not being set correctly
  resulting in packet corruption.
  
  Approved by:	davidcd (mentor)

Modified:
  head/sys/dev/bxe/bxe.c
  head/sys/dev/bxe/ecore_sp.c

Modified: head/sys/dev/bxe/bxe.c
==============================================================================
--- head/sys/dev/bxe/bxe.c	Mon Dec 30 22:17:33 2013	(r260112)
+++ head/sys/dev/bxe/bxe.c	Mon Dec 30 23:02:26 2013	(r260113)
@@ -34,7 +34,7 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
-#define BXE_DRIVER_VERSION "1.78.75"
+#define BXE_DRIVER_VERSION "1.78.76"
 
 #include "bxe.h"
 #include "ecore_sp.h"
@@ -5004,6 +5004,7 @@ bxe_dump_mbuf(struct bxe_softc *sc,
               uint8_t          contents)
 {
     char * type;
+    int i = 0;
 
     if (!(sc->debug & DBG_MBUF)) {
         return;
@@ -5016,28 +5017,21 @@ bxe_dump_mbuf(struct bxe_softc *sc,
 
     while (m) {
         BLOGD(sc, DBG_MBUF,
-              "mbuf=%p m_len=%d m_flags=0x%b m_data=%p\n",
-              m, m->m_len, m->m_flags,
-              "\20\1M_EXT\2M_PKTHDR\3M_EOR\4M_RDONLY", m->m_data);
+              "%02d: mbuf=%p m_len=%d m_flags=0x%b m_data=%p\n",
+              i, m, m->m_len, m->m_flags, M_FLAG_BITS, m->m_data);
 
         if (m->m_flags & M_PKTHDR) {
              BLOGD(sc, DBG_MBUF,
-                   "- m_pkthdr: len=%d flags=0x%b csum_flags=%b\n",
-                   m->m_pkthdr.len, m->m_flags,
-                   "\20\12M_BCAST\13M_MCAST\14M_FRAG"
-                   "\15M_FIRSTFRAG\16M_LASTFRAG\21M_VLANTAG"
-                   "\22M_PROMISC\23M_NOFREE",
-                   (int)m->m_pkthdr.csum_flags,
-                   "\20\1CSUM_IP\2CSUM_TCP\3CSUM_UDP\4CSUM_IP_FRAGS"
-                   "\5CSUM_FRAGMENT\6CSUM_TSO\11CSUM_IP_CHECKED"
-                   "\12CSUM_IP_VALID\13CSUM_DATA_VALID"
-                   "\14CSUM_PSEUDO_HDR");
+                   "%02d: - m_pkthdr: tot_len=%d flags=0x%b csum_flags=%b\n",
+                   i, m->m_pkthdr.len, m->m_flags, M_FLAG_BITS,
+                   (int)m->m_pkthdr.csum_flags, CSUM_BITS);
         }
 
         if (m->m_flags & M_EXT) {
             switch (m->m_ext.ext_type) {
             case EXT_CLUSTER:    type = "EXT_CLUSTER";    break;
             case EXT_SFBUF:      type = "EXT_SFBUF";      break;
+            case EXT_JUMBOP:     type = "EXT_JUMBOP";     break;
             case EXT_JUMBO9:     type = "EXT_JUMBO9";     break;
             case EXT_JUMBO16:    type = "EXT_JUMBO16";    break;
             case EXT_PACKET:     type = "EXT_PACKET";     break;
@@ -5050,8 +5044,8 @@ bxe_dump_mbuf(struct bxe_softc *sc,
             }
 
             BLOGD(sc, DBG_MBUF,
-                  "- m_ext: %p ext_size=%d, type=%s\n",
-                  m->m_ext.ext_buf, m->m_ext.ext_size, type);
+                  "%02d: - m_ext: %p ext_size=%d type=%s\n",
+                  i, m->m_ext.ext_buf, m->m_ext.ext_size, type);
         }
 
         if (contents) {
@@ -5059,6 +5053,7 @@ bxe_dump_mbuf(struct bxe_softc *sc,
         }
 
         m = m->m_next;
+        i++;
     }
 }
 
@@ -5669,6 +5664,7 @@ bxe_tx_encap_continue:
             /* split the first BD into header/data making the fw job easy */
             nbds++;
             tx_start_bd->nbd = htole16(nbds);
+            tx_start_bd->nbytes = htole16(hlen);
 
             bd_prod = TX_BD_NEXT(bd_prod);
 

Modified: head/sys/dev/bxe/ecore_sp.c
==============================================================================
--- head/sys/dev/bxe/ecore_sp.c	Mon Dec 30 22:17:33 2013	(r260112)
+++ head/sys/dev/bxe/ecore_sp.c	Mon Dec 30 23:02:26 2013	(r260113)
@@ -4264,7 +4264,7 @@ void ecore_init_mac_credit_pool(struct b
 			if (!CHIP_REV_IS_SLOW(sc))
 				cam_sz = (MAX_MAC_CREDIT_E2
 				- GET_NUM_VFS_PER_PATH(sc))
-				/ func_num 
+				/ func_num
 				+ GET_NUM_VFS_PER_PF(sc);
 			else
 				cam_sz = ECORE_CAM_SIZE_EMUL;
@@ -4443,8 +4443,11 @@ int ecore_config_rss(struct bxe_softc *s
 	struct ecore_raw_obj *r = &o->raw;
 
 	/* Do nothing if only driver cleanup was requested */
-	if (ECORE_TEST_BIT(RAMROD_DRV_CLR_ONLY, &p->ramrod_flags))
+	if (ECORE_TEST_BIT(RAMROD_DRV_CLR_ONLY, &p->ramrod_flags)) {
+		ECORE_MSG(sc, "Not configuring RSS ramrod_flags=%lx\n",
+			  p->ramrod_flags);
 		return ECORE_SUCCESS;
+	}
 
 	r->set_pending(r);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201312302302.rBUN2QIk068426>