Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src



Hi,

On Sat, Apr 9, 2016 at 3:21 PM, Taylor R Campbell <riastradh%netbsd.org@localhost> wrote:
> Module Name:    src
> Committed By:   riastradh
> Date:           Sat Apr  9 06:21:17 UTC 2016
>
> Modified Files:
>         src/distrib/sets/lists/comp: mi
>         src/share/man/man9: Makefile pslist.9
>         src/sys/kern: files.kern
> Added Files:
>         src/share/man/man9: psref.9
>         src/sys/kern: subr_psref.c
>         src/sys/sys: psref.h
>
> Log Message:
> Add passive references, intermediate between pserialize and refcount.
>
> Discussed on tech-kern:
>
> https://mail-index.netbsd.org/tech-kern/2016/01/24/msg020069.html
>
> API is still experimental and likely to change.  (Obvious changes:
> either remove extra arguments everywhere, or shrink psref_target to a
> single bit, at the expense of possibly valuable diagnostic checks.)
> Should do some real testing before we use this in anger!

I'm trying to apply psref to bridge(4) and it's mostly done (*).
However, I have an issue; I got a KASSERT failure in psref_held
with the following output (I added thread names to the KASSERTMSG
for debugging):

  panic: kernel diagnostic assertion "(psref->psref_lwp == curlwp)"
failed: file "/home/ozaki-r/git/netbsd-src/sys/kern/subr_psref.c",
line 466 passive reference transferred from lwp 0xfffffe803fd10420
(softnet/0) to lwp 0xfffffe803fd0a020 (xcall/0)
  fatal breakpoint trap in supervisor mode
  trap type 1 code 0 rip ffffffff80114ae5 cs 8 rflags 246 cr2
7f7ff74d1d40 ilevel 4 rsp fffffe8002cafdb0
  curlwp 0xfffffe803fd0a020 pid 0.7 lowest kstack 0xfffffe8002cac2c0
  Stopped in pid 0.7 (system) at  netbsd:breakpoint+0x5:  leave
  db{0}> bt
  breakpoint() at netbsd:breakpoint+0x5
  vpanic() at netbsd:vpanic+0x140
  isp_scsi_channel_init() at netbsd:isp_scsi_channel_init
  psref_held() at netbsd:psref_held+0xf1
  psreffed_p_xc() at netbsd:psreffed_p_xc+0x18
  xc_thread() at netbsd:xc_thread+0xdc

It seems that the assertion depends on a xcall handler
runs on a lwp that holds a reference to a target object,
however, in reality the xcall handler runs on its own lwp.

I think the assertion is invalid and we should get rid of it.
Am I correct?

Thanks,
  ozaki-r

(*) http://www.netbsd.org/~ozaki-r/psref-bridge.diff


Home | Main Index | Thread Index | Old Index