On Fri, Apr 25, 2008 at 05:12:12PM +0300, Andriy Gapon wrote: > on 25/04/2008 12:50 Kostik Belousov said the following: > >Did you run this with WITNESS ? > > > >You put the whole devctl_notify() call under the dev_mtx. This includes > >the malloc(), PROC_LOCK() and signalling, and some internal devctl_queue() > >stuff. This is wrong. > > Kostik, > > I tried this patch only with my working (non-debug) configuration. > I will try with WITNESS. > You think that acquiring all those locks while holding dev_mtx is bad? > I can try to place devctl_notify calls in make_dev_credv, make_dev_alias > and destroy_dev. The problem that I see is that destroy_devl ('l' at the > end) calls itself recursively for child devices, this is all done under > dev_mtx. So I am not sure how to call devctl_notify for those child > devices properly. The malloc and free cannot be called while holding dev_mtx, this causes the LORs. Please, look at the rev. 1.207, 1.210 of the kern/kern_conf.c for the workarounds for the malloc issues. It seems that you may abuse the dev_unlock_and_free() to make the notifications.
Also, I think it is wrong to establish the lock ordering relations between the process subsystem and cdev.
pgpJBNAAZsbKA.pgp
Description: PGP signature