From: Paolo Bonzini <pbonzini@redhat.com>
To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org
Cc: seanjc@google.com
Subject: [PATCH 1/6] KVM: x86: inline kernel_pio into its sole caller
Date: Wed, 8 Jun 2022 08:12:48 -0400 [thread overview]
Message-ID: <20220608121253.867333-2-pbonzini@redhat.com> (raw)
In-Reply-To: <20220608121253.867333-1-pbonzini@redhat.com>
The caller of kernel_pio already has arguments for most of what kernel_pio
fishes out of vcpu->arch.pio. This is the first step towards ensuring that
vcpu->arch.pio.* is only used when exiting to userspace.
We can now also WARN if emulated PIO performs successful in-kernel iterations
before having to fall back to userspace. The code is not ready for that, and
it should never happen.
No functional change intended.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
arch/x86/kvm/x86.c | 39 +++++++++++++++++----------------------
1 file changed, 17 insertions(+), 22 deletions(-)
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 79efdc19b4c8..2f9100f2564e 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7415,37 +7415,32 @@ static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
return emulator_write_emulated(ctxt, addr, new, bytes, exception);
}
-static int kernel_pio(struct kvm_vcpu *vcpu, void *pd)
-{
- int r = 0, i;
-
- for (i = 0; i < vcpu->arch.pio.count; i++) {
- if (vcpu->arch.pio.in)
- r = kvm_io_bus_read(vcpu, KVM_PIO_BUS, vcpu->arch.pio.port,
- vcpu->arch.pio.size, pd);
- else
- r = kvm_io_bus_write(vcpu, KVM_PIO_BUS,
- vcpu->arch.pio.port, vcpu->arch.pio.size,
- pd);
- if (r)
- break;
- pd += vcpu->arch.pio.size;
- }
- return r;
-}
-
static int emulator_pio_in_out(struct kvm_vcpu *vcpu, int size,
unsigned short port,
unsigned int count, bool in)
{
+ void *data = vcpu->arch.pio_data;
+ unsigned i;
+ int r;
+
vcpu->arch.pio.port = port;
vcpu->arch.pio.in = in;
- vcpu->arch.pio.count = count;
+ vcpu->arch.pio.count = count;
vcpu->arch.pio.size = size;
- if (!kernel_pio(vcpu, vcpu->arch.pio_data))
- return 1;
+ for (i = 0; i < count; i++) {
+ if (in)
+ r = kvm_io_bus_read(vcpu, KVM_PIO_BUS, port, size, data);
+ else
+ r = kvm_io_bus_write(vcpu, KVM_PIO_BUS, port, size, data);
+ if (r)
+ goto userspace_io;
+ data += size;
+ }
+ return 1;
+userspace_io:
+ WARN_ON(i != 0);
vcpu->run->exit_reason = KVM_EXIT_IO;
vcpu->run->io.direction = in ? KVM_EXIT_IO_IN : KVM_EXIT_IO_OUT;
vcpu->run->io.size = size;
--
2.31.1
next prev parent reply other threads:[~2022-06-08 12:13 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-08 12:12 [PATCH 0/6] KVM: x86: vcpu->arch.pio* cleanups Paolo Bonzini
2022-06-08 12:12 ` Paolo Bonzini [this message]
2022-06-09 21:33 ` [PATCH 1/6] KVM: x86: inline kernel_pio into its sole caller Sean Christopherson
2022-06-08 12:12 ` [PATCH 2/6] KVM: x86: move all vcpu->arch.pio* setup in emulator_pio_in_out Paolo Bonzini
2022-06-09 22:03 ` Sean Christopherson
2022-06-08 12:12 ` [PATCH 3/6] KVM: x86: wean in-kernel PIO from vcpu->arch.pio* Paolo Bonzini
2022-06-09 22:19 ` Sean Christopherson
2022-06-08 12:12 ` [PATCH 4/6] KVM: x86: wean fast IN from emulator_pio_in Paolo Bonzini
2022-06-09 22:37 ` Sean Christopherson
2022-06-08 12:12 ` [PATCH 5/6] KVM: x86: de-underscorify __emulator_pio_in Paolo Bonzini
2022-06-09 22:42 ` Sean Christopherson
2022-06-08 12:12 ` [PATCH 6/6] KVM: SEV-ES: reuse advance_sev_es_emulated_ins for OUT too Paolo Bonzini
2022-06-09 22:50 ` Sean Christopherson
2022-06-15 14:41 ` Paolo Bonzini
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=20220608121253.867333-2-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=seanjc@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®