From: Marcelo Tosatti <mtosatti@redhat.com>
To: Joel Schopp <joel.schopp@amd.com>
Cc: Gleb Natapov <gleb@kernel.org>,
Paolo Bonzini <pbonzini@redhat.com>,
kvm@vger.kernel.org, David Kaplan <David.Kaplan@amd.com>,
rkrcmar@redhat.com, Joerg Roedel <joro@8bytes.org>,
linux-kernel@vger.kernel.org, Borislav Petkov <bp@alien8.de>
Subject: Re: [PATCH v3] x86: svm: use kvm_fast_pio_in()
Date: Thu, 12 Mar 2015 21:47:09 -0300 [thread overview]
Message-ID: <20150313004709.GA16530@amt.cnet> (raw)
In-Reply-To: <20150302210202.2951.56810.stgit@joelvmguard2.amd.com>
On Mon, Mar 02, 2015 at 03:02:02PM -0600, Joel Schopp wrote:
> From: David Kaplan <David.Kaplan@amd.com>
>
> We can make the in instruction go faster the same way the out instruction is
> already.
>
> Changes from v2[Joel]:
> * changed rax from u32 to unsigned long
> * changed a couple return 0 to BUG_ON()
> * changed 8 to sizeof(new_rax)
> * added trace hook
> * removed redundant clearing of count
> Changes from v1[Joel]
> * Added kvm_fast_pio_in() implementation that was left out of v1
>
> Signed-off-by: David Kaplan <David.Kaplan@amd.com>
> [extracted from larger unlrelated patch, forward ported, addressed reviews, tested]
> Signed-off-by: Joel Schopp <joel.schopp@amd.com>
> ---
> arch/x86/include/asm/kvm_host.h | 1 +
> arch/x86/kvm/svm.c | 4 +++-
> arch/x86/kvm/x86.c | 30 ++++++++++++++++++++++++++++++
> 3 files changed, 34 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> index a236e39..b976824 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -931,6 +931,7 @@ int kvm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr);
> struct x86_emulate_ctxt;
>
> int kvm_fast_pio_out(struct kvm_vcpu *vcpu, int size, unsigned short port);
> +int kvm_fast_pio_in(struct kvm_vcpu *vcpu, int size, unsigned short port);
> void kvm_emulate_cpuid(struct kvm_vcpu *vcpu);
> int kvm_emulate_halt(struct kvm_vcpu *vcpu);
> int kvm_emulate_wbinvd(struct kvm_vcpu *vcpu);
> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> index d319e0c..f8c906b 100644
> --- a/arch/x86/kvm/svm.c
> +++ b/arch/x86/kvm/svm.c
> @@ -1899,7 +1899,7 @@ static int io_interception(struct vcpu_svm *svm)
> ++svm->vcpu.stat.io_exits;
> string = (io_info & SVM_IOIO_STR_MASK) != 0;
> in = (io_info & SVM_IOIO_TYPE_MASK) != 0;
> - if (string || in)
> + if (string)
> return emulate_instruction(vcpu, 0) == EMULATE_DONE;
>
> port = io_info >> 16;
> @@ -1907,6 +1907,8 @@ static int io_interception(struct vcpu_svm *svm)
> svm->next_rip = svm->vmcb->control.exit_info_2;
> skip_emulated_instruction(&svm->vcpu);
>
> + if (in)
> + return kvm_fast_pio_in(vcpu, size, port);
> return kvm_fast_pio_out(vcpu, size, port);
> }
>
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index bd7a70b..d05efaf 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -5463,6 +5463,36 @@ int kvm_fast_pio_out(struct kvm_vcpu *vcpu, int size, unsigned short port)
> }
> EXPORT_SYMBOL_GPL(kvm_fast_pio_out);
>
> +static int complete_fast_pio(struct kvm_vcpu *vcpu)
> +{
> + unsigned long new_rax = kvm_register_read(vcpu, VCPU_REGS_RAX);
> +
> + BUG_ON(!vcpu->arch.pio.count);
> + BUG_ON(vcpu->arch.pio.count * vcpu->arch.pio.size > sizeof(new_rax));
> +
> + memcpy(&new_rax, vcpu, sizeof(new_rax));
Weird.
> + trace_kvm_pio(KVM_PIO_IN, vcpu->arch.pio.port, vcpu->arch.pio.size,
> + vcpu->arch.pio.count, vcpu->arch.pio_data);
> + kvm_register_write(vcpu, VCPU_REGS_RAX, new_rax);
> + vcpu->arch.pio.count = 0;
> + return 1;
> +}
> +
> +int kvm_fast_pio_in(struct kvm_vcpu *vcpu, int size, unsigned short port)
> +{
> + unsigned long val;
Please zero initialize val.
Please check sanity of size.
prev parent reply other threads:[~2015-03-13 0:47 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-02 21:02 [PATCH v3] x86: svm: use kvm_fast_pio_in() Joel Schopp
2015-03-03 16:42 ` Radim Krčmář
2015-03-03 19:48 ` Joel Schopp
2015-03-03 20:42 ` Radim Krčmář
2015-04-07 12:55 ` Paolo Bonzini
2015-03-03 16:44 ` Radim Krčmář
2015-03-03 20:03 ` Joel Schopp
2015-03-03 20:44 ` Radim Krčmář
2015-03-13 0:47 ` Marcelo Tosatti [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150313004709.GA16530@amt.cnet \
--to=mtosatti@redhat.com \
--cc=David.Kaplan@amd.com \
--cc=bp@alien8.de \
--cc=gleb@kernel.org \
--cc=joel.schopp@amd.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=rkrcmar@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.