* [PATCH] [Userspace] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
@ 2008-08-28 4:12 ` Zhang, Xiantao
0 siblings, 0 replies; 6+ messages in thread
From: Zhang, Xiantao @ 2008-08-28 4:12 UTC (permalink / raw)
To: kvm-ia64
[-- Attachment #1: Type: text/plain, Size: 4362 bytes --]
From 1de77b49314cfbabd65a6aef4d25430de22f2a61 Mon Sep 17 00:00:00 2001
From: Xiantao Zhang <xiantao.zhang@intel.com>
Date: Thu, 28 Aug 2008 11:04:02 +0800
Subject: [PATCH] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
Add get/set_mpstate for Ipf.
Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
---
libkvm/libkvm.c | 7 +++++--
qemu/hw/serial.c | 4 ++--
qemu/qemu-kvm-ia64.c | 37 +++++++++++++++++++++++++++++++++++++
qemu/target-ia64/cpu.h | 2 +-
qemu/target-ia64/machine.c | 12 ++++++++++++
5 files changed, 57 insertions(+), 5 deletions(-)
diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c
index 5edfad7..bb503ff 100644
--- a/libkvm/libkvm.c
+++ b/libkvm/libkvm.c
@@ -285,7 +285,8 @@ int kvm_create_vcpu(kvm_context_t kvm, int slot)
{
long mmap_size;
int r;
-
+
+ fprintf(stderr, "kvm_create_vcpu\n");
r = ioctl(kvm->vm_fd, KVM_CREATE_VCPU, slot);
if (r == -1) {
r = -errno;
@@ -836,11 +837,13 @@ int kvm_set_mpstate(kvm_context_t kvm, int vcpu,
struct kvm_mp_state *mp_state)
}
#endif
+int log_flag =0;
static int handle_mmio(kvm_context_t kvm, struct kvm_run *kvm_run)
{
unsigned long addr = kvm_run->mmio.phys_addr;
void *data = kvm_run->mmio.data;
-
+ if (log_flag)
+ fprintf(stderr,"addr:%lx\n", addr);
/* hack: Red Hat 7.1 generates these weird accesses. */
if ((addr > 0xa0000-4 && addr <= 0xa0000) && kvm_run->mmio.len
== 3)
return 0;
diff --git a/qemu/hw/serial.c b/qemu/hw/serial.c
index d70207e..a08c675 100644
--- a/qemu/hw/serial.c
+++ b/qemu/hw/serial.c
@@ -676,10 +676,10 @@ static int serial_load(QEMUFile *f, void *opaque,
int version_id)
return 0;
}
+
static void serial_reset(void *opaque)
{
SerialState *s = opaque;
-
s->rbr = 0;
s->ier = 0;
s->iir = UART_IIR_NO_INT;
@@ -702,8 +702,8 @@ static void serial_reset(void *opaque)
s->thr_ipending = 0;
s->last_break_enable = 0;
qemu_irq_lower(s->irq);
+ fprintf(stderr, "serial called!\n");
}
-
static void serial_init_core(SerialState *s, qemu_irq irq, int
baudbase,
CharDriverState *chr)
{
diff --git a/qemu/qemu-kvm-ia64.c b/qemu/qemu-kvm-ia64.c
index d227d22..042c7ed 100644
--- a/qemu/qemu-kvm-ia64.c
+++ b/qemu/qemu-kvm-ia64.c
@@ -62,6 +62,43 @@ void kvm_arch_update_regs_for_sipi(CPUState *env)
{
}
+void kvm_save_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ int r;
+ struct kvm_mp_state mp_state;
+
+ r = kvm_get_mpstate(kvm_context, env->cpu_index, &mp_state);
+ if (r < 0)
+ env->mp_state = -1;
+ else
+ env->mp_state = mp_state.mp_state;
+#endif
+}
+
+void kvm_load_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ struct kvm_mp_state mp_state = { .mp_state = env->mp_state };
+
+ /*
+ * -1 indicates that the host did not support GET_MP_STATE ioctl,
+ * so don't touch it.
+ */
+ if (env->mp_state != -1)
+ kvm_set_mpstate(kvm_context, env->cpu_index, &mp_state);
+#endif
+}
+
void kvm_arch_cpu_reset(CPUState *env)
{
+ if (kvm_irqchip_in_kernel(kvm_context)) {
+#ifdef KVM_CAP_MP_STATE
+ kvm_reset_mpstate(kvm_context, env->cpu_index);
+#endif
+ } else {
+ env->interrupt_request &= ~CPU_INTERRUPT_HARD;
+ env->halted = 1;
+ env->exception_index = EXCP_HLT;
+ }
}
diff --git a/qemu/target-ia64/cpu.h b/qemu/target-ia64/cpu.h
index a3ff7a8..e65e628 100644
--- a/qemu/target-ia64/cpu.h
+++ b/qemu/target-ia64/cpu.h
@@ -44,7 +44,7 @@
typedef struct CPUIA64State {
CPU_COMMON;
uint32_t hflags;
-
+ int mp_state;
} CPUIA64State;
#define CPUState CPUIA64State
diff --git a/qemu/target-ia64/machine.c b/qemu/target-ia64/machine.c
index 4dc5d5e..a32b01a 100644
--- a/qemu/target-ia64/machine.c
+++ b/qemu/target-ia64/machine.c
@@ -11,9 +11,21 @@ void register_machines(void)
void cpu_save(QEMUFile *f, void *opaque)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_save_registers(env);
+ kvm_save_mpstate(env);
+ }
}
int cpu_load(QEMUFile *f, void *opaque, int version_id)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_load_registers(env);
+ kvm_load_mpstate(env);
+ }
return 0;
}
--
1.5.1
[-- Attachment #2: 0001-kvm-ia64-Qemu-Add-get-set_mpstate-for-Ipf.patch --]
[-- Type: application/octet-stream, Size: 4200 bytes --]
From 1de77b49314cfbabd65a6aef4d25430de22f2a61 Mon Sep 17 00:00:00 2001
From: Xiantao Zhang <xiantao.zhang@intel.com>
Date: Thu, 28 Aug 2008 11:04:02 +0800
Subject: [PATCH] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
Add get/set_mpstate for Ipf.
Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
---
libkvm/libkvm.c | 7 +++++--
qemu/hw/serial.c | 4 ++--
qemu/qemu-kvm-ia64.c | 37 +++++++++++++++++++++++++++++++++++++
qemu/target-ia64/cpu.h | 2 +-
qemu/target-ia64/machine.c | 12 ++++++++++++
5 files changed, 57 insertions(+), 5 deletions(-)
diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c
index 5edfad7..bb503ff 100644
--- a/libkvm/libkvm.c
+++ b/libkvm/libkvm.c
@@ -285,7 +285,8 @@ int kvm_create_vcpu(kvm_context_t kvm, int slot)
{
long mmap_size;
int r;
-
+
+ fprintf(stderr, "kvm_create_vcpu\n");
r = ioctl(kvm->vm_fd, KVM_CREATE_VCPU, slot);
if (r == -1) {
r = -errno;
@@ -836,11 +837,13 @@ int kvm_set_mpstate(kvm_context_t kvm, int vcpu, struct kvm_mp_state *mp_state)
}
#endif
+int log_flag =0;
static int handle_mmio(kvm_context_t kvm, struct kvm_run *kvm_run)
{
unsigned long addr = kvm_run->mmio.phys_addr;
void *data = kvm_run->mmio.data;
-
+ if (log_flag)
+ fprintf(stderr,"addr:%lx\n", addr);
/* hack: Red Hat 7.1 generates these weird accesses. */
if ((addr > 0xa0000-4 && addr <= 0xa0000) && kvm_run->mmio.len == 3)
return 0;
diff --git a/qemu/hw/serial.c b/qemu/hw/serial.c
index d70207e..a08c675 100644
--- a/qemu/hw/serial.c
+++ b/qemu/hw/serial.c
@@ -676,10 +676,10 @@ static int serial_load(QEMUFile *f, void *opaque, int version_id)
return 0;
}
+
static void serial_reset(void *opaque)
{
SerialState *s = opaque;
-
s->rbr = 0;
s->ier = 0;
s->iir = UART_IIR_NO_INT;
@@ -702,8 +702,8 @@ static void serial_reset(void *opaque)
s->thr_ipending = 0;
s->last_break_enable = 0;
qemu_irq_lower(s->irq);
+ fprintf(stderr, "serial called!\n");
}
-
static void serial_init_core(SerialState *s, qemu_irq irq, int baudbase,
CharDriverState *chr)
{
diff --git a/qemu/qemu-kvm-ia64.c b/qemu/qemu-kvm-ia64.c
index d227d22..042c7ed 100644
--- a/qemu/qemu-kvm-ia64.c
+++ b/qemu/qemu-kvm-ia64.c
@@ -62,6 +62,43 @@ void kvm_arch_update_regs_for_sipi(CPUState *env)
{
}
+void kvm_save_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ int r;
+ struct kvm_mp_state mp_state;
+
+ r = kvm_get_mpstate(kvm_context, env->cpu_index, &mp_state);
+ if (r < 0)
+ env->mp_state = -1;
+ else
+ env->mp_state = mp_state.mp_state;
+#endif
+}
+
+void kvm_load_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ struct kvm_mp_state mp_state = { .mp_state = env->mp_state };
+
+ /*
+ * -1 indicates that the host did not support GET_MP_STATE ioctl,
+ * so don't touch it.
+ */
+ if (env->mp_state != -1)
+ kvm_set_mpstate(kvm_context, env->cpu_index, &mp_state);
+#endif
+}
+
void kvm_arch_cpu_reset(CPUState *env)
{
+ if (kvm_irqchip_in_kernel(kvm_context)) {
+#ifdef KVM_CAP_MP_STATE
+ kvm_reset_mpstate(kvm_context, env->cpu_index);
+#endif
+ } else {
+ env->interrupt_request &= ~CPU_INTERRUPT_HARD;
+ env->halted = 1;
+ env->exception_index = EXCP_HLT;
+ }
}
diff --git a/qemu/target-ia64/cpu.h b/qemu/target-ia64/cpu.h
index a3ff7a8..e65e628 100644
--- a/qemu/target-ia64/cpu.h
+++ b/qemu/target-ia64/cpu.h
@@ -44,7 +44,7 @@
typedef struct CPUIA64State {
CPU_COMMON;
uint32_t hflags;
-
+ int mp_state;
} CPUIA64State;
#define CPUState CPUIA64State
diff --git a/qemu/target-ia64/machine.c b/qemu/target-ia64/machine.c
index 4dc5d5e..a32b01a 100644
--- a/qemu/target-ia64/machine.c
+++ b/qemu/target-ia64/machine.c
@@ -11,9 +11,21 @@ void register_machines(void)
void cpu_save(QEMUFile *f, void *opaque)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_save_registers(env);
+ kvm_save_mpstate(env);
+ }
}
int cpu_load(QEMUFile *f, void *opaque, int version_id)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_load_registers(env);
+ kvm_load_mpstate(env);
+ }
return 0;
}
--
1.5.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH] [Userspace] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
@ 2008-08-28 4:12 ` Zhang, Xiantao
0 siblings, 0 replies; 6+ messages in thread
From: Zhang, Xiantao @ 2008-08-28 4:12 UTC (permalink / raw)
To: kvm-devel@lists.sourceforge.net, kvm-ia64; +Cc: Avi Kivity
[-- Attachment #1: Type: text/plain, Size: 4363 bytes --]
>From 1de77b49314cfbabd65a6aef4d25430de22f2a61 Mon Sep 17 00:00:00 2001
From: Xiantao Zhang <xiantao.zhang@intel.com>
Date: Thu, 28 Aug 2008 11:04:02 +0800
Subject: [PATCH] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
Add get/set_mpstate for Ipf.
Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
---
libkvm/libkvm.c | 7 +++++--
qemu/hw/serial.c | 4 ++--
qemu/qemu-kvm-ia64.c | 37 +++++++++++++++++++++++++++++++++++++
qemu/target-ia64/cpu.h | 2 +-
qemu/target-ia64/machine.c | 12 ++++++++++++
5 files changed, 57 insertions(+), 5 deletions(-)
diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c
index 5edfad7..bb503ff 100644
--- a/libkvm/libkvm.c
+++ b/libkvm/libkvm.c
@@ -285,7 +285,8 @@ int kvm_create_vcpu(kvm_context_t kvm, int slot)
{
long mmap_size;
int r;
-
+
+ fprintf(stderr, "kvm_create_vcpu\n");
r = ioctl(kvm->vm_fd, KVM_CREATE_VCPU, slot);
if (r == -1) {
r = -errno;
@@ -836,11 +837,13 @@ int kvm_set_mpstate(kvm_context_t kvm, int vcpu,
struct kvm_mp_state *mp_state)
}
#endif
+int log_flag =0;
static int handle_mmio(kvm_context_t kvm, struct kvm_run *kvm_run)
{
unsigned long addr = kvm_run->mmio.phys_addr;
void *data = kvm_run->mmio.data;
-
+ if (log_flag)
+ fprintf(stderr,"addr:%lx\n", addr);
/* hack: Red Hat 7.1 generates these weird accesses. */
if ((addr > 0xa0000-4 && addr <= 0xa0000) && kvm_run->mmio.len
== 3)
return 0;
diff --git a/qemu/hw/serial.c b/qemu/hw/serial.c
index d70207e..a08c675 100644
--- a/qemu/hw/serial.c
+++ b/qemu/hw/serial.c
@@ -676,10 +676,10 @@ static int serial_load(QEMUFile *f, void *opaque,
int version_id)
return 0;
}
+
static void serial_reset(void *opaque)
{
SerialState *s = opaque;
-
s->rbr = 0;
s->ier = 0;
s->iir = UART_IIR_NO_INT;
@@ -702,8 +702,8 @@ static void serial_reset(void *opaque)
s->thr_ipending = 0;
s->last_break_enable = 0;
qemu_irq_lower(s->irq);
+ fprintf(stderr, "serial called!\n");
}
-
static void serial_init_core(SerialState *s, qemu_irq irq, int
baudbase,
CharDriverState *chr)
{
diff --git a/qemu/qemu-kvm-ia64.c b/qemu/qemu-kvm-ia64.c
index d227d22..042c7ed 100644
--- a/qemu/qemu-kvm-ia64.c
+++ b/qemu/qemu-kvm-ia64.c
@@ -62,6 +62,43 @@ void kvm_arch_update_regs_for_sipi(CPUState *env)
{
}
+void kvm_save_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ int r;
+ struct kvm_mp_state mp_state;
+
+ r = kvm_get_mpstate(kvm_context, env->cpu_index, &mp_state);
+ if (r < 0)
+ env->mp_state = -1;
+ else
+ env->mp_state = mp_state.mp_state;
+#endif
+}
+
+void kvm_load_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ struct kvm_mp_state mp_state = { .mp_state = env->mp_state };
+
+ /*
+ * -1 indicates that the host did not support GET_MP_STATE ioctl,
+ * so don't touch it.
+ */
+ if (env->mp_state != -1)
+ kvm_set_mpstate(kvm_context, env->cpu_index, &mp_state);
+#endif
+}
+
void kvm_arch_cpu_reset(CPUState *env)
{
+ if (kvm_irqchip_in_kernel(kvm_context)) {
+#ifdef KVM_CAP_MP_STATE
+ kvm_reset_mpstate(kvm_context, env->cpu_index);
+#endif
+ } else {
+ env->interrupt_request &= ~CPU_INTERRUPT_HARD;
+ env->halted = 1;
+ env->exception_index = EXCP_HLT;
+ }
}
diff --git a/qemu/target-ia64/cpu.h b/qemu/target-ia64/cpu.h
index a3ff7a8..e65e628 100644
--- a/qemu/target-ia64/cpu.h
+++ b/qemu/target-ia64/cpu.h
@@ -44,7 +44,7 @@
typedef struct CPUIA64State {
CPU_COMMON;
uint32_t hflags;
-
+ int mp_state;
} CPUIA64State;
#define CPUState CPUIA64State
diff --git a/qemu/target-ia64/machine.c b/qemu/target-ia64/machine.c
index 4dc5d5e..a32b01a 100644
--- a/qemu/target-ia64/machine.c
+++ b/qemu/target-ia64/machine.c
@@ -11,9 +11,21 @@ void register_machines(void)
void cpu_save(QEMUFile *f, void *opaque)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_save_registers(env);
+ kvm_save_mpstate(env);
+ }
}
int cpu_load(QEMUFile *f, void *opaque, int version_id)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_load_registers(env);
+ kvm_load_mpstate(env);
+ }
return 0;
}
--
1.5.1
[-- Attachment #2: 0001-kvm-ia64-Qemu-Add-get-set_mpstate-for-Ipf.patch --]
[-- Type: application/octet-stream, Size: 4200 bytes --]
From 1de77b49314cfbabd65a6aef4d25430de22f2a61 Mon Sep 17 00:00:00 2001
From: Xiantao Zhang <xiantao.zhang@intel.com>
Date: Thu, 28 Aug 2008 11:04:02 +0800
Subject: [PATCH] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
Add get/set_mpstate for Ipf.
Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
---
libkvm/libkvm.c | 7 +++++--
qemu/hw/serial.c | 4 ++--
qemu/qemu-kvm-ia64.c | 37 +++++++++++++++++++++++++++++++++++++
qemu/target-ia64/cpu.h | 2 +-
qemu/target-ia64/machine.c | 12 ++++++++++++
5 files changed, 57 insertions(+), 5 deletions(-)
diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c
index 5edfad7..bb503ff 100644
--- a/libkvm/libkvm.c
+++ b/libkvm/libkvm.c
@@ -285,7 +285,8 @@ int kvm_create_vcpu(kvm_context_t kvm, int slot)
{
long mmap_size;
int r;
-
+
+ fprintf(stderr, "kvm_create_vcpu\n");
r = ioctl(kvm->vm_fd, KVM_CREATE_VCPU, slot);
if (r == -1) {
r = -errno;
@@ -836,11 +837,13 @@ int kvm_set_mpstate(kvm_context_t kvm, int vcpu, struct kvm_mp_state *mp_state)
}
#endif
+int log_flag =0;
static int handle_mmio(kvm_context_t kvm, struct kvm_run *kvm_run)
{
unsigned long addr = kvm_run->mmio.phys_addr;
void *data = kvm_run->mmio.data;
-
+ if (log_flag)
+ fprintf(stderr,"addr:%lx\n", addr);
/* hack: Red Hat 7.1 generates these weird accesses. */
if ((addr > 0xa0000-4 && addr <= 0xa0000) && kvm_run->mmio.len == 3)
return 0;
diff --git a/qemu/hw/serial.c b/qemu/hw/serial.c
index d70207e..a08c675 100644
--- a/qemu/hw/serial.c
+++ b/qemu/hw/serial.c
@@ -676,10 +676,10 @@ static int serial_load(QEMUFile *f, void *opaque, int version_id)
return 0;
}
+
static void serial_reset(void *opaque)
{
SerialState *s = opaque;
-
s->rbr = 0;
s->ier = 0;
s->iir = UART_IIR_NO_INT;
@@ -702,8 +702,8 @@ static void serial_reset(void *opaque)
s->thr_ipending = 0;
s->last_break_enable = 0;
qemu_irq_lower(s->irq);
+ fprintf(stderr, "serial called!\n");
}
-
static void serial_init_core(SerialState *s, qemu_irq irq, int baudbase,
CharDriverState *chr)
{
diff --git a/qemu/qemu-kvm-ia64.c b/qemu/qemu-kvm-ia64.c
index d227d22..042c7ed 100644
--- a/qemu/qemu-kvm-ia64.c
+++ b/qemu/qemu-kvm-ia64.c
@@ -62,6 +62,43 @@ void kvm_arch_update_regs_for_sipi(CPUState *env)
{
}
+void kvm_save_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ int r;
+ struct kvm_mp_state mp_state;
+
+ r = kvm_get_mpstate(kvm_context, env->cpu_index, &mp_state);
+ if (r < 0)
+ env->mp_state = -1;
+ else
+ env->mp_state = mp_state.mp_state;
+#endif
+}
+
+void kvm_load_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ struct kvm_mp_state mp_state = { .mp_state = env->mp_state };
+
+ /*
+ * -1 indicates that the host did not support GET_MP_STATE ioctl,
+ * so don't touch it.
+ */
+ if (env->mp_state != -1)
+ kvm_set_mpstate(kvm_context, env->cpu_index, &mp_state);
+#endif
+}
+
void kvm_arch_cpu_reset(CPUState *env)
{
+ if (kvm_irqchip_in_kernel(kvm_context)) {
+#ifdef KVM_CAP_MP_STATE
+ kvm_reset_mpstate(kvm_context, env->cpu_index);
+#endif
+ } else {
+ env->interrupt_request &= ~CPU_INTERRUPT_HARD;
+ env->halted = 1;
+ env->exception_index = EXCP_HLT;
+ }
}
diff --git a/qemu/target-ia64/cpu.h b/qemu/target-ia64/cpu.h
index a3ff7a8..e65e628 100644
--- a/qemu/target-ia64/cpu.h
+++ b/qemu/target-ia64/cpu.h
@@ -44,7 +44,7 @@
typedef struct CPUIA64State {
CPU_COMMON;
uint32_t hflags;
-
+ int mp_state;
} CPUIA64State;
#define CPUState CPUIA64State
diff --git a/qemu/target-ia64/machine.c b/qemu/target-ia64/machine.c
index 4dc5d5e..a32b01a 100644
--- a/qemu/target-ia64/machine.c
+++ b/qemu/target-ia64/machine.c
@@ -11,9 +11,21 @@ void register_machines(void)
void cpu_save(QEMUFile *f, void *opaque)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_save_registers(env);
+ kvm_save_mpstate(env);
+ }
}
int cpu_load(QEMUFile *f, void *opaque, int version_id)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_load_registers(env);
+ kvm_load_mpstate(env);
+ }
return 0;
}
--
1.5.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* RE: [PATCH] [Userspace] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
2008-08-28 4:12 ` Zhang, Xiantao
@ 2008-08-30 2:05 ` Zhang, Xiantao
-1 siblings, 0 replies; 6+ messages in thread
From: Zhang, Xiantao @ 2008-08-30 2:05 UTC (permalink / raw)
To: kvm-ia64
[-- Attachment #1: Type: text/plain, Size: 2779 bytes --]
Resend. Privious one forgets to remove debug info. Sorry!
Xiantao
From 8c032c78665745ef421a75d2a9465d392f068c93 Mon Sep 17 00:00:00 2001
From: Xiantao Zhang <xiantao.zhang@intel.com>
Date: Sat, 30 Aug 2008 08:36:03 +0800
Subject: [PATCH] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
Add get/set_mpstate for Ipf.
Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
---
qemu/qemu-kvm-ia64.c | 37 +++++++++++++++++++++++++++++++++++++
qemu/target-ia64/cpu.h | 2 +-
qemu/target-ia64/machine.c | 12 ++++++++++++
3 files changed, 50 insertions(+), 1 deletions(-)
diff --git a/qemu/qemu-kvm-ia64.c b/qemu/qemu-kvm-ia64.c
index d227d22..042c7ed 100644
--- a/qemu/qemu-kvm-ia64.c
+++ b/qemu/qemu-kvm-ia64.c
@@ -62,6 +62,43 @@ void kvm_arch_update_regs_for_sipi(CPUState *env)
{
}
+void kvm_save_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ int r;
+ struct kvm_mp_state mp_state;
+
+ r = kvm_get_mpstate(kvm_context, env->cpu_index, &mp_state);
+ if (r < 0)
+ env->mp_state = -1;
+ else
+ env->mp_state = mp_state.mp_state;
+#endif
+}
+
+void kvm_load_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ struct kvm_mp_state mp_state = { .mp_state = env->mp_state };
+
+ /*
+ * -1 indicates that the host did not support GET_MP_STATE ioctl,
+ * so don't touch it.
+ */
+ if (env->mp_state != -1)
+ kvm_set_mpstate(kvm_context, env->cpu_index, &mp_state);
+#endif
+}
+
void kvm_arch_cpu_reset(CPUState *env)
{
+ if (kvm_irqchip_in_kernel(kvm_context)) {
+#ifdef KVM_CAP_MP_STATE
+ kvm_reset_mpstate(kvm_context, env->cpu_index);
+#endif
+ } else {
+ env->interrupt_request &= ~CPU_INTERRUPT_HARD;
+ env->halted = 1;
+ env->exception_index = EXCP_HLT;
+ }
}
diff --git a/qemu/target-ia64/cpu.h b/qemu/target-ia64/cpu.h
index a3ff7a8..e65e628 100644
--- a/qemu/target-ia64/cpu.h
+++ b/qemu/target-ia64/cpu.h
@@ -44,7 +44,7 @@
typedef struct CPUIA64State {
CPU_COMMON;
uint32_t hflags;
-
+ int mp_state;
} CPUIA64State;
#define CPUState CPUIA64State
diff --git a/qemu/target-ia64/machine.c b/qemu/target-ia64/machine.c
index 4dc5d5e..a32b01a 100644
--- a/qemu/target-ia64/machine.c
+++ b/qemu/target-ia64/machine.c
@@ -11,9 +11,21 @@ void register_machines(void)
void cpu_save(QEMUFile *f, void *opaque)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_save_registers(env);
+ kvm_save_mpstate(env);
+ }
}
int cpu_load(QEMUFile *f, void *opaque, int version_id)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_load_registers(env);
+ kvm_load_mpstate(env);
+ }
return 0;
}
--
1.5.1
[-- Attachment #2: 0001-kvm-ia64-Qemu-Add-get-set_mpstate-for-Ipf.patch --]
[-- Type: application/octet-stream, Size: 2608 bytes --]
From 8c032c78665745ef421a75d2a9465d392f068c93 Mon Sep 17 00:00:00 2001
From: Xiantao Zhang <xiantao.zhang@intel.com>
Date: Sat, 30 Aug 2008 08:36:03 +0800
Subject: [PATCH] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
Add get/set_mpstate for Ipf.
Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
---
qemu/qemu-kvm-ia64.c | 37 +++++++++++++++++++++++++++++++++++++
qemu/target-ia64/cpu.h | 2 +-
qemu/target-ia64/machine.c | 12 ++++++++++++
3 files changed, 50 insertions(+), 1 deletions(-)
diff --git a/qemu/qemu-kvm-ia64.c b/qemu/qemu-kvm-ia64.c
index d227d22..042c7ed 100644
--- a/qemu/qemu-kvm-ia64.c
+++ b/qemu/qemu-kvm-ia64.c
@@ -62,6 +62,43 @@ void kvm_arch_update_regs_for_sipi(CPUState *env)
{
}
+void kvm_save_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ int r;
+ struct kvm_mp_state mp_state;
+
+ r = kvm_get_mpstate(kvm_context, env->cpu_index, &mp_state);
+ if (r < 0)
+ env->mp_state = -1;
+ else
+ env->mp_state = mp_state.mp_state;
+#endif
+}
+
+void kvm_load_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ struct kvm_mp_state mp_state = { .mp_state = env->mp_state };
+
+ /*
+ * -1 indicates that the host did not support GET_MP_STATE ioctl,
+ * so don't touch it.
+ */
+ if (env->mp_state != -1)
+ kvm_set_mpstate(kvm_context, env->cpu_index, &mp_state);
+#endif
+}
+
void kvm_arch_cpu_reset(CPUState *env)
{
+ if (kvm_irqchip_in_kernel(kvm_context)) {
+#ifdef KVM_CAP_MP_STATE
+ kvm_reset_mpstate(kvm_context, env->cpu_index);
+#endif
+ } else {
+ env->interrupt_request &= ~CPU_INTERRUPT_HARD;
+ env->halted = 1;
+ env->exception_index = EXCP_HLT;
+ }
}
diff --git a/qemu/target-ia64/cpu.h b/qemu/target-ia64/cpu.h
index a3ff7a8..e65e628 100644
--- a/qemu/target-ia64/cpu.h
+++ b/qemu/target-ia64/cpu.h
@@ -44,7 +44,7 @@
typedef struct CPUIA64State {
CPU_COMMON;
uint32_t hflags;
-
+ int mp_state;
} CPUIA64State;
#define CPUState CPUIA64State
diff --git a/qemu/target-ia64/machine.c b/qemu/target-ia64/machine.c
index 4dc5d5e..a32b01a 100644
--- a/qemu/target-ia64/machine.c
+++ b/qemu/target-ia64/machine.c
@@ -11,9 +11,21 @@ void register_machines(void)
void cpu_save(QEMUFile *f, void *opaque)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_save_registers(env);
+ kvm_save_mpstate(env);
+ }
}
int cpu_load(QEMUFile *f, void *opaque, int version_id)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_load_registers(env);
+ kvm_load_mpstate(env);
+ }
return 0;
}
--
1.5.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* RE: [PATCH] [Userspace] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
@ 2008-08-30 2:05 ` Zhang, Xiantao
0 siblings, 0 replies; 6+ messages in thread
From: Zhang, Xiantao @ 2008-08-30 2:05 UTC (permalink / raw)
To: Zhang, Xiantao, kvm-devel@lists.sourceforge.net, kvm-ia64; +Cc: Avi Kivity
[-- Attachment #1: Type: text/plain, Size: 2780 bytes --]
Resend. Privious one forgets to remove debug info. Sorry!
Xiantao
>From 8c032c78665745ef421a75d2a9465d392f068c93 Mon Sep 17 00:00:00 2001
From: Xiantao Zhang <xiantao.zhang@intel.com>
Date: Sat, 30 Aug 2008 08:36:03 +0800
Subject: [PATCH] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
Add get/set_mpstate for Ipf.
Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
---
qemu/qemu-kvm-ia64.c | 37 +++++++++++++++++++++++++++++++++++++
qemu/target-ia64/cpu.h | 2 +-
qemu/target-ia64/machine.c | 12 ++++++++++++
3 files changed, 50 insertions(+), 1 deletions(-)
diff --git a/qemu/qemu-kvm-ia64.c b/qemu/qemu-kvm-ia64.c
index d227d22..042c7ed 100644
--- a/qemu/qemu-kvm-ia64.c
+++ b/qemu/qemu-kvm-ia64.c
@@ -62,6 +62,43 @@ void kvm_arch_update_regs_for_sipi(CPUState *env)
{
}
+void kvm_save_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ int r;
+ struct kvm_mp_state mp_state;
+
+ r = kvm_get_mpstate(kvm_context, env->cpu_index, &mp_state);
+ if (r < 0)
+ env->mp_state = -1;
+ else
+ env->mp_state = mp_state.mp_state;
+#endif
+}
+
+void kvm_load_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ struct kvm_mp_state mp_state = { .mp_state = env->mp_state };
+
+ /*
+ * -1 indicates that the host did not support GET_MP_STATE ioctl,
+ * so don't touch it.
+ */
+ if (env->mp_state != -1)
+ kvm_set_mpstate(kvm_context, env->cpu_index, &mp_state);
+#endif
+}
+
void kvm_arch_cpu_reset(CPUState *env)
{
+ if (kvm_irqchip_in_kernel(kvm_context)) {
+#ifdef KVM_CAP_MP_STATE
+ kvm_reset_mpstate(kvm_context, env->cpu_index);
+#endif
+ } else {
+ env->interrupt_request &= ~CPU_INTERRUPT_HARD;
+ env->halted = 1;
+ env->exception_index = EXCP_HLT;
+ }
}
diff --git a/qemu/target-ia64/cpu.h b/qemu/target-ia64/cpu.h
index a3ff7a8..e65e628 100644
--- a/qemu/target-ia64/cpu.h
+++ b/qemu/target-ia64/cpu.h
@@ -44,7 +44,7 @@
typedef struct CPUIA64State {
CPU_COMMON;
uint32_t hflags;
-
+ int mp_state;
} CPUIA64State;
#define CPUState CPUIA64State
diff --git a/qemu/target-ia64/machine.c b/qemu/target-ia64/machine.c
index 4dc5d5e..a32b01a 100644
--- a/qemu/target-ia64/machine.c
+++ b/qemu/target-ia64/machine.c
@@ -11,9 +11,21 @@ void register_machines(void)
void cpu_save(QEMUFile *f, void *opaque)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_save_registers(env);
+ kvm_save_mpstate(env);
+ }
}
int cpu_load(QEMUFile *f, void *opaque, int version_id)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_load_registers(env);
+ kvm_load_mpstate(env);
+ }
return 0;
}
--
1.5.1
[-- Attachment #2: 0001-kvm-ia64-Qemu-Add-get-set_mpstate-for-Ipf.patch --]
[-- Type: application/octet-stream, Size: 2608 bytes --]
From 8c032c78665745ef421a75d2a9465d392f068c93 Mon Sep 17 00:00:00 2001
From: Xiantao Zhang <xiantao.zhang@intel.com>
Date: Sat, 30 Aug 2008 08:36:03 +0800
Subject: [PATCH] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
Add get/set_mpstate for Ipf.
Signed-off-by: Xiantao Zhang <xiantao.zhang@intel.com>
---
qemu/qemu-kvm-ia64.c | 37 +++++++++++++++++++++++++++++++++++++
qemu/target-ia64/cpu.h | 2 +-
qemu/target-ia64/machine.c | 12 ++++++++++++
3 files changed, 50 insertions(+), 1 deletions(-)
diff --git a/qemu/qemu-kvm-ia64.c b/qemu/qemu-kvm-ia64.c
index d227d22..042c7ed 100644
--- a/qemu/qemu-kvm-ia64.c
+++ b/qemu/qemu-kvm-ia64.c
@@ -62,6 +62,43 @@ void kvm_arch_update_regs_for_sipi(CPUState *env)
{
}
+void kvm_save_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ int r;
+ struct kvm_mp_state mp_state;
+
+ r = kvm_get_mpstate(kvm_context, env->cpu_index, &mp_state);
+ if (r < 0)
+ env->mp_state = -1;
+ else
+ env->mp_state = mp_state.mp_state;
+#endif
+}
+
+void kvm_load_mpstate(CPUState *env)
+{
+#ifdef KVM_CAP_MP_STATE
+ struct kvm_mp_state mp_state = { .mp_state = env->mp_state };
+
+ /*
+ * -1 indicates that the host did not support GET_MP_STATE ioctl,
+ * so don't touch it.
+ */
+ if (env->mp_state != -1)
+ kvm_set_mpstate(kvm_context, env->cpu_index, &mp_state);
+#endif
+}
+
void kvm_arch_cpu_reset(CPUState *env)
{
+ if (kvm_irqchip_in_kernel(kvm_context)) {
+#ifdef KVM_CAP_MP_STATE
+ kvm_reset_mpstate(kvm_context, env->cpu_index);
+#endif
+ } else {
+ env->interrupt_request &= ~CPU_INTERRUPT_HARD;
+ env->halted = 1;
+ env->exception_index = EXCP_HLT;
+ }
}
diff --git a/qemu/target-ia64/cpu.h b/qemu/target-ia64/cpu.h
index a3ff7a8..e65e628 100644
--- a/qemu/target-ia64/cpu.h
+++ b/qemu/target-ia64/cpu.h
@@ -44,7 +44,7 @@
typedef struct CPUIA64State {
CPU_COMMON;
uint32_t hflags;
-
+ int mp_state;
} CPUIA64State;
#define CPUState CPUIA64State
diff --git a/qemu/target-ia64/machine.c b/qemu/target-ia64/machine.c
index 4dc5d5e..a32b01a 100644
--- a/qemu/target-ia64/machine.c
+++ b/qemu/target-ia64/machine.c
@@ -11,9 +11,21 @@ void register_machines(void)
void cpu_save(QEMUFile *f, void *opaque)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_save_registers(env);
+ kvm_save_mpstate(env);
+ }
}
int cpu_load(QEMUFile *f, void *opaque, int version_id)
{
+ CPUState *env = opaque;
+
+ if (kvm_enabled()) {
+ kvm_load_registers(env);
+ kvm_load_mpstate(env);
+ }
return 0;
}
--
1.5.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] [Userspace] kvm/ia64: Qemu : Add get/set_mpstate for
2008-08-30 2:05 ` Zhang, Xiantao
@ 2008-09-01 10:56 ` Avi Kivity
-1 siblings, 0 replies; 6+ messages in thread
From: Avi Kivity @ 2008-09-01 10:56 UTC (permalink / raw)
To: kvm-ia64
Zhang, Xiantao wrote:
> Resend. Privious one forgets to remove debug info. Sorry!
> Xiantao
>
> From 8c032c78665745ef421a75d2a9465d392f068c93 Mon Sep 17 00:00:00 2001
> From: Xiantao Zhang <xiantao.zhang@intel.com>
> Date: Sat, 30 Aug 2008 08:36:03 +0800
> Subject: [PATCH] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
>
> Add get/set_mpstate for Ipf.
>
Applied, thanks.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] [Userspace] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
@ 2008-09-01 10:56 ` Avi Kivity
0 siblings, 0 replies; 6+ messages in thread
From: Avi Kivity @ 2008-09-01 10:56 UTC (permalink / raw)
To: Zhang, Xiantao; +Cc: kvm-devel@lists.sourceforge.net, kvm-ia64
Zhang, Xiantao wrote:
> Resend. Privious one forgets to remove debug info. Sorry!
> Xiantao
>
> From 8c032c78665745ef421a75d2a9465d392f068c93 Mon Sep 17 00:00:00 2001
> From: Xiantao Zhang <xiantao.zhang@intel.com>
> Date: Sat, 30 Aug 2008 08:36:03 +0800
> Subject: [PATCH] kvm/ia64: Qemu : Add get/set_mpstate for Ipf.
>
> Add get/set_mpstate for Ipf.
>
Applied, thanks.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-09-01 10:56 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-28 4:12 [PATCH] [Userspace] kvm/ia64: Qemu : Add get/set_mpstate for Ipf Zhang, Xiantao
2008-08-28 4:12 ` Zhang, Xiantao
2008-08-30 2:05 ` Zhang, Xiantao
2008-08-30 2:05 ` Zhang, Xiantao
2008-09-01 10:56 ` [PATCH] [Userspace] kvm/ia64: Qemu : Add get/set_mpstate for Avi Kivity
2008-09-01 10:56 ` [PATCH] [Userspace] kvm/ia64: Qemu : Add get/set_mpstate for Ipf Avi Kivity
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.