Commit 810b4de2 authored by Larry Finger's avatar Larry Finger Committed by Benjamin Herrenschmidt

tty/serial/pmac_zilog: Fix "nobody cared" IRQ message

Following commit a79dd5ae titled "tty/serial/pmac_zilog: Fix suspend & resume",
my Powerbook G4 Titanium showed the following stack dump:

[   36.878225] irq 23: nobody cared (try booting with the "irqpoll" option)
[   36.878251] Call Trace:
[   36.878291] [dfff3f00] [c000984c] show_stack+0x7c/0x194 (unreliable)
[   36.878322] [dfff3f40] [c00a6868] __report_bad_irq+0x44/0xf4
[   36.878339] [dfff3f60] [c00a6b04] note_interrupt+0x1ec/0x2ac
[   36.878356] [dfff3f80] [c00a48d0] handle_irq_event_percpu+0x250/0x2b8
[   36.878372] [dfff3fd0] [c00a496c] handle_irq_event+0x34/0x54
[   36.878389] [dfff3fe0] [c00a753c] handle_fasteoi_irq+0xb4/0x124
[   36.878412] [dfff3ff0] [c000f5bc] call_handle_irq+0x18/0x28
[   36.878428] [deef1f10] [c000719c] do_IRQ+0x114/0x1cc
[   36.878446] [deef1f40] [c0015868] ret_from_except+0x0/0x1c
[   36.878484] --- Exception: 501 at 0xf497610
[   36.878489]     LR = 0xfdc3dd0
[   36.878497] handlers:
[   36.878510] [<c02b7424>] pmz_interrupt
[   36.878520] Disabling IRQ #23

From an E-mail exchange about this problem, Andreas Schwab noticed a typo
that resulted in the wrong condition being tested.

The patch also corrects 2 typos that incorrectly report why an error branch
is being taken.
Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent e49f7a99
...@@ -469,7 +469,7 @@ static irqreturn_t pmz_interrupt(int irq, void *dev_id) ...@@ -469,7 +469,7 @@ static irqreturn_t pmz_interrupt(int irq, void *dev_id)
tty = NULL; tty = NULL;
if (r3 & (CHAEXT | CHATxIP | CHARxIP)) { if (r3 & (CHAEXT | CHATxIP | CHARxIP)) {
if (!ZS_IS_OPEN(uap_a)) { if (!ZS_IS_OPEN(uap_a)) {
pmz_debug("ChanA interrupt while open !\n"); pmz_debug("ChanA interrupt while not open !\n");
goto skip_a; goto skip_a;
} }
write_zsreg(uap_a, R0, RES_H_IUS); write_zsreg(uap_a, R0, RES_H_IUS);
...@@ -493,8 +493,8 @@ static irqreturn_t pmz_interrupt(int irq, void *dev_id) ...@@ -493,8 +493,8 @@ static irqreturn_t pmz_interrupt(int irq, void *dev_id)
spin_lock(&uap_b->port.lock); spin_lock(&uap_b->port.lock);
tty = NULL; tty = NULL;
if (r3 & (CHBEXT | CHBTxIP | CHBRxIP)) { if (r3 & (CHBEXT | CHBTxIP | CHBRxIP)) {
if (!ZS_IS_OPEN(uap_a)) { if (!ZS_IS_OPEN(uap_b)) {
pmz_debug("ChanB interrupt while open !\n"); pmz_debug("ChanB interrupt while not open !\n");
goto skip_b; goto skip_b;
} }
write_zsreg(uap_b, R0, RES_H_IUS); write_zsreg(uap_b, R0, RES_H_IUS);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment