Author: marius Date: Sun Jul 15 19:04:23 2018 New Revision: 336313 URL: https://svnweb.freebsd.org/changeset/base/336313Log: Assorted TSO fixes for em(4)/iflib(9) and dead code removal:
[...]
Okayed by: sbruno@ at 201806 DevSummit Transport Working Group [1] Reviewed by: sbruno (earlier version), erj PR: 219428 (part of; comment #10) [1], 220997 (part of; comment #3)
Hi Marius,thanks a lot for this change, it improves the situation (PR 220997) a lot. The system is running at r336329, as such I don't have your change r336356 yet on the system. Maybe the 2 panics (more below) I've seen are fixed by this. Before I try your second change (surely not before the WE), here at least the report in case it is related to your changes and not related to r336313:
I got 2 panics, both within 6 minutes (based upon the timestamp of the coredumps in the filesystem):
1) panic: Assertion ifsd_m[next] == NULL failed at /usr/src/sys/net/iflib.c:3151 cpuid = 2 time = 1531944124 KDB: stack backtrace: db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe008af85850 vpanic() at vpanic+0x1a3/frame 0xfffffe008af858b0 doadump() at doadump/frame 0xfffffe008af85930 iflib_txq_drain() at iflib_txq_drain+0xe58/frame 0xfffffe008af85aa0ifmp_ring_check_drainage() at ifmp_ring_check_drainage+0x16c/frame 0xfffffe008af85b00
_task_fn_tx() at _task_fn_tx+0x76/frame 0xfffffe008af85b30gtaskqueue_run_locked() at gtaskqueue_run_locked+0x139/frame 0xfffffe008af85b80 gtaskqueue_thread_loop() at gtaskqueue_thread_loop+0x88/frame 0xfffffe008af85bb0
fork_exit() at fork_exit+0x84/frame 0xfffffe008af85bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe008af85bf0 --- trap 0, rip = 0, rsp = 0, rbp = 0 --- Uptime: 1d22h51m17s Dumping 2990 out of 8037 MB:..1%..11%..21%..31%..41%..51%..61%..71%..81%..91% __curthread () at ./machine/pcpu.h:230 230 __asm("movq %%gs:%1,%0" : "=r" (td) (kgdb) #0 __curthread () at ./machine/pcpu.h:230 #1 doadump (textdump=1) at /usr/src/sys/kern/kern_shutdown.c:366 #2 0xffffffff80485ea1 in kern_reboot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:446 #3 0xffffffff80486483 in vpanic (fmt=<optimized out>, ap=0xfffffe008af858f0) at /usr/src/sys/kern/kern_shutdown.c:863 #4 0xffffffff804861f0 in kassert_panic ( fmt=0xffffffff807e085f "Assertion %s failed at %s:%d") at /usr/src/sys/kern/kern_shutdown.c:749 #5 0xffffffff8059cd78 in iflib_busdma_load_mbuf_sg (flags=0, txq=<optimized out>, tag=<optimized out>, map=<optimized out>, m0=<optimized out>, segs=<optimized out>, nsegs=<optimized out>, max_segs=<optimized out>) at /usr/src/sys/net/iflib.c:3151 #6 iflib_encap (txq=0xfffff800028dc000, m_headp=0xfffffe00959bdd30) at /usr/src/sys/net/iflib.c:3321 #7 iflib_txq_drain (r=0xfffffe00959ba000, cidx=<optimized out>, pidx=41319936) at /usr/src/sys/net/iflib.c:3636 #8 0xffffffff805a0f4c in drain_ring_lockless (r=<optimized out>, os=..., prev=<optimized out>, budget=<optimized out>) at /usr/src/sys/net/mp_ring.c:199 #9 ifmp_ring_check_drainage (r=<optimized out>, budget=32) at /usr/src/sys/net/mp_ring.c:502 #10 0xffffffff80599c46 in _task_fn_tx (context=<optimized out>) at /usr/src/sys/net/iflib.c:3747 #11 0xffffffff804cd2c9 in gtaskqueue_run_locked (queue=0xfffff800025e0d00) at /usr/src/sys/kern/subr_gtaskqueue.c:332 #12 0xffffffff804cd048 in gtaskqueue_thread_loop (arg=<optimized out>) at /usr/src/sys/kern/subr_gtaskqueue.c:507 #13 0xffffffff8044cc34 in fork_exit ( callout=0xffffffff804ccfc0 <gtaskqueue_thread_loop>, arg=0xfffffe0007ffd038, frame=0xfffffe008af85c00) at /usr/src/sys/kern/kern_fork.c:1057 (kgdb) up 5#5 0xffffffff8059cd78 in iflib_busdma_load_mbuf_sg (flags=0, txq=<optimized out>, tag=<optimized out>, map=<optimized out>, m0=<optimized out>, segs=<optimized out>, nsegs=<optimized out>, max_segs=<optimized out>)
at /usr/src/sys/net/iflib.c:3151 3151 MPASS(ifsd_m[next] == NULL); (kgdb) list 3146 /* 3147 * see if we can't be smarter about physically 3148 * contiguous mappings 3149 */ 3150 next = (pidx + count) & (ntxd-1); 3151 MPASS(ifsd_m[next] == NULL); 3152 #if MEMORY_LOGGING 3153 txq->ift_enqueued++; 3154 #endif 3155 ifsd_m[next] = m; (kgdb) print ifsd_m $1 = (struct mbuf **) 0xfffffe00959b8000 (kgdb) print next $2 = <optimized out> (kgdb) print pidx $3 = 277 (kgdb) print count $4 = 0 (kgdb) print ntxd $5 = <optimized out> 2) Unread portion of the kernel message buffer: panic: Assertion ifsd_m[next] == NULL failed at /usr/src/sys/net/iflib.c:3151 cpuid = 2 time = 1531944550 KDB: stack backtrace: db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe008af85850 vpanic() at vpanic+0x1a3/frame 0xfffffe008af858b0 doadump() at doadump/frame 0xfffffe008af85930 iflib_txq_drain() at iflib_txq_drain+0xe58/frame 0xfffffe008af85aa0ifmp_ring_check_drainage() at ifmp_ring_check_drainage+0x16c/frame 0xfffffe008af85b00
_task_fn_tx() at _task_fn_tx+0x76/frame 0xfffffe008af85b30gtaskqueue_run_locked() at gtaskqueue_run_locked+0x139/frame 0xfffffe008af85b80 gtaskqueue_thread_loop() at gtaskqueue_thread_loop+0x88/frame 0xfffffe008af85bb0
fork_exit() at fork_exit+0x84/frame 0xfffffe008af85bf0 fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe008af85bf0 --- trap 0, rip = 0, rsp = 0, rbp = 0 --- Uptime: 5m27s Dumping 1555 out of 8037 MB:..2%..11%..21%..31%..41%..51%..61%..71%..81%..91% __curthread () at ./machine/pcpu.h:230 230 __asm("movq %%gs:%1,%0" : "=r" (td) (kgdb) bt #0 __curthread () at ./machine/pcpu.h:230 #1 doadump (textdump=1) at /usr/src/sys/kern/kern_shutdown.c:366#2 0xffffffff80485ea1 in kern_reboot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:446
#3 0xffffffff80486483 in vpanic (fmt=<optimized out>, ap=0xfffffe008af858f0) at /usr/src/sys/kern/kern_shutdown.c:863#4 0xffffffff804861f0 in kassert_panic (fmt=0xffffffff807e085f "Assertion %s failed at %s:%d")
at /usr/src/sys/kern/kern_shutdown.c:749#5 0xffffffff8059cd78 in iflib_busdma_load_mbuf_sg (flags=0, txq=<optimized out>, tag=<optimized out>, map=<optimized out>, m0=<optimized out>, segs=<optimized out>, nsegs=<optimized out>, max_segs=<optimized out>)
at /usr/src/sys/net/iflib.c:3151#6 iflib_encap (txq=0xfffff800028fe000, m_headp=0xfffffe00959bdde8) at /usr/src/sys/net/iflib.c:3321 #7 iflib_txq_drain (r=0xfffffe00959ba000, cidx=<optimized out>, pidx=42948608) at /usr/src/sys/net/iflib.c:3636 #8 0xffffffff805a0f4c in drain_ring_lockless (r=<optimized out>, os=..., prev=<optimized out>,
budget=<optimized out>) at /usr/src/sys/net/mp_ring.c:199#9 ifmp_ring_check_drainage (r=<optimized out>, budget=32) at /usr/src/sys/net/mp_ring.c:502 #10 0xffffffff80599c46 in _task_fn_tx (context=<optimized out>) at /usr/src/sys/net/iflib.c:3747
#11 0xffffffff804cd2c9 in gtaskqueue_run_locked (queue=0xfffff800025a2200) at /usr/src/sys/kern/subr_gtaskqueue.c:332#12 0xffffffff804cd048 in gtaskqueue_thread_loop (arg=<optimized out>) at /usr/src/sys/kern/subr_gtaskqueue.c:507 #13 0xffffffff8044cc34 in fork_exit (callout=0xffffffff804ccfc0 <gtaskqueue_thread_loop>, arg=0xfffffe0007ffd038,
frame=0xfffffe008af85c00) at /usr/src/sys/kern/kern_fork.c:1057 #14 <signal handler called> (kgdb) up 5#5 0xffffffff8059cd78 in iflib_busdma_load_mbuf_sg (flags=0, txq=<optimized out>, tag=<optimized out>, map=<optimized out>, m0=<optimized out>, segs=<optimized out>, nsegs=<optimized out>, max_segs=<optimized out>)
at /usr/src/sys/net/iflib.c:3151 3151 MPASS(ifsd_m[next] == NULL); (kgdb) print ifsd_m $1 = (struct mbuf **) 0xfffffe00959b8000 (kgdb) print pidx $2 = 707 (kgdb) print count $3 = 0 Bye, Alexander. -- http://www.Leidinger.net alexan...@leidinger.net: PGP 0x8F31830F9F2772BF http://www.FreeBSD.org netch...@freebsd.org : PGP 0x8F31830F9F2772BF
pgpWjJe48Iibj.pgp
Description: Digitale PGP-Signatur