On 8/1/12, Attilio Rao <atti...@freebsd.org> wrote:
> On 8/1/12, John Baldwin <j...@freebsd.org> wrote:
>> On Tuesday, July 31, 2012 4:51:19 pm Attilio Rao wrote:
>>> On 7/31/12, John Baldwin <j...@freebsd.org> wrote:
>>> > On Thursday, July 19, 2012 7:58:14 pm Sean Bruno wrote:
>>> >> Working on the Dell R420 today, got most of it working, even the
>>> >> broadcom ethernet cards!  However, I get the following when I reboot
>>> >> the
>>> >> system:
>>> >>
>>> >> Syncing disks, vnodes remaining...4 Sleeping thread (tid 100107, pid
>>> >> 9)
>>> >> owns a non-sleepable lock
>>> >> KDB: stack backtrace of thread 100107:
>>> >> sched_switch() at sched_switch+0x19f
>>> >> mi_switch() at mi_switch+0x208
>>> >> sleepq_switch() at sleepq_switch+0xfc
>>> >> sleepq_wait() at sleepq_wait+0x4d
>>> >> _sleep() at _sleep+0x3f6
>>> >> ipmi_submit_driver_request() at ipmi_submit_driver_request+0x97
>>> >> ipmi_set_watchdog() at ipmi_set_watchdog+0xb1
>>> >> ipmi_wd_event() at ipmi_wd_event+0x8f
>>> >> kern_do_pat() at kern_do_pat+0x10f
>>> >> sched_sync() at sched_sync+0x1ea
>>> >> fork_exit() at fork_exit+0x135
>>> >> fork_trampoline() at fork_trampoline+0xe
>>> >
>>> > Hmmm, the watchdog pat should probably happen without holding locks if
>>> > possible.  This is related to the IPMI watchdog being special and
>>> > wanting
>>> > to schedule a thread to work.
>>>
>>> The watchdog pat without the locks is not easy to do because we
>>> register the watchdog callbacks in eventhandlers, which are indeed
>>> locked (and you may also end up racing against watchdog detach, if you
>>> don't use any lock at all).
>>
>> No, eventhandlers go through several hoops to not hold any locks while
>> the eventhandler functions are running.  It seems in this case that a
>> lock is held in a higher layer (sched_sync()) and that is what I was
>> talking about.  Yes, it is the 'sync_mtx' that is held.  Something like
>> this
>
> No, EVENTHANDLER_INVOKE() acquires eventhandler internal locks.
> Look at eventhandler_find_list() for details.

Oh, but I guess you misunderstood me -- I didn't mean to say that
eventhandler callbacks run with eventhandlers lock held, I meant to
say that that it would be nice if EVENTHANDLER_INVOKE() could run
lockless. This would have avoided some issues in special context (I
recall I had some issues at work years ago, but they could have been
predating the STOP_SCHEDULER() patch and in DDB).

Attilio


-- 
Peace can only be achieved by understanding - A. Einstein
_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

Reply via email to