During suspend and resume, CPUs except CPU0 can be hot-unpluged and IRQs
will be migrated to CPU0. So it is not necessary to restore irq affinity
for eiointc irq controller when system resumes. This patch removes this
piece of code about irq affinity restoring in function eiointc_resume().
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
---
drivers/irqchip/irq-loongson-eiointc.c | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c
index 6a71a8c29ac7..b64cbe3052e8 100644
--- a/drivers/irqchip/irq-loongson-eiointc.c
+++ b/drivers/irqchip/irq-loongson-eiointc.c
@@ -310,23 +310,7 @@ static int eiointc_suspend(void)
static void eiointc_resume(void)
{
- int i, j;
- struct irq_desc *desc;
- struct irq_data *irq_data;
-
eiointc_router_init(0);
-
- for (i = 0; i < nr_pics; i++) {
- for (j = 0; j < eiointc_priv[0]->vec_count; j++) {
- 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 = 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);
- }
- }
- }
}
static struct syscore_ops eiointc_syscore_ops = {
--
2.39.3
On Tue, Jan 30 2024 at 16:27, Bibo Mao wrote: > During suspend and resume, CPUs except CPU0 can be hot-unpluged and IRQs > will be migrated to CPU0. So it is not necessary to restore irq affinity > for eiointc irq controller when system resumes. That's not the reason. The point is that eiointc_router_init() which is invoked in the resume path affines all interrupts to CPU0, so the restore operation is redundant, no? > This patch removes this piece of code about irq affinity restoring in > function eiointc_resume(). Again. 'This patch' is pointless because we already know that this is a patch, no?
Hi, Thomas, On Tue, Feb 13, 2024 at 5:49 PM Thomas Gleixner <tglx@linutronix.de> wrote: > > On Tue, Jan 30 2024 at 16:27, Bibo Mao wrote: > > During suspend and resume, CPUs except CPU0 can be hot-unpluged and IRQs > > will be migrated to CPU0. So it is not necessary to restore irq affinity > > for eiointc irq controller when system resumes. > > That's not the reason. The point is that eiointc_router_init() which is > invoked in the resume path affines all interrupts to CPU0, so the > restore operation is redundant, no? I'm sorry for the late response but I think this is a little wrong. When irq_migrate_all_off_this_cpu() is called at hot-unplug, if an irqdesc is irqd_affinity_is_managed() then its affinity is untouched (doesn't change to CPU0). Then after resume we should not keep its affinity on CPU0 set by eiointc_router_init() , but need to restore its old affinity. Huacai > > > This patch removes this piece of code about irq affinity restoring in > > function eiointc_resume(). > > Again. 'This patch' is pointless because we already know that this is a > patch, no? >
On Wed, Mar 13 2024 at 14:20, Huacai Chen wrote: > On Tue, Feb 13, 2024 at 5:49 PM Thomas Gleixner <tglx@linutronix.de> wrote: >> >> On Tue, Jan 30 2024 at 16:27, Bibo Mao wrote: >> > During suspend and resume, CPUs except CPU0 can be hot-unpluged and IRQs >> > will be migrated to CPU0. So it is not necessary to restore irq affinity >> > for eiointc irq controller when system resumes. >> >> That's not the reason. The point is that eiointc_router_init() which is >> invoked in the resume path affines all interrupts to CPU0, so the >> restore operation is redundant, no? > I'm sorry for the late response but I think this is a little wrong. > When irq_migrate_all_off_this_cpu() is called at hot-unplug, if an > irqdesc is irqd_affinity_is_managed() then its affinity is untouched > (doesn't change to CPU0). Then after resume we should not keep its > affinity on CPU0 set by eiointc_router_init() , but need to restore > its old affinity. Affinity is restored when the interrupt is started up again, so yes the affinity setting should not be changed.
On Wed, Mar 13, 2024 at 8:39 PM Thomas Gleixner <tglx@linutronix.de> wrote: > > On Wed, Mar 13 2024 at 14:20, Huacai Chen wrote: > > On Tue, Feb 13, 2024 at 5:49 PM Thomas Gleixner <tglx@linutronix.de> wrote: > >> > >> On Tue, Jan 30 2024 at 16:27, Bibo Mao wrote: > >> > During suspend and resume, CPUs except CPU0 can be hot-unpluged and IRQs > >> > will be migrated to CPU0. So it is not necessary to restore irq affinity > >> > for eiointc irq controller when system resumes. > >> > >> That's not the reason. The point is that eiointc_router_init() which is > >> invoked in the resume path affines all interrupts to CPU0, so the > >> restore operation is redundant, no? > > I'm sorry for the late response but I think this is a little wrong. > > When irq_migrate_all_off_this_cpu() is called at hot-unplug, if an > > irqdesc is irqd_affinity_is_managed() then its affinity is untouched > > (doesn't change to CPU0). Then after resume we should not keep its > > affinity on CPU0 set by eiointc_router_init() , but need to restore > > its old affinity. > > Affinity is restored when the interrupt is started up again, so yes the > affinity setting should not be changed. OK, thanks. Huacai
Hi Thomas, On 2024/2/13 下午5:49, Thomas Gleixner wrote: > On Tue, Jan 30 2024 at 16:27, Bibo Mao wrote: >> During suspend and resume, CPUs except CPU0 can be hot-unpluged and IRQs >> will be migrated to CPU0. So it is not necessary to restore irq affinity >> for eiointc irq controller when system resumes. > > That's not the reason. The point is that eiointc_router_init() which is > invoked in the resume path affines all interrupts to CPU0, so the > restore operation is redundant, no? yes, it is. eiointc_router_init() will enable the irqs and affine all interrupts to CPU0. And it is redundant, the aim of deleted code wants to resume older interrupt affinity when executing "echo mem > /sys/power/state". > >> This patch removes this piece of code about irq affinity restoring in >> function eiointc_resume(). > > Again. 'This patch' is pointless because we already know that this is a > patch, no? Thanks for your kindly help, English is somewhat difficult for me :) Regards Bibo Mao
The following commit has been merged into the irq/core branch of tip:
Commit-ID: 83c0708719f77018cd3b98b0011c9526a3e0e2ca
Gitweb: https://git.kernel.org/tip/83c0708719f77018cd3b98b0011c9526a3e0e2ca
Author: Bibo Mao <maobibo@loongson.cn>
AuthorDate: Tue, 30 Jan 2024 16:27:22 +08:00
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitterDate: Tue, 13 Feb 2024 10:53:14 +01:00
irqchip/loongson-eiointc: Remove explicit interrupt affinity restore on resume
During suspend all CPUs except CPU0 are hot-unpluged and all active
interrupts are migrated to CPU0.
On resume eiointc_router_init() affines all interrupts to CPU0, so the
subsequent explicit interrupt affinity restore is redundant.
Remove it.
[ tglx: Rewrote changelog ]
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20240130082722.2912576-4-maobibo@loongson.cn
---
drivers/irqchip/irq-loongson-eiointc.c | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c
index fad22e2..405f622 100644
--- a/drivers/irqchip/irq-loongson-eiointc.c
+++ b/drivers/irqchip/irq-loongson-eiointc.c
@@ -310,23 +310,7 @@ static int eiointc_suspend(void)
static void eiointc_resume(void)
{
- int i, j;
- struct irq_desc *desc;
- struct irq_data *irq_data;
-
eiointc_router_init(0);
-
- for (i = 0; i < nr_pics; i++) {
- for (j = 0; j < eiointc_priv[0]->vec_count; j++) {
- 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 = 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);
- }
- }
- }
}
static struct syscore_ops eiointc_syscore_ops = {
© 2016 - 2025 Red Hat, Inc.