From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [4.9,20/21] x86/mce: Make the MCE notifier a blocking one From: Greg Kroah-Hartman Message-Id: <20170425150828.367988387@linuxfoundation.org> Date: Tue, 25 Apr 2017 16:09:15 +0100 To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ross Zwisler , Vishal Verma , Tony Luck , Dan Williams , linux-edac , x86-ml , Borislav Petkov , Thomas Gleixner List-ID: NC45LXN0YWJsZSByZXZpZXcgcGF0Y2guICBJZiBhbnlvbmUgaGFzIGFueSBvYmplY3Rpb25zLCBw bGVhc2UgbGV0IG1lIGtub3cuCgotLS0tLS0tLS0tLS0tLS0tLS0KCkZyb206IFZpc2hhbCBWZXJt YSA8dmlzaGFsLmwudmVybWFAaW50ZWwuY29tPgoKY29tbWl0IDBkYzljNjM5ZTY1NTNlMzljMTNi MmMwZDU0YzhhMWIwOThjYjk1ZTIgdXBzdHJlYW0uCgpUaGUgTkZJVCBNQ0UgaGFuZGxlciBjYWxs YmFjayAoZm9yIGhhbmRsaW5nIG1lZGlhIGVycm9ycyBvbiBOVkRJTU1zKQp0YWtlcyBhIG11dGV4 IHRvIGFkZCB0aGUgbG9jYXRpb24gb2YgYSBtZW1vcnkgZXJyb3IgdG8gYSBsaXN0LiBCdXQgc2lu Y2UKdGhlIG5vdGlmaWVyIGNhbGwgY2hhaW4gZm9yIG1hY2hpbmUgY2hlY2tzICh4ODZfbWNlX2Rl Y29kZXJfY2hhaW4pIGlzCmF0b21pYywgd2UgZ2V0IGEgbG9ja2RlcCBzcGxhdCBsaWtlOgoKICBC VUc6IHNsZWVwaW5nIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGludmFsaWQgY29udGV4dCBhdCBrZXJu ZWwvbG9ja2luZy9tdXRleC5jOjYyMAogIGluX2F0b21pYygpOiAxLCBpcnFzX2Rpc2FibGVkKCk6 IDAsIHBpZDogNCwgbmFtZToga3dvcmtlci8wOjAKICBbLi5dCiAgQ2FsbCBUcmFjZToKICAgZHVt cF9zdGFjawogICBfX19taWdodF9zbGVlcAogICBfX21pZ2h0X3NsZWVwCiAgIG11dGV4X2xvY2tf bmVzdGVkCiAgID8gX19sb2NrX2FjcXVpcmUKICAgbmZpdF9oYW5kbGVfbWNlCiAgIG5vdGlmaWVy X2NhbGxfY2hhaW4KICAgYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4KICAgPyBhdG9taWNfbm90 aWZpZXJfY2FsbF9jaGFpbgogICBtY2VfZ2VuX3Bvb2xfcHJvY2VzcwoKQ29udmVydCB0aGUgbm90 aWZpZXIgdG8gYSBibG9ja2luZyBvbmUgd2hpY2ggZ2V0cyB0byBydW4gb25seSBpbiBwcm9jZXNz CmNvbnRleHQuCgpCb3JpczogcmVtb3ZlIHRoZSBub3RpZmllciBjYWxsIGluIGF0b21pYyBjb250 ZXh0IGluIHByaW50X21jZSgpLiBGb3IKbm93LCBsZXQncyBwcmludCB0aGUgTUNFIG9uIHRoZSBh dG9taWMgcGF0aCBzbyB0aGF0IHdlIGNhbiBtYWtlIHN1cmUKdGhleSBnbyBvdXQgYW5kIGdldCBs b2dnZWQgYXQgbGVhc3QuCgpGaXhlczogNjgzOWE2ZDk2ZjRlICgibmZpdDogZG8gYW4gQVJTIHNj cnViIG9uIGhpdHRpbmcgYSBsYXRlbnQgbWVkaWEgZXJyb3IiKQpSZXBvcnRlZC1ieTogUm9zcyBa d2lzbGVyIDxyb3NzLnp3aXNsZXJAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBWaXNo YWwgVmVybWEgPHZpc2hhbC5sLnZlcm1hQGludGVsLmNvbT4KQWNrZWQtYnk6IFRvbnkgTHVjayA8 dG9ueS5sdWNrQGludGVsLmNvbT4KQ2M6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50 ZWwuY29tPgpDYzogbGludXgtZWRhYyA8bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmc+CkNjOiB4 ODYtbWwgPHg4NkBrZXJuZWwub3JnPgpMaW5rOiBodHRwOi8vbGttbC5rZXJuZWwub3JnL3IvMjAx NzA0MTEyMjQ0NTcuMjQ3NzctMS12aXNoYWwubC52ZXJtYUBpbnRlbC5jb20KU2lnbmVkLW9mZi1i eTogQm9yaXNsYXYgUGV0a292IDxicEBzdXNlLmRlPgpTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgR2xl aXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KU2lnbmVkLW9mZi1ieTogR3JlZyBLcm9haC1IYXJ0 bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KLS0tCiBhcmNoL3g4Ni9rZXJuZWwvY3B1 L21jaGVjay9tY2UtZ2VucG9vbC5jICB8ICAgIDIgKy0KIGFyY2gveDg2L2tlcm5lbC9jcHUvbWNo ZWNrL21jZS1pbnRlcm5hbC5oIHwgICAgMiArLQogYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2sv bWNlLmMgICAgICAgICAgfCAgIDE2ICsrKy0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwg NSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKCgoKLS0KVG8gdW5zdWJzY3JpYmUgZnJv bSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LWVkYWMiIGluCnRo ZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCk1vcmUgbWFq b3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRt bAoKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWdlbnBvb2wuYworKysgYi9h cmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtZ2VucG9vbC5jCkBAIC04NSw3ICs4NSw3IEBA IHZvaWQgbWNlX2dlbl9wb29sX3Byb2Nlc3Modm9pZCkKIAloZWFkID0gbGxpc3RfcmV2ZXJzZV9v cmRlcihoZWFkKTsKIAlsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgaGVhZCwg bGxub2RlKSB7CiAJCW1jZSA9ICZub2RlLT5tY2U7Ci0JCWF0b21pY19ub3RpZmllcl9jYWxsX2No YWluKCZ4ODZfbWNlX2RlY29kZXJfY2hhaW4sIDAsIG1jZSk7CisJCWJsb2NraW5nX25vdGlmaWVy X2NhbGxfY2hhaW4oJng4Nl9tY2VfZGVjb2Rlcl9jaGFpbiwgMCwgbWNlKTsKIAkJZ2VuX3Bvb2xf ZnJlZShtY2VfZXZ0X3Bvb2wsICh1bnNpZ25lZCBsb25nKW5vZGUsIHNpemVvZigqbm9kZSkpOwog CX0KIH0KLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWludGVybmFsLmgKKysr IGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWludGVybmFsLmgKQEAgLTEzLDcgKzEz LDcgQEAgZW51bSBzZXZlcml0eV9sZXZlbCB7CiAJTUNFX1BBTklDX1NFVkVSSVRZLAogfTsKIAot ZXh0ZXJuIHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCB4ODZfbWNlX2RlY29kZXJfY2hhaW47 CitleHRlcm4gc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgeDg2X21jZV9kZWNvZGVyX2No YWluOwogCiAjZGVmaW5lIEFUVFJfTEVOCQkxNgogI2RlZmluZSBJTklUSUFMX0NIRUNLX0lOVEVS VkFMCTUgKiA2MCAvKiA1IG1pbnV0ZXMgKi8KLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hl Y2svbWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKQEAgLTEyMCw3 ICsxMjAsNyBAQCBzdGF0aWMgdm9pZCAoKnF1aXJrX25vX3dheV9vdXQpKGludCBiYW5rCiAgKiBD UFUvY2hpcHNldCBzcGVjaWZpYyBFREFDIGNvZGUgY2FuIHJlZ2lzdGVyIGEgbm90aWZpZXIgY2Fs bCBoZXJlIHRvIHByaW50CiAgKiBNQ0UgZXJyb3JzIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybS4K ICAqLwotQVRPTUlDX05PVElGSUVSX0hFQUQoeDg2X21jZV9kZWNvZGVyX2NoYWluKTsKK0JMT0NL SU5HX05PVElGSUVSX0hFQUQoeDg2X21jZV9kZWNvZGVyX2NoYWluKTsKIAogLyogRG8gaW5pdGlh bCBpbml0aWFsaXphdGlvbiBvZiBhIHN0cnVjdCBtY2UgKi8KIHZvaWQgbWNlX3NldHVwKHN0cnVj dCBtY2UgKm0pCkBAIC0yMTMsMTMgKzIxMywxMyBAQCB2b2lkIG1jZV9yZWdpc3Rlcl9kZWNvZGVf Y2hhaW4oc3RydWN0IG5vCiAJaWYgKG5iICE9ICZtY2Vfc3Jhb19uYiAmJiBuYi0+cHJpb3JpdHkg PT0gSU5UX01BWCkKIAkJbmItPnByaW9yaXR5IC09IDE7CiAKLQlhdG9taWNfbm90aWZpZXJfY2hh aW5fcmVnaXN0ZXIoJng4Nl9tY2VfZGVjb2Rlcl9jaGFpbiwgbmIpOworCWJsb2NraW5nX25vdGlm aWVyX2NoYWluX3JlZ2lzdGVyKCZ4ODZfbWNlX2RlY29kZXJfY2hhaW4sIG5iKTsKIH0KIEVYUE9S VF9TWU1CT0xfR1BMKG1jZV9yZWdpc3Rlcl9kZWNvZGVfY2hhaW4pOwogCiB2b2lkIG1jZV91bnJl Z2lzdGVyX2RlY29kZV9jaGFpbihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQogewotCWF0b21p Y19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZ4ODZfbWNlX2RlY29kZXJfY2hhaW4sIG5iKTsK KwlibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZ4ODZfbWNlX2RlY29kZXJfY2hh aW4sIG5iKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1jZV91bnJlZ2lzdGVyX2RlY29kZV9jaGFp bik7CiAKQEAgLTI3Miw4ICsyNzIsNiBAQCBzdHJ1Y3QgbWNhX21zcl9yZWdzIG1zcl9vcHMgPSB7 CiAKIHN0YXRpYyB2b2lkIHByaW50X21jZShzdHJ1Y3QgbWNlICptKQogewotCWludCByZXQgPSAw OwotCiAJcHJfZW1lcmcoSFdfRVJSICJDUFUgJWQ6IE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uOiAl THggQmFuayAlZDogJTAxNkx4XG4iLAogCSAgICAgICBtLT5leHRjcHUsIG0tPm1jZ3N0YXR1cywg bS0+YmFuaywgbS0+c3RhdHVzKTsKIApAQCAtMzA5LDE0ICszMDcsNiBAQCBzdGF0aWMgdm9pZCBw cmludF9tY2Uoc3RydWN0IG1jZSAqbSkKIAkJbS0+Y3B1dmVuZG9yLCBtLT5jcHVpZCwgbS0+dGlt ZSwgbS0+c29ja2V0aWQsIG0tPmFwaWNpZCwKIAkJY3B1X2RhdGEobS0+ZXh0Y3B1KS5taWNyb2Nv ZGUpOwogCi0JLyoKLQkgKiBQcmludCBvdXQgaHVtYW4tcmVhZGFibGUgZGV0YWlscyBhYm91dCB0 aGUgTUNFIGVycm9yLAotCSAqIChpZiB0aGUgQ1BVIGhhcyBhbiBpbXBsZW1lbnRhdGlvbiBmb3Ig dGhhdCkKLQkgKi8KLQlyZXQgPSBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmeDg2X21jZV9k ZWNvZGVyX2NoYWluLCAwLCBtKTsKLQlpZiAocmV0ID09IE5PVElGWV9TVE9QKQotCQlyZXR1cm47 Ci0KIAlwcl9lbWVyZ19yYXRlbGltaXRlZChIV19FUlIgIlJ1biB0aGUgYWJvdmUgdGhyb3VnaCAn bWNlbG9nIC0tYXNjaWknXG4iKTsKIH0KIAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1950075AbdDYP1n (ORCPT ); Tue, 25 Apr 2017 11:27:43 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:54866 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1948960AbdDYPLQ (ORCPT ); Tue, 25 Apr 2017 11:11:16 -0400 From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ross Zwisler , Vishal Verma , Tony Luck , Dan Williams , linux-edac , x86-ml , Borislav Petkov , Thomas Gleixner Subject: [PATCH 4.9 20/21] x86/mce: Make the MCE notifier a blocking one Date: Tue, 25 Apr 2017 16:09:15 +0100 Message-Id: <20170425150828.367988387@linuxfoundation.org> X-Mailer: git-send-email 2.12.2 In-Reply-To: <20170425150827.381333941@linuxfoundation.org> References: <20170425150827.381333941@linuxfoundation.org> User-Agent: quilt/0.65 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ From: Vishal Verma commit 0dc9c639e6553e39c13b2c0d54c8a1b098cb95e2 upstream. The NFIT MCE handler callback (for handling media errors on NVDIMMs) takes a mutex to add the location of a memory error to a list. But since the notifier call chain for machine checks (x86_mce_decoder_chain) is atomic, we get a lockdep splat like: BUG: sleeping function called from invalid context at kernel/locking/mutex.c:620 in_atomic(): 1, irqs_disabled(): 0, pid: 4, name: kworker/0:0 [..] Call Trace: dump_stack ___might_sleep __might_sleep mutex_lock_nested ? __lock_acquire nfit_handle_mce notifier_call_chain atomic_notifier_call_chain ? atomic_notifier_call_chain mce_gen_pool_process Convert the notifier to a blocking one which gets to run only in process context. Boris: remove the notifier call in atomic context in print_mce(). For now, let's print the MCE on the atomic path so that we can make sure they go out and get logged at least. Fixes: 6839a6d96f4e ("nfit: do an ARS scrub on hitting a latent media error") Reported-by: Ross Zwisler Signed-off-by: Vishal Verma Acked-by: Tony Luck Cc: Dan Williams Cc: linux-edac Cc: x86-ml Link: http://lkml.kernel.org/r/20170411224457.24777-1-vishal.l.verma@intel.com Signed-off-by: Borislav Petkov Signed-off-by: Thomas Gleixner Signed-off-by: Greg Kroah-Hartman --- arch/x86/kernel/cpu/mcheck/mce-genpool.c | 2 +- arch/x86/kernel/cpu/mcheck/mce-internal.h | 2 +- arch/x86/kernel/cpu/mcheck/mce.c | 16 +++------------- 3 files changed, 5 insertions(+), 15 deletions(-) --- a/arch/x86/kernel/cpu/mcheck/mce-genpool.c +++ b/arch/x86/kernel/cpu/mcheck/mce-genpool.c @@ -85,7 +85,7 @@ void mce_gen_pool_process(void) head = llist_reverse_order(head); llist_for_each_entry_safe(node, tmp, head, llnode) { mce = &node->mce; - atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, mce); + blocking_notifier_call_chain(&x86_mce_decoder_chain, 0, mce); gen_pool_free(mce_evt_pool, (unsigned long)node, sizeof(*node)); } } --- a/arch/x86/kernel/cpu/mcheck/mce-internal.h +++ b/arch/x86/kernel/cpu/mcheck/mce-internal.h @@ -13,7 +13,7 @@ enum severity_level { MCE_PANIC_SEVERITY, }; -extern struct atomic_notifier_head x86_mce_decoder_chain; +extern struct blocking_notifier_head x86_mce_decoder_chain; #define ATTR_LEN 16 #define INITIAL_CHECK_INTERVAL 5 * 60 /* 5 minutes */ --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c @@ -120,7 +120,7 @@ static void (*quirk_no_way_out)(int bank * CPU/chipset specific EDAC code can register a notifier call here to print * MCE errors in a human-readable form. */ -ATOMIC_NOTIFIER_HEAD(x86_mce_decoder_chain); +BLOCKING_NOTIFIER_HEAD(x86_mce_decoder_chain); /* Do initial initialization of a struct mce */ void mce_setup(struct mce *m) @@ -213,13 +213,13 @@ void mce_register_decode_chain(struct no if (nb != &mce_srao_nb && nb->priority == INT_MAX) nb->priority -= 1; - atomic_notifier_chain_register(&x86_mce_decoder_chain, nb); + blocking_notifier_chain_register(&x86_mce_decoder_chain, nb); } EXPORT_SYMBOL_GPL(mce_register_decode_chain); void mce_unregister_decode_chain(struct notifier_block *nb) { - atomic_notifier_chain_unregister(&x86_mce_decoder_chain, nb); + blocking_notifier_chain_unregister(&x86_mce_decoder_chain, nb); } EXPORT_SYMBOL_GPL(mce_unregister_decode_chain); @@ -272,8 +272,6 @@ struct mca_msr_regs msr_ops = { static void print_mce(struct mce *m) { - int ret = 0; - pr_emerg(HW_ERR "CPU %d: Machine Check Exception: %Lx Bank %d: %016Lx\n", m->extcpu, m->mcgstatus, m->bank, m->status); @@ -309,14 +307,6 @@ static void print_mce(struct mce *m) m->cpuvendor, m->cpuid, m->time, m->socketid, m->apicid, cpu_data(m->extcpu).microcode); - /* - * Print out human-readable details about the MCE error, - * (if the CPU has an implementation for that) - */ - ret = atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, m); - if (ret == NOTIFY_STOP) - return; - pr_emerg_ratelimited(HW_ERR "Run the above through 'mcelog --ascii'\n"); }