void kvm_exit_unexpected_vector(uint32_t value)
 {
-       outl(UNEXPECTED_VECTOR_PORT, value);
+       ucall(UCALL_UNHANDLED, 1, value);
 }
 
 void route_exception(struct ex_regs *regs)
 
 void assert_on_unhandled_exception(struct kvm_vm *vm, uint32_t vcpuid)
 {
-       if (vcpu_state(vm, vcpuid)->exit_reason == KVM_EXIT_IO
-               && vcpu_state(vm, vcpuid)->io.port == UNEXPECTED_VECTOR_PORT
-               && vcpu_state(vm, vcpuid)->io.size == 4) {
-               /* Grab pointer to io data */
-               uint32_t *data = (void *)vcpu_state(vm, vcpuid)
-                       + vcpu_state(vm, vcpuid)->io.data_offset;
-
-               TEST_ASSERT(false,
-                           "Unexpected vectored event in guest (vector:0x%x)",
-                           *data);
+       struct ucall uc;
+
+       if (get_ucall(vm, vcpuid, &uc) == UCALL_UNHANDLED) {
+               uint64_t vector = uc.args[0];
+
+               TEST_FAIL("Unexpected vectored event in guest (vector:0x%lx)",
+                         vector);
        }
 }