* [Qemu-devel] [patch 0/3] misc uq/master updates
@ 2010-03-09 1:53 Marcelo Tosatti
2010-03-09 1:53 ` [Qemu-devel] [patch 1/3] target-i386: print EFER in cpu_dump_state Marcelo Tosatti
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Marcelo Tosatti @ 2010-03-09 1:53 UTC (permalink / raw)
To: kvm, qemu-devel
See individual patches for details.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [patch 1/3] target-i386: print EFER in cpu_dump_state
2010-03-09 1:53 [Qemu-devel] [patch 0/3] misc uq/master updates Marcelo Tosatti
@ 2010-03-09 1:53 ` Marcelo Tosatti
2010-03-11 8:35 ` [Qemu-devel] " Avi Kivity
2010-03-09 1:53 ` [Qemu-devel] [patch 2/3] kvm: handle internal error Marcelo Tosatti
2010-03-09 1:53 ` [Qemu-devel] [patch 3/3] kvm: allow qemu to set EPT identity mapping address Marcelo Tosatti
2 siblings, 1 reply; 9+ messages in thread
From: Marcelo Tosatti @ 2010-03-09 1:53 UTC (permalink / raw)
To: kvm, qemu-devel; +Cc: Marcelo Tosatti
[-- Attachment #1: print-efer --]
[-- Type: text/plain, Size: 604 bytes --]
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Index: qemu-kvm-uq/target-i386/helper.c
===================================================================
--- qemu-kvm-uq.orig/target-i386/helper.c
+++ qemu-kvm-uq/target-i386/helper.c
@@ -1176,6 +1176,7 @@ void cpu_dump_state(CPUState *env, FILE
cpu_x86_dump_seg_cache(env, f, cpu_fprintf, "TR", &env->tr);
#ifdef TARGET_X86_64
+ cpu_fprintf(f, "EFER= %016" PRIx64 "\n", env->efer);
if (env->hflags & HF_LMA_MASK) {
cpu_fprintf(f, "GDT= %016" PRIx64 " %08x\n",
env->gdt.base, env->gdt.limit);
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [patch 2/3] kvm: handle internal error
2010-03-09 1:53 [Qemu-devel] [patch 0/3] misc uq/master updates Marcelo Tosatti
2010-03-09 1:53 ` [Qemu-devel] [patch 1/3] target-i386: print EFER in cpu_dump_state Marcelo Tosatti
@ 2010-03-09 1:53 ` Marcelo Tosatti
2010-03-11 8:42 ` [Qemu-devel] " Avi Kivity
2010-03-09 1:53 ` [Qemu-devel] [patch 3/3] kvm: allow qemu to set EPT identity mapping address Marcelo Tosatti
2 siblings, 1 reply; 9+ messages in thread
From: Marcelo Tosatti @ 2010-03-09 1:53 UTC (permalink / raw)
To: kvm, qemu-devel; +Cc: Marcelo Tosatti
[-- Attachment #1: kvm_handle_internal_error --]
[-- Type: text/plain, Size: 1524 bytes --]
Port qemu-kvm's KVM_EXIT_INTERNAL_ERROR handling to upstream.
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Index: qemu-kvm/kvm-all.c
===================================================================
--- qemu-kvm.orig/kvm-all.c
+++ qemu-kvm/kvm-all.c
@@ -721,6 +721,28 @@ static int kvm_handle_io(uint16_t port,
return 1;
}
+#ifdef KVM_CAP_INTERNAL_ERROR_DATA
+static void kvm_handle_internal_error(CPUState *env, struct kvm_run *run)
+{
+
+ if (kvm_check_extension(kvm_state, KVM_CAP_INTERNAL_ERROR_DATA)) {
+ int i;
+
+ fprintf(stderr, "KVM internal error. Suberror: %d\n",
+ run->internal.suberror);
+
+ for (i = 0; i < run->internal.ndata; ++i) {
+ fprintf(stderr, "extra data[%d]: %"PRIx64"\n",
+ i, (uint64_t)run->internal.data[i]);
+ }
+ }
+ cpu_dump_state(env, stderr, fprintf, 0);
+ if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION)
+ fprintf(stderr, "emulation failure\n");
+ vm_stop(0);
+}
+#endif
+
void kvm_flush_coalesced_mmio_buffer(void)
{
#ifdef KVM_CAP_COALESCED_MMIO
@@ -836,6 +858,11 @@ int kvm_cpu_exec(CPUState *env)
case KVM_EXIT_EXCEPTION:
dprintf("kvm_exit_exception\n");
break;
+#ifdef KVM_CAP_INTERNAL_ERROR_DATA
+ case KVM_EXIT_INTERNAL_ERROR:
+ kvm_handle_internal_error(env, run);
+ break;
+#endif
case KVM_EXIT_DEBUG:
dprintf("kvm_exit_debug\n");
#ifdef KVM_CAP_SET_GUEST_DEBUG
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [patch 3/3] kvm: allow qemu to set EPT identity mapping address
2010-03-09 1:53 [Qemu-devel] [patch 0/3] misc uq/master updates Marcelo Tosatti
2010-03-09 1:53 ` [Qemu-devel] [patch 1/3] target-i386: print EFER in cpu_dump_state Marcelo Tosatti
2010-03-09 1:53 ` [Qemu-devel] [patch 2/3] kvm: handle internal error Marcelo Tosatti
@ 2010-03-09 1:53 ` Marcelo Tosatti
2010-03-11 8:42 ` [Qemu-devel] " Avi Kivity
2 siblings, 1 reply; 9+ messages in thread
From: Marcelo Tosatti @ 2010-03-09 1:53 UTC (permalink / raw)
To: kvm, qemu-devel; +Cc: Marcelo Tosatti
[-- Attachment #1: identity-map --]
[-- Type: text/plain, Size: 1447 bytes --]
From: Sheng Yang <sheng@linux.intel.com>
If we use larger BIOS image than current 256KB, we would need move reserved
TSS and EPT identity mapping pages. Currently TSS support this, but not
EPT.
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Index: qemu-kvm/target-i386/kvm.c
===================================================================
--- qemu-kvm.orig/target-i386/kvm.c
+++ qemu-kvm/target-i386/kvm.c
@@ -341,6 +341,24 @@ static int kvm_has_msr_star(CPUState *en
return 0;
}
+static int kvm_init_identity_map_page(KVMState *s)
+{
+#ifdef KVM_CAP_SET_IDENTITY_MAP_ADDR
+ int ret;
+ uint64_t addr = 0xfffbc000;
+
+ if (!kvm_check_extension(s, KVM_CAP_SET_IDENTITY_MAP_ADDR))
+ return 0;
+
+ ret = kvm_vm_ioctl(s, KVM_SET_IDENTITY_MAP_ADDR, &addr);
+ if (ret < 0) {
+ fprintf(stderr, "kvm_set_identity_map_addr: %s\n", strerror(ret));
+ return ret;
+ }
+#endif
+ return 0;
+}
+
int kvm_arch_init(KVMState *s, int smp_cpus)
{
int ret;
@@ -368,7 +386,11 @@ int kvm_arch_init(KVMState *s, int smp_c
perror("e820_add_entry() table is full");
exit(1);
}
- return kvm_vm_ioctl(s, KVM_SET_TSS_ADDR, 0xfffbd000);
+ ret = kvm_vm_ioctl(s, KVM_SET_TSS_ADDR, 0xfffbd000);
+ if (ret < 0)
+ return ret;
+
+ return kvm_init_identity_map_page(s);
}
static void set_v8086_seg(struct kvm_segment *lhs, const SegmentCache *rhs)
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [patch 1/3] target-i386: print EFER in cpu_dump_state
2010-03-09 1:53 ` [Qemu-devel] [patch 1/3] target-i386: print EFER in cpu_dump_state Marcelo Tosatti
@ 2010-03-11 8:35 ` Avi Kivity
2010-03-11 18:53 ` Marcelo Tosatti
0 siblings, 1 reply; 9+ messages in thread
From: Avi Kivity @ 2010-03-11 8:35 UTC (permalink / raw)
To: Marcelo Tosatti; +Cc: qemu-devel, kvm
On 03/09/2010 03:53 AM, Marcelo Tosatti wrote:
> Signed-off-by: Marcelo Tosatti<mtosatti@redhat.com>
>
> Index: qemu-kvm-uq/target-i386/helper.c
> ===================================================================
> --- qemu-kvm-uq.orig/target-i386/helper.c
> +++ qemu-kvm-uq/target-i386/helper.c
> @@ -1176,6 +1176,7 @@ void cpu_dump_state(CPUState *env, FILE
> cpu_x86_dump_seg_cache(env, f, cpu_fprintf, "TR",&env->tr);
>
> #ifdef TARGET_X86_64
> + cpu_fprintf(f, "EFER= %016" PRIx64 "\n", env->efer);
> if (env->hflags& HF_LMA_MASK) {
> cpu_fprintf(f, "GDT= %016" PRIx64 " %08x\n",
> env->gdt.base, env->gdt.limit);
>
>
Better to do this for i386 too, no?
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [patch 2/3] kvm: handle internal error
2010-03-09 1:53 ` [Qemu-devel] [patch 2/3] kvm: handle internal error Marcelo Tosatti
@ 2010-03-11 8:42 ` Avi Kivity
0 siblings, 0 replies; 9+ messages in thread
From: Avi Kivity @ 2010-03-11 8:42 UTC (permalink / raw)
To: Marcelo Tosatti; +Cc: qemu-devel, kvm
On 03/09/2010 03:53 AM, Marcelo Tosatti wrote:
> Port qemu-kvm's KVM_EXIT_INTERNAL_ERROR handling to upstream.
>
> Signed-off-by: Marcelo Tosatti<mtosatti@redhat.com>
>
> Index: qemu-kvm/kvm-all.c
> ===================================================================
> --- qemu-kvm.orig/kvm-all.c
> +++ qemu-kvm/kvm-all.c
> @@ -721,6 +721,28 @@ static int kvm_handle_io(uint16_t port,
> return 1;
> }
>
> +#ifdef KVM_CAP_INTERNAL_ERROR_DATA
> +static void kvm_handle_internal_error(CPUState *env, struct kvm_run *run)
> +{
> +
> + if (kvm_check_extension(kvm_state, KVM_CAP_INTERNAL_ERROR_DATA)) {
> + int i;
> +
> + fprintf(stderr, "KVM internal error. Suberror: %d\n",
> + run->internal.suberror);
> +
> + for (i = 0; i< run->internal.ndata; ++i) {
> + fprintf(stderr, "extra data[%d]: %"PRIx64"\n",
> + i, (uint64_t)run->internal.data[i]);
> + }
> + }
> + cpu_dump_state(env, stderr, fprintf, 0);
> + if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION)
> + fprintf(stderr, "emulation failure\n");
>
{ braces }
> + vm_stop(0);
> +}
> +#endif
>
Should trigger a qmp message to let management know something went wrong
(can come later).
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [patch 3/3] kvm: allow qemu to set EPT identity mapping address
2010-03-09 1:53 ` [Qemu-devel] [patch 3/3] kvm: allow qemu to set EPT identity mapping address Marcelo Tosatti
@ 2010-03-11 8:42 ` Avi Kivity
0 siblings, 0 replies; 9+ messages in thread
From: Avi Kivity @ 2010-03-11 8:42 UTC (permalink / raw)
To: Marcelo Tosatti; +Cc: qemu-devel, kvm
On 03/09/2010 03:53 AM, Marcelo Tosatti wrote:
> From: Sheng Yang<sheng@linux.intel.com>
>
> If we use larger BIOS image than current 256KB, we would need move reserved
> TSS and EPT identity mapping pages. Currently TSS support this, but not
> EPT.
>
> Signed-off-by: Marcelo Tosatti<mtosatti@redhat.com>
>
> Index: qemu-kvm/target-i386/kvm.c
> ===================================================================
> --- qemu-kvm.orig/target-i386/kvm.c
> +++ qemu-kvm/target-i386/kvm.c
> @@ -341,6 +341,24 @@ static int kvm_has_msr_star(CPUState *en
> return 0;
> }
>
> +static int kvm_init_identity_map_page(KVMState *s)
> +{
> +#ifdef KVM_CAP_SET_IDENTITY_MAP_ADDR
> + int ret;
> + uint64_t addr = 0xfffbc000;
> +
> + if (!kvm_check_extension(s, KVM_CAP_SET_IDENTITY_MAP_ADDR))
> + return 0;
>
{ braces }
> +
> + ret = kvm_vm_ioctl(s, KVM_SET_IDENTITY_MAP_ADDR,&addr);
> + if (ret< 0) {
> + fprintf(stderr, "kvm_set_identity_map_addr: %s\n", strerror(ret));
> + return ret;
> + }
> +#endif
> + return 0;
> +}
> +
> int kvm_arch_init(KVMState *s, int smp_cpus)
> {
> int ret;
> @@ -368,7 +386,11 @@ int kvm_arch_init(KVMState *s, int smp_c
> perror("e820_add_entry() table is full");
> exit(1);
> }
> - return kvm_vm_ioctl(s, KVM_SET_TSS_ADDR, 0xfffbd000);
> + ret = kvm_vm_ioctl(s, KVM_SET_TSS_ADDR, 0xfffbd000);
> + if (ret< 0)
> + return ret;
>
{ }
> +
> + return kvm_init_identity_map_page(s);
> }
>
> static void set_v8086_seg(struct kvm_segment *lhs, const SegmentCache *rhs)
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [patch 1/3] target-i386: print EFER in cpu_dump_state
2010-03-11 8:35 ` [Qemu-devel] " Avi Kivity
@ 2010-03-11 18:53 ` Marcelo Tosatti
2010-03-14 7:36 ` Avi Kivity
0 siblings, 1 reply; 9+ messages in thread
From: Marcelo Tosatti @ 2010-03-11 18:53 UTC (permalink / raw)
To: Avi Kivity; +Cc: qemu-devel, kvm
On Thu, Mar 11, 2010 at 10:35:21AM +0200, Avi Kivity wrote:
> On 03/09/2010 03:53 AM, Marcelo Tosatti wrote:
> >Signed-off-by: Marcelo Tosatti<mtosatti@redhat.com>
> >
> >Index: qemu-kvm-uq/target-i386/helper.c
> >===================================================================
> >--- qemu-kvm-uq.orig/target-i386/helper.c
> >+++ qemu-kvm-uq/target-i386/helper.c
> >@@ -1176,6 +1176,7 @@ void cpu_dump_state(CPUState *env, FILE
> > cpu_x86_dump_seg_cache(env, f, cpu_fprintf, "TR",&env->tr);
> >
> > #ifdef TARGET_X86_64
> >+ cpu_fprintf(f, "EFER= %016" PRIx64 "\n", env->efer);
> > if (env->hflags& HF_LMA_MASK) {
> > cpu_fprintf(f, "GDT= %016" PRIx64 " %08x\n",
> > env->gdt.base, env->gdt.limit);
> >
>
> Better to do this for i386 too, no?
"On systems that support IA-32e mode, the extended feature enable
register (IA32_EFER) is available. This model-specific register controls
activation of IA-32e mode and other IA-32e mode operations."
Can it be useful for i386 too?
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] Re: [patch 1/3] target-i386: print EFER in cpu_dump_state
2010-03-11 18:53 ` Marcelo Tosatti
@ 2010-03-14 7:36 ` Avi Kivity
0 siblings, 0 replies; 9+ messages in thread
From: Avi Kivity @ 2010-03-14 7:36 UTC (permalink / raw)
To: Marcelo Tosatti; +Cc: qemu-devel, kvm
On 03/11/2010 08:53 PM, Marcelo Tosatti wrote:
> On Thu, Mar 11, 2010 at 10:35:21AM +0200, Avi Kivity wrote:
>
>> On 03/09/2010 03:53 AM, Marcelo Tosatti wrote:
>>
>>> Signed-off-by: Marcelo Tosatti<mtosatti@redhat.com>
>>>
>>> Index: qemu-kvm-uq/target-i386/helper.c
>>> ===================================================================
>>> --- qemu-kvm-uq.orig/target-i386/helper.c
>>> +++ qemu-kvm-uq/target-i386/helper.c
>>> @@ -1176,6 +1176,7 @@ void cpu_dump_state(CPUState *env, FILE
>>> cpu_x86_dump_seg_cache(env, f, cpu_fprintf, "TR",&env->tr);
>>>
>>> #ifdef TARGET_X86_64
>>> + cpu_fprintf(f, "EFER= %016" PRIx64 "\n", env->efer);
>>> if (env->hflags& HF_LMA_MASK) {
>>> cpu_fprintf(f, "GDT= %016" PRIx64 " %08x\n",
>>> env->gdt.base, env->gdt.limit);
>>>
>>>
>> Better to do this for i386 too, no?
>>
> "On systems that support IA-32e mode, the extended feature enable
> register (IA32_EFER) is available. This model-specific register controls
> activation of IA-32e mode and other IA-32e mode operations."
>
> Can it be useful for i386 too?
>
That's on Intel. AMDs had EFER before 64-bit support (for syscall
support, and nx), IIRC.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2010-03-14 7:37 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-09 1:53 [Qemu-devel] [patch 0/3] misc uq/master updates Marcelo Tosatti
2010-03-09 1:53 ` [Qemu-devel] [patch 1/3] target-i386: print EFER in cpu_dump_state Marcelo Tosatti
2010-03-11 8:35 ` [Qemu-devel] " Avi Kivity
2010-03-11 18:53 ` Marcelo Tosatti
2010-03-14 7:36 ` Avi Kivity
2010-03-09 1:53 ` [Qemu-devel] [patch 2/3] kvm: handle internal error Marcelo Tosatti
2010-03-11 8:42 ` [Qemu-devel] " Avi Kivity
2010-03-09 1:53 ` [Qemu-devel] [patch 3/3] kvm: allow qemu to set EPT identity mapping address Marcelo Tosatti
2010-03-11 8:42 ` [Qemu-devel] " Avi Kivity
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).