On Wed, Jun 03, 2020 at 10:40:51AM +0200, Johan Hovold wrote: > On Tue, Jun 02, 2020 at 04:34:16PM +0100, Dmitry Safonov wrote: > > On 6/2/20 3:48 PM, Andy Shevchenko wrote: > > > On Tue, Jun 2, 2020 at 5:03 PM Johan Hovold <johan@xxxxxxxxxx> 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/* > > It's described in both LDD3 and LKD, which is possibly where I first > picked it up too (admittedly a long time ago). > > > Google suggests that it's related to storage location: > > https://stackoverflow.com/a/34279032 > > No, that was never the issue. > > SPARC includes the current register window in those flags, which at > least had to be restored in the same stack frame. > > > Looking into arch/sparc I also can't catch if it's still a limitation. > > Yeah, looking closer at the current implementation it seems this is no > longer an issue on SPARC. > > > Also, looking around, xa_unlock_irqrestore() is called not from the same > > function. Maybe this issue is in history? > > xa_unlock_irqrestore() is just a macro for spin_unlock_irqsave() it > seems, so not a counter example. > > > Also, some comments would be nice near functions in the header. > > Agreed. Let me respin this and either merge this with the next patch or > at least amend the commit message. I stand corrected; this appears to longer be an issue (on any arch) as we these days have other common code passing the flags argument around like this. I'll respin. Johan