Re: [RFC 0/5] Introduce NMI aware serial drivers
From: Doug Anderson <dianders@chromium.org>
Date: 2020-08-13 15:26:56
Also in:
linux-serial, lkml
Hi, On Thu, Aug 13, 2020 at 2:25 AM Sumit Garg [off-list ref] wrote:
quoted
One other idea occurred to me that's maybe simpler. You could in theory just poll the serial port periodically to accomplish. It would actually probably even work to call the normal serial port interrupt routine from any random CPU. On many serial drivers the entire interrupt handler is wrapped with: spin_lock_irqsave(&uap->port.lock, flags); ... spin_unlock_irqrestore(&uap->port.lock, flags); And a few (the ones I was involved in fixing) have the similar pattern of using uart_unlock_and_check_sysrq(). Any serial drivers following this pattern could have their interrupt routine called periodically just to poll for characters and it'd be fine, right? ...and having it take a second before a sysrq comes in this case is probably not the end of the world?Are you proposing to have complete RX operation in polling mode with RX interrupt disabled (eg. using a kernel thread)?
No, I'm suggesting a hybrid approach. Leave the interrupts enabled as usual, but _also_ poll every 500 ms or 1 second (maybe make it configurable?). In some serial drivers (ones that hold the lock for the whole interrupt routine) this polling function could actually be the same as the normal interrupt handler so it'd be trivially easy to implement and maintain. NOTE: This is not the same type of polling that kgdb does today. The existing polling is really only intended to work when we're dropped into the debugger. This would be more like a "poll_irq" type function that would do all the normal work the interrupt did and is really just there in the case that the CPU that the interrupt is routed to is locked up.
quoted
One nice benefit of this is that it would actually work _better_ on SMP systems for any sysrqs that aren't NMI safe. Specifically with your patch series those would be queued with irq_work_queue() which means they'd be blocked if the CPU processing the NMI is stuck with IRQs disabled.Yes, the sysrq handlers which aren't NMI safe will behave similarly to existing IRQ based sysrq handlers.quoted
With the polling mechanism they'd nicely just run on a different CPU.It looks like polling would cause much CPU overhead. So I am not sure if that is the preferred approach.
Maybe now it's clearer that there should be almost no overhead. When dealing with a SYSRQ it's fine if there's a bit of a delay before it's processed, so polling every 1 second is probably fine. -Doug _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel