[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] Implement event channels in two minios domains
Hello First thing I want to mention is that please don't send image attachments to mailing list. Please be considerate to those who have limited bandwidth. :-) On Fri, May 06, 2016 at 01:59:46PM +0800, 喻凯 wrote: > I want to implement event channels in two minios domains, DomA and DomB. DomA > allocates the channel, DomB binds the channel to its local port and then > sends a event. But DomA doesn't receive the event(maybe received but didn't > handle the event). I want to know if i lost a procedure. Here is my code, > main func in minios, and the two attachments are the printed results. Thanks. > > > > > int main() > { > sleep(1); > struct xs_handle *xs; > unsigned int domid, remote_dom; > evtchn_port_t local_port, remote_port; > > > /* Get a connection to the daemon */ > xs = xs_daemon_open(); > if(xs == NULL) > { > perror( "---> xs_deamon_open:" ); > } > printf( "---> xs_deamon_open OK!\n" ); > > > //get the current dom > domid = get_domid(xs); > int is_parent= domid % 2 == 0 ? 0 : 1; > if(is_parent == 1) > goto parent; > else > goto child; > parent: > printf( "---> I am first DomU!\n" ); > > > //wait for next dom to start > sleep(30); > remote_dom = domid + 1; > > > //allocate a event channel > evtchn_alloc_unbound(remote_dom, evt_handler, NULL, &local_port); > printf("local port: %d\n", local_port); > //bind VCPU 0 > evtchn_bind_vcpu_t bind_vcpu; > bind_vcpu.port = local_port; > bind_vcpu.vcpu = 0; > HYPERVISOR_event_channel_op(EVTCHNOP_bind_vcpu, &bind_vcpu); > > > //write_xenstore(domid, "evtchn_port", local_port); > //wait the event > while(1) > { > sleep(5); > } > return 0; > > > child: > printf( "---> I am child DomU!\n" ); > remote_dom = domid - 1; > //wait the previous dom to allocate event channel > sleep(40); > //get the remote_port and bind the channel to local_port > //remote_port = read_xenstore(remote_dom, "evtchn_port"); > remote_port = 5; > evtchn_bind_interdomain(remote_dom, remote_port, evt_handler, NULL, > &local_port); > printf("local port: %d\n", local_port); > > What does your evt_handler do? Have you tried printing something inside the handler? Wei. > sleep(5); > > > //send the event > evtchn_send_t send; > send.port = local_port; > HYPERVISOR_event_channel_op(EVTCHNOP_send, &send); > printf("---> send the event\n"); > > > while(1) > { > sleep(5); > > > } > return 0; > } > _______________________________________________ > Minios-devel mailing list > Minios-devel@xxxxxxxxxxxxxxxxxxxx > http://lists.xenproject.org/cgi-bin/mailman/listinfo/minios-devel _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |