Re: USB polling (75% done)

From: Andriy Gapon <avg_at_icyb.net.ua>
Date: Fri, 24 Jul 2009 15:39:45 +0300
on 23/07/2009 21:23 Maksim Yevmenkin said the following:
> On Tue, Jul 21, 2009 at 5:20 AM, Hans Petter Selasky<hselasky_at_c2i.net> wrote:
>> On Monday 20 July 2009 23:51:41 Alfred Perlstein wrote:
>>> * Hans Petter Selasky <hselasky_at_c2i.net> [090715 13:37] wrote:
...
>>>> Using USB keyboard in KDB: Does not work because Giant is not locked when
>>>> calling into the UKBD's get char routine. UKBD is Giant locked. Someone
>>>> familiar with the keyboard system on FreeBSD please step forward and fix
>>>> this so that UKBD gets independent of the Giant mutex.
>>> the ukbd driver needs giant?
>> I think the keyboard mux is under Giant, and does not have any concept about
>> mutexes. Most simple solution would be that DDB locks Giant before entering
>> into the keyboard code.
> 
> as i understand it, keyboard drivers (and kbdmux(4) is a keyboard
> driver), can/should not use any locks. period. so whatever calls into
> keyboard driver should take care of locking.

Maybe I am missing something but I do not see any explicit locking or lock
assertions in kbdmux code. All lock defines are under #if 0.

kbdmux does use taskqueue_swi_giant though. Tasks are queued on it in
kbdmux_kbd_intr_timo (periodic callout) and in kbdmux_kbd_event (kbd callback).

But, these shouldn't get called in polling mode, right? (because there shouldn't
be any interrupts)

Maybe Giant asserts in ukbd are not needed?
Or should be asserted only in "normal" mode?


P.S. I am far from knowing this area, just got curious.

-- 
Andriy Gapon
Received on Fri Jul 24 2009 - 10:39:52 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:52 UTC