On 01/01/15 02:16, Hans Petter Selasky wrote:
On 01/01/15 02:02, Hans Petter Selasky wrote:
On 12/31/14 23:56, Ivan Klymenko wrote:
В Mon, 29 Dec 2014 21:03:24 +0100
Hans Petter Selasky <h...@selasky.org> пишет:


Is your kernel compiled with Witness? Do you see any lock order reversal

Can you do from kgdb:

thread apply all bt

And send me the result off-list?

I'll have a closer look at this tomorrow.

panic: spin lock held too long

Thank you!


I see what is going on. There is an LOR which is not printed because MTX_QUIET is passed when locking inside the callback process routine.

It happens because cv_timedwait() is using callouts() to timeout and callout_drain() is using cv_wait() to wait for draining. This was not so well documented in the old code.

I'll update my patch and send out a new one later today.

I see a room for doing some improvements too:

callout_init(&td->td_slpcallout, CALLOUT_MPSAFE)

Possibly we could use a so-called "DIRECT" callback from the fast IRQ of the timer, when waking up other threads from cv_timedwait(), hence only spinlocks are involved? This would save waking up the callout SWI only to wakeup another thread !

Thank you for testing!

freebsd-current@freebsd.org mailing list
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to