qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [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).