I wonder if it is necessary for xen to trigger the event channel pending when the port related a vcpu port io.
Suppose a scenario as follows: 1) Qemu make a hypercall using codes: for (i = 0; i < smp_cpus; i++) { rc = xc_evtchn_bind_interdomain(state->xce_handle, xen_domid, xen_vcpu_eport(state->shared_page, i)); if (rc == -1) { fprintf(stderr, "bind interdomain ioctl(shared_page) error %d\n", errno); return -1; } state->ioreq_local_port[i] = rc; ... } 2) Xen do_event_channel_op allocate a free port and call evtchn_set_pending to trigger a evtchn event. 3) Qemu enters main_loop and begin the evtchn event (pio event). 4) The vcpus of a vm begin to trigger real pio exit, and this ioreq_t will conflict with the one triggered in step 2. This will certainly cause failures of real port io. Does anyone here have any suggestions? _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel