From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Srivatsa S. Bhat" Subject: [PATCH v3 20/52] x86, therm_throt.c: Fix CPU hotplug callback registration Date: Tue, 11 Mar 2014 02:07:21 +0530 Message-ID: <20140310203721.10746.47726.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, 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, x86@kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@ozlabs.org, Tony Luck , Borislav Petkov , "Srivatsa S. Bhat" , "H. Peter Anvin" , tj@kernel.org, Thomas Gleixner , paulmck@linux.vnet.ibm.com, Ingo Molnar , linux-edac@vger.kernel.org List-Id: linux-arch.vger.kernel.org U3Vic3lzdGVtcyB0aGF0IHdhbnQgdG8gcmVnaXN0ZXIgQ1BVIGhvdHBsdWcgY2FsbGJhY2tzLCBh cyB3ZWxsIGFzIHBlcmZvcm0KaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBDUFVzIHRoYXQgYXJlIGFs cmVhZHkgb25saW5lLCBvZnRlbiBkbyBpdCBhcyBzaG93bgpiZWxvdzoKCglnZXRfb25saW5lX2Nw dXMoKTsKCglmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKCQlpbml0X2NwdShjcHUpOwoKCXJlZ2lz dGVyX2NwdV9ub3RpZmllcigmZm9vYmFyX2NwdV9ub3RpZmllcik7CgoJcHV0X29ubGluZV9jcHVz KCk7CgpUaGlzIGlzIHdyb25nLCBzaW5jZSBpdCBpcyBwcm9uZSB0byBBQkJBIGRlYWRsb2NrcyBp bnZvbHZpbmcgdGhlCmNwdV9hZGRfcmVtb3ZlX2xvY2sgYW5kIHRoZSBjcHVfaG90cGx1Zy5sb2Nr ICh3aGVuIHJ1bm5pbmcgY29uY3VycmVudGx5CndpdGggQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucyku CgpJbnN0ZWFkLCB0aGUgY29ycmVjdCBhbmQgcmFjZS1mcmVlIHdheSBvZiBwZXJmb3JtaW5nIHRo ZSBjYWxsYmFjawpyZWdpc3RyYXRpb24gaXM6CgoJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2JlZ2lu KCk7CgoJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCgkJaW5pdF9jcHUoY3B1KTsKCgkvKiBOb3Rl IHRoZSB1c2Ugb2YgdGhlIGRvdWJsZSB1bmRlcnNjb3JlZCB2ZXJzaW9uIG9mIHRoZSBBUEkgKi8K CV9fcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZmb29iYXJfY3B1X25vdGlmaWVyKTsKCgljcHVfbm90 aWZpZXJfcmVnaXN0ZXJfZG9uZSgpOwoKCkZpeCB0aGUgdGhlcm1hbCB0aHJvdHRsZSBjb2RlIGlu IHg4NiBieSB1c2luZyB0aGlzIGxhdHRlciBmb3JtIG9mIGNhbGxiYWNrCnJlZ2lzdHJhdGlvbi4K CkNjOiBUb255IEx1Y2sgPHRvbnkubHVja0BpbnRlbC5jb20+CkNjOiBCb3Jpc2xhdiBQZXRrb3Yg PGJwQGFsaWVuOC5kZT4KQ2M6IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgpD YzogSW5nbyBNb2xuYXIgPG1pbmdvQGtlcm5lbC5vcmc+CkNjOiAiSC4gUGV0ZXIgQW52aW4iIDxo cGFAenl0b3IuY29tPgpDYzogeDg2QGtlcm5lbC5vcmcKQ2M6IGxpbnV4LWVkYWNAdmdlci5rZXJu ZWwub3JnClNpZ25lZC1vZmYtYnk6IFNyaXZhdHNhIFMuIEJoYXQgPHNyaXZhdHNhLmJoYXRAbGlu dXgudm5ldC5pYm0uY29tPgotLS0KCiBhcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90 aHJvdC5jIHwgICAgNSArKysrLQogMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJt X3Rocm90LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4 IDNlZWM3ZGUuLmUwNWRmYTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNr L3RoZXJtX3Rocm90LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhy b3QuYwpAQCAtMzE5LDcgKzMxOSw3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRoZXJtYWxfdGhyb3R0 bGVfaW5pdF9kZXZpY2Uodm9pZCkKIAlpZiAoIWF0b21pY19yZWFkKCZ0aGVybV90aHJvdF9lbikp CiAJCXJldHVybiAwOwogCi0JcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZ0aGVybWFsX3Rocm90 dGxlX2NwdV9ub3RpZmllcik7CisJY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2JlZ2luKCk7CiAKICNp ZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAltdXRleF9sb2NrKCZ0aGVybV9jcHVfbG9jayk7CkBA IC0zMzMsNiArMzMzLDkgQEAgc3RhdGljIF9faW5pdCBpbnQgdGhlcm1hbF90aHJvdHRsZV9pbml0 X2RldmljZSh2b2lkKQogCW11dGV4X3VubG9jaygmdGhlcm1fY3B1X2xvY2spOwogI2VuZGlmCiAK KwlfX3JlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmdGhlcm1hbF90aHJvdHRsZV9jcHVfbm90aWZp ZXIpOworCWNwdV9ub3RpZmllcl9yZWdpc3Rlcl9kb25lKCk7CisKIAlyZXR1cm4gMDsKIH0KIGRl dmljZV9pbml0Y2FsbCh0aGVybWFsX3Rocm90dGxlX2luaXRfZGV2aWNlKTsKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4cHBjLWRldiBtYWlsaW5n IGxpc3QKTGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKaHR0cHM6Ly9saXN0cy5vemxhYnMu b3JnL2xpc3RpbmZvL2xpbnV4cHBjLWRldg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from e28smtp04.in.ibm.com ([122.248.162.4]:56803 "EHLO e28smtp04.in.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753735AbaCJUhg (ORCPT ); Mon, 10 Mar 2014 16:37:36 -0400 Received: from /spool/local by e28smtp04.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 11 Mar 2014 02:07:34 +0530 From: "Srivatsa S. Bhat" Subject: [PATCH v3 20/52] x86, therm_throt.c: Fix CPU hotplug callback registration Date: Tue, 11 Mar 2014 02:07:21 +0530 Message-ID: <20140310203721.10746.47726.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, Tony Luck , Borislav Petkov , "H. Peter Anvin" , x86@kernel.org, linux-edac@vger.kernel.org"Srivatsa S. Bhat" Message-ID: <20140310203721.jaOb2A2myd3qCLb8xnazhUvDZ7Wq_8WObH5EoBwYeeo@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 thermal throttle code in x86 by using this latter form of callback registration. Cc: Tony Luck Cc: Borislav Petkov Cc: Thomas Gleixner Cc: Ingo Molnar Cc: "H. Peter Anvin" Cc: x86@kernel.org Cc: linux-edac@vger.kernel.org Signed-off-by: Srivatsa S. Bhat --- arch/x86/kernel/cpu/mcheck/therm_throt.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c index 3eec7de..e05dfa3 100644 --- a/arch/x86/kernel/cpu/mcheck/therm_throt.c +++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c @@ -319,7 +319,7 @@ static __init int thermal_throttle_init_device(void) if (!atomic_read(&therm_throt_en)) return 0; - register_hotcpu_notifier(&thermal_throttle_cpu_notifier); + cpu_notifier_register_begin(); #ifdef CONFIG_HOTPLUG_CPU mutex_lock(&therm_cpu_lock); @@ -333,6 +333,9 @@ static __init int thermal_throttle_init_device(void) mutex_unlock(&therm_cpu_lock); #endif + __register_hotcpu_notifier(&thermal_throttle_cpu_notifier); + cpu_notifier_register_done(); + return 0; } device_initcall(thermal_throttle_init_device);