[irqchip: irq/irqchip-next] irqchip/loongson-eiointc: Fix irq affinity setting during resume

From: irqchip-bot for Jianmin Lv
Date: Fri Jun 16 2023 - 08:03:16 EST


The following commit has been merged into the irq/irqchip-next branch of irqchip:

Commit-ID: fb07b8f83441febeb0daf199b5f18c6de9bbab03
Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/fb07b8f83441febeb0daf199b5f18c6de9bbab03
Author: Jianmin Lv <lvjianmin@xxxxxxxxxxx>
AuthorDate: Wed, 14 Jun 2023 19:59:36 +08:00
Committer: Marc Zyngier <maz@xxxxxxxxxx>
CommitterDate: Fri, 16 Jun 2023 12:59:28 +01:00

irqchip/loongson-eiointc: Fix irq affinity setting during resume

The hierarchy of PCH PIC, PCH PCI MSI and EIONTC is as following:

PCH PIC ------->|
|---->EIOINTC
PCH PCI MSI --->|

so the irq_data list of irq_desc for IRQs on PCH PIC and PCH PCI MSI
is like this:

irq_desc->irq_data(domain: PCH PIC)->parent_data(domain: EIOINTC)
irq_desc->irq_data(domain: PCH PCI MSI)->parent_data(domain: EIOINTC)

In eiointc_resume(), the irq_data passed into eiointc_set_irq_affinity()
should be matched to EIOINTC domain instead of PCH PIC or PCH PCI MSI
domain, so fix it.

Fixes: a90335c2dfb4 ("irqchip/loongson-eiointc: Add suspend/resume support")

Reported-by: yangqiming <yangqiming@xxxxxxxxxxx>
Signed-off-by: Jianmin Lv <lvjianmin@xxxxxxxxxxx>
Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx>
Link: https://lore.kernel.org/r/20230614115936.5950-6-lvjianmin@xxxxxxxxxxx
---
drivers/irqchip/irq-loongson-eiointc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c
index 71ef19f..a7fcde3 100644
--- a/drivers/irqchip/irq-loongson-eiointc.c
+++ b/drivers/irqchip/irq-loongson-eiointc.c
@@ -314,7 +314,7 @@ static void eiointc_resume(void)
desc = irq_resolve_mapping(eiointc_priv[i]->eiointc_domain, j);
if (desc && desc->handle_irq && desc->handle_irq != handle_bad_irq) {
raw_spin_lock(&desc->lock);
- irq_data = &desc->irq_data;
+ irq_data = irq_domain_get_irq_data(eiointc_priv[i]->eiointc_domain, irq_desc_get_irq(desc));
eiointc_set_irq_affinity(irq_data, irq_data->common->affinity, 0);
raw_spin_unlock(&desc->lock);
}