public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/9] (Almost) get rid of kvm vcpu structure
@ 2009-07-29 17:49 Glauber Costa
  2009-07-29 17:49 ` [PATCH 1/9] use coalesced_mmio field from qemu upstream Glauber Costa
  0 siblings, 1 reply; 11+ messages in thread
From: Glauber Costa @ 2009-07-29 17:49 UTC (permalink / raw)
  To: kvm; +Cc: avi

In this patch series, I am folding everything (most things were already available)
from vcpu context into CPUState. After that is done, I'm able to start using
upstream's kvm_vcpu_ioctl, which needs a few tweaks, whenever we test for -1 as a
return value.

I, however, did not remove references to kvm_vcpu_context in functions signature,
to avoid inflating this patch set. Once this is merged, I'll do a separate patch
that does it.

Thanks!


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/9] use coalesced_mmio field from qemu upstream
  2009-07-29 17:49 [PATCH 0/9] (Almost) get rid of kvm vcpu structure Glauber Costa
@ 2009-07-29 17:49 ` Glauber Costa
  2009-07-29 17:49   ` [PATCH 2/9] remove kvm_mmio_read and kvm_mmio_write Glauber Costa
  0 siblings, 1 reply; 11+ messages in thread
From: Glauber Costa @ 2009-07-29 17:49 UTC (permalink / raw)
  To: kvm; +Cc: avi

remove it from kvm_context too. Besides it all,
helps catching any missing conversion

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 qemu-kvm.c |   14 ++++++--------
 qemu-kvm.h |    2 --
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/qemu-kvm.c b/qemu-kvm.c
index 352e4cd..8c36eac 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -976,9 +976,9 @@ again:
 	post_kvm_run(kvm, env);
 
 #if defined(KVM_CAP_COALESCED_MMIO)
-	if (kvm->coalesced_mmio) {
+	if (kvm_state->coalesced_mmio) {
 	        struct kvm_coalesced_mmio_ring *ring = (void *)run +
-						kvm->coalesced_mmio * PAGE_SIZE;
+						kvm_state->coalesced_mmio * PAGE_SIZE;
 		while (ring->first != ring->last) {
 			kvm_mmio_write(kvm->opaque,
 				 ring->coalesced_mmio[ring->first].phys_addr,
@@ -1113,11 +1113,11 @@ int kvm_inject_nmi(kvm_vcpu_context_t vcpu)
 int kvm_init_coalesced_mmio(kvm_context_t kvm)
 {
 	int r = 0;
-	kvm->coalesced_mmio = 0;
+	kvm_state->coalesced_mmio = 0;
 #ifdef KVM_CAP_COALESCED_MMIO
 	r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_COALESCED_MMIO);
 	if (r > 0) {
-		kvm->coalesced_mmio = r;
+		kvm_state->coalesced_mmio = r;
 		return 0;
 	}
 #endif
@@ -1127,11 +1127,10 @@ int kvm_init_coalesced_mmio(kvm_context_t kvm)
 int kvm_coalesce_mmio_region(target_phys_addr_t addr, ram_addr_t size)
 {
 #ifdef KVM_CAP_COALESCED_MMIO
-	kvm_context_t kvm = kvm_context;
 	struct kvm_coalesced_mmio_zone zone;
 	int r;
 
-	if (kvm->coalesced_mmio) {
+	if (kvm_state->coalesced_mmio) {
 
 		zone.addr = addr;
 		zone.size = size;
@@ -1150,11 +1149,10 @@ int kvm_coalesce_mmio_region(target_phys_addr_t addr, ram_addr_t size)
 int kvm_uncoalesce_mmio_region(target_phys_addr_t addr, ram_addr_t size)
 {
 #ifdef KVM_CAP_COALESCED_MMIO
-	kvm_context_t kvm = kvm_context;
 	struct kvm_coalesced_mmio_zone zone;
 	int r;
 
-	if (kvm->coalesced_mmio) {
+	if (kvm_state->coalesced_mmio) {
 
 		zone.addr = addr;
 		zone.size = size;
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 40a7a2f..8dfdf6b 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -61,8 +61,6 @@ struct kvm_context {
 	int irqchip_inject_ioctl;
 	/// do not create in-kernel pit if set
 	int no_pit_creation;
-	/// in-kernel coalesced mmio
-	int coalesced_mmio;
 #ifdef KVM_CAP_IRQ_ROUTING
 	struct kvm_irq_routing *irq_routes;
 	int nr_allocated_irq_routes;
-- 
1.6.2.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/9] remove kvm_mmio_read and kvm_mmio_write
  2009-07-29 17:49 ` [PATCH 1/9] use coalesced_mmio field from qemu upstream Glauber Costa
@ 2009-07-29 17:49   ` Glauber Costa
  2009-07-29 17:49     ` [PATCH 3/9] put env inside vcpu_context Glauber Costa
  2009-08-03 13:12     ` [PATCH 2/9] remove kvm_mmio_read and kvm_mmio_write Avi Kivity
  0 siblings, 2 replies; 11+ messages in thread
From: Glauber Costa @ 2009-07-29 17:49 UTC (permalink / raw)
  To: kvm; +Cc: avi

all they did was to call a qemu function. Call this function instead.

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 qemu-kvm-x86.c |    7 +------
 qemu-kvm.c     |   34 ++++++++--------------------------
 2 files changed, 9 insertions(+), 32 deletions(-)

diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
index 40a90bf..76c7631 100644
--- a/qemu-kvm-x86.c
+++ b/qemu-kvm-x86.c
@@ -364,7 +364,6 @@ void kvm_show_code(kvm_vcpu_context_t vcpu)
 	unsigned char code;
 	char code_str[SHOW_CODE_LEN * 3 + 1];
 	unsigned long rip;
-	kvm_context_t kvm = vcpu->kvm;
 
 	r = ioctl(fd, KVM_GET_SREGS, &sregs);
 	if (r == -1) {
@@ -384,11 +383,7 @@ void kvm_show_code(kvm_vcpu_context_t vcpu)
 	for (n = -back_offset; n < SHOW_CODE_LEN-back_offset; ++n) {
 		if (n == 0)
 			strcat(code_str, " -->");
-		r = kvm_mmio_read(kvm->opaque, rip + n, &code, 1);
-		if (r < 0) {
-			strcat(code_str, " xx");
-			continue;
-		}
+		cpu_physical_memory_rw(rip + n, &code, 1, 0);
 		sprintf(code_str + strlen(code_str), " %02x", code);
 	}
 	fprintf(stderr, "code:%s\n", code_str);
diff --git a/qemu-kvm.c b/qemu-kvm.c
index 8c36eac..65042d2 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -97,18 +97,6 @@ static int kvm_debug(void *opaque, void *data,
 }
 #endif
 
-int kvm_mmio_read(void *opaque, uint64_t addr, uint8_t *data, int len)
-{
-	cpu_physical_memory_rw(addr, data, len, 0);
-	return 0;
-}
-
-int kvm_mmio_write(void *opaque, uint64_t addr, uint8_t *data, int len)
-{
-	cpu_physical_memory_rw(addr, data, len, 1);
-	return 0;
-}
-
 static int handle_unhandled(uint64_t reason)
 {
     fprintf(stderr, "kvm: unhandled exit %"PRIx64"\n", reason);
@@ -879,23 +867,17 @@ int kvm_set_mpstate(kvm_vcpu_context_t vcpu, struct kvm_mp_state *mp_state)
 }
 #endif
 
-static int handle_mmio(kvm_vcpu_context_t vcpu)
+static void handle_mmio(kvm_vcpu_context_t vcpu)
 {
 	unsigned long addr = vcpu->run->mmio.phys_addr;
-	kvm_context_t kvm = vcpu->kvm;
 	struct kvm_run *kvm_run = vcpu->run;
 	void *data = kvm_run->mmio.data;
 
 	/* hack: Red Hat 7.1 generates these weird accesses. */
 	if ((addr > 0xa0000-4 && addr <= 0xa0000) && kvm_run->mmio.len == 3)
-	    return 0;
+	    return;
 
-	if (kvm_run->mmio.is_write)
-		return kvm_mmio_write(kvm->opaque, addr, data,
-					kvm_run->mmio.len);
-	else
-		return kvm_mmio_read(kvm->opaque, addr, data,
-					kvm_run->mmio.len);
+    cpu_physical_memory_rw(addr, data, kvm_run->mmio.len, kvm_run->mmio.is_write);
 }
 
 int handle_io_window(kvm_context_t kvm)
@@ -980,10 +962,9 @@ again:
 	        struct kvm_coalesced_mmio_ring *ring = (void *)run +
 						kvm_state->coalesced_mmio * PAGE_SIZE;
 		while (ring->first != ring->last) {
-			kvm_mmio_write(kvm->opaque,
-				 ring->coalesced_mmio[ring->first].phys_addr,
-				&ring->coalesced_mmio[ring->first].data[0],
-				 ring->coalesced_mmio[ring->first].len);
+            cpu_physical_memory_rw(ring->coalesced_mmio[ring->first].phys_addr,
+                                   &ring->coalesced_mmio[ring->first].data[0],
+                                   ring->coalesced_mmio[ring->first].len, 1);
 			smp_wmb();
 			ring->first = (ring->first + 1) %
 							KVM_COALESCED_MMIO_MAX;
@@ -1020,7 +1001,8 @@ again:
 			r = handle_debug(vcpu, env);
 			break;
 		case KVM_EXIT_MMIO:
-			r = handle_mmio(vcpu);
+            r = 0;
+			handle_mmio(vcpu);
 			break;
 		case KVM_EXIT_HLT:
 			r = handle_halt(vcpu);
-- 
1.6.2.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/9] put env inside vcpu_context
  2009-07-29 17:49   ` [PATCH 2/9] remove kvm_mmio_read and kvm_mmio_write Glauber Costa
@ 2009-07-29 17:49     ` Glauber Costa
  2009-07-29 17:49       ` [PATCH 4/9] remove opaque field from kvm_context Glauber Costa
  2009-08-03 13:12     ` [PATCH 2/9] remove kvm_mmio_read and kvm_mmio_write Avi Kivity
  1 sibling, 1 reply; 11+ messages in thread
From: Glauber Costa @ 2009-07-29 17:49 UTC (permalink / raw)
  To: kvm; +Cc: avi

this is only to make integration easier.

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 qemu-kvm.c |    1 +
 qemu-kvm.h |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/qemu-kvm.c b/qemu-kvm.c
index 65042d2..ba937ca 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -448,6 +448,7 @@ kvm_vcpu_context_t kvm_create_vcpu(CPUState *env, int id)
 
     env->kvm_fd = r;
     env->kvm_state = kvm_state;
+    vcpu_ctx->env = env;
 
 	mmap_size = kvm_ioctl(kvm_state, KVM_GET_VCPU_MMAP_SIZE, 0);
 	if (mmap_size < 0) {
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 8dfdf6b..440afba 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -71,6 +71,7 @@ struct kvm_context {
 
 struct kvm_vcpu_context
 {
+    CPUState *env;
 	int fd;
 	struct kvm_run *run;
 	struct kvm_context *kvm;
-- 
1.6.2.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 4/9] remove opaque field from kvm_context
  2009-07-29 17:49     ` [PATCH 3/9] put env inside vcpu_context Glauber Costa
@ 2009-07-29 17:49       ` Glauber Costa
  2009-07-29 17:49         ` [PATCH 5/9] remove fd from vcpu_context Glauber Costa
  0 siblings, 1 reply; 11+ messages in thread
From: Glauber Costa @ 2009-07-29 17:49 UTC (permalink / raw)
  To: kvm; +Cc: avi

use vcpu->env whenever possible. It does lead to some strange things like
kvm_arch_pre_kvm_run(env, env), but I'm not fixing it here so as to not
mix things up.

Will do that in a separate patch in the future.

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 qemu-kvm.c |   36 +++++++++++++++---------------------
 qemu-kvm.h |    1 -
 2 files changed, 15 insertions(+), 22 deletions(-)

diff --git a/qemu-kvm.c b/qemu-kvm.c
index ba937ca..47846b3 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -376,7 +376,6 @@ int kvm_init(int smp_cpus)
 
 	kvm_state->fd = fd;
 	kvm_state->vmfd = -1;
-	kvm_context->opaque = cpu_single_env;
 	kvm_context->dirty_pages_log_all = 0;
 	kvm_context->no_irqchip_creation = 0;
 	kvm_context->no_pit_creation = 0;
@@ -754,7 +753,6 @@ int kvm_set_irqchip(kvm_context_t kvm, struct kvm_irqchip *chip)
 static int handle_io(kvm_vcpu_context_t vcpu)
 {
 	struct kvm_run *run = vcpu->run;
-	kvm_context_t kvm = vcpu->kvm;
 	uint16_t addr = run->io.port;
 	int i;
 	void *p = (void *)run + run->io.data_offset;
@@ -764,13 +762,13 @@ static int handle_io(kvm_vcpu_context_t vcpu)
 		case KVM_EXIT_IO_IN:
 			switch (run->io.size) {
 			case 1:
-				*(uint8_t *)p = cpu_inb(kvm->opaque, addr);
+				*(uint8_t *)p = cpu_inb(vcpu->env, addr);
 				break;
 			case 2:
-				*(uint16_t *)p = cpu_inw(kvm->opaque, addr);
+				*(uint16_t *)p = cpu_inw(vcpu->env, addr);
 				break;
 			case 4:
-				*(uint32_t *)p = cpu_inl(kvm->opaque, addr);
+				*(uint32_t *)p = cpu_inl(vcpu->env, addr);
 				break;
 			default:
 				fprintf(stderr, "bad I/O size %d\n", run->io.size);
@@ -780,13 +778,13 @@ static int handle_io(kvm_vcpu_context_t vcpu)
 		case KVM_EXIT_IO_OUT:
 			switch (run->io.size) {
 			case 1:
-				 cpu_outb(kvm->opaque, addr, *(uint8_t *)p);
+				 cpu_outb(vcpu->env, addr, *(uint8_t *)p);
 				break;
 			case 2:
-				cpu_outw(kvm->opaque, addr, *(uint16_t *)p);
+				cpu_outw(vcpu->env, addr, *(uint16_t *)p);
 				break;
 			case 4:
-				cpu_outl(kvm->opaque, addr, *(uint32_t *)p);
+				cpu_outl(vcpu->env, addr, *(uint32_t *)p);
 				break;
 			default:
 				fprintf(stderr, "bad I/O size %d\n", run->io.size);
@@ -808,9 +806,8 @@ int handle_debug(kvm_vcpu_context_t vcpu, void *env)
 {
 #ifdef KVM_CAP_SET_GUEST_DEBUG
     struct kvm_run *run = vcpu->run;
-    kvm_context_t kvm = vcpu->kvm;
 
-    return kvm_debug(kvm->opaque, env, &run->debug.arch);
+    return kvm_debug(vcpu->env, env, &run->debug.arch);
 #else
     return 0;
 #endif
@@ -888,7 +885,7 @@ int handle_io_window(kvm_context_t kvm)
 
 int handle_halt(kvm_vcpu_context_t vcpu)
 {
-	return kvm_arch_halt(vcpu->kvm->opaque, vcpu);
+	return kvm_arch_halt(vcpu->env, vcpu);
 }
 
 int handle_shutdown(kvm_context_t kvm, CPUState *env)
@@ -900,22 +897,15 @@ int handle_shutdown(kvm_context_t kvm, CPUState *env)
     return 1;
 }
 
-static inline void push_nmi(kvm_context_t kvm)
-{
-#ifdef KVM_CAP_USER_NMI
-	kvm_arch_push_nmi(kvm->opaque);
-#endif /* KVM_CAP_USER_NMI */
-}
-
 void post_kvm_run(kvm_context_t kvm, CPUState *env)
 {
     pthread_mutex_lock(&qemu_mutex);
-    kvm_arch_post_kvm_run(kvm->opaque, env);
+    kvm_arch_post_kvm_run(env, env);
 }
 
 int pre_kvm_run(kvm_context_t kvm, CPUState *env)
 {
-    kvm_arch_pre_kvm_run(kvm->opaque, env);
+    kvm_arch_pre_kvm_run(env, env);
 
     pthread_mutex_unlock(&qemu_mutex);
     return 0;
@@ -939,7 +929,11 @@ int kvm_run(kvm_vcpu_context_t vcpu, void *env)
 	kvm_context_t kvm = vcpu->kvm;
 
 again:
-	push_nmi(kvm);
+
+#ifdef KVM_CAP_USER_NMI
+	kvm_arch_push_nmi(vcpu->env);
+#endif /* KVM_CAP_USER_NMI */
+
 #if !defined(__s390__)
 	if (!kvm_state->irqchip_in_kernel)
 		run->request_interrupt_window = kvm_arch_try_push_interrupts(env);
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 440afba..3f14f13 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -52,7 +52,6 @@ extern int kvm_abi;
  */
 
 struct kvm_context {
-	void *opaque;
 	/// is dirty pages logging enabled for all regions or not
 	int dirty_pages_log_all;
 	/// do not create in-kernel irqchip if set
-- 
1.6.2.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 5/9] remove fd from vcpu_context
  2009-07-29 17:49       ` [PATCH 4/9] remove opaque field from kvm_context Glauber Costa
@ 2009-07-29 17:49         ` Glauber Costa
  2009-07-29 17:49           ` [PATCH 6/9] remove run from vcpu context Glauber Costa
  0 siblings, 1 reply; 11+ messages in thread
From: Glauber Costa @ 2009-07-29 17:49 UTC (permalink / raw)
  To: kvm; +Cc: avi

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 qemu-kvm-x86.c |   24 ++++++++++++------------
 qemu-kvm.c     |   33 ++++++++++++++++-----------------
 qemu-kvm.h     |    1 -
 3 files changed, 28 insertions(+), 30 deletions(-)

diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
index 76c7631..c9d741d 100644
--- a/qemu-kvm-x86.c
+++ b/qemu-kvm-x86.c
@@ -179,7 +179,7 @@ int kvm_enable_vapic(kvm_vcpu_context_t vcpu, uint64_t vapic)
 		.vapic_addr = vapic,
 	};
 
-	r = ioctl(vcpu->fd, KVM_SET_VAPIC_ADDR, &va);
+	r = ioctl(vcpu->env->kvm_fd, KVM_SET_VAPIC_ADDR, &va);
 	if (r == -1) {
 		r = -errno;
 		perror("kvm_enable_vapic");
@@ -286,7 +286,7 @@ int kvm_get_lapic(kvm_vcpu_context_t vcpu, struct kvm_lapic_state *s)
 	int r;
 	if (!kvm_irqchip_in_kernel())
 		return 0;
-	r = ioctl(vcpu->fd, KVM_GET_LAPIC, s);
+	r = ioctl(vcpu->env->kvm_fd, KVM_GET_LAPIC, s);
 	if (r == -1) {
 		r = -errno;
 		perror("kvm_get_lapic");
@@ -299,7 +299,7 @@ int kvm_set_lapic(kvm_vcpu_context_t vcpu, struct kvm_lapic_state *s)
 	int r;
 	if (!kvm_irqchip_in_kernel())
 		return 0;
-	r = ioctl(vcpu->fd, KVM_SET_LAPIC, s);
+	r = ioctl(vcpu->env->kvm_fd, KVM_SET_LAPIC, s);
 	if (r == -1) {
 		r = -errno;
 		perror("kvm_set_lapic");
@@ -356,7 +356,7 @@ int kvm_has_pit_state2(kvm_context_t kvm)
 void kvm_show_code(kvm_vcpu_context_t vcpu)
 {
 #define SHOW_CODE_LEN 50
-	int fd = vcpu->fd;
+	int fd = vcpu->env->kvm_fd;
 	struct kvm_regs regs;
 	struct kvm_sregs sregs;
 	int r, n;
@@ -424,7 +424,7 @@ int kvm_get_msrs(kvm_vcpu_context_t vcpu, struct kvm_msr_entry *msrs, int n)
 
     kmsrs->nmsrs = n;
     memcpy(kmsrs->entries, msrs, n * sizeof *msrs);
-    r = ioctl(vcpu->fd, KVM_GET_MSRS, kmsrs);
+    r = ioctl(vcpu->env->kvm_fd, KVM_GET_MSRS, kmsrs);
     e = errno;
     memcpy(msrs, kmsrs->entries, n * sizeof *msrs);
     free(kmsrs);
@@ -439,7 +439,7 @@ int kvm_set_msrs(kvm_vcpu_context_t vcpu, struct kvm_msr_entry *msrs, int n)
 
     kmsrs->nmsrs = n;
     memcpy(kmsrs->entries, msrs, n * sizeof *msrs);
-    r = ioctl(vcpu->fd, KVM_SET_MSRS, kmsrs);
+    r = ioctl(vcpu->env->kvm_fd, KVM_SET_MSRS, kmsrs);
     e = errno;
     free(kmsrs);
     errno = e;
@@ -464,7 +464,7 @@ int kvm_get_mce_cap_supported(kvm_context_t kvm, uint64_t *mce_cap,
 int kvm_setup_mce(kvm_vcpu_context_t vcpu, uint64_t *mcg_cap)
 {
 #ifdef KVM_CAP_MCE
-    return ioctl(vcpu->fd, KVM_X86_SETUP_MCE, mcg_cap);
+    return ioctl(vcpu->env->kvm_fd, KVM_X86_SETUP_MCE, mcg_cap);
 #else
     return -ENOSYS;
 #endif
@@ -473,7 +473,7 @@ int kvm_setup_mce(kvm_vcpu_context_t vcpu, uint64_t *mcg_cap)
 int kvm_set_mce(kvm_vcpu_context_t vcpu, struct kvm_x86_mce *m)
 {
 #ifdef KVM_CAP_MCE
-    return ioctl(vcpu->fd, KVM_X86_SET_MCE, m);
+    return ioctl(vcpu->env->kvm_fd, KVM_X86_SET_MCE, m);
 #else
     return -ENOSYS;
 #endif
@@ -496,7 +496,7 @@ static void print_dt(FILE *file, const char *name, struct kvm_dtable *dt)
 
 void kvm_show_regs(kvm_vcpu_context_t vcpu)
 {
-	int fd = vcpu->fd;
+	int fd = vcpu->env->kvm_fd;
 	struct kvm_regs regs;
 	struct kvm_sregs sregs;
 	int r;
@@ -563,7 +563,7 @@ int kvm_setup_cpuid(kvm_vcpu_context_t vcpu, int nent,
 
 	cpuid->nent = nent;
 	memcpy(cpuid->entries, entries, nent * sizeof(*entries));
-	r = ioctl(vcpu->fd, KVM_SET_CPUID, cpuid);
+	r = ioctl(vcpu->env->kvm_fd, KVM_SET_CPUID, cpuid);
 
 	free(cpuid);
 	return r;
@@ -579,7 +579,7 @@ int kvm_setup_cpuid2(kvm_vcpu_context_t vcpu, int nent,
 
 	cpuid->nent = nent;
 	memcpy(cpuid->entries, entries, nent * sizeof(*entries));
-	r = ioctl(vcpu->fd, KVM_SET_CPUID2, cpuid);
+	r = ioctl(vcpu->env->kvm_fd, KVM_SET_CPUID2, cpuid);
 	if (r == -1) {
 		fprintf(stderr, "kvm_setup_cpuid2: %m\n");
 		r = -errno;
@@ -634,7 +634,7 @@ static int tpr_access_reporting(kvm_vcpu_context_t vcpu, int enabled)
 	r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_VAPIC);
 	if (r <= 0)
 		return -ENOSYS;
-	r = ioctl(vcpu->fd, KVM_TPR_ACCESS_REPORTING, &tac);
+	r = ioctl(vcpu->env->kvm_fd, KVM_TPR_ACCESS_REPORTING, &tac);
 	if (r == -1) {
 		r = -errno;
 		perror("KVM_TPR_ACCESS_REPORTING");
diff --git a/qemu-kvm.c b/qemu-kvm.c
index 47846b3..981640c 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -443,7 +443,6 @@ kvm_vcpu_context_t kvm_create_vcpu(CPUState *env, int id)
 		fprintf(stderr, "kvm_create_vcpu: %m\n");
 		goto err;
 	}
-	vcpu_ctx->fd = r;
 
     env->kvm_fd = r;
     env->kvm_state = kvm_state;
@@ -455,14 +454,14 @@ kvm_vcpu_context_t kvm_create_vcpu(CPUState *env, int id)
 		goto err_fd;
 	}
 	vcpu_ctx->run = mmap(NULL, mmap_size, PROT_READ|PROT_WRITE, MAP_SHARED,
-			      vcpu_ctx->fd, 0);
+			      env->kvm_fd, 0);
 	if (vcpu_ctx->run == MAP_FAILED) {
 		fprintf(stderr, "mmap vcpu area: %m\n");
 		goto err_fd;
 	}
 	return vcpu_ctx;
 err_fd:
-	close(vcpu_ctx->fd);
+	close(env->kvm_fd);
 err:
 	free(vcpu_ctx);
 	return NULL;
@@ -815,32 +814,32 @@ int handle_debug(kvm_vcpu_context_t vcpu, void *env)
 
 int kvm_get_regs(kvm_vcpu_context_t vcpu, struct kvm_regs *regs)
 {
-    return ioctl(vcpu->fd, KVM_GET_REGS, regs);
+    return ioctl(vcpu->env->kvm_fd, KVM_GET_REGS, regs);
 }
 
 int kvm_set_regs(kvm_vcpu_context_t vcpu, struct kvm_regs *regs)
 {
-    return ioctl(vcpu->fd, KVM_SET_REGS, regs);
+    return ioctl(vcpu->env->kvm_fd, KVM_SET_REGS, regs);
 }
 
 int kvm_get_fpu(kvm_vcpu_context_t vcpu, struct kvm_fpu *fpu)
 {
-    return ioctl(vcpu->fd, KVM_GET_FPU, fpu);
+    return ioctl(vcpu->env->kvm_fd, KVM_GET_FPU, fpu);
 }
 
 int kvm_set_fpu(kvm_vcpu_context_t vcpu, struct kvm_fpu *fpu)
 {
-    return ioctl(vcpu->fd, KVM_SET_FPU, fpu);
+    return ioctl(vcpu->env->kvm_fd, KVM_SET_FPU, fpu);
 }
 
 int kvm_get_sregs(kvm_vcpu_context_t vcpu, struct kvm_sregs *sregs)
 {
-    return ioctl(vcpu->fd, KVM_GET_SREGS, sregs);
+    return ioctl(vcpu->env->kvm_fd, KVM_GET_SREGS, sregs);
 }
 
 int kvm_set_sregs(kvm_vcpu_context_t vcpu, struct kvm_sregs *sregs)
 {
-    return ioctl(vcpu->fd, KVM_SET_SREGS, sregs);
+    return ioctl(vcpu->env->kvm_fd, KVM_SET_SREGS, sregs);
 }
 
 #ifdef KVM_CAP_MP_STATE
@@ -850,7 +849,7 @@ int kvm_get_mpstate(kvm_vcpu_context_t vcpu, struct kvm_mp_state *mp_state)
 
     r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_MP_STATE);
     if (r > 0)
-        return ioctl(vcpu->fd, KVM_GET_MP_STATE, mp_state);
+        return ioctl(vcpu->env->kvm_fd, KVM_GET_MP_STATE, mp_state);
     return -ENOSYS;
 }
 
@@ -860,7 +859,7 @@ int kvm_set_mpstate(kvm_vcpu_context_t vcpu, struct kvm_mp_state *mp_state)
 
     r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_MP_STATE);
     if (r > 0)
-        return ioctl(vcpu->fd, KVM_SET_MP_STATE, mp_state);
+        return ioctl(vcpu->env->kvm_fd, KVM_SET_MP_STATE, mp_state);
     return -ENOSYS;
 }
 #endif
@@ -924,7 +923,7 @@ int kvm_is_ready_for_interrupt_injection(kvm_vcpu_context_t vcpu)
 int kvm_run(kvm_vcpu_context_t vcpu, void *env)
 {
 	int r;
-	int fd = vcpu->fd;
+	int fd = vcpu->env->kvm_fd;
 	struct kvm_run *run = vcpu->run;
 	kvm_context_t kvm = vcpu->kvm;
 
@@ -1037,13 +1036,13 @@ int kvm_inject_irq(kvm_vcpu_context_t vcpu, unsigned irq)
 	struct kvm_interrupt intr;
 
 	intr.irq = irq;
-	return ioctl(vcpu->fd, KVM_INTERRUPT, &intr);
+	return ioctl(vcpu->env->kvm_fd, KVM_INTERRUPT, &intr);
 }
 
 #ifdef KVM_CAP_SET_GUEST_DEBUG
 int kvm_set_guest_debug(kvm_vcpu_context_t vcpu, struct kvm_guest_debug *dbg)
 {
-	return ioctl(vcpu->fd, KVM_SET_GUEST_DEBUG, dbg);
+	return ioctl(vcpu->env->kvm_fd, KVM_SET_GUEST_DEBUG, dbg);
 }
 #endif
 
@@ -1053,7 +1052,7 @@ int kvm_set_signal_mask(kvm_vcpu_context_t vcpu, const sigset_t *sigset)
 	int r;
 
 	if (!sigset) {
-		r = ioctl(vcpu->fd, KVM_SET_SIGNAL_MASK, NULL);
+		r = ioctl(vcpu->env->kvm_fd, KVM_SET_SIGNAL_MASK, NULL);
 		if (r == -1)
 			r = -errno;
 		return r;
@@ -1062,7 +1061,7 @@ int kvm_set_signal_mask(kvm_vcpu_context_t vcpu, const sigset_t *sigset)
 
 	sigmask->len = 8;
 	memcpy(sigmask->sigset, sigset, sizeof(*sigset));
-	r = ioctl(vcpu->fd, KVM_SET_SIGNAL_MASK, sigmask);
+	r = ioctl(vcpu->env->kvm_fd, KVM_SET_SIGNAL_MASK, sigmask);
 	if (r == -1)
 		r = -errno;
 	free(sigmask);
@@ -1081,7 +1080,7 @@ int kvm_has_sync_mmu(void)
 int kvm_inject_nmi(kvm_vcpu_context_t vcpu)
 {
 #ifdef KVM_CAP_USER_NMI
-	return ioctl(vcpu->fd, KVM_NMI);
+	return ioctl(vcpu->env->kvm_fd, KVM_NMI);
 #else
 	return -ENOSYS;
 #endif
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 3f14f13..473e8e3 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -71,7 +71,6 @@ struct kvm_context {
 struct kvm_vcpu_context
 {
     CPUState *env;
-	int fd;
 	struct kvm_run *run;
 	struct kvm_context *kvm;
 	uint32_t id;
-- 
1.6.2.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 6/9] remove run from vcpu context
  2009-07-29 17:49         ` [PATCH 5/9] remove fd from vcpu_context Glauber Costa
@ 2009-07-29 17:49           ` Glauber Costa
  2009-07-29 17:49             ` [PATCH 7/9] remove kvm_context from vcpu_context Glauber Costa
  0 siblings, 1 reply; 11+ messages in thread
From: Glauber Costa @ 2009-07-29 17:49 UTC (permalink / raw)
  To: kvm; +Cc: avi

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 qemu-kvm-x86.c |   10 +++++-----
 qemu-kvm.c     |   18 +++++++++---------
 qemu-kvm.h     |    1 -
 3 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
index c9d741d..14f1ee3 100644
--- a/qemu-kvm-x86.c
+++ b/qemu-kvm-x86.c
@@ -164,7 +164,7 @@ int kvm_arch_create(kvm_context_t kvm, unsigned long phys_mem_bytes,
 
 static int kvm_handle_tpr_access(kvm_vcpu_context_t vcpu)
 {
-	struct kvm_run *run = vcpu->run;
+	struct kvm_run *run = vcpu->env->kvm_run;
 	kvm_tpr_access_report(cpu_single_env,
                          run->tpr_access.rip,
                          run->tpr_access.is_write);
@@ -193,7 +193,7 @@ int kvm_enable_vapic(kvm_vcpu_context_t vcpu, uint64_t vapic)
 int kvm_arch_run(kvm_vcpu_context_t vcpu)
 {
 	int r = 0;
-	struct kvm_run *run = vcpu->run;
+	struct kvm_run *run = vcpu->env->kvm_run;
 
 
 	switch (run->exit_reason) {
@@ -540,17 +540,17 @@ void kvm_show_regs(kvm_vcpu_context_t vcpu)
 
 uint64_t kvm_get_apic_base(kvm_vcpu_context_t vcpu)
 {
-	return vcpu->run->apic_base;
+	return vcpu->env->kvm_run->apic_base;
 }
 
 void kvm_set_cr8(kvm_vcpu_context_t vcpu, uint64_t cr8)
 {
-	vcpu->run->cr8 = cr8;
+	vcpu->env->kvm_run->cr8 = cr8;
 }
 
 __u64 kvm_get_cr8(kvm_vcpu_context_t vcpu)
 {
-	return vcpu->run->cr8;
+	return vcpu->env->kvm_run->cr8;
 }
 
 int kvm_setup_cpuid(kvm_vcpu_context_t vcpu, int nent,
diff --git a/qemu-kvm.c b/qemu-kvm.c
index 981640c..5bcb637 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -453,9 +453,9 @@ kvm_vcpu_context_t kvm_create_vcpu(CPUState *env, int id)
 		fprintf(stderr, "get vcpu mmap size: %m\n");
 		goto err_fd;
 	}
-	vcpu_ctx->run = mmap(NULL, mmap_size, PROT_READ|PROT_WRITE, MAP_SHARED,
+	env->kvm_run = mmap(NULL, mmap_size, PROT_READ|PROT_WRITE, MAP_SHARED,
 			      env->kvm_fd, 0);
-	if (vcpu_ctx->run == MAP_FAILED) {
+	if (env->kvm_run == MAP_FAILED) {
 		fprintf(stderr, "mmap vcpu area: %m\n");
 		goto err_fd;
 	}
@@ -751,7 +751,7 @@ int kvm_set_irqchip(kvm_context_t kvm, struct kvm_irqchip *chip)
 
 static int handle_io(kvm_vcpu_context_t vcpu)
 {
-	struct kvm_run *run = vcpu->run;
+	struct kvm_run *run = vcpu->env->kvm_run;
 	uint16_t addr = run->io.port;
 	int i;
 	void *p = (void *)run + run->io.data_offset;
@@ -804,7 +804,7 @@ static int handle_io(kvm_vcpu_context_t vcpu)
 int handle_debug(kvm_vcpu_context_t vcpu, void *env)
 {
 #ifdef KVM_CAP_SET_GUEST_DEBUG
-    struct kvm_run *run = vcpu->run;
+    struct kvm_run *run = vcpu->env->kvm_run;
 
     return kvm_debug(vcpu->env, env, &run->debug.arch);
 #else
@@ -866,8 +866,8 @@ int kvm_set_mpstate(kvm_vcpu_context_t vcpu, struct kvm_mp_state *mp_state)
 
 static void handle_mmio(kvm_vcpu_context_t vcpu)
 {
-	unsigned long addr = vcpu->run->mmio.phys_addr;
-	struct kvm_run *kvm_run = vcpu->run;
+	unsigned long addr = vcpu->env->kvm_run->mmio.phys_addr;
+	struct kvm_run *kvm_run = vcpu->env->kvm_run;
 	void *data = kvm_run->mmio.data;
 
 	/* hack: Red Hat 7.1 generates these weird accesses. */
@@ -912,19 +912,19 @@ int pre_kvm_run(kvm_context_t kvm, CPUState *env)
 
 int kvm_get_interrupt_flag(kvm_vcpu_context_t vcpu)
 {
-	return vcpu->run->if_flag;
+	return vcpu->env->kvm_run->if_flag;
 }
 
 int kvm_is_ready_for_interrupt_injection(kvm_vcpu_context_t vcpu)
 {
-	return vcpu->run->ready_for_interrupt_injection;
+	return vcpu->env->kvm_run->ready_for_interrupt_injection;
 }
 
 int kvm_run(kvm_vcpu_context_t vcpu, void *env)
 {
 	int r;
 	int fd = vcpu->env->kvm_fd;
-	struct kvm_run *run = vcpu->run;
+	struct kvm_run *run = vcpu->env->kvm_run;
 	kvm_context_t kvm = vcpu->kvm;
 
 again:
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 473e8e3..c97e6a9 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -71,7 +71,6 @@ struct kvm_context {
 struct kvm_vcpu_context
 {
     CPUState *env;
-	struct kvm_run *run;
 	struct kvm_context *kvm;
 	uint32_t id;
 };
-- 
1.6.2.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 7/9] remove kvm_context from vcpu_context
  2009-07-29 17:49           ` [PATCH 6/9] remove run from vcpu context Glauber Costa
@ 2009-07-29 17:49             ` Glauber Costa
  2009-07-29 17:49               ` [PATCH 8/9] use kvm_vcpu_ioctl Glauber Costa
  0 siblings, 1 reply; 11+ messages in thread
From: Glauber Costa @ 2009-07-29 17:49 UTC (permalink / raw)
  To: kvm; +Cc: avi

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 qemu-kvm.c |    4 +---
 qemu-kvm.h |    1 -
 2 files changed, 1 insertions(+), 4 deletions(-)

diff --git a/qemu-kvm.c b/qemu-kvm.c
index 5bcb637..6b9b29f 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -433,9 +433,7 @@ kvm_vcpu_context_t kvm_create_vcpu(CPUState *env, int id)
 	long mmap_size;
 	int r;
 	kvm_vcpu_context_t vcpu_ctx = qemu_malloc(sizeof(struct kvm_vcpu_context));
-    kvm_context_t kvm = kvm_context;
 
-	vcpu_ctx->kvm = kvm;
 	vcpu_ctx->id = id;
 
 	r = kvm_vm_ioctl(kvm_state, KVM_CREATE_VCPU, id);
@@ -925,7 +923,7 @@ int kvm_run(kvm_vcpu_context_t vcpu, void *env)
 	int r;
 	int fd = vcpu->env->kvm_fd;
 	struct kvm_run *run = vcpu->env->kvm_run;
-	kvm_context_t kvm = vcpu->kvm;
+	kvm_context_t kvm = &vcpu->env->kvm_state->kvm_context;
 
 again:
 
diff --git a/qemu-kvm.h b/qemu-kvm.h
index c97e6a9..1dc9873 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -71,7 +71,6 @@ struct kvm_context {
 struct kvm_vcpu_context
 {
     CPUState *env;
-	struct kvm_context *kvm;
 	uint32_t id;
 };
 
-- 
1.6.2.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 8/9] use kvm_vcpu_ioctl
  2009-07-29 17:49             ` [PATCH 7/9] remove kvm_context from vcpu_context Glauber Costa
@ 2009-07-29 17:49               ` Glauber Costa
  2009-07-29 17:49                 ` [PATCH 9/9] remove id from vcpu context Glauber Costa
  0 siblings, 1 reply; 11+ messages in thread
From: Glauber Costa @ 2009-07-29 17:49 UTC (permalink / raw)
  To: kvm; +Cc: avi

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 kvm-all.c      |    2 +-
 qemu-kvm-x86.c |   66 +++++++++++++++----------------------------------------
 qemu-kvm.c     |   31 +++++++++++---------------
 qemu-kvm.h     |    2 +
 4 files changed, 34 insertions(+), 67 deletions(-)

diff --git a/kvm-all.c b/kvm-all.c
index 5a4184b..203f1ab 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -848,7 +848,6 @@ int kvm_vm_ioctl(KVMState *s, int type, ...)
     return ret;
 }
 
-#ifdef KVM_UPSTREAM
 int kvm_vcpu_ioctl(CPUState *env, int type, ...)
 {
     int ret;
@@ -865,6 +864,7 @@ int kvm_vcpu_ioctl(CPUState *env, int type, ...)
 
     return ret;
 }
+#ifdef KVM_UPSTREAM
 
 int kvm_has_sync_mmu(void)
 {
diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
index 14f1ee3..63f769a 100644
--- a/qemu-kvm-x86.c
+++ b/qemu-kvm-x86.c
@@ -174,18 +174,11 @@ static int kvm_handle_tpr_access(kvm_vcpu_context_t vcpu)
 
 int kvm_enable_vapic(kvm_vcpu_context_t vcpu, uint64_t vapic)
 {
-	int r;
 	struct kvm_vapic_addr va = {
 		.vapic_addr = vapic,
 	};
 
-	r = ioctl(vcpu->env->kvm_fd, KVM_SET_VAPIC_ADDR, &va);
-	if (r == -1) {
-		r = -errno;
-		perror("kvm_enable_vapic");
-		return r;
-	}
-	return 0;
+	return kvm_vcpu_ioctl(vcpu->env, KVM_SET_VAPIC_ADDR, &va);
 }
 
 #endif
@@ -283,28 +276,16 @@ int kvm_destroy_memory_alias(kvm_context_t kvm, uint64_t phys_start)
 
 int kvm_get_lapic(kvm_vcpu_context_t vcpu, struct kvm_lapic_state *s)
 {
-	int r;
 	if (!kvm_irqchip_in_kernel())
 		return 0;
-	r = ioctl(vcpu->env->kvm_fd, KVM_GET_LAPIC, s);
-	if (r == -1) {
-		r = -errno;
-		perror("kvm_get_lapic");
-	}
-	return r;
+	return kvm_vcpu_ioctl(vcpu->env, KVM_GET_LAPIC, s);
 }
 
 int kvm_set_lapic(kvm_vcpu_context_t vcpu, struct kvm_lapic_state *s)
 {
-	int r;
 	if (!kvm_irqchip_in_kernel())
 		return 0;
-	r = ioctl(vcpu->env->kvm_fd, KVM_SET_LAPIC, s);
-	if (r == -1) {
-		r = -errno;
-		perror("kvm_set_lapic");
-	}
-	return r;
+	return kvm_vcpu_ioctl(vcpu->env, KVM_SET_LAPIC, s);
 }
 
 #endif
@@ -356,7 +337,7 @@ int kvm_has_pit_state2(kvm_context_t kvm)
 void kvm_show_code(kvm_vcpu_context_t vcpu)
 {
 #define SHOW_CODE_LEN 50
-	int fd = vcpu->env->kvm_fd;
+//	int fd = vcpu->env->kvm_fd;
 	struct kvm_regs regs;
 	struct kvm_sregs sregs;
 	int r, n;
@@ -365,13 +346,13 @@ void kvm_show_code(kvm_vcpu_context_t vcpu)
 	char code_str[SHOW_CODE_LEN * 3 + 1];
 	unsigned long rip;
 
-	r = ioctl(fd, KVM_GET_SREGS, &sregs);
-	if (r == -1) {
+	r = kvm_vcpu_ioctl(vcpu->env, KVM_GET_SREGS, &sregs);
+	if (r < 0) {
 		perror("KVM_GET_SREGS");
 		return;
 	}
-	r = ioctl(fd, KVM_GET_REGS, &regs);
-	if (r == -1) {
+	r = kvm_vcpu_ioctl(vcpu->env, KVM_GET_REGS, &regs);
+	if (r < 0) {
 		perror("KVM_GET_REGS");
 		return;
 	}
@@ -420,29 +401,25 @@ struct kvm_msr_list *kvm_get_msr_list(kvm_context_t kvm)
 int kvm_get_msrs(kvm_vcpu_context_t vcpu, struct kvm_msr_entry *msrs, int n)
 {
     struct kvm_msrs *kmsrs = qemu_malloc(sizeof *kmsrs + n * sizeof *msrs);
-    int r, e;
+    int r;
 
     kmsrs->nmsrs = n;
     memcpy(kmsrs->entries, msrs, n * sizeof *msrs);
-    r = ioctl(vcpu->env->kvm_fd, KVM_GET_MSRS, kmsrs);
-    e = errno;
+    r = kvm_vcpu_ioctl(vcpu->env, KVM_GET_MSRS, kmsrs);
     memcpy(msrs, kmsrs->entries, n * sizeof *msrs);
     free(kmsrs);
-    errno = e;
     return r;
 }
 
 int kvm_set_msrs(kvm_vcpu_context_t vcpu, struct kvm_msr_entry *msrs, int n)
 {
     struct kvm_msrs *kmsrs = qemu_malloc(sizeof *kmsrs + n * sizeof *msrs);
-    int r, e;
+    int r;
 
     kmsrs->nmsrs = n;
     memcpy(kmsrs->entries, msrs, n * sizeof *msrs);
-    r = ioctl(vcpu->env->kvm_fd, KVM_SET_MSRS, kmsrs);
-    e = errno;
+    r = kvm_vcpu_ioctl(vcpu->env, KVM_SET_MSRS, kmsrs);
     free(kmsrs);
-    errno = e;
     return r;
 }
 
@@ -464,7 +441,7 @@ int kvm_get_mce_cap_supported(kvm_context_t kvm, uint64_t *mce_cap,
 int kvm_setup_mce(kvm_vcpu_context_t vcpu, uint64_t *mcg_cap)
 {
 #ifdef KVM_CAP_MCE
-    return ioctl(vcpu->env->kvm_fd, KVM_X86_SETUP_MCE, mcg_cap);
+    return kvm_vcpu_ioctl(vcpu->env, KVM_X86_SETUP_MCE, mcg_cap);
 #else
     return -ENOSYS;
 #endif
@@ -473,7 +450,7 @@ int kvm_setup_mce(kvm_vcpu_context_t vcpu, uint64_t *mcg_cap)
 int kvm_set_mce(kvm_vcpu_context_t vcpu, struct kvm_x86_mce *m)
 {
 #ifdef KVM_CAP_MCE
-    return ioctl(vcpu->env->kvm_fd, KVM_X86_SET_MCE, m);
+    return kvm_vcpu_ioctl(vcpu->env, KVM_X86_SET_MCE, m);
 #else
     return -ENOSYS;
 #endif
@@ -563,7 +540,7 @@ int kvm_setup_cpuid(kvm_vcpu_context_t vcpu, int nent,
 
 	cpuid->nent = nent;
 	memcpy(cpuid->entries, entries, nent * sizeof(*entries));
-	r = ioctl(vcpu->env->kvm_fd, KVM_SET_CPUID, cpuid);
+	r = kvm_vcpu_ioctl(vcpu->env, KVM_SET_CPUID, cpuid);
 
 	free(cpuid);
 	return r;
@@ -579,10 +556,9 @@ int kvm_setup_cpuid2(kvm_vcpu_context_t vcpu, int nent,
 
 	cpuid->nent = nent;
 	memcpy(cpuid->entries, entries, nent * sizeof(*entries));
-	r = ioctl(vcpu->env->kvm_fd, KVM_SET_CPUID2, cpuid);
-	if (r == -1) {
+	r = kvm_vcpu_ioctl(vcpu->env, KVM_SET_CPUID2, cpuid);
+	if (r < 0) {
 		fprintf(stderr, "kvm_setup_cpuid2: %m\n");
-		r = -errno;
 	}
 	free(cpuid);
 	return r;
@@ -634,13 +610,7 @@ static int tpr_access_reporting(kvm_vcpu_context_t vcpu, int enabled)
 	r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_VAPIC);
 	if (r <= 0)
 		return -ENOSYS;
-	r = ioctl(vcpu->env->kvm_fd, KVM_TPR_ACCESS_REPORTING, &tac);
-	if (r == -1) {
-		r = -errno;
-		perror("KVM_TPR_ACCESS_REPORTING");
-		return r;
-	}
-	return 0;
+	return kvm_vcpu_ioctl(vcpu->env, KVM_TPR_ACCESS_REPORTING, &tac);
 }
 
 int kvm_enable_tpr_access_reporting(kvm_vcpu_context_t vcpu)
diff --git a/qemu-kvm.c b/qemu-kvm.c
index 6b9b29f..bc06f9f 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -812,32 +812,32 @@ int handle_debug(kvm_vcpu_context_t vcpu, void *env)
 
 int kvm_get_regs(kvm_vcpu_context_t vcpu, struct kvm_regs *regs)
 {
-    return ioctl(vcpu->env->kvm_fd, KVM_GET_REGS, regs);
+    return kvm_vcpu_ioctl(vcpu->env, KVM_GET_REGS, regs);
 }
 
 int kvm_set_regs(kvm_vcpu_context_t vcpu, struct kvm_regs *regs)
 {
-    return ioctl(vcpu->env->kvm_fd, KVM_SET_REGS, regs);
+    return kvm_vcpu_ioctl(vcpu->env, KVM_SET_REGS, regs);
 }
 
 int kvm_get_fpu(kvm_vcpu_context_t vcpu, struct kvm_fpu *fpu)
 {
-    return ioctl(vcpu->env->kvm_fd, KVM_GET_FPU, fpu);
+    return kvm_vcpu_ioctl(vcpu->env, KVM_GET_FPU, fpu);
 }
 
 int kvm_set_fpu(kvm_vcpu_context_t vcpu, struct kvm_fpu *fpu)
 {
-    return ioctl(vcpu->env->kvm_fd, KVM_SET_FPU, fpu);
+    return kvm_vcpu_ioctl(vcpu->env, KVM_SET_FPU, fpu);
 }
 
 int kvm_get_sregs(kvm_vcpu_context_t vcpu, struct kvm_sregs *sregs)
 {
-    return ioctl(vcpu->env->kvm_fd, KVM_GET_SREGS, sregs);
+    return kvm_vcpu_ioctl(vcpu->env, KVM_GET_SREGS, sregs);
 }
 
 int kvm_set_sregs(kvm_vcpu_context_t vcpu, struct kvm_sregs *sregs)
 {
-    return ioctl(vcpu->env->kvm_fd, KVM_SET_SREGS, sregs);
+    return kvm_vcpu_ioctl(vcpu->env, KVM_SET_SREGS, sregs);
 }
 
 #ifdef KVM_CAP_MP_STATE
@@ -847,7 +847,7 @@ int kvm_get_mpstate(kvm_vcpu_context_t vcpu, struct kvm_mp_state *mp_state)
 
     r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_MP_STATE);
     if (r > 0)
-        return ioctl(vcpu->env->kvm_fd, KVM_GET_MP_STATE, mp_state);
+        return kvm_vcpu_ioctl(vcpu->env, KVM_GET_MP_STATE, mp_state);
     return -ENOSYS;
 }
 
@@ -857,7 +857,7 @@ int kvm_set_mpstate(kvm_vcpu_context_t vcpu, struct kvm_mp_state *mp_state)
 
     r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_MP_STATE);
     if (r > 0)
-        return ioctl(vcpu->env->kvm_fd, KVM_SET_MP_STATE, mp_state);
+        return kvm_vcpu_ioctl(vcpu->env, KVM_SET_MP_STATE, mp_state);
     return -ENOSYS;
 }
 #endif
@@ -1034,13 +1034,13 @@ int kvm_inject_irq(kvm_vcpu_context_t vcpu, unsigned irq)
 	struct kvm_interrupt intr;
 
 	intr.irq = irq;
-	return ioctl(vcpu->env->kvm_fd, KVM_INTERRUPT, &intr);
+	return kvm_vcpu_ioctl(vcpu->env, KVM_INTERRUPT, &intr);
 }
 
 #ifdef KVM_CAP_SET_GUEST_DEBUG
 int kvm_set_guest_debug(kvm_vcpu_context_t vcpu, struct kvm_guest_debug *dbg)
 {
-	return ioctl(vcpu->env->kvm_fd, KVM_SET_GUEST_DEBUG, dbg);
+	return kvm_vcpu_ioctl(vcpu->env, KVM_SET_GUEST_DEBUG, dbg);
 }
 #endif
 
@@ -1050,18 +1050,13 @@ int kvm_set_signal_mask(kvm_vcpu_context_t vcpu, const sigset_t *sigset)
 	int r;
 
 	if (!sigset) {
-		r = ioctl(vcpu->env->kvm_fd, KVM_SET_SIGNAL_MASK, NULL);
-		if (r == -1)
-			r = -errno;
-		return r;
+		return kvm_vcpu_ioctl(vcpu->env, KVM_SET_SIGNAL_MASK, NULL);
 	}
 	sigmask = qemu_malloc(sizeof(*sigmask) + sizeof(*sigset));
 
 	sigmask->len = 8;
 	memcpy(sigmask->sigset, sigset, sizeof(*sigset));
-	r = ioctl(vcpu->env->kvm_fd, KVM_SET_SIGNAL_MASK, sigmask);
-	if (r == -1)
-		r = -errno;
+	r = kvm_vcpu_ioctl(vcpu->env, KVM_SET_SIGNAL_MASK, sigmask);
 	free(sigmask);
 	return r;
 }
@@ -1078,7 +1073,7 @@ int kvm_has_sync_mmu(void)
 int kvm_inject_nmi(kvm_vcpu_context_t vcpu)
 {
 #ifdef KVM_CAP_USER_NMI
-	return ioctl(vcpu->env->kvm_fd, KVM_NMI);
+	return kvm_vcpu_ioctl(vcpu->env, KVM_NMI);
 #else
 	return -ENOSYS;
 #endif
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 1dc9873..1fc1e8f 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -1202,6 +1202,8 @@ extern KVMState *kvm_state;
 
 int kvm_ioctl(KVMState *s, int type, ...);
 int kvm_vm_ioctl(KVMState *s, int type, ...);
+int kvm_vcpu_ioctl(CPUState *env, int type, ...);
+
 int kvm_check_extension(KVMState *s, unsigned int ext);
 
 #endif
-- 
1.6.2.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 9/9] remove id from vcpu context
  2009-07-29 17:49               ` [PATCH 8/9] use kvm_vcpu_ioctl Glauber Costa
@ 2009-07-29 17:49                 ` Glauber Costa
  0 siblings, 0 replies; 11+ messages in thread
From: Glauber Costa @ 2009-07-29 17:49 UTC (permalink / raw)
  To: kvm; +Cc: avi

Fields in CPUState are enough to keep track of it.

Signed-off-by: Glauber Costa <glommer@redhat.com>
---
 qemu-kvm.c |    2 --
 qemu-kvm.h |    1 -
 2 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/qemu-kvm.c b/qemu-kvm.c
index bc06f9f..3303622 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -434,8 +434,6 @@ kvm_vcpu_context_t kvm_create_vcpu(CPUState *env, int id)
 	int r;
 	kvm_vcpu_context_t vcpu_ctx = qemu_malloc(sizeof(struct kvm_vcpu_context));
 
-	vcpu_ctx->id = id;
-
 	r = kvm_vm_ioctl(kvm_state, KVM_CREATE_VCPU, id);
 	if (r < 0) {
 		fprintf(stderr, "kvm_create_vcpu: %m\n");
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 1fc1e8f..ba5b4f2 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -71,7 +71,6 @@ struct kvm_context {
 struct kvm_vcpu_context
 {
     CPUState *env;
-	uint32_t id;
 };
 
 typedef struct kvm_context *kvm_context_t;
-- 
1.6.2.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/9] remove kvm_mmio_read and kvm_mmio_write
  2009-07-29 17:49   ` [PATCH 2/9] remove kvm_mmio_read and kvm_mmio_write Glauber Costa
  2009-07-29 17:49     ` [PATCH 3/9] put env inside vcpu_context Glauber Costa
@ 2009-08-03 13:12     ` Avi Kivity
  1 sibling, 0 replies; 11+ messages in thread
From: Avi Kivity @ 2009-08-03 13:12 UTC (permalink / raw)
  To: Glauber Costa; +Cc: kvm

On 07/29/2009 08:49 PM, Glauber Costa wrote:
> all they did was to call a qemu function. Call this function instead.
>
>    

Indentation is broken.  Remember: tabs stops are 8 spaces, even if 
indentation is 4 spaces.

-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2009-08-03 13:07 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-29 17:49 [PATCH 0/9] (Almost) get rid of kvm vcpu structure Glauber Costa
2009-07-29 17:49 ` [PATCH 1/9] use coalesced_mmio field from qemu upstream Glauber Costa
2009-07-29 17:49   ` [PATCH 2/9] remove kvm_mmio_read and kvm_mmio_write Glauber Costa
2009-07-29 17:49     ` [PATCH 3/9] put env inside vcpu_context Glauber Costa
2009-07-29 17:49       ` [PATCH 4/9] remove opaque field from kvm_context Glauber Costa
2009-07-29 17:49         ` [PATCH 5/9] remove fd from vcpu_context Glauber Costa
2009-07-29 17:49           ` [PATCH 6/9] remove run from vcpu context Glauber Costa
2009-07-29 17:49             ` [PATCH 7/9] remove kvm_context from vcpu_context Glauber Costa
2009-07-29 17:49               ` [PATCH 8/9] use kvm_vcpu_ioctl Glauber Costa
2009-07-29 17:49                 ` [PATCH 9/9] remove id from vcpu context Glauber Costa
2009-08-03 13:12     ` [PATCH 2/9] remove kvm_mmio_read and kvm_mmio_write Avi Kivity

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox