[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [HVM][VMX] Add CR8 virtualization. Needed for x86/64 Windows boot.
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID 37e5dfad8425bf92c40d47152b305a73d77b6653 # Parent 0da01d6f701758f8b268f50d979a05ba85dec045 [HVM][VMX] Add CR8 virtualization. Needed for x86/64 Windows boot. Signed-off-by: Xiaohui Xin <xiaohui.xin@xxxxxxxxx> --- xen/arch/x86/hvm/vmx/vmx.c | 24 ++++++++++++++++++++---- 1 files changed, 20 insertions(+), 4 deletions(-) diff -r 0da01d6f7017 -r 37e5dfad8425 xen/arch/x86/hvm/vmx/vmx.c --- a/xen/arch/x86/hvm/vmx/vmx.c Thu Aug 31 23:56:45 2006 +0100 +++ b/xen/arch/x86/hvm/vmx/vmx.c Thu Aug 31 23:58:23 2006 +0100 @@ -46,6 +46,8 @@ #include <asm/hvm/vpic.h> #include <asm/hvm/vlapic.h> +extern uint32_t vlapic_update_ppr(struct vlapic *vlapic); + static DEFINE_PER_CPU(unsigned long, trace_values[5]); #define TRACE_VMEXIT(index,value) this_cpu(trace_values)[index]=value @@ -1613,6 +1615,7 @@ static int mov_to_cr(int gp, int cr, str unsigned long value; unsigned long old_cr; struct vcpu *v = current; + struct vlapic *vlapic = VLAPIC(v); switch ( gp ) { CASE_GET_REG(EAX, eax); @@ -1756,6 +1759,12 @@ static int mov_to_cr(int gp, int cr, str shadow_update_paging_modes(v); break; } + case 8: + { + vlapic_set_reg(vlapic, APIC_TASKPRI, ((value & 0x0F) << 4)); + vlapic_update_ppr(vlapic); + break; + } default: printk("invalid cr: %d\n", gp); __hvm_bug(regs); @@ -1769,13 +1778,20 @@ static int mov_to_cr(int gp, int cr, str */ static void mov_from_cr(int cr, int gp, struct cpu_user_regs *regs) { - unsigned long value; + unsigned long value = 0; struct vcpu *v = current; - - if ( cr != 3 ) + struct vlapic *vlapic = VLAPIC(v); + + if ( cr != 3 && cr != 8) __hvm_bug(regs); - value = (unsigned long) v->arch.hvm_vmx.cpu_cr3; + if ( cr == 3 ) + value = (unsigned long) v->arch.hvm_vmx.cpu_cr3; + else if ( cr == 8 ) + { + value = (unsigned long)vlapic_get_reg(vlapic, APIC_TASKPRI); + value = (value & 0xF0) >> 4; + } switch ( gp ) { CASE_SET_REG(EAX, eax); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |