Lines Matching refs:domain
44 struct domain struct
118 struct xenstore_domain_interface *intf = conn->domain->interface; in writechn()
139 xenevtchn_notify(xce_handle, conn->domain->port); in writechn()
148 struct xenstore_domain_interface *intf = conn->domain->interface; in readchn()
169 xenevtchn_notify(xce_handle, conn->domain->port); in readchn()
196 struct domain *domain = _domain; in destroy_domain() local
198 list_del(&domain->list); in destroy_domain()
200 if (domain->port) { in destroy_domain()
201 if (xenevtchn_unbind(xce_handle, domain->port) == -1) in destroy_domain()
202 eprintf("> Unbinding port %i failed!\n", domain->port); in destroy_domain()
205 if (domain->interface) { in destroy_domain()
208 if (domain->domid == 0) in destroy_domain()
209 unmap_xenbus(domain->interface); in destroy_domain()
211 unmap_interface(domain->interface); in destroy_domain()
214 fire_watches(NULL, domain, "@releaseDomain", false); in destroy_domain()
216 wrl_domain_destroy(domain); in destroy_domain()
224 struct domain *domain; in domain_cleanup() local
228 list_for_each_entry(domain, &domains, list) { in domain_cleanup()
229 if (xc_domain_getinfo(*xc_handle, domain->domid, 1, in domain_cleanup()
231 dominfo.domid == domain->domid) { in domain_cleanup()
233 && !domain->shutdown) { in domain_cleanup()
234 domain->shutdown = 1; in domain_cleanup()
240 if (domain->conn) { in domain_cleanup()
241 talloc_unlink(talloc_autofree_context(), domain->conn); in domain_cleanup()
242 domain->conn = NULL; in domain_cleanup()
269 struct xenstore_domain_interface *intf = conn->domain->interface; in domain_can_read()
271 if (domain_is_unprivileged(conn) && conn->domain->wrl_credit < 0) in domain_can_read()
283 return conn && conn->domain && in domain_is_unprivileged()
284 domid_is_unprivileged(conn->domain->domid); in domain_is_unprivileged()
289 struct xenstore_domain_interface *intf = conn->domain->interface; in domain_can_write()
298 static struct domain *new_domain(void *context, unsigned int domid, in new_domain()
301 struct domain *domain; in new_domain() local
304 domain = talloc(context, struct domain); in new_domain()
305 if (!domain) in new_domain()
308 domain->port = 0; in new_domain()
309 domain->shutdown = 0; in new_domain()
310 domain->domid = domid; in new_domain()
311 domain->path = talloc_domain_path(domain, domid); in new_domain()
312 if (!domain->path) in new_domain()
315 wrl_domain_new(domain); in new_domain()
317 list_add(&domain->list, &domains); in new_domain()
318 talloc_set_destructor(domain, destroy_domain); in new_domain()
324 domain->port = rc; in new_domain()
326 domain->conn = new_connection(writechn, readchn); in new_domain()
327 if (!domain->conn) in new_domain()
330 domain->conn->domain = domain; in new_domain()
331 domain->conn->id = domid; in new_domain()
333 domain->remote_port = port; in new_domain()
334 domain->nbentry = 0; in new_domain()
335 domain->nbwatch = 0; in new_domain()
337 return domain; in new_domain()
341 static struct domain *find_domain_by_domid(unsigned int domid) in find_domain_by_domid()
343 struct domain *i; in find_domain_by_domid()
352 static void domain_conn_reset(struct domain *domain) in domain_conn_reset() argument
354 struct connection *conn = domain->conn; in domain_conn_reset()
367 domain->interface->req_cons = domain->interface->req_prod = 0; in domain_conn_reset()
368 domain->interface->rsp_cons = domain->interface->rsp_prod = 0; in domain_conn_reset()
374 struct domain *domain; in do_introduce() local
396 domain = find_domain_by_domid(domid); in do_introduce()
398 if (domain == NULL) { in do_introduce()
403 domain = new_domain(in, domid, port); in do_introduce()
404 if (!domain) { in do_introduce()
409 domain->interface = interface; in do_introduce()
410 domain->mfn = mfn; in do_introduce()
413 talloc_steal(domain->conn, domain); in do_introduce()
416 } else if ((domain->mfn == mfn) && (domain->conn != conn)) { in do_introduce()
418 if (domain->port) in do_introduce()
419 xenevtchn_unbind(xce_handle, domain->port); in do_introduce()
421 domain->port = (rc == -1) ? 0 : rc; in do_introduce()
422 domain->remote_port = port; in do_introduce()
426 domain_conn_reset(domain); in do_introduce()
433 static struct domain *find_connected_domain(unsigned int domid) in find_connected_domain()
435 struct domain *domain; in find_connected_domain() local
437 domain = find_domain_by_domid(domid); in find_connected_domain()
438 if (!domain) in find_connected_domain()
440 if (!domain->conn) in find_connected_domain()
442 return domain; in find_connected_domain()
449 struct domain *domain, *tdomain; in do_set_target() local
459 domain = find_connected_domain(domid); in do_set_target()
460 if (IS_ERR(domain)) in do_set_target()
461 return -PTR_ERR(domain); in do_set_target()
467 talloc_reference(domain->conn, tdomain->conn); in do_set_target()
468 domain->conn->target = tdomain->conn; in do_set_target()
475 static struct domain *onearg_domain(struct connection *conn, in onearg_domain()
497 struct domain *domain; in do_release() local
499 domain = onearg_domain(conn, in); in do_release()
500 if (IS_ERR(domain)) in do_release()
501 return -PTR_ERR(domain); in do_release()
503 talloc_free(domain->conn); in do_release()
512 struct domain *domain; in do_resume() local
514 domain = onearg_domain(conn, in); in do_resume()
515 if (IS_ERR(domain)) in do_resume()
516 return -PTR_ERR(domain); in do_resume()
518 domain->shutdown = 0; in do_resume()
590 if (!conn->domain) in get_implicit_path()
592 return conn->domain->path; in get_implicit_path()
603 struct domain *dom0; in dom0_init()
663 struct domain *d; in domain_entry_inc()
677 } else if (conn->domain) { in domain_entry_inc()
680 conn->domain->domid); in domain_entry_inc()
682 conn->domain->nbentry++; in domain_entry_inc()
689 struct domain *d; in domain_entry_dec()
703 } else if (conn->domain && conn->domain->nbentry) { in domain_entry_dec()
706 conn->domain->domid); in domain_entry_dec()
708 conn->domain->nbentry--; in domain_entry_dec()
715 struct domain *d; in domain_entry_fix()
735 ? conn->domain->nbentry in domain_entry()
741 if (!conn || !conn->domain) in domain_watch_inc()
743 conn->domain->nbwatch++; in domain_watch_inc()
748 if (!conn || !conn->domain) in domain_watch_dec()
750 if (conn->domain->nbwatch) in domain_watch_dec()
751 conn->domain->nbwatch--; in domain_watch_dec()
757 ? conn->domain->nbwatch in domain_watch()
810 void wrl_domain_new(struct domain *domain) in wrl_domain_new() argument
812 domain->wrl_credit = 0; in wrl_domain_new()
813 wrl_gettime_now(&domain->wrl_timestamp); in wrl_domain_new()
817 &domain->wrl_credit, wrl_config_dburst); in wrl_domain_new()
820 void wrl_domain_destroy(struct domain *domain) in wrl_domain_destroy() argument
828 wrl_xfer_credit(&domain->wrl_credit, 0, in wrl_domain_destroy()
832 void wrl_credit_update(struct domain *domain, struct wrl_timestampt now) in wrl_credit_update() argument
841 long seconds = now.sec - domain->wrl_timestamp.sec; in wrl_credit_update()
842 long milliseconds = now.msec - domain->wrl_timestamp.msec; in wrl_credit_update()
861 domain->wrl_credit = MIN( (int64_t)domain->wrl_credit + denom / num, in wrl_credit_update()
867 &domain->wrl_credit, 0); in wrl_credit_update()
871 wrl_xfer_credit(&domain->wrl_credit, wrl_config_dburst, in wrl_credit_update()
877 domain->wrl_timestamp = now; in wrl_credit_update()
881 domain->domid, in wrl_credit_update()
883 (long)domain->wrl_credit, (long)wrl_reserve, in wrl_credit_update()
887 void wrl_check_timeout(struct domain *domain, in wrl_check_timeout() argument
894 wrl_credit_update(domain, now); in wrl_check_timeout()
896 if (domain->wrl_credit >= 0) in wrl_check_timeout()
909 num = (uint64_t)(-domain->wrl_credit * 1000) * wrl_ndomains; in wrl_check_timeout()
917 domain->domid, in wrl_check_timeout()
918 (long)domain->wrl_credit, (long)wrl_reserve, in wrl_check_timeout()
925 void wrl_apply_debit_actual(struct domain *domain) in wrl_apply_debit_actual() argument
929 if (!domain) in wrl_apply_debit_actual()
934 wrl_credit_update(domain, now); in wrl_apply_debit_actual()
936 domain->wrl_credit -= wrl_config_writecost; in wrl_apply_debit_actual()
938 domain->domid, in wrl_apply_debit_actual()
939 (long)domain->wrl_credit, (long)wrl_reserve); in wrl_apply_debit_actual()
941 if (domain->wrl_credit < 0) { in wrl_apply_debit_actual()
942 if (!domain->wrl_delay_logged) { in wrl_apply_debit_actual()
943 domain->wrl_delay_logged = true; in wrl_apply_debit_actual()
945 (long)domain->domid); in wrl_apply_debit_actual()
976 wrl_apply_debit_actual(conn->domain); in wrl_apply_debit_direct()
985 wrl_apply_debit_actual(conn->domain); in wrl_apply_debit_trans_commit()