[v3,2/3] irqchip/loongson-eiointc: Refine irq affinity setting during resume

Message ID 20240118121542.748351-3-maobibo@loongson.cn
State New
Headers
Series irqchip/loongson-eiointc: Refine irq affinity setting during resume |

Commit Message

maobibo Jan. 18, 2024, 12:15 p.m. UTC
  During suspend and resume, CPUs except CPU0 are hot-unpluged and IRQs
are migrated to CPU0. So it is not necessary to restore irq affinity for
eiointc irq controller when system resumes. This patch removes the 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(-)
  

Comments

Huacai Chen Jan. 24, 2024, 9:56 a.m. UTC | #1
I can give an Acked-by if these lines are also removed in our internal repo.

Huacai

On Thu, Jan 18, 2024 at 8:15 PM Bibo Mao <maobibo@loongson.cn> wrote:
>
> During suspend and resume, CPUs except CPU0 are hot-unpluged and IRQs
> are migrated to CPU0. So it is not necessary to restore irq affinity for
> eiointc irq controller when system resumes. This patch removes the 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 6143adb1b73b..86f4faad0695 100644
> --- a/drivers/irqchip/irq-loongson-eiointc.c
> +++ b/drivers/irqchip/irq-loongson-eiointc.c
> @@ -315,23 +315,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
>
  
maobibo Jan. 25, 2024, 1:21 a.m. UTC | #2
My work area is hypervisor and I find gaps between other architectures 
and hypervisors, try to keep up. And We prepare to provide eiointc 
virtualization extension patch, so there is such patch.

For internal repo, you can give suggestion in internal forum to driver 
owner. This is linux kernel mainline forum, I suggest we had better 
discuss patch based on mainline base code.

Regards
Bibo Mao

On 2024/1/24 下午5:56, Huacai Chen wrote:
> I can give an Acked-by if these lines are also removed in our internal repo.
> 
> Huacai
> 
> On Thu, Jan 18, 2024 at 8:15 PM Bibo Mao <maobibo@loongson.cn> wrote:
>>
>> During suspend and resume, CPUs except CPU0 are hot-unpluged and IRQs
>> are migrated to CPU0. So it is not necessary to restore irq affinity for
>> eiointc irq controller when system resumes. This patch removes the 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 6143adb1b73b..86f4faad0695 100644
>> --- a/drivers/irqchip/irq-loongson-eiointc.c
>> +++ b/drivers/irqchip/irq-loongson-eiointc.c
>> @@ -315,23 +315,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
>>
  

Patch

diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c
index 6143adb1b73b..86f4faad0695 100644
--- a/drivers/irqchip/irq-loongson-eiointc.c
+++ b/drivers/irqchip/irq-loongson-eiointc.c
@@ -315,23 +315,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 = {