@@ -48,8 +48,8 @@ bool_t hvm_monitor_cr(unsigned int index, unsigned long value, unsigned long old
.u.write_ctrlreg.old_value = old
};
- vm_event_monitor_traps(curr, sync, &req);
- return 1;
+ if ( vm_event_monitor_traps(curr, sync, &req) >= 0 )
+ return 1;
}
return 0;
@@ -3391,11 +3391,11 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
break;
}
else {
- int handled =
+ int rc =
hvm_monitor_breakpoint(regs->eip,
HVM_MONITOR_SOFTWARE_BREAKPOINT);
- if ( handled < 0 )
+ if ( !rc )
{
struct hvm_trap trap = {
.vector = TRAP_int3,
@@ -3409,7 +3409,7 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
hvm_inject_trap(&trap);
break;
}
- else if ( handled )
+ if ( rc > 0 )
break;
}
@@ -806,7 +806,7 @@ int vm_event_monitor_traps(struct vcpu *v, uint8_t sync,
* If there was no ring to handle the event, then
* simply continue executing normally.
*/
- return 1;
+ return 0;
default:
return rc;
};
@@ -815,6 +815,7 @@ int vm_event_monitor_traps(struct vcpu *v, uint8_t sync,
{
req->flags |= VM_EVENT_FLAG_VCPU_PAUSED;
vm_event_vcpu_pause(v);
+ rc = 1;
}
if ( altp2m_active(d) )
@@ -826,7 +827,7 @@ int vm_event_monitor_traps(struct vcpu *v, uint8_t sync,
vm_event_fill_regs(req);
vm_event_put_request(d, &d->vm_event->monitor, req);
- return 1;
+ return rc;
}
/*