#include <asm/irq.h>
#include "8250.h"
-#ifdef CONFIG_KDB
#include <linux/kdb.h>
+#ifdef CONFIG_KDB
/*
* kdb_serial_line records the serial line number of the first serial console.
* NOTE: The kernel ignores characters on the serial line unless a user space
if ((up->port.line == kdb_serial_line) && kdb_on == 1) {
if (ch == *kdb_serial_ptr) {
if (!(*++kdb_serial_ptr)) {
+ atomic_inc(&kdb_8250);
kdb(KDB_REASON_KEYBOARD, 0, regs);
+ atomic_dec(&kdb_8250);
kdb_serial_ptr = kdb_serial_str;
break;
}
if (up->port.sysrq) {
/* serial8250_handle_port() already took the lock */
locked = 0;
- } else if (oops_in_progress) {
+ } else if (oops_in_progress || KDB_8250()) {
locked = spin_trylock(&up->port.lock);
} else
spin_lock(&up->port.lock);
* number whenever the kernel debugger is entered.
*/
extern volatile int kdb_initial_cpu;
+extern atomic_t kdb_event;
+extern atomic_t kdb_8250;
#ifdef CONFIG_KDB
#define KDB_IS_RUNNING() (kdb_initial_cpu != -1)
+#define KDB_8250() (atomic_read(&kdb_8250) != 0)
#else
#define KDB_IS_RUNNING() (0)
+#define KDB_8250() (0)
#endif /* CONFIG_KDB */
-extern atomic_t kdb_event;
/*
* kdb_on
+2006-08-04 Keith Owens <kaos@sgi.com>
+
+ * kdb v4.4-2.6.18-rc3-common-1.
+
+2006-07-18 Keith Owens <kaos@sgi.com>
+
+ * 8250.c locking has been fixed so there is no need to break spinlocks
+ for keyboard entry.
+ * kdb v4.4-2.6.18-rc2-common-2.
+
+2006-07-18 Keith Owens <kaos@sgi.com>
+
+ * kdb v4.4-2.6.18-rc2-common-1.
+
2006-07-12 Keith Owens <kaos@sgi.com>
* Remove dead KDB_REASON codes.
*/
volatile int kdb_flags;
atomic_t kdb_event;
+atomic_t kdb_8250;
/*
* kdb_lock protects updates to kdb_initial_cpu. Used to
case KDB_REASON_NMI:
KDB_FLAG_SET(CATASTROPHIC); /* kernel state is dubious now */
break;
- case KDB_REASON_KEYBOARD:
- bust_spinlocks(1);
- break;
default:
break;
}
sc->device, sc->list.next, sc->done);
kdb_printf("serial_number = %ld retries = %d\n",
sc->serial_number, sc->retries);
- kdb_printf("cmd_len = %d\n",
- sc->cmd_len);
+ kdb_printf("cmd_len = %d\n", sc->cmd_len);
kdb_printf("cmnd = [%2.2x/%2.2x/%2.2x/%2.2x/%2.2x/%2.2x/%2.2x/%2.2x/%2.2x/%2.2x/%2.2x/%2.2x]\n",
sc->cmnd[0], sc->cmnd[1], sc->cmnd[2], sc->cmnd[3], sc->cmnd[4],
sc->cmnd[5], sc->cmnd[6], sc->cmnd[7], sc->cmnd[8], sc->cmnd[9],
sc->cmnd[10], sc->cmnd[11]);
kdb_printf("request_buffer = 0x%p request_bufflen = %d\n",
sc->request_buffer, sc->request_bufflen);
- kdb_printf("use_sg = %d sglist_len = %d\n",
+ kdb_printf("use_sg = %d sglist_len = %d\n",
sc->use_sg, sc->sglist_len);
kdb_printf("underflow = %d transfersize = %d\n",
sc->underflow, sc->transfersize);