diff -r 04fbcc0c1ec5 xen/arch/x86/hvm/viridian.c --- a/xen/arch/x86/hvm/viridian.c Wed Sep 28 12:09:13 2011 +0200 +++ b/xen/arch/x86/hvm/viridian.c Wed Sep 28 12:45:39 2011 +0200 @@ -98,37 +98,43 @@ int cpuid_viridian_leaves(unsigned int l void dump_guest_os_id(struct domain *d) { + struct viridian_domain *vd = &d->arch.hvm_domain.viridian; + gdprintk(XENLOG_INFO, "GUEST_OS_ID:\n"); gdprintk(XENLOG_INFO, "\tvendor: %x\n", - d->arch.hvm_domain.viridian.guest_os_id.fields.vendor); + vd->guest_os_id.fields.vendor); gdprintk(XENLOG_INFO, "\tos: %x\n", - d->arch.hvm_domain.viridian.guest_os_id.fields.os); + vd->guest_os_id.fields.os); gdprintk(XENLOG_INFO, "\tmajor: %x\n", - d->arch.hvm_domain.viridian.guest_os_id.fields.major); + vd->guest_os_id.fields.major); gdprintk(XENLOG_INFO, "\tminor: %x\n", - d->arch.hvm_domain.viridian.guest_os_id.fields.minor); + vd->guest_os_id.fields.minor); gdprintk(XENLOG_INFO, "\tsp: %x\n", - d->arch.hvm_domain.viridian.guest_os_id.fields.service_pack); + vd->guest_os_id.fields.service_pack); gdprintk(XENLOG_INFO, "\tbuild: %x\n", - d->arch.hvm_domain.viridian.guest_os_id.fields.build_number); + vd->guest_os_id.fields.build_number); } void dump_hypercall(struct domain *d) { + struct viridian_domain *vd = &d->arch.hvm_domain.viridian; + gdprintk(XENLOG_INFO, "HYPERCALL:\n"); gdprintk(XENLOG_INFO, "\tenabled: %x\n", - d->arch.hvm_domain.viridian.hypercall_gpa.fields.enabled); + vd->hypercall_gpa.fields.enabled); gdprintk(XENLOG_INFO, "\tpfn: %lx\n", - (unsigned long)d->arch.hvm_domain.viridian.hypercall_gpa.fields.pfn); + (unsigned long)vd->hypercall_gpa.fields.pfn); } void dump_apic_assist(struct vcpu *v) { + struct viridian_vcpu *vv = &v->arch.hvm_vcpu.viridian; + gdprintk(XENLOG_INFO, "APIC_ASSIST[%d]:\n", v->vcpu_id); gdprintk(XENLOG_INFO, "\tenabled: %x\n", - v->arch.hvm_vcpu.viridian.apic_assist.fields.enabled); + vv->apic_assist.fields.enabled); gdprintk(XENLOG_INFO, "\tpfn: %lx\n", - (unsigned long)v->arch.hvm_vcpu.viridian.apic_assist.fields.pfn); + (unsigned long)vv->apic_assist.fields.pfn); } static void enable_hypercall_page(struct domain *d) @@ -201,6 +207,8 @@ int wrmsr_viridian_regs(uint32_t idx, ui { struct vcpu *v = current; struct domain *d = v->domain; + struct viridian_domain *vd = &d->arch.hvm_domain.viridian; + struct viridian_vcpu *vv = &v->arch.hvm_vcpu.viridian; if ( !is_viridian_domain(d) ) return 0; @@ -209,15 +217,15 @@ int wrmsr_viridian_regs(uint32_t idx, ui { case VIRIDIAN_MSR_GUEST_OS_ID: perfc_incr(mshv_wrmsr_osid); - d->arch.hvm_domain.viridian.guest_os_id.raw = val; + vd->guest_os_id.raw = val; dump_guest_os_id(d); break; case VIRIDIAN_MSR_HYPERCALL: perfc_incr(mshv_wrmsr_hc_page); - d->arch.hvm_domain.viridian.hypercall_gpa.raw = val; + vd->hypercall_gpa.raw = val; dump_hypercall(d); - if ( d->arch.hvm_domain.viridian.hypercall_gpa.fields.enabled ) + if ( vd->hypercall_gpa.fields.enabled ) enable_hypercall_page(d); break; @@ -249,9 +257,9 @@ int wrmsr_viridian_regs(uint32_t idx, ui case VIRIDIAN_MSR_APIC_ASSIST: perfc_incr(mshv_wrmsr_apic_msr); - v->arch.hvm_vcpu.viridian.apic_assist.raw = val; + vv->apic_assist.raw = val; dump_apic_assist(v); - if (v->arch.hvm_vcpu.viridian.apic_assist.fields.enabled) + if (vv->apic_assist.fields.enabled) initialize_apic_assist(v); break; @@ -266,6 +274,8 @@ int rdmsr_viridian_regs(uint32_t idx, ui { struct vcpu *v = current; struct domain *d = v->domain; + struct viridian_domain *vd = &d->arch.hvm_domain.viridian; + struct viridian_vcpu *vv = &v->arch.hvm_vcpu.viridian; if ( !is_viridian_domain(d) ) return 0; @@ -274,12 +284,12 @@ int rdmsr_viridian_regs(uint32_t idx, ui { case VIRIDIAN_MSR_GUEST_OS_ID: perfc_incr(mshv_rdmsr_osid); - *val = d->arch.hvm_domain.viridian.guest_os_id.raw; + *val = vd->guest_os_id.raw; break; case VIRIDIAN_MSR_HYPERCALL: perfc_incr(mshv_rdmsr_hc_page); - *val = d->arch.hvm_domain.viridian.hypercall_gpa.raw; + *val = vd->hypercall_gpa.raw; break; case VIRIDIAN_MSR_VP_INDEX: @@ -300,7 +310,7 @@ int rdmsr_viridian_regs(uint32_t idx, ui case VIRIDIAN_MSR_APIC_ASSIST: perfc_incr(mshv_rdmsr_apic_msr); - *val = v->arch.hvm_vcpu.viridian.apic_assist.raw; + *val = vv->apic_assist.raw; break; default: @@ -390,12 +400,13 @@ out: static int viridian_save_domain_ctxt(struct domain *d, hvm_domain_context_t *h) { struct hvm_viridian_domain_context ctxt; + struct viridian_domain *vd = &d->arch.hvm_domain.viridian; if ( !is_viridian_domain(d) ) return 0; - ctxt.hypercall_gpa = d->arch.hvm_domain.viridian.hypercall_gpa.raw; - ctxt.guest_os_id = d->arch.hvm_domain.viridian.guest_os_id.raw; + ctxt.hypercall_gpa = vd->hypercall_gpa.raw; + ctxt.guest_os_id = vd->guest_os_id.raw; return (hvm_save_entry(VIRIDIAN_DOMAIN, 0, h, &ctxt) != 0); } @@ -403,12 +414,13 @@ static int viridian_save_domain_ctxt(str static int viridian_load_domain_ctxt(struct domain *d, hvm_domain_context_t *h) { struct hvm_viridian_domain_context ctxt; + struct viridian_domain *vd = &d->arch.hvm_domain.viridian; if ( hvm_load_entry(VIRIDIAN_DOMAIN, h, &ctxt) != 0 ) return -EINVAL; - d->arch.hvm_domain.viridian.hypercall_gpa.raw = ctxt.hypercall_gpa; - d->arch.hvm_domain.viridian.guest_os_id.raw = ctxt.guest_os_id; + vd->hypercall_gpa.raw = ctxt.hypercall_gpa; + vd->guest_os_id.raw = ctxt.guest_os_id; return 0; }