From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: Re: [PATCH v2 06/30] KVM: remove realmode_lmsw function. Date: Mon, 15 Mar 2010 12:02:52 +0100 Message-ID: <4B9E13DC.8000607@amd.com> References: <1268583675-3101-1-git-send-email-gleb@redhat.com> <1268583675-3101-7-git-send-email-gleb@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Cc: avi@redhat.com, mtosatti@redhat.com, kvm@vger.kernel.org To: Gleb Natapov Return-path: Received: from tx2ehsobe005.messaging.microsoft.com ([65.55.88.15]:7090 "EHLO TX2EHSOBE010.bigfish.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S936127Ab0COLD2 (ORCPT ); Mon, 15 Mar 2010 07:03:28 -0400 In-Reply-To: <1268583675-3101-7-git-send-email-gleb@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: Gleb Natapov wrote: > Use (get|set)_cr callback to emulate lmsw inside emulator. I see that vmx.c:handle_cr() is the only other user of kvm_lmsw(). If we fix this place similar like you did below, we could get rid of kvm_lmsw() entirely. But I am not sure whether it's OK to remove an exported symbol. Regards, Andre. > > Signed-off-by: Gleb Natapov > --- > arch/x86/include/asm/kvm_host.h | 2 -- > arch/x86/kvm/emulate.c | 4 ++-- > arch/x86/kvm/x86.c | 7 ------- > 3 files changed, 2 insertions(+), 11 deletions(-) > > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > index e8e108a..1e15a0a 100644 > --- a/arch/x86/include/asm/kvm_host.h > +++ b/arch/x86/include/asm/kvm_host.h > @@ -582,8 +582,6 @@ int emulate_instruction(struct kvm_vcpu *vcpu, > void kvm_report_emulation_failure(struct kvm_vcpu *cvpu, const char *context); > void realmode_lgdt(struct kvm_vcpu *vcpu, u16 size, unsigned long address); > void realmode_lidt(struct kvm_vcpu *vcpu, u16 size, unsigned long address); > -void realmode_lmsw(struct kvm_vcpu *vcpu, unsigned long msw, > - unsigned long *rflags); > > void kvm_enable_efer_bits(u64); > int kvm_get_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 *data); > diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c > index 5b060e4..5e2fa61 100644 > --- a/arch/x86/kvm/emulate.c > +++ b/arch/x86/kvm/emulate.c > @@ -2486,8 +2486,8 @@ twobyte_insn: > c->dst.val = ops->get_cr(0, ctxt->vcpu); > break; > case 6: /* lmsw */ > - realmode_lmsw(ctxt->vcpu, (u16)c->src.val, > - &ctxt->eflags); > + ops->set_cr(0, (ops->get_cr(0, ctxt->vcpu) & ~0x0ful) | > + (c->src.val & 0x0f), ctxt->vcpu); > c->dst.type = OP_NONE; > break; > case 7: /* invlpg*/ > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index bf714df..b08f8a1 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -4045,13 +4045,6 @@ void realmode_lidt(struct kvm_vcpu *vcpu, u16 limit, unsigned long base) > kvm_x86_ops->set_idt(vcpu, &dt); > } > > -void realmode_lmsw(struct kvm_vcpu *vcpu, unsigned long msw, > - unsigned long *rflags) > -{ > - kvm_lmsw(vcpu, msw); > - *rflags = kvm_get_rflags(vcpu); > -} > - > static int move_to_next_stateful_cpuid_entry(struct kvm_vcpu *vcpu, int i) > { > struct kvm_cpuid_entry2 *e = &vcpu->arch.cpuid_entries[i]; -- Andre Przywara AMD-OSRC (Dresden) Tel: x29712