From: Pekka Enberg <penberg@kernel.org>
To: kvm@vger.kernel.org
Cc: Pekka Enberg <penberg@kernel.org>,
Asias He <asias.hejun@gmail.com>,
Cyrill Gorcunov <gorcunov@gmail.com>, Ingo Molnar <mingo@elte.hu>
Subject: [PATCH 1/2] kvm tools: Extract kvm_cpu__start() function
Date: Sat, 9 Apr 2011 13:51:06 +0300 [thread overview]
Message-ID: <1302346267-457-1-git-send-email-penberg@kernel.org> (raw)
In preparation for threaded execution, separate kvm_cpu__start() function so it
can be reused for multiple threads.
Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
---
tools/kvm/include/kvm/kvm-cpu.h | 1 +
tools/kvm/kvm-cpu.c | 59 +++++++++++++++++++++++++++++++++++++++
tools/kvm/kvm-run.c | 51 ++-------------------------------
3 files changed, 63 insertions(+), 48 deletions(-)
diff --git a/tools/kvm/include/kvm/kvm-cpu.h b/tools/kvm/include/kvm/kvm-cpu.h
index d36dadf..b4e2134 100644
--- a/tools/kvm/include/kvm/kvm-cpu.h
+++ b/tools/kvm/include/kvm/kvm-cpu.h
@@ -25,6 +25,7 @@ void kvm_cpu__reset_vcpu(struct kvm_cpu *self);
void kvm_cpu__setup_cpuid(struct kvm_cpu *self);
void kvm_cpu__enable_singlestep(struct kvm_cpu *self);
void kvm_cpu__run(struct kvm_cpu *self);
+int kvm_cpu__start(struct kvm_cpu *cpu);
void kvm_cpu__show_code(struct kvm_cpu *self);
void kvm_cpu__show_registers(struct kvm_cpu *self);
diff --git a/tools/kvm/kvm-cpu.c b/tools/kvm/kvm-cpu.c
index 374adb2..392fad3 100644
--- a/tools/kvm/kvm-cpu.c
+++ b/tools/kvm/kvm-cpu.c
@@ -1,5 +1,7 @@
#include "kvm/kvm-cpu.h"
+#include "kvm/virtio-console.h"
+#include "kvm/8250-serial.h"
#include "kvm/util.h"
#include "kvm/kvm.h"
@@ -368,3 +370,60 @@ void kvm_cpu__run(struct kvm_cpu *self)
if (err && (errno != EINTR && errno != EAGAIN))
die_perror("KVM_RUN failed");
}
+
+int kvm_cpu__start(struct kvm_cpu *cpu)
+{
+ for (;;) {
+ kvm_cpu__run(cpu);
+
+ switch (cpu->kvm_run->exit_reason) {
+ case KVM_EXIT_DEBUG:
+ kvm_cpu__show_registers(cpu);
+ kvm_cpu__show_code(cpu);
+ break;
+ case KVM_EXIT_IO: {
+ bool ret;
+
+ ret = kvm__emulate_io(cpu->kvm,
+ cpu->kvm_run->io.port,
+ (uint8_t *)cpu->kvm_run +
+ cpu->kvm_run->io.data_offset,
+ cpu->kvm_run->io.direction,
+ cpu->kvm_run->io.size,
+ cpu->kvm_run->io.count);
+
+ if (!ret)
+ goto panic_kvm;
+ break;
+ }
+ case KVM_EXIT_MMIO: {
+ bool ret;
+
+ ret = kvm__emulate_mmio(cpu->kvm,
+ cpu->kvm_run->mmio.phys_addr,
+ cpu->kvm_run->mmio.data,
+ cpu->kvm_run->mmio.len,
+ cpu->kvm_run->mmio.is_write);
+
+ if (!ret)
+ goto panic_kvm;
+ break;
+ }
+ case KVM_EXIT_INTR: {
+ serial8250__inject_interrupt(cpu->kvm);
+ virtio_console__inject_interrupt(cpu->kvm);
+ break;
+ }
+ case KVM_EXIT_SHUTDOWN:
+ goto exit_kvm;
+ default:
+ goto panic_kvm;
+ }
+ }
+
+exit_kvm:
+ return 0;
+
+panic_kvm:
+ return 1;
+}
diff --git a/tools/kvm/kvm-run.c b/tools/kvm/kvm-run.c
index 9392818..9a0400b 100644
--- a/tools/kvm/kvm-run.c
+++ b/tools/kvm/kvm-run.c
@@ -177,54 +177,9 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
kvm__start_timer(kvm);
- for (;;) {
- kvm_cpu__run(cpu);
-
- switch (cpu->kvm_run->exit_reason) {
- case KVM_EXIT_DEBUG:
- kvm_cpu__show_registers(cpu);
- kvm_cpu__show_code(cpu);
- break;
- case KVM_EXIT_IO: {
- bool ret;
-
- ret = kvm__emulate_io(kvm,
- cpu->kvm_run->io.port,
- (uint8_t *)cpu->kvm_run +
- cpu->kvm_run->io.data_offset,
- cpu->kvm_run->io.direction,
- cpu->kvm_run->io.size,
- cpu->kvm_run->io.count);
-
- if (!ret)
- goto panic_kvm;
- break;
- }
- case KVM_EXIT_MMIO: {
- bool ret;
-
- ret = kvm__emulate_mmio(kvm,
- cpu->kvm_run->mmio.phys_addr,
- cpu->kvm_run->mmio.data,
- cpu->kvm_run->mmio.len,
- cpu->kvm_run->mmio.is_write);
-
- if (!ret)
- goto panic_kvm;
- break;
- }
- case KVM_EXIT_INTR: {
- serial8250__inject_interrupt(kvm);
- virtio_console__inject_interrupt(kvm);
- break;
- }
- case KVM_EXIT_SHUTDOWN:
- goto exit_kvm;
- default:
- goto panic_kvm;
- }
- }
-exit_kvm:
+ if (kvm_cpu__start(cpu))
+ goto panic_kvm;
+
disk_image__close(kvm->disk_image);
kvm__delete(kvm);
--
1.7.0.4
next reply other threads:[~2011-04-09 10:51 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-09 10:51 Pekka Enberg [this message]
2011-04-09 10:51 ` [PATCH 2/2] kvm tools: Move CPU initialization to kvm_cpu__start() Pekka Enberg
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=1302346267-457-1-git-send-email-penberg@kernel.org \
--to=penberg@kernel.org \
--cc=asias.hejun@gmail.com \
--cc=gorcunov@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=mingo@elte.hu \
/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