|
26 | 26 | #define DUMMY_REGION_GPA (SHINFO_REGION_GPA + (3 * PAGE_SIZE))
|
27 | 27 | #define DUMMY_REGION_SLOT 11
|
28 | 28 |
|
| 29 | +#define DUMMY_REGION_GPA_2 (SHINFO_REGION_GPA + (4 * PAGE_SIZE)) |
| 30 | +#define DUMMY_REGION_SLOT_2 12 |
| 31 | + |
29 | 32 | #define SHINFO_ADDR (SHINFO_REGION_GPA)
|
30 | 33 | #define VCPU_INFO_ADDR (SHINFO_REGION_GPA + 0x40)
|
31 | 34 | #define PVTIME_ADDR (SHINFO_REGION_GPA + PAGE_SIZE)
|
|
54 | 57 | TEST_EVTCHN_SLOWPATH,
|
55 | 58 | TEST_EVTCHN_SEND_IOCTL,
|
56 | 59 | TEST_EVTCHN_HCALL,
|
| 60 | + TEST_EVTCHN_HCALL_SLOWPATH, |
57 | 61 | TEST_EVTCHN_HCALL_EVENTFD,
|
58 | 62 | TEST_TIMER_SETUP,
|
59 | 63 | TEST_TIMER_WAIT,
|
@@ -260,6 +264,16 @@ static void guest_code(void)
|
260 | 264 |
|
261 | 265 | guest_wait_for_irq();
|
262 | 266 |
|
| 267 | + GUEST_SYNC(TEST_EVTCHN_HCALL_SLOWPATH); |
| 268 | + |
| 269 | + /* |
| 270 | + * Same again, but this time the host has messed with memslots so it |
| 271 | + * should take the slow path in kvm_xen_set_evtchn(). |
| 272 | + */ |
| 273 | + xen_hypercall(__HYPERVISOR_event_channel_op, EVTCHNOP_send, &s); |
| 274 | + |
| 275 | + guest_wait_for_irq(); |
| 276 | + |
263 | 277 | GUEST_SYNC(TEST_EVTCHN_HCALL_EVENTFD);
|
264 | 278 |
|
265 | 279 | /* Deliver "outbound" event channel to an eventfd which
|
@@ -753,6 +767,19 @@ int main(int argc, char *argv[])
|
753 | 767 | alarm(1);
|
754 | 768 | break;
|
755 | 769 |
|
| 770 | + case TEST_EVTCHN_HCALL_SLOWPATH: |
| 771 | + TEST_ASSERT(!evtchn_irq_expected, |
| 772 | + "Expected event channel IRQ but it didn't happen"); |
| 773 | + shinfo->evtchn_pending[0] = 0; |
| 774 | + |
| 775 | + if (verbose) |
| 776 | + printf("Testing guest EVTCHNOP_send direct to evtchn after memslot change\n"); |
| 777 | + vm_userspace_mem_region_add(vm, VM_MEM_SRC_ANONYMOUS, |
| 778 | + DUMMY_REGION_GPA_2, DUMMY_REGION_SLOT_2, 1, 0); |
| 779 | + evtchn_irq_expected = true; |
| 780 | + alarm(1); |
| 781 | + break; |
| 782 | + |
756 | 783 | case TEST_EVTCHN_HCALL_EVENTFD:
|
757 | 784 | TEST_ASSERT(!evtchn_irq_expected,
|
758 | 785 | "Expected event channel IRQ but it didn't happen");
|
|
0 commit comments