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