On Tue, Mar 09, 2010 at 04:18:09PM +0200, Avi Kivity wrote:
> On 03/09/2010 04:09 PM, Gleb Natapov wrote:
> >Use this callback instead of directly call kvm function. Also rename
> >realmode_(set|get)_cr to emulator_(set|get)_cr since function has nothing
> >to do with real mode.
> >
> >
> >+    ulong (*get_cr)(int cr, struct kvm_vcpu *vcpu);
> >+    void (*set_cr)(int cr, ulong val, struct kvm_vcpu *vcpu);
> >  };
> 
> Note, passing a vcpu means we are still tightly coupled to kvm.  Can
> be fixed later.
> 
Yes, that is on my todo.

> >+static unsigned long emulator_get_cr(int cr, struct kvm_vcpu *vcpu)
> >+{
> >+    unsigned long value;
> >+
> >+    switch (cr) {
> >+    case 0:
> >+            value = kvm_read_cr0(vcpu);
> >+            break;
> >+    case 2:
> >+            value = vcpu->arch.cr2;
> >+            break;
> >+    case 3:
> >+            value = vcpu->arch.cr3;
> >+            break;
> >+    case 4:
> >+            value = kvm_read_cr4(vcpu);
> >+            break;
> >+    case 8:
> >+            value = kvm_get_cr8(vcpu);
> >+            break;
> >+    default:
> >+            vcpu_printf(vcpu, "%s: unexpected cr %u\n", __func__, cr);
> >+            return 0;
> 
> This printk is triggerable by guest code (as the patch didn't
> introduce this, it can be fixed later).
> 
> The emulator should #UD on unrecognised control registers.
inject #UD on access to non-existing CR patch does this.

--
                        Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to