From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from serv2.oss.ntt.co.jp ([222.151.198.100]) by bombadil.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1S5WIL-0005cQ-Du for kexec@lists.infradead.org; Thu, 08 Mar 2012 05:53:48 +0000 Message-ID: <4F58495B.5080308@oss.ntt.co.jp> Date: Thu, 08 Mar 2012 14:53:31 +0900 From: =?UTF-8?B?RmVybmFuZG8gTHVpcyBWw6F6cXVleiBDYW8=?= MIME-Version: 1.0 Subject: Re: [PATCH 1/2] boot: ignore early NMIs 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> In-Reply-To: List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: kexec-bounces@lists.infradead.org Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: "Eric W. Biederman" Cc: Don Zickus , akpm@linux-foundation.org, linux-tip-commits@vger.kernel.org, Yinghai Lu , kexec@lists.infradead.org, linux-kernel@vger.kernel.org, mingo@redhat.com, hpa@zytor.com, tglx@linutronix.de, torvalds@linux-foundation.org, mingo@elte.hu, vgoyal@redhat.com T24gMDMvMDgvMjAxMiAwMTo0MSBQTSwgRXJpYyBXLiBCaWVkZXJtYW4gd3JvdGU6Cj4gRmVybmFu ZG8gTHVpcyBWw6F6cXVleiBDYW88ZmVybmFuZG9Ab3NzLm50dC5jby5qcD4gIHdyaXRlczoKPgo+ PiBTdWJqZWN0OiBbUEFUQ0hdIGJvb3Q6IGlnbm9yZSBlYXJseSBOTUlzCj4+Cj4+IEZyb206IEZl cm5hbmRvIEx1aXMgVmF6cXVleiBDYW88ZmVybmFuZG9Ab3NzLm50dC5jby5qcD4KPj4KPj4gTk1J cyB2ZXJ5IGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MgYXJlIHJhcmVseSBjcml0aWNhbCAodXN1 YWxseQo+PiBpdCBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2FzIGEgc3B1cmlvdXMgYml0IGZsaXAg c29tZXdoZXJlIGluIHRoZQo+PiBoYXJkd2FyZSwgb3IgdGhhdCB0aGlzIGlzIGEga2R1bXAga2Vy bmVsIGFuZCB3ZSByZWNlaXZlZCBhbiBOTUkKPj4gZ2VuZXJhdGVkIGluIHRoZSBwcmV2aW91cyBj b250ZXh0KSwgc28gdGhlIGN1cnJlbnQgYmVoYXZpb3Igb2YKPj4gaGFsdGluZyB0aGUgc3lzdGVt IHdoZW4gb25lIG9jY3VycyBpcyBwcm9iYWJseSBhIGJpdCBvdmVyIHRoZSB0b3AuCj4+Cj4+IFRo aXMgcGF0Y2ggY2hhbmdlcyB0aGUgZWFybHkgSURUIHNvIHRoYXQgTk1JcyBhcmUgaWdub3JlZCBh bmQgdGhlCj4+IGtlcm5lbCBjYW4sIGhvcGVmdWxseSwgY29udGludWUgZXhlY3V0aW5nIG90aGVy IGNvZGUuIEhhcnNoZXIKPj4gbWVhc3VyZXMgKHBhbmljLCBldGMpIGFyZSBkZWZlcmVkIHRvIHRo ZSBmaW5hbCBOTUkgaGFuZGxlciwgd2hpY2gKPj4gY2FuIGFjdHVhbGx5IG1ha2UgYW4gaW5mb3Jt ZWQgZGVjaXNpb24uCj4+Cj4+IFRoaXMgaXNzdWUgcHJlc2VudGVkIGl0c2VsZiBpbiBvdXIgZW52 aXJvbm1lbnQgYXMgc2VlbWluZ2x5Cj4+IHJhbmRvbSBoYW5ncyBpbiBrZHVtcC4KPj4KPj4gU2ln bmVkLW9mZi1ieTogRmVybmFuZG8gTHVpcyBWYXpxdWV6IENhbzxmZXJuYW5kb0Bvc3MubnR0LmNv LmpwPgo+PiAtLS0KPj4KPj4gZGlmZiAtdXJOcCBsaW51eC0zLjMtcmM2LW9yaWcvYXJjaC94ODYv a2VybmVsL2hlYWQ2NC5jIGxpbnV4LTMuMy1yYzYvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCj4+ IC0tLSBsaW51eC0zLjMtcmM2LW9yaWcvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCTIwMTItMDMt MDcgMTU6NDk6MDEuODM0MjQxNzg3ICswOTAwCj4+ICsrKyBsaW51eC0zLjMtcmM2L2FyY2gveDg2 L2tlcm5lbC9oZWFkNjQuYwkyMDEyLTAzLTA3IDE4OjM5OjAzLjE3MzczMjg3NSArMDkwMAo+PiBA QCAtNzEsNyArNzEsNyBAQCB2b2lkIF9faW5pdCB4ODZfNjRfc3RhcnRfa2VybmVsKGNoYXIgKiBy Cj4+ICAgCQkJCShfX1NUQVJUX0tFUk5FTCYgIFBHRElSX01BU0spKSk7Cj4+ICAgCUJVSUxEX0JV R19PTihfX2ZpeF90b192aXJ0KF9fZW5kX29mX2ZpeGVkX2FkZHJlc3Nlcyk8PSBNT0RVTEVTX0VO RCk7Cj4+Cj4+IC0JLyogY2xlYXIgYnNzIGJlZm9yZSBzZXRfaW50cl9nYXRlIHdpdGggZWFybHlf aWR0X2hhbmRsZXIgKi8KPj4gKwkvKiBjbGVhciBic3MgYmVmb3JlIHNldF9pbnRyX2dhdGUgd2l0 aCBlYXJseV9pZHRfaGFuZGxlcnMgKi8KPj4gICAJY2xlYXJfYnNzKCk7Cj4+Cj4+ICAgCS8qIE1h a2UgTlVMTCBwb2ludGVycyBzZWdmYXVsdCAqLwo+PiBAQCAtNzksMTMgKzc5LDggQEAgdm9pZCBf X2luaXQgeDg2XzY0X3N0YXJ0X2tlcm5lbChjaGFyICogcgo+Pgo+PiAgIAltYXhfcGZuX21hcHBl ZCA9IEtFUk5FTF9JTUFHRV9TSVpFPj4gIFBBR0VfU0hJRlQ7Cj4+Cj4+IC0JZm9yIChpID0gMDsg aTwgIE5VTV9FWENFUFRJT05fVkVDVE9SUzsgaSsrKSB7Cj4+IC0jaWZkZWYgQ09ORklHX0VBUkxZ X1BSSU5USwo+PiArCWZvciAoaSA9IDA7IGk8ICBOVU1fRVhDRVBUSU9OX1ZFQ1RPUlM7IGkrKykK Pj4gICAJCXNldF9pbnRyX2dhdGUoaSwmZWFybHlfaWR0X2hhbmRsZXJzW2ldKTsKPj4gLSNlbHNl Cj4+IC0JCXNldF9pbnRyX2dhdGUoaSwgZWFybHlfaWR0X2hhbmRsZXIpOwo+PiAtI2VuZGlmCj4+ IC0JfQo+PiAgIAlsb2FkX2lkdCgoY29uc3Qgc3RydWN0IGRlc2NfcHRyICopJmlkdF9kZXNjcik7 Cj4+Cj4+ICAgCWlmIChjb25zb2xlX2xvZ2xldmVsID09IDEwKQo+PiBkaWZmIC11ck5wIGxpbnV4 LTMuMy1yYzYtb3JpZy9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TIGxpbnV4LTMuMy1yYzYvYXJj aC94ODYva2VybmVsL2hlYWRfNjQuUwo+PiAtLS0gbGludXgtMy4zLXJjNi1vcmlnL2FyY2gveDg2 L2tlcm5lbC9oZWFkXzY0LlMJMjAxMi0wMy0wNyAxNTo0OTowMS44MzgyNDE4MzkgKzA5MDAKPj4g KysrIGxpbnV4LTMuMy1yYzYvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUwkyMDEyLTAzLTA3IDE4 OjQxOjIxLjgxMTUxNjg3NiArMDkwMAo+PiBAQCAtMjcwLDE4ICsyNzAsMjkgQEAgYmFkX2FkZHJl c3M6Cj4+ICAgCWptcCBiYWRfYWRkcmVzcwo+Pgo+PiAgIAkuc2VjdGlvbiAiLmluaXQudGV4dCIs ImF4Igo+PiAtI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKPj4gICAJLmdsb2JsIGVhcmx5X2lk dF9oYW5kbGVycwo+PiAgIGVhcmx5X2lkdF9oYW5kbGVyczoKPj4gLQlpID0gMAo+PiArCXZlY3Rv ciA9IDAKPj4gICAJLnJlcHQgTlVNX0VYQ0VQVElPTl9WRUNUT1JTCj4+IC0JbW92bCAkaSwgJWVz aQo+PiAtCWptcCBlYXJseV9pZHRfaGFuZGxlcgo+PiAtCWkgPSBpICsgMQo+PiArCS8qCj4+ICsJ ICogTk1JcyAodmVjdG9yIDIpIHRoaXMgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2VzcyBhcmUgcmFy ZWx5IGNyaXRpY2FsCj4+ICsJICogKHVzdWFsbHkgaXQganVzdCBtZWFucyB0aGF0IHRoZXJlIHdh cyBhIHNwdXJpb3VzIGJpdCBmbGlwIHNvbWV3aGVyZQo+PiArCSAqIGluIHRoZSBoYXJkd2FyZSwg b3IgdGhhdCB0aGlzIGlzIGEga2R1bXAga2VybmVsIGFuZCB3ZSByZWNlaXZlZCBhbgo+PiArCSAq IE5NSSBnZW5lcmF0ZWQgaW4gdGhlIHByZXZpb3VzIGNvbnRleHQpLCBzbyB3ZSBpZ25vcmUgdGhl bSBoZXJlIGFuZAo+PiArCSAqIHRyeSB0byBjb250aW51ZSAoc2VlIGVhcmx5X25taV9oYW5kbGVy IGltcGxlbWVudGF0aW9uIGJlbG93KS4KPj4gKwkgKiBIYXJzaGVyIG1lYXN1cmVzIChwYW5pYywg ZXRjKSBhcmUgZGVmZXJlZCB0byB0aGUgZmluYWwgTk1JIGhhbmRsZXIsCj4+ICsJICogd2hpY2gg Y2FuIGFjdHVhbGx5IG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24uCj4+ICsJICovCj4+ICsJLmlm IHZlY3RvciA9PSAyCj4+ICsJam1wIGVhcmx5X25taV9oYW5kbGVyCj4gSXMganVzdCBhIGp1bXAg YW5kIG5vdCBhIG1vdmUgZm9sbG93ZWQgYnkgYSBqdW1wIHN0aWxsIDEwIGJ5dGVzPwo+IEkgaGF0 ZSB0byBzYXkgaXQgYnV0IEkgdGhpbmsgdGhpcyBmYWlscyBtaXNlcmFibHkgZm9yIGFueSBleGNl cHRpb24KPiBhZnRlciBhIG5taS4KClRoYW5rIHlvdSBmb3IgdGhlIGhlYWRzIHVwISBBY3R1YWxs eSwgaXQgd2FzIHdvcmtpbmcgZm9yIHRoZQpleGNlcHRpb25zIGFmdGVyIHRoZSBubWkgYnV0IHdp dGggYSBjb3JydXB0ZWQgZXNpICh2ZWN0b3IKbnVtYmVyKS4gTXkgb3JpZ2luYWwgaW50ZW50aW9u IHdhcyB0byBmaWxsIHRoZSBlbXB0eSBzcGFjZQp3aXRoIG5vcHMgYnV0IGZvcmdvdCB0byBhY3R1 YWxseSBpbXBsZW1lbnQgaXQuLi4gU29ycnkgYWJvdXQKdGhhdC4gV2lsbCBmaXggZm9yIHRoZSBu ZXh0IGl0ZXJhdGlvbi4KCj4gSSBleHBlY3QgdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIG1v ZGlmeSBlYXJseV9pZHRfaGFuZGxlciB0byB0ZXN0Cj4gZm9yIHZlY3RvciA9PSAyLgoKVGhhdCBp cyBwcmVjaXNlbHkgd2hhdCBJIGRpZCBvbiBhIHByZXZpb3VzIHZlcnNpb24gYnV0IHRoYXQgd291 bGQKaW52b2x2ZSB1c2luZyByZWdpc3RlcnMgd2hpY2ggbmVlZCB0byBiZSBzYXZlZCBhbmQgcmVz dG9yZWQgYW5kCkkgd2FudGVkIHRvIGF2b2lkIHVzaW5nIHRoZSBzdGFjayBpbiB0aGUgTk1JIHBh dGguIFdlIHdvdWxkIGFsc28KbmVlZCB0byBhZGQgYSAicHVzaHEgcnNpICIgaW4gZWFybHlfaWR0 X2hhbmRsZXJzIHdoaWNoIGltcGxpZXMKbW9kaWZ5aW5nICJlYXJseV9pZHRfaGFuZGxlcnMiIGRl ZmluaXRpb24gaW4gInNlZ21lbnQuaCIuCgpJZiB5b3UgYXJlIE9LIHdpdGggaXQgSSB3b3VsZCBs aWtlIHRvIGdvIHdpdGggdGhlIGFwcHJvYWNoIGluCnRoZSB0d28gcGF0Y2hlcyBJIHNlbnQuCgoK PiBEb2luZyBzb21ldGhpbmcgbGVzcyBicml0dGxlIHRoYW46Cj4+IGV4dGVybiBjb25zdCBjaGFy IGVhcmx5X2lkdF9oYW5kbGVyc1tOVU1fRVhDRVBUSU9OX1ZFQ1RPUlNdWzEwXTsKPiBpbiBzZWdt ZW50LmggbWlnaHQgYmUgYSBnb29kIGlkZWEgYXMgd2VsbC4KClllcywgSSBhZ3JlZS4gSSB3aWxs IGdpdmUgaXQgc29tZSB0aG91Z2h0LgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18Ka2V4ZWMgbWFpbGluZyBsaXN0CmtleGVjQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rZXhlYwo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752907Ab2CHFxe (ORCPT ); Thu, 8 Mar 2012 00:53:34 -0500 Received: from serv2.oss.ntt.co.jp ([222.151.198.100]:46538 "EHLO serv2.oss.ntt.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751589Ab2CHFxd (ORCPT ); Thu, 8 Mar 2012 00:53:33 -0500 Message-ID: <4F58495B.5080308@oss.ntt.co.jp> Date: Thu, 08 Mar 2012 14:53:31 +0900 From: =?UTF-8?B?RmVybmFuZG8gTHVpcyBWw6F6cXVleiBDYW8=?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.2) Gecko/20120216 Thunderbird/10.0.2 MIME-Version: 1.0 To: "Eric W. Biederman" 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 Subject: Re: [PATCH 1/2] boot: ignore early NMIs 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> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/08/2012 01:41 PM, Eric W. Biederman wrote: > 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. Thank you for the heads up! Actually, it was working for the exceptions after the nmi but with a corrupted esi (vector number). My original intention was to fill the empty space with nops but forgot to actually implement it... Sorry about that. Will fix for the next iteration. > I expect the simplest solution is to modify early_idt_handler to test > for vector == 2. That is precisely what I did on a previous version but that would involve using registers which need to be saved and restored and I wanted to avoid using the stack in the NMI path. We would also need to add a "pushq rsi " in early_idt_handlers which implies modifying "early_idt_handlers" definition in "segment.h". If you are OK with it I would like to go with the approach in the two patches I sent. > 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. Yes, I agree. I will give it some thought.