Subject: kern/31917: sadata_upcall_free panics with "putting with none out"
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: None <mlelstv@serpens.de>
List: netbsd-bugs
Date: 10/26/2005 07:18:00
>Number:         31917
>Category:       kern
>Synopsis:       sadata_upcall_free panics with "putting with none out"
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Oct 26 07:18:00 +0000 2005
>Originator:     Michael van Elst
>Release:        NetBSD 3.0_BETA
>Organization:
-- 
                                Michael van Elst
Internet: mlelstv@serpens.de
                                "A potential Snark may lurk in every tree."
>Environment:
	
	
System: NetBSD pepew 3.0_BETA NetBSD 3.0_BETA (PEPEW) #6: Sat Oct 22 19:45:05 CEST 2005 src@pepew:/usr/obj/usr/src/sys/arch/i386/compile/PEPEW i386
Architecture: i386
Machine: i386
>Description:
Sometimes but not always NetBSD 3.0_BETA panics when shutting down. The
panic message says:

pool saupcpl putting with none out
panic: pool_put

The trace shows the following functions on the stack:

pool_do_put
pool_put
sadata_upcall_free
sa_switchcall

The panic occured only since about a week, the bug was possibly
introduced by a pullup on 2005-10-21:

 avoid calling into the pool code while holding sched_lock since both
 pool_get() and pool_put() can call wakeup().  instead, allocate
 the struct sadata_upcall before taking sched_lock in mi_switch()
 and free it after releasing sched_lock.  clean up some modularity
 warts by adding a callback to struct sadata_upcall for freeing
 sa_arg.

>How-To-Repeat:
shutdown a NetBSD 3.0_BETA system.
>Fix:

>Unformatted: