# 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
|