On 6/2/20 3:48 PM, Andy Shevchenko wrote:
On Tue, Jun 2, 2020 at 5:03 PM Johan Hovold johan@kernel.org wrote:
Commit d6e1935819db ("serial: core: Allow processing sysrq at port unlock time") worked around a circular locking dependency by adding helpers used to defer sysrq processing to when the port lock was released.
A later commit unfortunately converted these inline helpers to exported functions despite the fact that the unlock helper was restoring irq flags, something which needs to be done in the same function that saved them (e.g. on SPARC).
I'm not familiar with sparc, can you elaborate a bit what is ABI / architecture lock implementation background?
I remember that was a limitation a while ago to save/restore flags from the same function. Though, I vaguely remember the reason. I don't see this limitation in Documentation/*
Google suggests that it's related to storage location: https://stackoverflow.com/a/34279032
Which is definitely non-issue with tty drivers: they call spin_lock_irqsave() with local flags and pass them to uart_unlock_and_check_sysrq().
Looking into arch/sparc I also can't catch if it's still a limitation.
Also, looking around, xa_unlock_irqrestore() is called not from the same function. Maybe this issue is in history?
Johan, is it a theoretical problem or something you observe? Also, some comments would be nice near functions in the header.
Thanks, Dmitry