On Wed, Apr 20, 2022 at 10:05:16PM +0800, Pingfan Liu wrote: > irq_desc can be accessed safely in RCU read section as demonstrated by > kstat_irqs_usr(). And raw_spin_lock_irqsave() context can provide a rcu > read section, which can be utilized to get rid of irq_lock_sparse(). > > Signed-off-by: Pingfan Liu <kernelfans@xxxxxxxxx> > Cc: Heiko Carstens <hca@xxxxxxxxxxxxx> > Cc: Vasily Gorbik <gor@xxxxxxxxxxxxx> > Cc: Alexander Gordeev <agordeev@xxxxxxxxxxxxx> > Cc: Christian Borntraeger <borntraeger@xxxxxxxxxxxxx> > Cc: Sven Schnelle <svens@xxxxxxxxxxxxx> > Cc: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > Cc: linux-kernel@xxxxxxxxxxxxxxx > To: linux-s390@xxxxxxxxxxxxxxx > --- > arch/s390/kernel/irq.c | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > diff --git a/arch/s390/kernel/irq.c b/arch/s390/kernel/irq.c > index 3033f616e256..6302dc7874cf 100644 > --- a/arch/s390/kernel/irq.c > +++ b/arch/s390/kernel/irq.c > @@ -205,12 +205,13 @@ static void show_msi_interrupt(struct seq_file *p, int irq) > unsigned long flags; > int cpu; > > - irq_lock_sparse(); > + raw_spin_lock_irqsave(&desc->lock, flags); > desc = irq_to_desc(irq); How is this supposed to work? desc get's initialized after its random stack value has been used as a pointer to lock something...