From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from out03.mta.xmission.com ([166.70.13.233]) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1S5V7U-0004En-R1 for kexec@lists.infradead.org; Thu, 08 Mar 2012 04:38:30 +0000 From: ebiederm@xmission.com (Eric W. Biederman) References: <20120216172735.GX9751@redhat.com> <20120216215603.GH9751@redhat.com> <20120217195430.GO9751@redhat.com> <20120220151419.GU9751@redhat.com> <20120221135934.GF26998@redhat.com> <4F573E1C.2060909@oss.ntt.co.jp> <4F573E74.5040504@oss.ntt.co.jp> Date: Wed, 07 Mar 2012 20:41:05 -0800 In-Reply-To: <4F573E74.5040504@oss.ntt.co.jp> ("Fernando Luis =?utf-8?Q?V?= =?utf-8?Q?=C3=A1zquez?= Cao"'s message of "Wed, 07 Mar 2012 19:54:44 +0900") Message-ID: MIME-Version: 1.0 Subject: Re: [PATCH 1/2] boot: ignore early NMIs List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: kexec-bounces@lists.infradead.org Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: Fernando Luis =?utf-8?Q?V=C3=A1zquez?= Cao Cc: Don Zickus , linux-tip-commits@vger.kernel.org, torvalds@linux-foundation.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, mingo@redhat.com, tglx@linutronix.de, hpa@zytor.com, mingo@elte.hu, Yinghai Lu , akpm@linux-foundation.org, vgoyal@redhat.com RmVybmFuZG8gTHVpcyBWw6F6cXVleiBDYW8gPGZlcm5hbmRvQG9zcy5udHQuY28uanA+IHdyaXRl czoKCj4gU3ViamVjdDogW1BBVENIXSBib290OiBpZ25vcmUgZWFybHkgTk1Jcwo+Cj4gRnJvbTog RmVybmFuZG8gTHVpcyBWYXpxdWV6IENhbyA8ZmVybmFuZG9Ab3NzLm50dC5jby5qcD4KPgo+IE5N SXMgdmVyeSBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzIGFyZSByYXJlbHkgY3JpdGljYWwgKHVz dWFsbHkKPiBpdCBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2FzIGEgc3B1cmlvdXMgYml0IGZsaXAg c29tZXdoZXJlIGluIHRoZQo+IGhhcmR3YXJlLCBvciB0aGF0IHRoaXMgaXMgYSBrZHVtcCBrZXJu ZWwgYW5kIHdlIHJlY2VpdmVkIGFuIE5NSQo+IGdlbmVyYXRlZCBpbiB0aGUgcHJldmlvdXMgY29u dGV4dCksIHNvIHRoZSBjdXJyZW50IGJlaGF2aW9yIG9mCj4gaGFsdGluZyB0aGUgc3lzdGVtIHdo ZW4gb25lIG9jY3VycyBpcyBwcm9iYWJseSBhIGJpdCBvdmVyIHRoZSB0b3AuCj4KPiBUaGlzIHBh dGNoIGNoYW5nZXMgdGhlIGVhcmx5IElEVCBzbyB0aGF0IE5NSXMgYXJlIGlnbm9yZWQgYW5kIHRo ZQo+IGtlcm5lbCBjYW4sIGhvcGVmdWxseSwgY29udGludWUgZXhlY3V0aW5nIG90aGVyIGNvZGUu IEhhcnNoZXIKPiBtZWFzdXJlcyAocGFuaWMsIGV0YykgYXJlIGRlZmVyZWQgdG8gdGhlIGZpbmFs IE5NSSBoYW5kbGVyLCB3aGljaAo+IGNhbiBhY3R1YWxseSBtYWtlIGFuIGluZm9ybWVkIGRlY2lz aW9uLgo+Cj4gVGhpcyBpc3N1ZSBwcmVzZW50ZWQgaXRzZWxmIGluIG91ciBlbnZpcm9ubWVudCBh cyBzZWVtaW5nbHkKPiByYW5kb20gaGFuZ3MgaW4ga2R1bXAuCj4KPiBTaWduZWQtb2ZmLWJ5OiBG ZXJuYW5kbyBMdWlzIFZhenF1ZXogQ2FvIDxmZXJuYW5kb0Bvc3MubnR0LmNvLmpwPgo+IC0tLQo+ Cj4gZGlmZiAtdXJOcCBsaW51eC0zLjMtcmM2LW9yaWcvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5j IGxpbnV4LTMuMy1yYzYvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCj4gLS0tIGxpbnV4LTMuMy1y YzYtb3JpZy9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMJMjAxMi0wMy0wNyAxNTo0OTowMS44MzQy NDE3ODcgKzA5MDAKPiArKysgbGludXgtMy4zLXJjNi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMJ MjAxMi0wMy0wNyAxODozOTowMy4xNzM3MzI4NzUgKzA5MDAKPiBAQCAtNzEsNyArNzEsNyBAQCB2 b2lkIF9faW5pdCB4ODZfNjRfc3RhcnRfa2VybmVsKGNoYXIgKiByCj4gIAkJCQkoX19TVEFSVF9L RVJORUwgJiBQR0RJUl9NQVNLKSkpOwo+ICAJQlVJTERfQlVHX09OKF9fZml4X3RvX3ZpcnQoX19l bmRfb2ZfZml4ZWRfYWRkcmVzc2VzKSA8PSBNT0RVTEVTX0VORCk7Cj4gIAo+IC0JLyogY2xlYXIg YnNzIGJlZm9yZSBzZXRfaW50cl9nYXRlIHdpdGggZWFybHlfaWR0X2hhbmRsZXIgKi8KPiArCS8q IGNsZWFyIGJzcyBiZWZvcmUgc2V0X2ludHJfZ2F0ZSB3aXRoIGVhcmx5X2lkdF9oYW5kbGVycyAq Lwo+ICAJY2xlYXJfYnNzKCk7Cj4gIAo+ICAJLyogTWFrZSBOVUxMIHBvaW50ZXJzIHNlZ2ZhdWx0 ICovCj4gQEAgLTc5LDEzICs3OSw4IEBAIHZvaWQgX19pbml0IHg4Nl82NF9zdGFydF9rZXJuZWwo Y2hhciAqIHIKPiAgCj4gIAltYXhfcGZuX21hcHBlZCA9IEtFUk5FTF9JTUFHRV9TSVpFID4+IFBB R0VfU0hJRlQ7Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IE5VTV9FWENFUFRJT05fVkVDVE9SUzsg aSsrKSB7Cj4gLSNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLCj4gKwlmb3IgKGkgPSAwOyBpIDwg TlVNX0VYQ0VQVElPTl9WRUNUT1JTOyBpKyspCj4gIAkJc2V0X2ludHJfZ2F0ZShpLCAmZWFybHlf aWR0X2hhbmRsZXJzW2ldKTsKPiAtI2Vsc2UKPiAtCQlzZXRfaW50cl9nYXRlKGksIGVhcmx5X2lk dF9oYW5kbGVyKTsKPiAtI2VuZGlmCj4gLQl9Cj4gIAlsb2FkX2lkdCgoY29uc3Qgc3RydWN0IGRl c2NfcHRyICopJmlkdF9kZXNjcik7Cj4gIAo+ICAJaWYgKGNvbnNvbGVfbG9nbGV2ZWwgPT0gMTAp Cj4gZGlmZiAtdXJOcCBsaW51eC0zLjMtcmM2LW9yaWcvYXJjaC94ODYva2VybmVsL2hlYWRfNjQu UyBsaW51eC0zLjMtcmM2L2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKPiAtLS0gbGludXgtMy4z LXJjNi1vcmlnL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMJMjAxMi0wMy0wNyAxNTo0OTowMS44 MzgyNDE4MzkgKzA5MDAKPiArKysgbGludXgtMy4zLXJjNi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82 NC5TCTIwMTItMDMtMDcgMTg6NDE6MjEuODExNTE2ODc2ICswOTAwCj4gQEAgLTI3MCwxOCArMjcw LDI5IEBAIGJhZF9hZGRyZXNzOgo+ICAJam1wIGJhZF9hZGRyZXNzCj4gIAo+ICAJLnNlY3Rpb24g Ii5pbml0LnRleHQiLCJheCIKPiAtI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKPiAgCS5nbG9i bCBlYXJseV9pZHRfaGFuZGxlcnMKPiAgZWFybHlfaWR0X2hhbmRsZXJzOgo+IC0JaSA9IDAKPiAr CXZlY3RvciA9IDAKPiAgCS5yZXB0IE5VTV9FWENFUFRJT05fVkVDVE9SUwo+IC0JbW92bCAkaSwg JWVzaQo+IC0Jam1wIGVhcmx5X2lkdF9oYW5kbGVyCj4gLQlpID0gaSArIDEKPiArCS8qCj4gKwkg KiBOTUlzICh2ZWN0b3IgMikgdGhpcyBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzIGFyZSByYXJl bHkgY3JpdGljYWwKPiArCSAqICh1c3VhbGx5IGl0IGp1c3QgbWVhbnMgdGhhdCB0aGVyZSB3YXMg YSBzcHVyaW91cyBiaXQgZmxpcCBzb21ld2hlcmUKPiArCSAqIGluIHRoZSBoYXJkd2FyZSwgb3Ig dGhhdCB0aGlzIGlzIGEga2R1bXAga2VybmVsIGFuZCB3ZSByZWNlaXZlZCBhbgo+ICsJICogTk1J IGdlbmVyYXRlZCBpbiB0aGUgcHJldmlvdXMgY29udGV4dCksIHNvIHdlIGlnbm9yZSB0aGVtIGhl cmUgYW5kCj4gKwkgKiB0cnkgdG8gY29udGludWUgKHNlZSBlYXJseV9ubWlfaGFuZGxlciBpbXBs ZW1lbnRhdGlvbiBiZWxvdykuCj4gKwkgKiBIYXJzaGVyIG1lYXN1cmVzIChwYW5pYywgZXRjKSBh cmUgZGVmZXJlZCB0byB0aGUgZmluYWwgTk1JIGhhbmRsZXIsCj4gKwkgKiB3aGljaCBjYW4gYWN0 dWFsbHkgbWFrZSBhbiBpbmZvcm1lZCBkZWNpc2lvbi4KPiArCSAqLwo+ICsJLmlmIHZlY3RvciA9 PSAyCj4gKwlqbXAgZWFybHlfbm1pX2hhbmRsZXIKCklzIGp1c3QgYSBqdW1wIGFuZCBub3QgYSBt b3ZlIGZvbGxvd2VkIGJ5IGEganVtcCBzdGlsbCAxMCBieXRlcz8KSSBoYXRlIHRvIHNheSBpdCBi dXQgSSB0aGluayB0aGlzIGZhaWxzIG1pc2VyYWJseSBmb3IgYW55IGV4Y2VwdGlvbgphZnRlciBh IG5taS4KCkkgZXhwZWN0IHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBtb2RpZnkgZWFybHlf aWR0X2hhbmRsZXIgdG8gdGVzdApmb3IgdmVjdG9yID09IDIuCgpEb2luZyBzb21ldGhpbmcgbGVz cyBicml0dGxlIHRoYW46Cj4gZXh0ZXJuIGNvbnN0IGNoYXIgZWFybHlfaWR0X2hhbmRsZXJzW05V TV9FWENFUFRJT05fVkVDVE9SU11bMTBdOwppbiBzZWdtZW50LmggbWlnaHQgYmUgYSBnb29kIGlk ZWEgYXMgd2VsbC4KCkVyaWMKCj4gKwkuZWxzZQo+ICsJbW92bCAkdmVjdG9yLCAlZXNpCj4gKwlq bXAgZWFybHlfZXhjZXB0aW9uX2hhbmRsZXIKPiArCS5lbmRpZgo+ICsJdmVjdG9yID0gdmVjdG9y ICsgMQo+ICAJLmVuZHIKPiAtI2VuZGlmCj4gIAo+IC1FTlRSWShlYXJseV9pZHRfaGFuZGxlcikK PiArZWFybHlfZXhjZXB0aW9uX2hhbmRsZXI6Cj4gICNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRL Cj4gIAljbXBsICQyLGVhcmx5X3JlY3Vyc2lvbl9mbGFnKCVyaXApCj4gIAlqeiAgMWYKPiBAQCAt MzE1LDYgKzMyNiw5IEBAIEVOVFJZKGVhcmx5X2lkdF9oYW5kbGVyKQo+ICAxOglobHQKPiAgCWpt cCAxYgo+ICAKPiArZWFybHlfbm1pX2hhbmRsZXI6Cj4gKwlpcmV0cQo+ICsKPiAgI2lmZGVmIENP TkZJR19FQVJMWV9QUklOVEsKPiAgZWFybHlfcmVjdXJzaW9uX2ZsYWc6Cj4gIAkubG9uZyAwCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwprZXhlYyBtYWls aW5nIGxpc3QKa2V4ZWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2tleGVjCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751272Ab2CHEiA (ORCPT ); Wed, 7 Mar 2012 23:38:00 -0500 Received: from out03.mta.xmission.com ([166.70.13.233]:60164 "EHLO out03.mta.xmission.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750794Ab2CHEh4 convert rfc822-to-8bit (ORCPT ); Wed, 7 Mar 2012 23:37:56 -0500 From: ebiederm@xmission.com (Eric W. Biederman) To: Fernando Luis =?utf-8?Q?V=C3=A1zquez?= Cao Cc: Don Zickus , linux-tip-commits@vger.kernel.org, Yinghai Lu , mingo@elte.hu, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, mingo@redhat.com, hpa@zytor.com, akpm@linux-foundation.org, torvalds@linux-foundation.org, tglx@linutronix.de, vgoyal@redhat.com References: <20120216172735.GX9751@redhat.com> <20120216215603.GH9751@redhat.com> <20120217195430.GO9751@redhat.com> <20120220151419.GU9751@redhat.com> <20120221135934.GF26998@redhat.com> <4F573E1C.2060909@oss.ntt.co.jp> <4F573E74.5040504@oss.ntt.co.jp> Date: Wed, 07 Mar 2012 20:41:05 -0800 In-Reply-To: <4F573E74.5040504@oss.ntt.co.jp> ("Fernando Luis =?utf-8?Q?V?= =?utf-8?Q?=C3=A1zquez?= Cao"'s message of "Wed, 07 Mar 2012 19:54:44 +0900") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT X-XM-SPF: eid=;;;mid=;;;hst=in01.mta.xmission.com;;;ip=98.207.153.68;;;frm=ebiederm@xmission.com;;;spf=neutral X-XM-AID: U2FsdGVkX19CBQYt1L8SGQosuJLJU+8dtPVoDUZikPc= X-SA-Exim-Connect-IP: 98.207.153.68 X-SA-Exim-Mail-From: ebiederm@xmission.com X-Spam-Report: * 1.5 XMNoVowels Alpha-numberic number with no vowels * 0.0 T_TM2_M_HEADER_IN_MSG BODY: T_TM2_M_HEADER_IN_MSG * -3.0 BAYES_00 BODY: Bayes spam probability is 0 to 1% * [score: 0.0000] * -0.0 DCC_CHECK_NEGATIVE Not listed in DCC * [sa01 1397; Body=1 Fuz1=1 Fuz2=1] * 0.4 FVGT_m_MULTI_ODD Contains multiple odd letter combinations * 0.0 T_XMDrugObfuBody_12 obfuscated drug references * 0.4 UNTRUSTED_Relay Comes from a non-trusted relay X-Spam-DCC: XMission; sa01 1397; Body=1 Fuz1=1 Fuz2=1 X-Spam-Combo: =?ISO-8859-1?Q?;Fernando Luis V=c3=a1zquez Cao ?= X-Spam-Relay-Country: ** Subject: Re: [PATCH 1/2] boot: ignore early NMIs X-Spam-Flag: No X-SA-Exim-Version: 4.2.1 (built Fri, 06 Aug 2010 16:31:04 -0600) X-SA-Exim-Scanned: Yes (on in01.mta.xmission.com) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fernando Luis Vázquez Cao writes: > Subject: [PATCH] boot: ignore early NMIs > > From: Fernando Luis Vazquez Cao > > NMIs very early in the boot process are rarely critical (usually > it just means that there was a spurious bit flip somewhere in the > hardware, or that this is a kdump kernel and we received an NMI > generated in the previous context), so the current behavior of > halting the system when one occurs is probably a bit over the top. > > This patch changes the early IDT so that NMIs are ignored and the > kernel can, hopefully, continue executing other code. Harsher > measures (panic, etc) are defered to the final NMI handler, which > can actually make an informed decision. > > This issue presented itself in our environment as seemingly > random hangs in kdump. > > Signed-off-by: Fernando Luis Vazquez Cao > --- > > diff -urNp linux-3.3-rc6-orig/arch/x86/kernel/head64.c linux-3.3-rc6/arch/x86/kernel/head64.c > --- linux-3.3-rc6-orig/arch/x86/kernel/head64.c 2012-03-07 15:49:01.834241787 +0900 > +++ linux-3.3-rc6/arch/x86/kernel/head64.c 2012-03-07 18:39:03.173732875 +0900 > @@ -71,7 +71,7 @@ void __init x86_64_start_kernel(char * r > (__START_KERNEL & PGDIR_MASK))); > BUILD_BUG_ON(__fix_to_virt(__end_of_fixed_addresses) <= MODULES_END); > > - /* clear bss before set_intr_gate with early_idt_handler */ > + /* clear bss before set_intr_gate with early_idt_handlers */ > clear_bss(); > > /* Make NULL pointers segfault */ > @@ -79,13 +79,8 @@ void __init x86_64_start_kernel(char * r > > max_pfn_mapped = KERNEL_IMAGE_SIZE >> PAGE_SHIFT; > > - for (i = 0; i < NUM_EXCEPTION_VECTORS; i++) { > -#ifdef CONFIG_EARLY_PRINTK > + for (i = 0; i < NUM_EXCEPTION_VECTORS; i++) > set_intr_gate(i, &early_idt_handlers[i]); > -#else > - set_intr_gate(i, early_idt_handler); > -#endif > - } > load_idt((const struct desc_ptr *)&idt_descr); > > if (console_loglevel == 10) > diff -urNp linux-3.3-rc6-orig/arch/x86/kernel/head_64.S linux-3.3-rc6/arch/x86/kernel/head_64.S > --- linux-3.3-rc6-orig/arch/x86/kernel/head_64.S 2012-03-07 15:49:01.838241839 +0900 > +++ linux-3.3-rc6/arch/x86/kernel/head_64.S 2012-03-07 18:41:21.811516876 +0900 > @@ -270,18 +270,29 @@ bad_address: > jmp bad_address > > .section ".init.text","ax" > -#ifdef CONFIG_EARLY_PRINTK > .globl early_idt_handlers > early_idt_handlers: > - i = 0 > + vector = 0 > .rept NUM_EXCEPTION_VECTORS > - movl $i, %esi > - jmp early_idt_handler > - i = i + 1 > + /* > + * NMIs (vector 2) this early in the boot process are rarely critical > + * (usually it just means that there was a spurious bit flip somewhere > + * in the hardware, or that this is a kdump kernel and we received an > + * NMI generated in the previous context), so we ignore them here and > + * try to continue (see early_nmi_handler implementation below). > + * Harsher measures (panic, etc) are defered to the final NMI handler, > + * which can actually make an informed decision. > + */ > + .if vector == 2 > + jmp early_nmi_handler Is just a jump and not a move followed by a jump still 10 bytes? I hate to say it but I think this fails miserably for any exception after a nmi. I expect the simplest solution is to modify early_idt_handler to test for vector == 2. Doing something less brittle than: > extern const char early_idt_handlers[NUM_EXCEPTION_VECTORS][10]; in segment.h might be a good idea as well. Eric > + .else > + movl $vector, %esi > + jmp early_exception_handler > + .endif > + vector = vector + 1 > .endr > -#endif > > -ENTRY(early_idt_handler) > +early_exception_handler: > #ifdef CONFIG_EARLY_PRINTK > cmpl $2,early_recursion_flag(%rip) > jz 1f > @@ -315,6 +326,9 @@ ENTRY(early_idt_handler) > 1: hlt > jmp 1b > > +early_nmi_handler: > + iretq > + > #ifdef CONFIG_EARLY_PRINTK > early_recursion_flag: > .long 0