From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: Re: [PATCH] Allow wake up of offline vcpu via nmi-ipi Date: Wed, 18 Jan 2012 11:39:22 +0100 Message-ID: <4F16A15A.3040405@ts.fujitsu.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org On 01/18/2012 10:36 AM, Keir Fraser wrote: > On 18/01/2012 09:31, "Keir Fraser" wrote: > >> On 18/01/2012 09:07, "Juergen Gross" wrote: >> >>> On 01/18/2012 09:48 AM, Juergen Gross wrote: >>>> On a real machine a cpu disabled via hlt with interrupts disabled can be >>>> reactivated via a nmi ipi. Enable the hypervisor to do this for hvm, too. >>>> >>>> Signed-off-by: juergen.gross@ts.fujitsu.com >>>> >>>> >>>> 1 file changed, 4 insertions(+), 1 deletion(-) >>>> xen/arch/x86/hvm/vlapic.c | 5 ++++- >>> BTW: I was not able to reactivate a vcpu via INIT/SIPI/SIPI sequence. It >>> works >>> on initial system boot when the target vcpu is activated the first time. If I >>> deactivate a vcpu and try to activate it again it will start to run, but it >>> is >>> not starting at the specified entry point (at least it isn't performing the >>> first instruction there). >>> Is there some special initialization needed to make this work? Do I have to >>> reset >>> something on the vcpu before deactivating it? >> No it should just work. Hvmloader wakes and then sleeps every AP, in >> hvmloader/smp.c. So even the first INIT-SIPI wakeup of an AP in the guest OS >> is not the first, as hvmloader already did it once! So this path should be >> working and indeed tested on every HVM guest boot. > Bit more info: INIT-SIPI logic is complicated by needing to avoid deadlocks > between two VCPUs attempting to pause and reset each other. But the core > dispatch logic is in vlapic_init_sipi_action(). You will see that on INIT, > we should call vcpu_reset() which will de-initialise and VCPU_down the vcpu. > And then on SIPI we call hvm_vcpu_reset_state(), which should reinitialise > and wake the vcpu to start running at the specified CS:IP. > > So the above will be good places for you to add tracing and work out what's > going on. :-) Yeah, thanks for the confirmation this should work. Printing some diagnostics helped me to spot the error in my code. Juergen -- Juergen Gross Principal Developer Operating Systems PDG ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967 Fujitsu Technology Solutions e-mail: juergen.gross@ts.fujitsu.com Domagkstr. 28 Internet: ts.fujitsu.com D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html