HATAYAMA Daisuke <d.hatayama at jp.fujitsu.com> writes: > From: Fernando Luis V?zquez Cao <fernando at oss.ntt.co.jp> > Subject: Re: [tip:x86/debug] x86/kdump: No need to disable ioapic/ lapic in crash path > Date: Wed, 07 Mar 2012 19:53:16 +0900 > >> On 03/01/2012 08:19 AM, Eric W. Biederman wrote: >> >>> Don Zickus<dzickus at redhat.com> writes: >>>> It probably is, except I never hacked on idt code before and my >>>> assembly >>>> isn't that good. I have been trying to find examples to copy from to >>>> give >>>> it a try. So far I was using early_idt_handlers with early_printk to >>>> see >>>> if I could capture some printk messages while jumping from the first >>>> kernel to the second kernel (when the other early_idt_handlers would >>>> kick >>>> in for the second kernel). >>>> >>>> Tips? Better examples? >>> That is a particularly good example. When I took a quick look earlier >>> that is the first place we reload the idt in the kernel boot so that >>> is >>> one of two places that needs to be modified. >> >> Hi Eric, Don >> >> Sorry for chiming in so late. >> >> We run into the same NMI problems and wrote some patches that tackle >> the kernel boot side of things. They have been extensively tested >> using >> qemu-kvm and things seem to be working as expected (after receiving an >> early NMI the kernel continues without problem; after the iret there >> is no >> stack corruption or register corruption). >> >> I will be replying to this email with the patches. >> > > Should the following also be fixed? Most definitely. I think Fernando said he was going to tackle that next. Eric > /* > * Do not allocate memory (or fail in any way) in machine_kexec(). > * We are past the point of no return, committed to rebooting now. > */ > void machine_kexec(struct kimage *image) > { > unsigned long page_list[PAGES_NR]; > void *control_page; > int save_ftrace_enabled; > <cut> > /* > * The gdt & idt are now invalid. > * If you want to load them you must set up your own idt & gdt. > */ > set_gdt(phys_to_virt(0), 0); > set_idt(phys_to_virt(0), 0); <--- This > > Thanks. > HATAYAMA, Daisuke