From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 3/4] Nested SVM: Implement INVLPGA v2 Date: Tue, 19 May 2009 15:58:52 +0300 Message-ID: <4A12AD0C.9030402@redhat.com> References: <1242730443-15656-1-git-send-email-agraf@suse.de> <1242730443-15656-2-git-send-email-agraf@suse.de> <1242730443-15656-3-git-send-email-agraf@suse.de> <1242730443-15656-4-git-send-email-agraf@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, joerg.roedel@amd.com, Marcelo Tosatti To: Alexander Graf Return-path: Received: from mx2.redhat.com ([66.187.237.31]:57285 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750849AbZESM6z (ORCPT ); Tue, 19 May 2009 08:58:55 -0400 In-Reply-To: <1242730443-15656-4-git-send-email-agraf@suse.de> Sender: kvm-owner@vger.kernel.org List-ID: Alexander Graf wrote: > SVM adds another way to do INVLPG by ASID which Hyper-V makes use of, > so let's implement it! > > For now we just do the same thing invlpg does, as asid switching > means we flush the mmu anyways. That might change one day though. > > v2 makes invlpga do the same as invlpg, not flush the whole mmu > > > +static int invlpga_interception(struct vcpu_svm *svm, struct kvm_run *kvm_run) > +{ > + struct kvm_vcpu *vcpu = &svm->vcpu; > + nsvm_printk("INVLPGA\n"); > + > + /* Let's treat INVLPGA the same as INVLPG */ > + kvm_mmu_invlpg(vcpu, vcpu->arch.regs[VCPU_REGS_RAX]); > + > + svm->next_rip = kvm_rip_read(&svm->vcpu) + 3; > + skip_emulated_instruction(&svm->vcpu); > + return 1; > +} > I think that for ASID!=0 you can actually do nothing. The guest entry is a cr3 switch, so we'll both get a tlb flush and a resync on any modified ptes. For ASID==0 you can do the invlpg thing. Marcelo? -- error compiling committee.c: too many arguments to function