[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v4 06/12] tools/xenstored: Add get_domain_evtchn() to find evtchn
Add a helper to lookup the event channel for a domid. This hides some of the differences between dom0 and stubdom xenstored. It highlights the different meanings between get_xenbus_evtchn() in a stubdom, where it looks up dom0's event channel, and dom0, where it looks up the local event channel. The default return 0 will be fine as any other auto-introduced domain will needs the event channel populated in the grant. Signed-off-by: Jason Andryuk <jason.andryuk@xxxxxxx> --- tools/xenstored/domain.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/tools/xenstored/domain.c b/tools/xenstored/domain.c index 1241f8c73e..1c52254ba8 100644 --- a/tools/xenstored/domain.c +++ b/tools/xenstored/domain.c @@ -1251,12 +1251,41 @@ const char *get_implicit_path(const struct connection *conn) return conn->domain->path; } +/* + * dom0 xenstored (posix.c) uses get_xenbus_evtchn() to lookup with + * XENSTORED_PORT_DEV. + * + * minios stubdom uses get_xenbus_evtchn() to look up dom0's event channel + * from the command line (--event). The stubdom's own event channel is + * returned directly. + * + * Any other existing domains from dom0less/Hyperlaunch will have + * the event channel in the xenstore page, so lookup here isn't necessary. + * --event would not be set, so it would default to 0. + */ +evtchn_port_t get_domain_evtchn(domid_t domid) +{ +#ifdef __MINIOS__ + if (domid == stub_domid) { + return xenbus_evtchn; + } else if (domid == priv_domid) { + return get_xenbus_evtchn(); + } +#else + if (domid == xenbus_master_domid()) { + return get_xenbus_evtchn(); + } +#endif + + return 0; +} + void dom0_init(void) { evtchn_port_t port; struct domain *dom0; - port = get_xenbus_evtchn(); + port = get_domain_evtchn(xenbus_master_domid()); if (port == -1) barf_perror("Failed to initialize dom0 port"); @@ -1271,11 +1300,16 @@ void stubdom_init(void) { #ifdef __MINIOS__ struct domain *stubdom; + evtchn_port_t port; if (stub_domid < 0) return; - stubdom = introduce_domain(NULL, stub_domid, xenbus_evtchn, false); + port = get_domain_evtchn(stub_domid); + if (port == -1) + barf_perror("Failed to initialize dom0 port"); + + stubdom = introduce_domain(NULL, stub_domid, port, false); if (!stubdom) barf_perror("Failed to initialize stubdom"); -- 2.50.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |