lkml.org 
[lkml]   [2013]   [Jan]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 17/45] softirq: Use get/put_online_cpus_atomic() to prevent CPU offline
    Date
    Once stop_machine() is gone from the CPU offline path, we won't be able to
    depend on preempt_disable() or local_irq_disable() to prevent CPUs from
    going offline from under us.

    Use the get/put_online_cpus_atomic() APIs to prevent CPUs from going offline,
    while invoking from atomic context.

    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    ---

    kernel/softirq.c | 3 +++
    1 file changed, 3 insertions(+)

    diff --git a/kernel/softirq.c b/kernel/softirq.c
    index ed567ba..98c3e27 100644
    --- a/kernel/softirq.c
    +++ b/kernel/softirq.c
    @@ -631,6 +631,7 @@ static void remote_softirq_receive(void *data)

    static int __try_remote_softirq(struct call_single_data *cp, int cpu, int softirq)
    {
    + get_online_cpus_atomic();
    if (cpu_online(cpu)) {
    cp->func = remote_softirq_receive;
    cp->info = cp;
    @@ -638,8 +639,10 @@ static int __try_remote_softirq(struct call_single_data *cp, int cpu, int softir
    cp->priv = softirq;

    __smp_call_function_single(cpu, cp, 0);
    + put_online_cpus_atomic();
    return 0;
    }
    + put_online_cpus_atomic();
    return 1;
    }
    #else /* CONFIG_USE_GENERIC_SMP_HELPERS */


    \
     
     \ /
      Last update: 2013-01-22 13:43    [W:4.231 / U:0.308 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site