Bug 6716
Summary: | [8250] Deadlock on SysRQ | ||
---|---|---|---|
Product: | Drivers | Reporter: | Enrico Scholz (enrico.scholz+bugzilla.kernel) |
Component: | Serial | Assignee: | Russell King (rmk) |
Status: | CLOSED PATCH_ALREADY_AVAILABLE | ||
Severity: | normal | CC: | bunk |
Priority: | P2 | ||
Hardware: | i386 | ||
OS: | Linux | ||
Kernel Version: | 2.6.17 | Subsystem: | |
Regression: | --- | Bisected commit-id: |
Description
Enrico Scholz
2006-06-19 07:57:17 UTC
How about this? --- a/drivers/serial/8250.c~serial-8250-sysrq-deadlock-fix +++ a/drivers/serial/8250.c @@ -2254,7 +2254,10 @@ serial8250_console_write(struct console touch_nmi_watchdog(); - if (oops_in_progress) { + if (port->sysrq) { + /* serial8250_handle_port() already took the lock */ + locked = 0; + } else if (oops_in_progress) { locked = spin_trylock_irqsave(&up->port.lock, flags); } else spin_lock_irqsave(&up->port.lock, flags); That should solve it - Enrico, care to test Andrew's patch? Yes; patch works. But whole locking looks somehow unclean; e.g. | receive_chars(struct uart_8250_port *up, int *status, struct pt_regs *regs) | ... | DEBUG_INTR("handling break...."); or manual debug printk's would trigger the deadlock too. But these are debugging situations only which can be probably ignored. A similar fix is in -rc2. Can this bug be closed now? Ping? Please reopen this bug if it's still present in 2.6.18-rc5. |