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

Reply via email to