Re: [irqchip: irq/irqchip-next] irqdomain: Protect the linear revmap with RCU

From: Guenter Roeck
Date: Mon Jul 05 2021 - 14:23:36 EST


Hi Marc,

On 7/5/21 11:01 AM, Marc Zyngier wrote:
Hi Guenter,

On Mon, 05 Jul 2021 18:23:52 +0100,
Guenter Roeck <linux@xxxxxxxxxxxx> wrote:

Hi,

On Fri, Jun 11, 2021 at 01:54:36PM -0000, irqchip-bot for Marc Zyngier wrote:
The following commit has been merged into the irq/irqchip-next branch of irqchip:

Commit-ID: d4a45c68dc81f9117ceaff9f058d5fae674181b9
Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/d4a45c68dc81f9117ceaff9f058d5fae674181b9
Author: Marc Zyngier <maz@xxxxxxxxxx>
AuthorDate: Mon, 05 Apr 2021 12:57:27 +01:00
Committer: Marc Zyngier <maz@xxxxxxxxxx>
CommitterDate: Thu, 10 Jun 2021 13:09:18 +01:00

irqdomain: Protect the linear revmap with RCU

It is pretty odd that the radix tree uses RCU while the linear
portion doesn't, leading to potential surprises for the users,
depending on how the irqdomain has been created.

Fix this by moving the update of the linear revmap under
the mutex, and the lookup under the RCU read-side lock.

The mutex name is updated to reflect that it doesn't only
cover the radix-tree anymore.

Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx>

This patch results in various RCU warnings when booting mipsel images
in qemu. I can not revert the patch due to subsequent changes, so I
don't know if a simple revert fixes the problem. Log messages and
bisect log see below.

Thanks for the heads up. Do you have a config file I can use to
reproduce this? The QEMU invocation runes would certainly help too.

It strikes me that in drivers/irqchip/irq-mips-cpu.c,
plat_irq_dispatch() now uses the irqdomain resolution before
irq_enter() took place. That's certainly a latent bug. I'll fix that
regardless, but I'd like to make sure this is what you are seeing too.


See http://server.roeck-us.net/qemu/mipsel/

config Complete configuration file
defconfig Shortened configuration file
rootfs.cpio root file system (initrd)
run.sh qemu run script (tested with qemu 4.2.1 and 6.0.0)
vmlinux Kernel image experiencing the problem (v5.13-9883-gaf9efb8b661)

Hope this helps,
Guenter