[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] ioreq process conflict when EVTCHNOP_bind_interdomain hypercall and vcpu pio occur concurrently



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@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.