svn commit: r195960 - in head/sys/dev/usb: . controller input
rwatson at FreeBSD.org
Mon Aug 3 09:57:21 UTC 2009
On Mon, 3 Aug 2009, Hans Petter Selasky wrote:
> On Monday 03 August 2009 10:28:38 Ed Schouten wrote:
>> * Robert Watson <rwatson at FreeBSD.org> wrote:
>>> I'm a bit surprised the timed key repeat in this patch would work properly
>>> in DDB, as microtime(9) relies on interrupts firing for updated
>>> timestamps. The availability of interrupts for polled input consumers
>>> varies, but in general this is not true (for example) at the DDB command
>>> prompt. Does this code work correctly when time stands still?
>> Apart from that, who gives a *beep* about keyboard repeat while inside the
>> debugger. I have to confess it would be irritating to press backspace
>> multiple times, instead of holding the key pressed, but still, it's not
>> worth it.
> I think getmicrotime relies on interrupts, while microtime doesn't.
> See "man microtime".
You're right, but that doesn't make things better :-). Some of the
tc_get_timecount() calls are safe in the DDB environment, but several are not.
In particular, tick_get_timecount_mp() and i8254_get_timecount() both acquire
locks, the former the thread scheduler lock, and the latter a dedicated
spinlock. This produces the opportunity for rather nasty deadlocks in DDB,
especially tick_get_timecount_mp() on sparc64.
This was the bug I was actually looking for in your patch, but then misread
microtime() and concluded you had a different one. :-) I would much rather
not have DDB rely on, for example, not contending thread_lock(), than have key
repeat in DDB.
Robert N M Watson
University of Cambridge
More information about the svn-src-all