Fix read of guest psr to properly set dfh and other bits (by Matt Chapman)

This commit is contained in:
djm@kirby.fc.hp.com committed 2005-11-18 11:04:58 -06:00
1 parent f3ccc12644
commit 081db0ddef
1 file changed
+4 -6
+4 -6
View File
@@ -345,19 +345,17 @@ IA64FAULT vcpu_set_psr_l(VCPU *vcpu, UINT64 val)
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;
newpsr = *(struct ia64_psr *)&regs->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;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.