2021-08-16 16:25:19

by Ulrich Hecht

[permalink] [raw]
Subject: [PATCH] serial: sh-sci: fix break handling for sysrq

This fixes two issues that cause the sysrq sequence to be inadvertently
aborted on SCIF serial consoles:

- a NUL character remains in the RX queue after a break has been detected,
which is then passed on to uart_handle_sysrq_char()
- the break interrupt is handled twice on controllers with multiplexed ERI
and BRI interrupts

Signed-off-by: Ulrich Hecht <[email protected]>
---
drivers/tty/serial/sh-sci.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 07eb56294371..89ee43061d3a 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -1758,6 +1758,10 @@ static irqreturn_t sci_br_interrupt(int irq, void *ptr)

/* Handle BREAKs */
sci_handle_breaks(port);
+
+ /* drop invalid character received before break was detected */
+ serial_port_in(port, SCxRDR);
+
sci_clear_SCxSR(port, SCxSR_BREAK_CLEAR(port));

return IRQ_HANDLED;
@@ -1837,7 +1841,8 @@ static irqreturn_t sci_mpxed_interrupt(int irq, void *ptr)
ret = sci_er_interrupt(irq, ptr);

/* Break Interrupt */
- if ((ssr_status & SCxSR_BRK(port)) && err_enabled)
+ if (s->irqs[SCIx_ERI_IRQ] != s->irqs[SCIx_BRI_IRQ] &&
+ (ssr_status & SCxSR_BRK(port)) && err_enabled)
ret = sci_br_interrupt(irq, ptr);

/* Overrun Interrupt */
--
2.20.1


2021-08-23 09:18:46

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: [PATCH] serial: sh-sci: fix break handling for sysrq

On Mon, Aug 16, 2021 at 6:22 PM Ulrich Hecht <[email protected]> wrote:
> This fixes two issues that cause the sysrq sequence to be inadvertently
> aborted on SCIF serial consoles:
>
> - a NUL character remains in the RX queue after a break has been detected,
> which is then passed on to uart_handle_sysrq_char()
> - the break interrupt is handled twice on controllers with multiplexed ERI
> and BRI interrupts
>
> Signed-off-by: Ulrich Hecht <[email protected]>

FTR:
Reviewed-by: Geert Uytterhoeven <[email protected]>

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2021-09-09 14:37:27

by Wolfram Sang

[permalink] [raw]
Subject: Re: [PATCH] serial: sh-sci: fix break handling for sysrq

On Mon, Aug 16, 2021 at 06:22:01PM +0200, Ulrich Hecht wrote:
> This fixes two issues that cause the sysrq sequence to be inadvertently
> aborted on SCIF serial consoles:
>
> - a NUL character remains in the RX queue after a break has been detected,
> which is then passed on to uart_handle_sysrq_char()
> - the break interrupt is handled twice on controllers with multiplexed ERI
> and BRI interrupts
>
> Signed-off-by: Ulrich Hecht <[email protected]>

For the record:

Tested-by: Wolfram Sang <[email protected]>


Attachments:
(No filename) (556.00 B)
signature.asc (849.00 B)
Download all attachments