From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Srivatsa S. Bhat" Subject: [PATCH v3 11/52] s390, cacheinfo: Fix CPU hotplug callback registration Date: Tue, 11 Mar 2014 02:05:46 +0530 Message-ID: <20140310203545.10746.78648.stgit@srivatsabhat.in.ibm.com> References: <20140310203312.10746.310.stgit@srivatsabhat.in.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20140310203312.10746.310.stgit@srivatsabhat.in.ibm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" To: paulus@samba.org, oleg@redhat.com, rjw@rjwysocki.net, rusty@rustcorp.com.au, peterz@infradead.org, tglx@linutronix.de, akpm@linux-foundation.org Cc: linux-arch@vger.kernel.org, ego@linux.vnet.ibm.com, walken@google.com, linux@arm.linux.org.uk, linux-pm@vger.kernel.org, linux-s390@vger.kernel.org, Heiko Carstens , linux-kernel@vger.kernel.org, Ingo Molnar , linuxppc-dev@ozlabs.org, "Srivatsa S. Bhat" , tj@kernel.org, paulmck@linux.vnet.ibm.com, Martin Schwidefsky List-Id: linux-arch.vger.kernel.org U3Vic3lzdGVtcyB0aGF0IHdhbnQgdG8gcmVnaXN0ZXIgQ1BVIGhvdHBsdWcgY2FsbGJhY2tzLCBh cyB3ZWxsIGFzIHBlcmZvcm0KaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBDUFVzIHRoYXQgYXJlIGFs cmVhZHkgb25saW5lLCBvZnRlbiBkbyBpdCBhcyBzaG93bgpiZWxvdzoKCglnZXRfb25saW5lX2Nw dXMoKTsKCglmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKCQlpbml0X2NwdShjcHUpOwoKCXJlZ2lz dGVyX2NwdV9ub3RpZmllcigmZm9vYmFyX2NwdV9ub3RpZmllcik7CgoJcHV0X29ubGluZV9jcHVz KCk7CgpUaGlzIGlzIHdyb25nLCBzaW5jZSBpdCBpcyBwcm9uZSB0byBBQkJBIGRlYWRsb2NrcyBp bnZvbHZpbmcgdGhlCmNwdV9hZGRfcmVtb3ZlX2xvY2sgYW5kIHRoZSBjcHVfaG90cGx1Zy5sb2Nr ICh3aGVuIHJ1bm5pbmcgY29uY3VycmVudGx5CndpdGggQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucyku CgpJbnN0ZWFkLCB0aGUgY29ycmVjdCBhbmQgcmFjZS1mcmVlIHdheSBvZiBwZXJmb3JtaW5nIHRo ZSBjYWxsYmFjawpyZWdpc3RyYXRpb24gaXM6CgoJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2JlZ2lu KCk7CgoJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCgkJaW5pdF9jcHUoY3B1KTsKCgkvKiBOb3Rl IHRoZSB1c2Ugb2YgdGhlIGRvdWJsZSB1bmRlcnNjb3JlZCB2ZXJzaW9uIG9mIHRoZSBBUEkgKi8K CV9fcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZmb29iYXJfY3B1X25vdGlmaWVyKTsKCgljcHVfbm90 aWZpZXJfcmVnaXN0ZXJfZG9uZSgpOwoKCkZpeCB0aGUgY2FjaGVpbmZvIGNvZGUgaW4gczM5MCBi eSB1c2luZyB0aGlzIGxhdHRlciBmb3JtIG9mIGNhbGxiYWNrCnJlZ2lzdHJhdGlvbi4KCkNjOiBN YXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CkNjOiBIZWlrbyBDYXJz dGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4KQ2M6IEluZ28gTW9sbmFyIDxtaW5nb0Br ZXJuZWwub3JnPgpDYzogbGludXgtczM5MEB2Z2VyLmtlcm5lbC5vcmcKU2lnbmVkLW9mZi1ieTog U3JpdmF0c2EgUy4gQmhhdCA8c3JpdmF0c2EuYmhhdEBsaW51eC52bmV0LmlibS5jb20+Ci0tLQoK IGFyY2gvczM5MC9rZXJuZWwvY2FjaGUuYyB8ICAgIDUgKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA0 IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2Vy bmVsL2NhY2hlLmMgYi9hcmNoL3MzOTAva2VybmVsL2NhY2hlLmMKaW5kZXggM2E0MTRjMC4uYzBi MDNjMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jYWNoZS5jCisrKyBiL2FyY2gvczM5 MC9rZXJuZWwvY2FjaGUuYwpAQCAtMzc4LDkgKzM3OCwxMiBAQCBzdGF0aWMgaW50IF9faW5pdCBj YWNoZV9pbml0KHZvaWQpCiAJaWYgKCF0ZXN0X2ZhY2lsaXR5KDM0KSkKIAkJcmV0dXJuIDA7CiAJ Y2FjaGVfYnVpbGRfaW5mbygpOworCisJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2JlZ2luKCk7CiAJ Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiAJCWNhY2hlX2FkZF9jcHUoY3B1KTsKLQlob3RjcHVf bm90aWZpZXIoY2FjaGVfaG90cGx1ZywgMCk7CisJX19ob3RjcHVfbm90aWZpZXIoY2FjaGVfaG90 cGx1ZywgMCk7CisJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2RvbmUoKTsKIAlyZXR1cm4gMDsKIH0K IGRldmljZV9pbml0Y2FsbChjYWNoZV9pbml0KTsKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkxpbnV4cHBjLWRldiBtYWlsaW5nIGxpc3QKTGludXhwcGMt ZGV2QGxpc3RzLm96bGFicy5vcmcKaHR0cHM6Ly9saXN0cy5vemxhYnMub3JnL2xpc3RpbmZvL2xp bnV4cHBjLWRldg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from e23smtp07.au.ibm.com ([202.81.31.140]:58457 "EHLO e23smtp07.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753101AbaCJUgE (ORCPT ); Mon, 10 Mar 2014 16:36:04 -0400 Received: from /spool/local by e23smtp07.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 11 Mar 2014 06:36:02 +1000 From: "Srivatsa S. Bhat" Subject: [PATCH v3 11/52] s390, cacheinfo: Fix CPU hotplug callback registration Date: Tue, 11 Mar 2014 02:05:46 +0530 Message-ID: <20140310203545.10746.78648.stgit@srivatsabhat.in.ibm.com> In-Reply-To: <20140310203312.10746.310.stgit@srivatsabhat.in.ibm.com> References: <20140310203312.10746.310.stgit@srivatsabhat.in.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-arch-owner@vger.kernel.org List-ID: To: paulus@samba.org, oleg@redhat.com, mingo@kernel.org, rjw@rjwysocki.net, rusty@rustcorp.com.au, peterz@infradead.org, tglx@linutronix.de, akpm@linux-foundation.org Cc: paulmck@linux.vnet.ibm.com, tj@kernel.org, walken@google.com, ego@linux.vnet.ibm.com, linux@arm.linux.org.uk, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, linux-pm@vger.kernel.org, linuxppc-dev@ozlabs.org, srivatsa.bhat@linux.vnet.ibm.com, Martin Schwidefsky , Heiko Carstens , linux-s390@vger.kernel.org"Srivatsa S. Bhat" Message-ID: <20140310203546.SARvj0XJZvR01HoopwuQEP2-pNJxp4HcTJ_M-BPnA_E@z> 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_notifier_register_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_notifier_register_done(); Fix the cacheinfo code in s390 by using this latter form of callback registration. Cc: Martin Schwidefsky Cc: Heiko Carstens Cc: Ingo Molnar Cc: linux-s390@vger.kernel.org Signed-off-by: Srivatsa S. Bhat --- arch/s390/kernel/cache.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/s390/kernel/cache.c b/arch/s390/kernel/cache.c index 3a414c0..c0b03c2 100644 --- a/arch/s390/kernel/cache.c +++ b/arch/s390/kernel/cache.c @@ -378,9 +378,12 @@ static int __init cache_init(void) if (!test_facility(34)) return 0; cache_build_info(); + + cpu_notifier_register_begin(); for_each_online_cpu(cpu) cache_add_cpu(cpu); - hotcpu_notifier(cache_hotplug, 0); + __hotcpu_notifier(cache_hotplug, 0); + cpu_notifier_register_done(); return 0; } device_initcall(cache_init);