diff -r ec2ab25dacee xen/arch/ia64/xen/vcpu.c --- a/xen/arch/ia64/xen/vcpu.c Thu Nov 17 10:32:22 2005 -0600 +++ b/xen/arch/ia64/xen/vcpu.c Fri Nov 18 20:19:18 2005 +1100 @@ -345,19 +345,21 @@ IA64FAULT vcpu_get_psr(VCPU *vcpu, UINT64 *pval) { - UINT64 psr; + REGS *regs = vcpu_regs(vcpu); struct ia64_psr newpsr; // TODO: This needs to return a "filtered" view of // the psr, not the actual psr. Probably the psr needs // to be a field in regs (in addition to ipsr). - __asm__ __volatile ("mov %0=psr;;" : "=r"(psr) :: "memory"); - newpsr = *(struct ia64_psr *)&psr; + //__asm__ __volatile ("mov %0=psr;;" : "=r"(psr) :: "memory"); + newpsr = *(struct ia64_psr *)®s->cr_ipsr; if (newpsr.cpl == 2) newpsr.cpl = 0; if (PSCB(vcpu,interrupt_delivery_enabled)) newpsr.i = 1; else newpsr.i = 0; if (PSCB(vcpu,interrupt_collection_enabled)) newpsr.ic = 1; else newpsr.ic = 0; + if (PSCB(vcpu,metaphysical_mode)) newpsr.dt = 0; + else newpsr.dt = 1; // FIXME: need new field in mapped_regs_t for virtual psr.pp (psr.be too?) if (PSCB(vcpu,tmp[8])) newpsr.pp = 1; else newpsr.pp = 0;