Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751439AbaBGCxQ (ORCPT ); Thu, 6 Feb 2014 21:53:16 -0500 Received: from fgwmail5.fujitsu.co.jp ([192.51.44.35]:39464 "EHLO fgwmail5.fujitsu.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751051AbaBGCxO (ORCPT ); Thu, 6 Feb 2014 21:53:14 -0500 X-SecurityPolicyCheck: OK by SHieldMailChecker v2.0.1 X-SHieldMailCheckerPolicyVersion: FJ-ISEC-20120718-3 Message-ID: <52F44A55.2080007@jp.fujitsu.com> Date: Fri, 7 Feb 2014 11:52:05 +0900 From: Yasuaki Ishimatsu User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20130801 Thunderbird/17.0.8 MIME-Version: 1.0 To: "Srivatsa S. Bhat" CC: , , , , , , , , , , , , , Christoph Lameter , Rik van Riel , Johannes Weiner , Cody P Schafer , Toshi Kani , Dave Hansen , Subject: Re: [PATCH 48/51] mm, vmstat: Fix CPU hotplug callback registration References: <20140205220251.19080.92336.stgit@srivatsabhat.in.ibm.com> <20140205221322.19080.63386.stgit@srivatsabhat.in.ibm.com> In-Reply-To: <20140205221322.19080.63386.stgit@srivatsabhat.in.ibm.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-SecurityPolicyCheck-GC: OK by FENCE-Mail Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org (2014/02/06 7:13), Srivatsa S. Bhat wrote: > Subsystems that want to register CPU hotplug callbacks, as well as perform > initialization for the CPUs that are already online, often do it as shown > below: > > get_online_cpus(); > > for_each_online_cpu(cpu) > init_cpu(cpu); > > register_cpu_notifier(&foobar_cpu_notifier); > > put_online_cpus(); > > This is wrong, since it is prone to ABBA deadlocks involving the > cpu_add_remove_lock and the cpu_hotplug.lock (when running concurrently > with CPU hotplug operations). > > Instead, the correct and race-free way of performing the callback > registration is: > > cpu_maps_update_begin(); > > for_each_online_cpu(cpu) > init_cpu(cpu); > > /* Note the use of the double underscored version of the API */ > __register_cpu_notifier(&foobar_cpu_notifier); > > cpu_maps_update_done(); > > > Fix the vmstat code in the MM subsystem by using this latter form of callback > registration. > > Cc: Andrew Morton > Cc: Christoph Lameter > Cc: Rik van Riel > Cc: Johannes Weiner > Cc: Yasuaki Ishimatsu > Cc: Cody P Schafer > Cc: Toshi Kani > Cc: Dave Hansen > Cc: linux-mm@kvack.org > Signed-off-by: Srivatsa S. Bhat > --- Looks good to me. Reviewed-by: Yasuaki Ishimatsu Thanks, Yasuaki Ishimatsu > > mm/vmstat.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/mm/vmstat.c b/mm/vmstat.c > index 7249614..70668ba 100644 > --- a/mm/vmstat.c > +++ b/mm/vmstat.c > @@ -1290,14 +1290,14 @@ static int __init setup_vmstat(void) > #ifdef CONFIG_SMP > int cpu; > > - register_cpu_notifier(&vmstat_notifier); > + cpu_maps_update_begin(); > + __register_cpu_notifier(&vmstat_notifier); > > - get_online_cpus(); > for_each_online_cpu(cpu) { > start_cpu_timer(cpu); > node_set_state(cpu_to_node(cpu), N_CPU); > } > - put_online_cpus(); > + cpu_maps_update_done(); > #endif > #ifdef CONFIG_PROC_FS > proc_create("buddyinfo", S_IRUGO, NULL, &fragmentation_file_operations); > -- 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/