Date: Mon, 29 Mar 2004 20:21:04 -0800 (PST) From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 49938 for review Message-ID: <200403300421.i2U4L4km069069@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=49938 Change 49938 by marcel@marcel_nfs on 2004/03/29 20:20:59 Don't mutilate DELAY() when the debugger is active. If the sole reason for not calling getit() is to avoid locking, then it's infinitely better to just don't lock in getit(). That way DELAY() will at least deliver on its promise to delay. This unbreaks uart(4) when used as a debug port on i386 at low speeds. Affected files ... .. //depot/projects/gdb/sys/i386/isa/clock.c#3 edit Differences ... ==== //depot/projects/gdb/sys/i386/isa/clock.c#3 (text+ko) ==== @@ -403,7 +403,10 @@ { int high, low; - mtx_lock_spin(&clock_lock); +#ifdef KDB + if (!kdb_active) + mtx_lock_spin(&clock_lock); +#endif /* Select timer0 and latch counter value. */ outb(TIMER_MODE, TIMER_SEL0 | TIMER_LATCH); @@ -411,7 +414,11 @@ low = inb(TIMER_CNTR0); high = inb(TIMER_CNTR0); - mtx_unlock_spin(&clock_lock); +#ifdef KDB + if (!kdb_active) + mtx_unlock_spin(&clock_lock); +#endif + return ((high << 8) | low); } @@ -458,12 +465,7 @@ * locking for many reasons, but it calls here for at least atkbd * input. */ -#ifdef KDB - if (kdb_active) - prev_tick = 0; - else -#endif - prev_tick = getit(); + prev_tick = getit(); n -= 0; /* XXX actually guess no initial overhead */ /* * Calculate (n * (timer_freq / 1e6)) without using floating point @@ -490,13 +492,7 @@ / 1000000; while (ticks_left > 0) { -#ifdef KDB - if (kdb_active) { - inb(0x84); - tick = prev_tick + 1; - } else -#endif - tick = getit(); + tick = getit(); #ifdef DELAYDEBUG ++getit_calls; #endif
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200403300421.i2U4L4km069069>