On Thu, Jun 04, 2020 at 12:41:33PM +0300, Mike Rapoport wrote:
On Wed, Jun 03, 2020 at 04:44:17PM -0700, Guenter Roeck wrote:
sparc32 smp images in next-20200603 still crash for me with a spinlock recursion. s390 images hang early in boot. Several others (alpha, arm64, various ppc) don't even compile. I can run some more bisects over time, but this is becoming a full-time job :-(.
I've been able to bisect s390 hang to commit b614345f52bc ("x86/entry: Clarify irq_{enter,exit}_rcu()").
After this commit, lockdep_hardirq_exit() is called twice on s390 (and others) - one time in irq_exit_rcu() and another one in irq_exit():
/**
- irq_exit_rcu() - Exit an interrupt context without updating RCU
- Also processes softirqs if needed and possible.
*/ void irq_exit_rcu(void) { __irq_exit_rcu(); /* must be last! */ lockdep_hardirq_exit(); }
/**
- irq_exit - Exit an interrupt context, update RCU and lockdep
- Also processes softirqs if needed and possible.
*/ void irq_exit(void) { irq_exit_rcu(); rcu_irq_exit(); /* must be last! */ lockdep_hardirq_exit(); }
Removing the call in irq_exit() make s390 boot again, and judgung by the x86 entry code, the comment /* must be last! */ is stale...
FWIW I got s390 to compile and this patch fixes s390 booting for me as well.
13:05:25 > /home/iweiny/dev/linux-build-test/rootfs/s390/run-qemu-s390.sh Build reference: next-20200603-4-g840714292d8c
Building s390:defconfig:initrd ... running ........... passed Building s390:defconfig:virtio-blk-ccw:rootfs ... running ........... passed Building s390:defconfig:scsi[virtio-ccw]:rootfs ... running .............. passed Building s390:defconfig:virtio-pci:rootfs ... running ........... passed Building s390:defconfig:scsi[virtio-pci]:rootfs ... running ........... passed
Ira
@Peter, @Thomas, can you comment please?
From e51d50ee6f4d1f446decf91c2c67230da14ff82c Mon Sep 17 00:00:00 2001 From: Mike Rapoport rppt@linux.ibm.com Date: Thu, 4 Jun 2020 12:37:03 +0300 Subject: [PATCH] softirq: don't call lockdep_hardirq_exit() twice
After commit b614345f52bc ("x86/entry: Clarify irq_{enter,exit}_rcu()") lockdep_hardirq_exit() is called twice on every architecture that uses irq_exit(): one time in irq_exit_rcu() and another one in irq_exit().
Remove the extra call in irq_exit().
Signed-off-by: Mike Rapoport rppt@linux.ibm.com
kernel/softirq.c | 3 --- 1 file changed, 3 deletions(-)
diff --git a/kernel/softirq.c b/kernel/softirq.c index a3eb6eba8c41..7523f4ce4c1d 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -427,7 +427,6 @@ static inline void __irq_exit_rcu(void) void irq_exit_rcu(void) { __irq_exit_rcu();
lockdep_hardirq_exit();/* must be last! */
}
@@ -440,8 +439,6 @@ void irq_exit(void) { irq_exit_rcu(); rcu_irq_exit();
/* must be last! */
- lockdep_hardirq_exit();
}
/*
2.26.2
Guenter
-- Sincerely yours, Mike.