lkml.org 
[lkml]   [2016]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 334/342] x86/irq: Remove outgoing CPU from vector cleanup mask
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Thomas Gleixner <tglx@linutronix.de>

    commit 56d7d2f4bbd00fb198b7907cb3ab657d06115a42 upstream.

    We want to synchronize new vector assignments with a pending cleanup. Remove a
    dying cpu from a pending cleanup mask.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Borislav Petkov <bp@alien8.de>
    Tested-by: Joe Lawrence <joe.lawrence@stratus.com>
    Cc: Jiang Liu <jiang.liu@linux.intel.com>
    Cc: Jeremiah Mahler <jmmahler@gmail.com>
    Cc: andy.shevchenko@gmail.com
    Cc: Guenter Roeck <linux@roeck-us.net>
    Link: http://lkml.kernel.org/r/20151231160107.045961667@linutronix.de
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/kernel/apic/vector.c | 18 ++++++++++++++++--
    1 file changed, 16 insertions(+), 2 deletions(-)

    --- a/arch/x86/kernel/apic/vector.c
    +++ b/arch/x86/kernel/apic/vector.c
    @@ -631,9 +631,23 @@ void irq_complete_move(struct irq_cfg *c
    void irq_force_complete_move(int irq)
    {
    struct irq_cfg *cfg = irq_cfg(irq);
    + struct apic_chip_data *data;

    - if (cfg)
    - __irq_complete_move(cfg, cfg->vector);
    + if (!cfg)
    + return;
    +
    + __irq_complete_move(cfg, cfg->vector);
    +
    + /*
    + * Remove this cpu from the cleanup mask. The IPI might have been sent
    + * just before the cpu was removed from the offline mask, but has not
    + * been processed because the CPU has interrupts disabled and is on
    + * the way out.
    + */
    + raw_spin_lock(&vector_lock);
    + data = container_of(cfg, struct apic_chip_data, cfg);
    + cpumask_clear_cpu(smp_processor_id(), data->old_domain);
    + raw_spin_unlock(&vector_lock);
    }
    #endif
    \
     
     \ /
      Last update: 2016-03-02 01:41    [W:2.854 / U:0.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site