svn commit: r353292 - in head/sys: contrib/ipfilter/netinet dev/firewire dev/iicbus dev/usb/net kern net netgraph netinet netinet6 netipsec netpfil/ipfw netpfil/pf ofed/drivers/infiniband/ulp/ipoib

Hans Petter Selasky hps at selasky.org
Mon Oct 14 10:25:04 UTC 2019


On 2019-10-14 12:03, Hans Petter Selasky wrote:
> On 2019-10-08 00:40, Gleb Smirnoff wrote:
>> Author: glebius
>> Date: Mon Oct  7 22:40:05 2019
>> New Revision: 353292
>> URL: https://svnweb.freebsd.org/changeset/base/353292
>>
>> Log:
>>    Widen NET_EPOCH coverage.
>>    When epoch(9) was introduced to network stack, it was basically
>>    dropped in place of existing locking, which was mutexes and
>>    rwlocks. For the sake of performance mutex covered areas were
>>    as small as possible, so became epoch covered areas.
> 
> Hi Gleb,
> 
> There are several callers of arpresolve() outside sys/net, which now 
> require EPOCH(), which appears missing in your patch:
> 
> Same for nd6_resolve() I believe.
> 
> --HPS
> 
>> (kgdb) #0  __curthread () at /usr/src/sys/amd64/include/pcpu_aux.h:55
>> #1  doadump (textdump=0) at /usr/src/sys/kern/kern_shutdown.c:392
>> #2  0xffffffff804948fa in db_dump (dummy=<optimized out>,     
>> dummy2=<unavailable>, dummy3=<unavailable>, dummy4=<unavailable>)
>>     at /usr/src/sys/ddb/db_command.c:575
>> #3  0xffffffff804946bc in db_command (last_cmdp=<optimized out>,     
>> cmd_table=<optimized out>, dopager=1) at 
>> /usr/src/sys/ddb/db_command.c:482
>> #4  0xffffffff8049442d in db_command_loop ()
>>     at /usr/src/sys/ddb/db_command.c:535
>> #5  0xffffffff80497658 in db_trap (type=<optimized out>, 
>> code=<optimized out>)
>>     at /usr/src/sys/ddb/db_main.c:252
>> #6  0xffffffff80c09e27 in kdb_trap (type=3, code=0, tf=<optimized out>)
>>     at /usr/src/sys/kern/subr_kdb.c:692
>> #7  0xffffffff8102de77 in trap (frame=0xfffffe00600dfbe0)
>>     at /usr/src/sys/amd64/amd64/trap.c:585
>> #8  <signal handler called>
>> #9  kdb_enter (why=0xffffffff811d7eaa "panic", msg=<optimized out>)
>>     at /usr/src/sys/kern/subr_kdb.c:479
>> #10 0xffffffff80bbe96a in vpanic (fmt=<optimized out>, ap=<optimized 
>> out>)
>>     at /usr/src/sys/kern/kern_shutdown.c:897
>> #11 0xffffffff80bbe703 in panic (
>>     fmt=0xffffffff81c85638 <cnputs_mtx> "G\320\031\201\377\377\377\377")
>>     at /usr/src/sys/kern/kern_shutdown.c:835
>> #12 0xffffffff80d4484f in arpresolve (ifp=0xfffff8000496b000, is_gw=0, 
>> m=0x0,     dst=0xfffffe00600dfe68, desten=0xfffffe00600dfe50 "", 
>> pflags=0x0, plle=0x0)
>>     at /usr/src/sys/netinet/if_ether.c:628
>> #13 0xffffffff82408243 in addr4_resolve (src_in=0xfffff80007ef5210, 
>>     dst_in=0xfffff80007ef5290, addr=<optimized out>, edst=<optimized 
>> out>,     ifpp=<optimized out>)
>>     at /usr/src/sys/ofed/drivers/infiniband/core/ib_addr.c:401
>> #14 addr_resolve (src_in=0xfffff80007ef5210, 
>> dst_in=0xfffff80007ef5290,     addr=0xfffff80108f20520)
>>     at /usr/src/sys/ofed/drivers/infiniband/core/ib_addr.c:688
>> #15 0xffffffff82407872 in rdma_resolve_ip (
>>     client=0xffffffff82456450 <addr_client>, src_addr=<optimized out>, 
>>     dst_addr=0xfffffe00600e0054, addr=0xfffff80108f20520, 
>> timeout_ms=2000,     callback=0xffffffff82416b40 <addr_handler>, 
>> context=0xfffff80108f20400)
>>     at /usr/src/sys/ofed/drivers/infiniband/core/ib_addr.c:789
>> #16 0xffffffff82416352 in rdma_resolve_addr (id=0xfffff80108f20400, 
>>     src_addr=<optimized out>, dst_addr=0xfffffe00600e0054, 
>> timeout_ms=2000)
>>     at /usr/src/sys/ofed/drivers/infiniband/core/ib_cma.c:3039
>> #17 0xffffffff8243786b in ucma_resolve_ip 
>> (linux_file=0xfffff80135c08400,     inbuf=<optimized out>, 
>> in_len=<optimized out>, out_len=<optimized out>)
>>     at /usr/src/sys/ofed/drivers/infiniband/core/ib_ucma.c:694
>> #18 0xffffffff82436ee4 in ucma_write (filp=<optimized out>,     
>> buf=<optimized out>, len=72, pos=<optimized out>)
>>     at /usr/src/sys/ofed/drivers/infiniband/core/ib_ucma.c:1625
>> #19 0xffffffff823a1ad3 in linux_file_write (file=0xfffff8015403c0a0, 
>>     uio=0xfffffe00600e01c0, active_cred=<optimized out>,     
>> flags=<optimized out>, td=<optimized out>)
>>     at /usr/src/sys/compat/linuxkpi/common/src/linux_compat.c:1445
>> #20 0xffffffff80c2f511 in fo_write (fp=0xfffff8015403c0a0,     
>> uio=0xfffffe00600e01c0, active_cred=0xfffffe00600dfba0, flags=1999, 
>>     td=0xfffff8002e4cf000) at /usr/src/sys/sys/file.h:324
>> #21 dofilewrite (td=0xfffff8002e4cf000, fd=7, fp=0xfffff8015403c0a0, 
>>     auio=0xfffffe00600e01c0, offset=<optimized out>, flags=<optimized 
>> out>)
>>     at /usr/src/sys/kern/sys_generic.c:564
>> #22 0xffffffff80c2f149 in kern_writev (td=0xfffff8002e4cf000, fd=7, 
>>     auio=0xfffffe00600e01c0) at /usr/src/sys/kern/sys_generic.c:491
>> #23 0xffffffff80c2f0f3 in sys_write (td=0xffffffff81c85638 
>> <cnputs_mtx>,     uap=<optimized out>) at 
>> /usr/src/sys/kern/sys_generic.c:406
>> #24 0xffffffff8102ee45 in syscallenter (td=0xfffff8002e4cf000)
>>     at /usr/src/sys/amd64/amd64/../../kern/subr_syscall.c:144
>> #25 amd64_syscall (td=0xfffff8002e4cf000, traced=0)
>>     at /usr/src/sys/amd64/amd64/trap.c:1162

Maybe you could keep arpresolve() w/o need for locking epoch, and then 
create a new function arpresolve_epoched() which has the assert.

--HPS


More information about the svn-src-head mailing list