Hi, On 2016/02/10 1:07, Taylor R Campbell wrote: > Date: Tue, 9 Feb 2016 20:33:51 +0900 > From: Kengo NAKAHARA <k-nakah...@iij.ad.jp> > > Is "target->prt_draining = false;" required at the end of > psref_target_drain()? > Or, shouldn't psref_target_drain() be called twice? > My kernel paniced with the following message. > ==================== > kernel diagnostic assertion "!target->prt_draining" failed: file > "sys/kern/subr_psref.c", line 395 > ==================== > > You shouldn't call psref_target_drain twice, unless you have already > called psref_target_destroy and psref_target_init again. You should: > > 1. Guarantee that no new references can be made. For example, remove > the object in question from a list. > > 2. Call psref_target_drain (once) to wait for existing references to > drain. > > 3. Call psref_target_destroy to destroy the psref target.
Thank you for your kind answer. I tried to use passive reference for a encaptab list itself instead of pserialize_read_enter(). # As you know, packet processing path encap4_lookup() can sleep at # ep->func. I try to reuse psref for the encaptab list itself, however that must not be a normal usage, I see. > See the updated example I gave here for illustration: > <https://mail-index.netbsd.org/tech-kern/2016/02/09/msg020184.html>. I have not read the mail only a little. I read it closer. Thanks, -- ////////////////////////////////////////////////////////////////////// Internet Initiative Japan Inc. Device Engineering Section, Core Product Development Department, Product Division, Technology Unit Kengo NAKAHARA <k-nakah...@iij.ad.jp>