From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757431AbXHaICT (ORCPT ); Fri, 31 Aug 2007 04:02:19 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754678AbXHaIB7 (ORCPT ); Fri, 31 Aug 2007 04:01:59 -0400 Received: from gprs189-60.eurotel.cz ([160.218.189.60]:2686 "EHLO spitz.ucw.cz" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754474AbXHaIB6 (ORCPT ); Fri, 31 Aug 2007 04:01:58 -0400 Date: Mon, 27 Aug 2007 18:48:29 +0000 From: Pavel Machek To: "Huang, Ying" Cc: "Eric W. Biederman" , nigel@nigel.suspend2.net, Andrew Morton , Jeremy Maitin-Shepard , linux-kernel@vger.kernel.org, linux-pm@lists.linux-foundation.org, Kexec Mailing List Subject: Re: [RFC][PATCH 1/2 -mm] kexec based hibernation: kexec jump Message-ID: <20070827184829.GB4104@ucw.cz> References: <1188177280.3247.37.camel@caritas-dev.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1188177280.3247.37.camel@caritas-dev.intel.com> User-Agent: Mutt/1.5.9i Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Hi! > To support jumping back from kexeced kernel, before executing the new > kernel, the devices are put into quiescent state (to be fully > implemented), and the state of devices and CPU is saved. After jumping > back from kexeced kernel, the state of devices and CPU are restored > accordingly. The devices/CPU state save/restore code of software > suspend is called to implement corresponding function. > > Signed-off-by: Huang Ying Looks quite ok to me... > Index: linux-2.6.23-rc3/include/asm-i386/kexec.h > =================================================================== > --- linux-2.6.23-rc3.orig/include/asm-i386/kexec.h 2007-08-25 21:56:54.000000000 +0800 > +++ linux-2.6.23-rc3/include/asm-i386/kexec.h 2007-08-25 21:57:00.000000000 +0800 > @@ -94,6 +94,10 @@ > unsigned long start_address, > unsigned int has_pae) ATTRIB_NORET; > > +#ifdef CONFIG_KEXEC_JUMP > +extern asmlinkage int machine_kexec_real_jump(void *buf); > +#endif Is it really neccessery to have ifdef here? > +#ifdef CONFIG_KEXEC_JUMP > +#define KEXEC_JUMP_FLAG_IS_KEXECED_KERNEL 0x1 > +#endif /* CONFIG_KEXEC_JUMP */ And here? ... It would be nice to use slightly shorter identifier. 'KJUMP_IS_KEXECED' should be enough. > +/* > + * Must be relocatable PIC code callable as a C function > + */ > +#define HALF_PAGE_ALIGNED (1 << (PAGE_SHIFT-1)) > + > +#define EBX 0x0 > +#define ESI 0x4 > +#define EDI 0x8 > +#define EBP 0xc > +#define ESP 0x10 > +#define CR0 0x14 > +#define CR3 0x18 > +#define CR4 0x1c > +#define FLAG 0x20 > +#define RET 0x24 Hmm, is this enough? Should it use struct ptregs for normal registers? What about segment registers -- they could change between kernel version. Should some kind of 'version of kjump protocol' be introduced? What about CX/DX/fpu state? GDT pointer? Actually I think that you _do_ need to save FPU. You should probably use relevant swsusp parts here. Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html