Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Mar 2020 17:08:39 +0300
From:      Alexandre Snarskii <snar@snar.spb.ru>
To:        freebsd-net@freebsd.org
Cc:        Alexandre Snarskii <snar@snar.spb.ru>
Subject:   Re: netmap/ixl and crc addition..
Message-ID:  <20200324140839.GB26248@staff.retn.net>
In-Reply-To: <20200324123721.GA26248@staff.retn.net>
References:  <20200324123721.GA26248@staff.retn.net>

next in thread | previous in thread | raw e-mail | index | archive | help

--J2SCkAp4GZ/dPZZf
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Tue, Mar 24, 2020 at 03:37:36PM +0300, Alexandre Snarskii wrote:
> 
> Hi!
> 
> Long story short: looks like intel x722 does not by default add CRC to 
> outbound frames, so with FreeBSD 11-stable netmap-generated traffic is 
> dropped on the next port.. Fix is simple, attached.

... add missing attach :(

> 
> The same behaviour of 'unconditionally ask card to compute crc' can
> be found in both if_ixl:
> https://svnweb.freebsd.org/base/stable/11/sys/dev/ixl/ixl_txrx.c?view=markup#l408
> and in DPDK i40e driver:
> https://github.com/DPDK/dpdk/blob/master/drivers/net/i40e/i40e_rxtx.c#L1105
> so, I guess, it's safe.
> 
> PS: of course, first idea was to upgrade to FreeBSD 12-stable, but while
> this upgrade solved the crc problem, this version shows 'stalled tx queue' 
> problem: after CTXSYNC tail == head == cur, 'no space in ring' condition. 
> Attempts to ignore this condition led to continuous ring resets in txcsync:
> 
> Mar 17 20:21:08 host kernel: 668.224836 [1679] nm_txsync_prologue        ixl1 TX3: fail 'head < kring->rhead || head > kring->rtail' h 136 c 136 t 135 rh 135 rc 135 rt 135 hc 135 ht 135
> Mar 17 20:21:08 host kernel: 668.238300 [1787] netmap_ring_reinit        called for ixl1 TX3
> 
> PPS: hardware details: Dell VEP4600, based on Xeon D-2100 with 
> two onboard X722 ports (actually, four, but two of them are not
> wired).
> 
> CPU: Intel(R) Xeon(R) D-2187NT CPU @ 2.00GHz (2000.06-MHz K8-class CPU)
>   Origin="GenuineIntel"  Id=0x50654  Family=0x6  Model=0x55  Stepping=4
> 
> ixl0: <Intel(R) Ethernet Connection 700 Series PF Driver, Version - 1.11.9-k> mem 0xfa000000-0xfaffffff,0xfb018000-0xfb01ffff irq 11 at device 0.0 numa-domain 0 on pci12
> ixl0: using 1024 tx descriptors and 1024 rx descriptors
> ixl0: fw 3.1.57069 api 1.5 nvm 3.33 etid 80001007 oem 1.263.0
> ixl0: PF-ID[0]: VFs 32, MSIX 129, VF MSIX 5, QPs 384, I2C
> ixl0: Using MSIX interrupts with 9 vectors
> ixl0: Allocating 8 queues for PF LAN VSI; 8 queues active
> ixl0: Ethernet address: 3c:2c:30:30:59:85
> ixl0: SR-IOV ready
> ixl0: netmap queues/slots: TX 8/1024, RX 8/1024
> 
> ixl0@pci0:184:0:0:	class=0x020000 card=0x00008086 chip=0x37d38086 rev=0x04 hdr=0x00
>     vendor     = 'Intel Corporation'
>     device     = 'Ethernet Connection X722 for 10GbE SFP+'
>     class      = network
>     subclass   = ethernet
> 
> 
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"

--J2SCkAp4GZ/dPZZf
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="if_ixl_netmap.h.diff"

Index: sys/dev/netmap/if_ixl_netmap.h
===================================================================
--- sys/dev/netmap/if_ixl_netmap.h	(revision 359243)
+++ sys/dev/netmap/if_ixl_netmap.h	(working copy)
@@ -239,7 +239,8 @@
 			curr->cmd_type_offset_bsz = htole64(
 			    ((u64)len << I40E_TXD_QW1_TX_BUF_SZ_SHIFT) |
 			    flags |
-			    ((u64)I40E_TX_DESC_CMD_EOP << I40E_TXD_QW1_CMD_SHIFT)
+			    ((u64)I40E_TX_DESC_CMD_EOP << I40E_TXD_QW1_CMD_SHIFT) |
+			    ((u64)I40E_TX_DESC_CMD_ICRC << I40E_TXD_QW1_CMD_SHIFT)
 			  ); // XXX more ?
 
 			/* make sure changes to the buffer are synced */

--J2SCkAp4GZ/dPZZf--



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