Thread (28 messages) 28 messages, 5 authors, 2021-10-02

Re: [PATCH 2/3] irqchip: SigmaStar SSD20xD gpi

From: Daniel Palmer <hidden>
Date: 2021-09-21 06:11:48
Also in: linux-arm-kernel

Hi Marc,

Sorry for the constant email.

On Mon, 20 Sept 2021 at 20:24, Marc Zyngier [off-list ref] wrote:
On Mon, 20 Sep 2021 11:05:26 +0100,
Daniel Palmer [off-list ref] wrote:
quoted
Hi Marc,

On Mon, 20 Sept 2021 at 18:45, Marc Zyngier [off-list ref] wrote:
quoted
quoted
+static void ssd20xd_gpi_unmask_irq(struct irq_data *data)
+{
+     irq_hw_number_t hwirq = irqd_to_hwirq(data);
+     struct ssd20xd_gpi *gpi = irq_data_get_irq_chip_data(data);
+     int offset_reg = REG_OFFSET(hwirq);
+     int offset_bit = BIT_OFFSET(hwirq);
+
+     regmap_update_bits(gpi->regmap, REG_MASK + offset_reg, offset_bit, 0);
Is this regmap call atomic? When running this, you are holding a
raw_spinlock already. From what I can see, this is unlikely to work
correctly with the current state of regmap.
I didn't even think about it. I will check.
You may want to enable lockdep to verify that.
After some research I think this can be solved by adding
".use_raw_spinlock = true" to the regmap config to force using a
raw_spinlock instead of the default spinlock.
This avoids having a spinlock inside of a raw_spinlock.

lockdep doesn't actually complain about this currently but another
interrupt controller driver I have uses a syscon because the interrupt
registers are mixed in with unrelated stuff.
lockdep is complaining about the spinlock inside of a raw_spinlock
there. So I guess I'll need to add a new DT property for syscon to use
raw_spinlocks for that driver.

Cheers,

Daniel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help