Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754841Ab3F0UAS (ORCPT ); Thu, 27 Jun 2013 16:00:18 -0400 Received: from e28smtp01.in.ibm.com ([122.248.162.1]:49392 "EHLO e28smtp01.in.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754778Ab3F0UAN (ORCPT ); Thu, 27 Jun 2013 16:00:13 -0400 From: "Srivatsa S. Bhat" Subject: [PATCH v3 24/45] infiniband: ehca: Use get/put_online_cpus_atomic() to prevent CPU offline To: tglx@linutronix.de, peterz@infradead.org, tj@kernel.org, oleg@redhat.com, paulmck@linux.vnet.ibm.com, rusty@rustcorp.com.au, mingo@kernel.org, akpm@linux-foundation.org, namhyung@kernel.org, walken@google.com, vincent.guittot@linaro.org, laijs@cn.fujitsu.com, David.Laight@aculab.com Cc: rostedt@goodmis.org, wangyun@linux.vnet.ibm.com, xiaoguangrong@linux.vnet.ibm.com, sbw@mit.edu, fweisbec@gmail.com, zhong@linux.vnet.ibm.com, nikunj@linux.vnet.ibm.com, srivatsa.bhat@linux.vnet.ibm.com, linux-pm@vger.kernel.org, linux-arch@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Hoang-Nam Nguyen , Christoph Raisch , Roland Dreier , Sean Hefty , Hal Rosenstock , linux-rdma@vger.kernel.org, "Srivatsa S. Bhat" Date: Fri, 28 Jun 2013 01:26:48 +0530 Message-ID: <20130627195648.29830.64721.stgit@srivatsabhat.in.ibm.com> In-Reply-To: <20130627195136.29830.10445.stgit@srivatsabhat.in.ibm.com> References: <20130627195136.29830.10445.stgit@srivatsabhat.in.ibm.com> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13062719-4790-0000-0000-00000902E029 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2270 Lines: 69 Once stop_machine() is gone from the CPU offline path, we won't be able to depend on disabling preemption 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: Hoang-Nam Nguyen Cc: Christoph Raisch Cc: Roland Dreier Cc: Sean Hefty Cc: Hal Rosenstock Cc: linux-rdma@vger.kernel.org Signed-off-by: Srivatsa S. Bhat --- drivers/infiniband/hw/ehca/ehca_irq.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/infiniband/hw/ehca/ehca_irq.c b/drivers/infiniband/hw/ehca/ehca_irq.c index 8615d7c..ace901e 100644 --- a/drivers/infiniband/hw/ehca/ehca_irq.c +++ b/drivers/infiniband/hw/ehca/ehca_irq.c @@ -43,6 +43,7 @@ #include #include +#include #include "ehca_classes.h" #include "ehca_irq.h" @@ -703,6 +704,7 @@ static void queue_comp_task(struct ehca_cq *__cq) int cq_jobs; unsigned long flags; + get_online_cpus_atomic(); cpu_id = find_next_online_cpu(pool); BUG_ON(!cpu_online(cpu_id)); @@ -720,6 +722,7 @@ static void queue_comp_task(struct ehca_cq *__cq) BUG_ON(!cct || !thread); } __queue_comp_task(__cq, cct, thread); + put_online_cpus_atomic(); } static void run_comp_task(struct ehca_cpu_comp_task *cct) @@ -759,6 +762,7 @@ static void comp_task_park(unsigned int cpu) list_splice_init(&cct->cq_list, &list); spin_unlock_irq(&cct->task_lock); + get_online_cpus_atomic(); cpu = find_next_online_cpu(pool); target = per_cpu_ptr(pool->cpu_comp_tasks, cpu); thread = *per_cpu_ptr(pool->cpu_comp_threads, cpu); @@ -768,6 +772,7 @@ static void comp_task_park(unsigned int cpu) __queue_comp_task(cq, target, thread); } spin_unlock_irq(&target->task_lock); + put_online_cpus_atomic(); } static void comp_task_stop(unsigned int cpu, bool online) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/