Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 02 Oct 2017 23:46:44 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-bugs@FreeBSD.org
Subject:   [Bug 222744] Issues with Intel EM(4) drivers and iflib updates working with netmap
Message-ID:  <bug-222744-8@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D222744

            Bug ID: 222744
           Summary: Issues with Intel EM(4) drivers and iflib updates
                    working with netmap
           Product: Base System
           Version: CURRENT
          Hardware: amd64
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: kern
          Assignee: freebsd-bugs@FreeBSD.org
          Reporter: mshirk@daemon-security.com

Tested on 12-CURRENT=20

pciconf
em0@pci0:1:0:0: class=3D0x020000 card=3D0x115e8086 chip=3D0x105e8086 rev=3D=
0x06
hdr=3D0x00
 vendor  =3D 'Intel Corporation'=20=20
 device  =3D '82571EB Gigabit Ethernet Controller'=20=20
 class=3D network=20=20
 subclass=3D ethernet

I wanted to document this issue as things are being updated for the "iflib"
improvements in CURRENT. Up until the following commits, doing things with
netmap would cause a kernel panic on this intel nic.

https://reviews.freebsd.org/D12140

After this commit, it appeared that I could put this Intel 82571EB NIC into
netmap mode with something like tcpdump and see packet data:

tcpdump -i netmap:em0 -nns 0

However, tcpdump only logs 1024 packets, and then just stops logging packet=
s. I
tested with another application that puts the interface in netmap mode (lb =
from
the netmap github repo) and it also load balances until it forwards 1024
packets and stops forwarding. In fact, when running the lb app again, and
hitting <Ctrl>+C the box panicked. 90% of the time I get a kernel panic,
especially if I output the packet data to STDOUT. If I do something like the
following, tcpdump will never finish as the count will never reach 1025.=20

tcpdump -i netmap:em0 -n -c 1025=20

truss output from the pid for tcpdump:
poll({ 3/POLLIN },1,1000)                        =3D 0 (0x0)
...

Run the same thing again, there are also these interesting NULL frames
inserted, this second run lead to a panic:

poll({ 3/POLLIN },1,1000)=3D 1 (0x1)=20
write(1,"23:41:37.192324 00:00:00:00:00:0"...,122) =3D 122 (0x7a)=20=20
write(1,"\t0x0000:  0000 0000 0000 0000 0"...,68) =3D 68 (0x44)=20
write(1,"\t0x0010:  0000 0000 0000 0000 0"...,68) =3D 68 (0x44)=20
write(1,"\t0x0020:  0000 0000 0000 0000 0"...,68) =3D 68 (0x44)=20
write(1,"\t0x0030:  0000 0000 0000 0000 0"...,68) =3D 68 (0x44)=20
write(1,"\t0x0040:  0000 0000 0000 0000 0"...,68) =3D 68 (0x44)=20
write(1,"\t0x0050:  0000  "...,54) =3D 54 (0x36)=20
poll({ 3/POLLIN },1,1000)=3D 1 (0x1)=20
write(1,"23:41:37.218808 IP xx.xxx.xxx.xx"...,119) =3D 119 (0x77)=20=20
poll({ 3/POLLIN },1,1000)=3D 1 (0x1)


I am working on getting a textdump of the panic, but the backtrace was the
following:

em_isc_rxd_pkt_get() at em_isc_rxd_pkt_get+0xf1
iflib_netmap_rxsysnc() at iflib_netmap_rxsync+0x235
netmap_poll() at netmap_poll+0x79c
freebsd_netmap_poll() at freebsd_netmap_poll+0x32
devfs_poll_f() at devfs_poll_f+0x7f


systl for hw.em and dev.em.0

hw.em.max_interrupt_rate: 8000=20=20
hw.em.eee_setting: 1
hw.em.rx_process_limit: -1
hw.em.sbp: 1=20=20
hw.em.smart_pwr_down: 0
hw.em.rx_abs_int_delay: 66
hw.em.tx_abs_int_delay: 66
hw.em.rx_int_delay: 0=20=20
hw.em.tx_int_delay: 66=20
hw.em.disable_crc_stripping: 0=20
dev.em.0.wake: 0=20
dev.em.0.interrupts.rx_overrun: 0=20=20
dev.em.0.interrupts.rx_desc_min_thresh: 0
dev.em.0.interrupts.tx_queue_min_thresh: 0=20=20
dev.em.0.interrupts.tx_queue_empty: 0=20
dev.em.0.interrupts.tx_abs_timer: 0
dev.em.0.interrupts.tx_pkt_timer: 0
dev.em.0.interrupts.rx_abs_timer: 0
dev.em.0.interrupts.rx_pkt_timer: 23343=20=20
dev.em.0.interrupts.asserts: 71321923=20
dev.em.0.mac_stats.tso_ctx_fail: 0=20
dev.em.0.mac_stats.tso_txd: 0
dev.em.0.mac_stats.tx_frames_1024_1522: 0
dev.em.0.mac_stats.tx_frames_512_1023: 0=20
dev.em.0.mac_stats.tx_frames_256_511: 0=20=20
dev.em.0.mac_stats.tx_frames_128_255: 0=20=20
dev.em.0.mac_stats.tx_frames_65_127: 0
dev.em.0.mac_stats.tx_frames_64: 0=20
dev.em.0.mac_stats.mcast_pkts_txd: 0=20=20
dev.em.0.mac_stats.bcast_pkts_txd: 0=20=20
dev.em.0.mac_stats.good_pkts_txd: 0
dev.em.0.mac_stats.total_pkts_txd: 0=20=20
dev.em.0.mac_stats.good_octets_txd: 0=20
dev.em.0.mac_stats.good_octets_recvd: 175021103382
dev.em.0.mac_stats.rx_frames_1024_1522: 110020952=20
dev.em.0.mac_stats.rx_frames_512_1023: 3556274=20
dev.em.0.mac_stats.rx_frames_256_511: 4759999=20=20
dev.em.0.mac_stats.rx_frames_128_255: 9906052=20=20
dev.em.0.mac_stats.rx_frames_65_127: 20994339=20=20
dev.em.0.mac_stats.rx_frames_64: 32014796
dev.em.0.mac_stats.mcast_pkts_recvd: 7805
dev.em.0.mac_stats.bcast_pkts_recvd: 10=20=20
dev.em.0.mac_stats.good_pkts_recvd: 181252412=20=20
dev.em.0.mac_stats.total_pkts_recvd: 181878781=20
dev.em.0.mac_stats.xoff_txd: 0=20=20
dev.em.0.mac_stats.xoff_recvd: 0
dev.em.0.mac_stats.xon_txd: 0
dev.em.0.mac_stats.xon_recvd: 0=20
dev.em.0.mac_stats.coll_ext_errs: 0
dev.em.0.mac_stats.alignment_errs: 0=20=20
dev.em.0.mac_stats.crc_errs: 0=20=20
dev.em.0.mac_stats.recv_errs: 0=20
dev.em.0.mac_stats.recv_jabber: 0=20=20
dev.em.0.mac_stats.recv_oversize: 0
dev.em.0.mac_stats.recv_fragmented: 0=20
dev.em.0.mac_stats.recv_undersize: 0=20=20
dev.em.0.mac_stats.recv_no_buff: 126=20=20
dev.em.0.mac_stats.missed_packets: 626369
dev.em.0.mac_stats.defer_count: 0=20=20
dev.em.0.mac_stats.sequence_errors: 0=20
dev.em.0.mac_stats.symbol_errors: 0
dev.em.0.mac_stats.collision_count: 0=20
dev.em.0.mac_stats.late_coll: 0=20
dev.em.0.mac_stats.multiple_coll: 0
dev.em.0.mac_stats.single_coll: 0=20=20
dev.em.0.mac_stats.excess_coll: 0=20=20
dev.em.0.queue_rx_0.rx_irq: 0
dev.em.0.queue_rx_0.rxd_tail: 650=20=20
dev.em.0.queue_rx_0.rxd_head: 652=20=20
dev.em.0.queue_tx_0.tx_irq: 0
dev.em.0.queue_tx_0.txd_tail: 0=20
dev.em.0.queue_tx_0.txd_head: 0=20
dev.em.0.fc_low_water: 21028=20
dev.em.0.fc_high_water: 22528
dev.em.0.rx_control: 100892734=20=20
dev.em.0.device_control: 787009=20
dev.em.0.watchdog_timeouts: 0
dev.em.0.rx_overruns: 0
dev.em.0.tx_dma_fail: 0
dev.em.0.mbuf_defrag_fail: 0=20
dev.em.0.link_irq: 0
dev.em.0.dropped: 0=20
dev.em.0.eee_control: 1
dev.em.0.itr: 488
dev.em.0.tx_abs_int_delay: 66
dev.em.0.rx_abs_int_delay: 66
dev.em.0.tx_int_delay: 66=20
dev.em.0.rx_int_delay: 0=20=20
dev.em.0.rs_dump: 0=20
dev.em.0.reg_dump: General Registers=20=20
  CTRL  000c0241=20
  STATUS00080383=20
  CTRL_EXIT  101400c0=20=20

Interrupt Registers=20
  ICR00000000=20

RX Registers=20=20
  RCTL  0603803e=20
  RDLEN 00004000=20
  RDH0000028c=20
  RDT0000028a=20
  RXDCTL00010000=20
  RDBAL 029a8000=20
  RDBAH 00000000=20

TX Registers=20=20
  TCTL  3103f0fa=20
  TDBAL 056dc000=20
  TDBAH 00000000=20
  TDLEN 00004000=20
  TDH00000000=20
  TDT00000000=20
  TXDCTL0341011f=20
  TDFH  00001000=20
  TDFT  00001000=20
  TDFHS 00001000=20
  TDFPC 00000000=20


dev.em.0.fc: 3
dev.em.0.debug: -1=20=20
dev.em.0.nvm: -1=20
dev.em.0.iflib.rxq0.rxq_fl0.credits: 1023
dev.em.0.iflib.rxq0.rxq_fl0.cidx: 652=20
dev.em.0.iflib.rxq0.rxq_fl0.pidx: 651=20
dev.em.0.iflib.txq0.r_abdications: 0=20=20
dev.em.0.iflib.txq0.r_restarts: 0=20=20
dev.em.0.iflib.txq0.r_stalls: 0=20
dev.em.0.iflib.txq0.r_starts: 0=20
dev.em.0.iflib.txq0.r_drops: 0=20=20
dev.em.0.iflib.txq0.r_enqueues: 0=20=20
dev.em.0.iflib.txq0.ring_state: pidx_head: 0000 pidx_tail: 0000 cidx: 0000
state: IDLE
dev.em.0.iflib.txq0.txq_cleaned: 0=20
dev.em.0.iflib.txq0.txq_processed: 0=20=20
dev.em.0.iflib.txq0.txq_in_use: 0=20=20
dev.em.0.iflib.txq0.txq_cidx_processed: 0
dev.em.0.iflib.txq0.txq_cidx: 0=20
dev.em.0.iflib.txq0.txq_pidx: 0=20
dev.em.0.iflib.txq0.no_tx_dma_setup: 0
dev.em.0.iflib.txq0.txd_encap_efbig: 0
dev.em.0.iflib.txq0.tx_map_failed: 0=20=20
dev.em.0.iflib.txq0.no_desc_avail: 0=20=20
dev.em.0.iflib.txq0.mbuf_defrag_failed: 0
dev.em.0.iflib.txq0.m_pullups: 0
dev.em.0.iflib.txq0.mbuf_defrag: 0=20
dev.em.0.iflib.override_nrxds: 0
dev.em.0.iflib.override_ntxds: 0
dev.em.0.iflib.disable_msix: 0=20=20
dev.em.0.iflib.override_qs_enable: 0=20=20
dev.em.0.iflib.override_nrxqs: 0
dev.em.0.iflib.override_ntxqs: 0
dev.em.0.iflib.driver_version: 7.6.1-k
dev.em.0.%parent: pci1=20
dev.em.0.%pnpinfo: vendor=3D0x8086 device=3D0x105e subvendor=3D0x8086
subdevice=3D0x115e class=3D0x020000
dev.em.0.%location: slot=3D0 function=3D0 dbsf=3Dpci0:1:0:0
handle=3D\_SB_.PCI0.PEG0.PEGP=20=20
dev.em.0.%driver: em
dev.em.0.%desc: Intel(R) PRO/1000 Network Connection


dmesg:
[1] em0: <Intel(R) PRO/1000 Network Connection> port 0xe020-0xe03f mem
0xf7da0000-0xf7dbffff,0xf7d80000-0xf7d9ffff irq 16 at device 0.0 on pci1
[1] em0: attach_pre capping queues at 1=20=20
[1] em0: using 1024 tx descriptors and 1024 rx descriptors=20
[1] em0: msix_init qsets capped at 1=20=20
[1] em0: PCIY_MSIX capability not found; or rid 0 =3D=3D 0.=20
[1] em0: Using an MSI interrupt=20
[1] em0: allocated for 1 tx_queues=20
[1] em0: allocated for 1 rx_queues=20
[1] taskqgroup_attach: setaffinity failed: 3
[1] taskqgroup_attach: setaffinity failed: 3
[1] em0: Ethernet address: 68:05:ca:33:42:f0
[1] em0: netmap queues/slots: TX 1/1024, RX 1/1024

--=20
You are receiving this mail because:
You are the assignee for the bug.=



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