From patchwork Tue Jun 6 17:25:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhupinder Thakur X-Patchwork-Id: 103177 Delivered-To: patch@linaro.org Received: by 10.140.91.77 with SMTP id y71csp1536718qgd; Tue, 6 Jun 2017 10:27:55 -0700 (PDT) X-Received: by 10.107.128.228 with SMTP id k97mr11001726ioi.115.1496770075476; Tue, 06 Jun 2017 10:27:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1496770075; cv=none; d=google.com; s=arc-20160816; b=WS9bk5d906TVSw43TCNn6Fay3n2kU5QlOA5hfcEUfx8qeAw4Nk1Mb6bSStMINDvZqK q62hPNdJR+pjDrY6Xf+ha11OGLXG0021e/JZSlFqxcRpBO7bDZncNkzMTt0vZd2zo5fG 65WG+AG2Ky6xx2oiriF8gmKTz3M3bi9TNLXOIY8cus3L/+2Ig/huRQq7zILBXVc4CaeC 1BCOiv6/zyxSCxTvByn4ZilAcRAkiwV2AgDugeHQwlGw38ykeejsif1O0a2ocGwzB3OY 9bBXiWgcF8TwYnD51m+PIBTx28ch9CrPddk/NUwXa4j7gaQ6yBpwOyfI4CPgRuAAQc8k e5Sw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:cc:references:in-reply-to:message-id:date:to :from:dkim-signature:arc-authentication-results; bh=ReLeOFPRHqMMg9vmCiuAc/V2E23YM6NAovKxki/xzJ4=; b=qxBd7eWBV3oONLKIVnKqlY/APgXdSe5F4neigSSXtSnqOp0REiHZjjMGUHTI7bhlsu mHxmiCT1mVLCnu2LInq+tkoUWD0g6Ee440Z5vqmqewokhTEL5TBmOy7koj6Mg/Dcf1jQ kVcHAg+otCNZdcuOo486WFO3f2dZmeh0OLRUsU/zsb2wRJBHZYDN1e+MvOtFfg/y3bA8 OWqUKlGO8eerJXbGDc933sEPUmTQuNUuhkiVB8UvSiVpBBGa6shq7nEO4aQYiPuE3nKF D+xqy79QlQrNI8Xb/btJr4TUtIqq4b1m+MVgfebzLeZ3oJaFx8GZsxtTvwFz9JLnRNAx YvUA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id x41si672694ioi.247.2017.06.06.10.27.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 06 Jun 2017 10:27:55 -0700 (PDT) Received-SPF: neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) client-ip=192.237.175.120; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dIIF3-0001ms-M7; Tue, 06 Jun 2017 17:26:05 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dIIF3-0001lZ-1i for xen-devel@lists.xenproject.org; Tue, 06 Jun 2017 17:26:05 +0000 Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id F8/76-23755-CA5E6395; Tue, 06 Jun 2017 17:26:04 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrIIsWRWlGSWpSXmKPExsXiVRusr7v6qVm kwYwZShbft0xmcmD0OPzhCksAYxRrZl5SfkUCa8bFV6+ZC257VXTs+cnSwHjEtouRi0NIYAaj RN+0R8wgDovAPGaJ6WeWsoE4EgL9rBK9zdeBMpxATprEgq/nWSHsSolT//4wgdhCAloSR0/NZ oUY1cwksWzZZvYuRg4ONgETiVkdEiA1IgJKEvdWTWYCqWEWmM8o0TSplw0kISyQKXHt0UIwm0 VAVeJ/yztGEJtXwEdi++8/UIvlJG6e6wSzOYHiM88vYYRY7C2xp6GNcQKjwAJGhlWMGsWpRWW pRbpGBnpJRZnpGSW5iZk5uoYGxnq5qcXFiempOYlJxXrJ+bmbGIHBVc/AwLiDsfmE3yFGSQ4m JVHeyEtmkUJ8SfkplRmJxRnxRaU5qcWHGGU4OJQkeCOfAOUEi1LTUyvSMnOAYQ6TluDgURLhn fwAKM1bXJCYW5yZDpE6xajLMenA9i9MQix5+XmpUuK8K0BmCIAUZZTmwY2AxdwlRlkpYV5GBg YGIZ6C1KLczBJU+VeM4hyMSsK8KSBTeDLzSuA2vQI6ggnoCL5LJiBHlCQipKQaGNf1MudF+5u cq3O7wOD/zll351+tVL9NsWHX8xpkOLf4+pX4/y9643isOfrNgVnBBRzGNxMeXu93bqnrbn1l lL33+6zG4peLa+aGObN3vfHjYwjT4Fmz7Pt5tUDz8+eC/T18NAtfhr2a2Ld13+nJj3dff9Zv0 /H5oe8cnX7eZt4OCea3+1yYlViKMxINtZiLihMB2BmJqrQCAAA= X-Env-Sender: bhupinder.thakur@linaro.org X-Msg-Ref: server-2.tower-31.messagelabs.com!1496769962!92673493!1 X-Originating-IP: [74.125.83.47] X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG X-StarScan-Received: X-StarScan-Version: 9.4.19; banners=-,-,- X-VirusChecked: Checked Received: (qmail 25716 invoked from network); 6 Jun 2017 17:26:03 -0000 Received: from mail-pg0-f47.google.com (HELO mail-pg0-f47.google.com) (74.125.83.47) by server-2.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 6 Jun 2017 17:26:03 -0000 Received: by mail-pg0-f47.google.com with SMTP id a70so29742029pge.3 for ; Tue, 06 Jun 2017 10:26:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=TYKtNjajYn6etUxLGRWztiZjDrswF0Yqivu0xmEmEHo=; b=hxAw1/04wwoKfUFv8go2vk2DggUtOf9wlPmq7uSwAark1jQ00Y87RaMqcIt9eypo9r hrOle4k3uLJMAsmsLIcaKz1V1aqa8XEfJgpBc0/HYeuD57lL8AI1nacFwrkxgAAZAE5A EjCK8qpmtcSZACJNt8GBoG9dvyM7rHS7nj7vM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=TYKtNjajYn6etUxLGRWztiZjDrswF0Yqivu0xmEmEHo=; b=ir1zIL5o+gUw1Jn+6mhm+G5GC6SmittDQ3eYkJSsfHx3iQIFnDFIsNU3Hw4cVlkPNg et786ZLnQGZLm4pX0vVyNRwmhG1WBVcmjMwRfWooz2rOHCVn2iM9b1vFUGv+RIFWTcAt 3a5U4iAHyAmBze/Fmzx2KlXL+QL7uRDEXoUBrD3ubnWirbWz4w/NE0ON6Y3gMUJYNnpT DOPuQ3muakyRL2BjaWrV4C2hJghp0ftVcpnhKx7D4HSVoIM0gR89gpZA1b6Xw+Ts7p/X dHy0eyV1jH/sxgIRTo4OJozC3PhNyQQOxKrFGJJ+ONwCE71e9JFzzs981U53JMB6pOu5 bJIA== X-Gm-Message-State: AODbwcCMYqgn1lbYH6ZAdN78+dQT0mI/HIN0l/jjTrMiTFOiWcqNfoVE bSwGm8VghYq7WxPGgLATbA== X-Received: by 10.84.131.163 with SMTP id d32mr2193435pld.16.1496769961583; Tue, 06 Jun 2017 10:26:01 -0700 (PDT) Received: from blr-ubuntu-linaro.wlan.qualcomm.com ([103.5.19.18]) by smtp.gmail.com with ESMTPSA id 62sm6031632pfr.90.2017.06.06.10.25.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 06 Jun 2017 10:26:01 -0700 (PDT) From: Bhupinder Thakur To: xen-devel@lists.xenproject.org Date: Tue, 6 Jun 2017 22:55:24 +0530 Message-Id: <1496769929-23355-10-git-send-email-bhupinder.thakur@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1496769929-23355-1-git-send-email-bhupinder.thakur@linaro.org> References: <1496769929-23355-1-git-send-email-bhupinder.thakur@linaro.org> Cc: Wei Liu , Julien Grall , Stefano Stabellini , Ian Jackson Subject: [Xen-devel] [PATCH 09/14 v4] xen/arm: vpl011: Modify xenconsole functions to take console structure as input X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" Xenconsole functions take domain structure as input. These functions shall be modified to take console structure as input since these functions typically perform console specific operations. Also the console specific functions starting with prefix "domain_" shall be modified to "console_" to indicate that these are console specific functions. This patch is in preparation to support multiple consoles to support vuart console. Signed-off-by: Bhupinder Thakur Acked-by: Stefano Stabellini --- CC: ij CC: wl CC: ss CC: jg Changes since v3: - The changes in xenconsole have been split into four patches. This is the second patch. tools/console/daemon/io.c | 82 +++++++++++++++++++++++------------------------ 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c index 0402ddf..c5dd08d 100644 --- a/tools/console/daemon/io.c +++ b/tools/console/daemon/io.c @@ -163,10 +163,10 @@ static int write_with_timestamp(int fd, const char *data, size_t sz, return 0; } -static void buffer_append(struct domain *dom) +static void buffer_append(struct console *con) { - struct console *con = &dom->console; struct buffer *buffer = &con->buffer; + struct domain *dom = con->d; XENCONS_RING_IDX cons, prod, size; struct xencons_interface *intf = con->interface; @@ -296,12 +296,13 @@ static int create_hv_log(void) return fd; } -static int create_domain_log(struct domain *dom) +static int create_console_log(struct console *con) { char logfile[PATH_MAX]; char *namepath, *data, *s; int fd; unsigned int len; + struct domain *dom = con->d; namepath = xs_get_domain_path(xs, dom->domid); s = realloc(namepath, strlen(namepath) + 6); @@ -342,10 +343,8 @@ static int create_domain_log(struct domain *dom) return fd; } -static void domain_close_tty(struct domain *dom) +static void console_close_tty(struct console *con) { - struct console *con = &dom->console; - if (con->master_fd != -1) { close(con->master_fd); con->master_fd = -1; @@ -417,7 +416,7 @@ void cfmakeraw(struct termios *termios_p) } #endif /* __sun__ */ -static int domain_create_tty(struct domain *dom) +static int console_create_tty(struct console *con) { const char *slave; char *path; @@ -426,7 +425,7 @@ static int domain_create_tty(struct domain *dom) char *data; unsigned int len; struct termios term; - struct console *con = &dom->console; + struct domain *dom = con->d; assert(con->slave_fd == -1); assert(con->master_fd == -1); @@ -487,7 +486,7 @@ static int domain_create_tty(struct domain *dom) return 1; out: - domain_close_tty(dom); + console_close_tty(con); return 0; } @@ -526,10 +525,8 @@ static int xs_gather(struct xs_handle *xs, const char *dir, ...) return ret; } -static void domain_unmap_interface(struct domain *dom) +static void console_unmap_interface(struct console *con) { - struct console *con = &dom->console; - if (con->interface == NULL) return; if (xgt_handle && con->ring_ref == -1) @@ -540,11 +537,11 @@ static void domain_unmap_interface(struct domain *dom) con->ring_ref = -1; } -static int domain_create_ring(struct domain *dom) +static int console_create_ring(struct console *con) { int err, remote_port, ring_ref, rc; char *type, path[PATH_MAX]; - struct console *con = &dom->console; + struct domain *dom = con->d; err = xs_gather(xs, con->conspath, "ring-ref", "%u", &ring_ref, @@ -563,7 +560,7 @@ static int domain_create_ring(struct domain *dom) /* If using ring_ref and it has changed, remap */ if (ring_ref != con->ring_ref && con->ring_ref != -1) - domain_unmap_interface(dom); + console_unmap_interface(con); if (!con->interface && xgt_handle) { /* Prefer using grant table */ @@ -621,7 +618,7 @@ static int domain_create_ring(struct domain *dom) con->remote_port = remote_port; if (con->master_fd == -1) { - if (!domain_create_tty(dom)) { + if (!console_create_tty(con)) { err = errno; xenevtchn_close(dom->xce_handle); dom->xce_handle = NULL; @@ -632,7 +629,7 @@ static int domain_create_ring(struct domain *dom) } if (log_guest && (con->log_fd == -1)) - con->log_fd = create_domain_log(dom); + con->log_fd = create_console_log(con); out: return err; @@ -648,7 +645,7 @@ static bool watch_domain(struct domain *dom, bool watch) if (watch) { success = xs_watch(xs, con->conspath, domid_str); if (success) - domain_create_ring(dom); + console_create_ring(con); else xs_unwatch(xs, con->conspath, domid_str); } else { @@ -694,6 +691,7 @@ static struct domain *create_domain(int domid) con->master_pollfd_idx = -1; con->slave_fd = -1; con->log_fd = -1; + con->d = dom; dom->xce_pollfd_idx = -1; dom->next_period = ((long long)ts.tv_sec * 1000) + (ts.tv_nsec / 1000000) + RATE_LIMIT_PERIOD; @@ -746,7 +744,7 @@ static void cleanup_domain(struct domain *d) { struct console *con = &d->console; - domain_close_tty(d); + console_close_tty(con); if (con->log_fd != -1) { close(con->log_fd); @@ -764,9 +762,11 @@ static void cleanup_domain(struct domain *d) static void shutdown_domain(struct domain *d) { + struct console *con = &d->console; + d->is_dead = true; watch_domain(d, false); - domain_unmap_interface(d); + console_unmap_interface(con); if (d->xce_handle != NULL) xenevtchn_close(d->xce_handle); d->xce_handle = NULL; @@ -797,9 +797,8 @@ static void enum_domains(void) } } -static int ring_free_bytes(struct domain *dom) +static int ring_free_bytes(struct console *con) { - struct console *con = &dom->console; struct xencons_interface *intf = con->interface; XENCONS_RING_IDX cons, prod, space; @@ -814,30 +813,30 @@ static int ring_free_bytes(struct domain *dom) return (sizeof(intf->in) - space); } -static void domain_handle_broken_tty(struct domain *dom, int recreate) +static void console_handle_broken_tty(struct console *con, int recreate) { - domain_close_tty(dom); + console_close_tty(con); if (recreate) { - domain_create_tty(dom); + console_create_tty(con); } else { - shutdown_domain(dom); + shutdown_domain(con->d); } } -static void handle_tty_read(struct domain *dom) +static void handle_tty_read(struct console *con) { ssize_t len = 0; char msg[80]; int i; - struct console *con = &dom->console; struct xencons_interface *intf = con->interface; + struct domain *dom = con->d; XENCONS_RING_IDX prod; if (dom->is_dead) return; - len = ring_free_bytes(dom); + len = ring_free_bytes(con); if (len == 0) return; @@ -851,7 +850,7 @@ static void handle_tty_read(struct domain *dom) * keep the slave open for the duration. */ if (len < 0) { - domain_handle_broken_tty(dom, domain_is_valid(dom->domid)); + console_handle_broken_tty(con, domain_is_valid(dom->domid)); } else if (domain_is_valid(dom->domid)) { prod = intf->in_prod; for (i = 0; i < len; i++) { @@ -862,15 +861,15 @@ static void handle_tty_read(struct domain *dom) intf->in_prod = prod; xenevtchn_notify(dom->xce_handle, con->local_port); } else { - domain_close_tty(dom); + console_close_tty(con); shutdown_domain(dom); } } -static void handle_tty_write(struct domain *dom) +static void handle_tty_write(struct console *con) { ssize_t len; - struct console *con = &dom->console; + struct domain *dom = con->d; if (dom->is_dead) return; @@ -880,7 +879,7 @@ static void handle_tty_write(struct domain *dom) if (len < 1) { dolog(LOG_DEBUG, "Write failed on domain %d: %zd, %d\n", dom->domid, len, errno); - domain_handle_broken_tty(dom, domain_is_valid(dom->domid)); + console_handle_broken_tty(con, domain_is_valid(dom->domid)); } else { buffer_advance(&con->buffer, len); } @@ -889,6 +888,7 @@ static void handle_tty_write(struct domain *dom) static void handle_ring_read(struct domain *dom) { xenevtchn_port_or_error_t port; + struct console *con = &dom->console; if (dom->is_dead) return; @@ -898,7 +898,7 @@ static void handle_ring_read(struct domain *dom) dom->event_count++; - buffer_append(dom); + buffer_append(con); if (dom->event_count < RATE_LIMIT_ALLOWANCE) (void)xenevtchn_unmask(dom->xce_handle, port); @@ -922,7 +922,7 @@ static void handle_xs(void) /* We may get watches firing for domains that have recently been removed, so dom may be NULL here. */ if (dom && dom->is_dead == false) - domain_create_ring(dom); + console_create_ring(&dom->console); } free(vec); @@ -972,7 +972,7 @@ static void handle_log_reload(void) if (con->log_fd != -1) close(con->log_fd); - con->log_fd = create_domain_log(d); + con->log_fd = create_console_log(con); } } @@ -1118,7 +1118,7 @@ void handle_io(void) if (con->master_fd != -1) { short events = 0; - if (!d->is_dead && ring_free_bytes(d)) + if (!d->is_dead && ring_free_bytes(con)) events |= POLLIN; if (!buffer_empty(&con->buffer)) @@ -1201,15 +1201,15 @@ void handle_io(void) if (con->master_fd != -1 && con->master_pollfd_idx != -1) { if (fds[con->master_pollfd_idx].revents & ~(POLLIN|POLLOUT|POLLPRI)) - domain_handle_broken_tty(d, + console_handle_broken_tty(con, domain_is_valid(d->domid)); else { if (fds[con->master_pollfd_idx].revents & POLLIN) - handle_tty_read(d); + handle_tty_read(con); if (fds[con->master_pollfd_idx].revents & POLLOUT) - handle_tty_write(d); + handle_tty_write(con); } }