From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerone Young Date: Wed, 02 Apr 2008 19:26:45 +0000 Subject: Re: [kvm-ppc-devel] [PATCH 2 of 2] Add PowerPC KVM guest Message-Id: <1207164405.12998.8.camel@thinkpadL> List-Id: References: <1206741014.5432.36.camel@basalt> In-Reply-To: <1206741014.5432.36.camel@basalt> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: kvm-ppc@vger.kernel.org On Wed, 2008-04-02 at 14:23 -0500, Hollis Blanchard wrote: > On Wednesday 02 April 2008 13:07:55 Jerone Young wrote: > > # HG changeset patch > > # User Jerone Young > > # Date 1207159658 18000 > > # Node ID f3f6c082021e9a3a515f140763b6ba2b677e8b34 > > # Parent 007c135cb5f14f5eb025c103623c2ebfcc76ab11 > > Add PowerPC KVM guest wait handling support > > > > This patch handles a guest that is in a wait state. This ensures that the > > guest is not allways eating up 100% cpu when it is idle. > > > > Signed-off-by: Jerone Young > > > > diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c > > --- a/arch/powerpc/kvm/powerpc.c > > +++ b/arch/powerpc/kvm/powerpc.c > > @@ -164,13 +164,12 @@ void kvmppc_dump_vcpu(struct kvm_vcpu *v > > > > int kvm_cpu_has_interrupt(struct kvm_vcpu *v) > > { > > - /* XXX implement me */ > > - return 0; > > + return (v->arch.pending_exceptions); > > } > > > > int kvm_arch_vcpu_runnable(struct kvm_vcpu *v) > > { > > - return 1; > > + return !(v->arch.msr & MSR_WE); > > } > > > > /* Check if we are ready to deliver the interrupt */ > > @@ -342,6 +341,25 @@ int kvmppc_handle_exit(struct kvm_run *r > > default: > > BUG(); > > } > > + > > + /* handle guest vcpu that is in wait state */ > > + /* XXX eventually replace with kvm_vcpu_block() */ > > + if (vcpu->arch.msr & MSR_WE) { > > + DECLARE_WAITQUEUE(wait, current); > > + > > + add_wait_queue(&vcpu->wq, &wait); > > + > > + while (!kvm_cpu_has_interrupt(vcpu) > > + && !signal_pending(current) > > + && !kvm_arch_vcpu_runnable(vcpu)) { > > + set_current_state(TASK_INTERRUPTIBLE); > > + schedule(); > > + } > > + > > + __set_current_state(TASK_RUNNING); > > + remove_wait_queue(&vcpu->wq, &wait); > > + } > > + > > break; > > > > case BOOKE_INTERRUPT_DATA_STORAGE: > > I've commented on this several times, by email and in person, and you told me > that you would move this code inside emulate_instruction(). No I was saying that the code was going to go after emulate_instructions was run. Not in the emulate_instruction function. That is where the code has been placed just after the function is run. Did you want in in the emulate_instruction function ? > ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace _______________________________________________ kvm-ppc-devel mailing list kvm-ppc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-ppc-devel