Re: [PATCH 2/3] [BUGFIX] x86/x86_64: fix CPU offlining triggered inactive device IRQ interrruption

Eric W. Biederman
2009-04-11T11:02:09Z

Yinghai Lu <yhlu.kernel@gmail.com> writes:

> commit 932775a4ab622e3c99bd59f14cc7d96722f79501
> Author: venkatesh.pallipadi@intel.com <venkatesh.pallipadi@intel.com>
> Date: Fri Sep 5 18:02:15 2008 -0700
>
> x86: HPET_MSI change IRQ affinity in process context when it is disabled
>
> Change the IRQ affinity in the process context when the IRQ is disabled.
>
> Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
> Signed-off-by: Shaohua Li <shaohua.li@intel.com>
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
>
> diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
> index ddc9568..ad2ce72 100644
> --- a/kernel/irq/manage.c
> +++ b/kernel/irq/manage.c
> @@ -87,10 +87,11 @@ int irq_set_affinity(unsigned int irq, cpumask_t cpumask)
> return -EINVAL;
>
> #ifdef CONFIG_GENERIC_PENDING_IRQ
> - if (desc->status & IRQ_MOVE_PCNTXT) {
> + if (desc->status & IRQ_MOVE_PCNTXT || desc->status & IRQ_DISABLED) {
> unsigned long flags;
>
> spin_lock_irqsave(&desc->lock, flags);
> + desc->affinity = cpumask;
> desc->chip->set_affinity(irq, cpumask);
> spin_unlock_irqrestore(&desc->lock, flags);
> } else

If the goal is moving MSIs, we should modify the msi code to be safe
in process context and to set IRQ_MOVE_PCNTXT.

The only reason we migrate MSIs in interrupt context today is that there
wasn't infrastructure for support migration both in interrupt context
and outside of it.

Eric