From patchwork Thu Jun 22 07:38:47 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhupinder Thakur X-Patchwork-Id: 106174 Delivered-To: patch@linaro.org Received: by 10.140.91.2 with SMTP id y2csp2327265qgd; Thu, 22 Jun 2017 00:41:45 -0700 (PDT) X-Received: by 10.107.8.215 with SMTP id h84mr988212ioi.69.1498117305076; Thu, 22 Jun 2017 00:41:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1498117305; cv=none; d=google.com; s=arc-20160816; b=wC2EdT1cQMALPapXd62Y78mxj2w4k469F20pB7hDNjBpYLEnFXJLDnCuS5itJKk5o2 q/huCwJcOhQHYEYP+qtFvBcVtOv1NO1UxujzfTjUfjgqoZZLmS8Lj+vjaTEZdJ8G0LUv ZVJB60CGSnQpw27ONauZC8pm1st39+NiKpTGh8+g//ELBoVD+iFliCGqW6OWALqDO4zs x48Hyui04Q8Zv3Pnz/A5h85MTEJXVMH5zLovAt7Dv0kicDA7SxsvHbBq8gGmL1tPMzFk TWDpamAmLUFFUN//CyqO//LD5uBThCyDuRIcx9f0ij/OXPSHsBjHFBxXNUbMr1Fbl6IA UWRw== 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=XPBRwNP2z8fiCUYVdHnnpoVq0flE3dSiGZ+2xa4nf38=; b=eRQKZnHugUQmUUjD8IyJUykawLfcluayg1UVGDD3prStqjM7dAV+0/Gu7/2Py682hz 5+M9v7Z/PsThsB/tW2r5BH66Cf9l4I7r8BGpkG8x+7t/N8yfJ1R1w76rnXRah5/TmeM7 Pj+jh1mmtdjizv89YPDACx4yevit/LO3FOumoo2DwYRz8JyaY0dBfh6FACPJdQs/xj1a 7AFx5Bs1kEDRjH/9v6luuMLKlu79KHuvhta5/EEtnzn6yLj/ryUgIprZRp9MWA5alLw9 Q2NWIVAuoVUNcVDmh9/WXnroL+jW2ZHr9Fd1GgFZ1PRpAUeOyOoRSlQo/awNE0YYCWXT Wtew== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.b=jyELvP2v; 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 z199si375738itb.85.2017.06.22.00.41.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 22 Jun 2017 00:41:45 -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 header.b=jyELvP2v; 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 1dNwiM-0005om-8L; Thu, 22 Jun 2017 07:39:42 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dNwiL-0005mv-49 for xen-devel@lists.xenproject.org; Thu, 22 Jun 2017 07:39:41 +0000 Received: from [85.158.139.211] by server-1.bemta-5.messagelabs.com id 22/3E-01992-C347B495; Thu, 22 Jun 2017 07:39:40 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrKIsWRWlGSWpSXmKPExsVyMfTAFl3rEu9 Ig307xS2+b5nM5MDocfjDFZYAxijWzLyk/IoE1ow///+zFhz0rPg56yt7A+NVmy5GLg4hgRmM EguP/GbtYuTkYBGYxyzRfM8AJCEh0M8qcePfExaQhIRAmsTLJdOh7EqJizuuMILYQgJaEkdPz WaFmLSPSWLP8XtADgcHm4CJxKwOCZAaEQEliXurJjOB1DALzGeUaJrUywaSEBbIlDjz4yATSD 2LgKrE38MqIGFeAR+J89c72CB2yUncPNfJDGJzAsVX7FjIDrHXW2LXmcksExgFFjAyrGLUKE4 tKkst0jUy1ksqykzPKMlNzMzRNTQw1ctNLS5OTE/NSUwq1kvOz93ECAysegYGxh2MO9r9DjFK cjApifL+z/OOFOJLyk+pzEgszogvKs1JLT7EKMPBoSTBq1wMlBMsSk1PrUjLzAGGOExagoNHS YS3BaSVt7ggMbc4Mx0idYrRmOPKlXVfmDimHNj+hUmIJS8/L1VKnHd2EVCpAEhpRmke3CBY7F 1ilJUS5mVkYGAQ4ilILcrNLEGVf8UozsGoJMyrDzKFJzOvBG7fK6BTmIBOeXHEA+SUkkSElFQ DY01g0sR7TQsOpi34zhybflF/Dd/MpW5WGxaUC1TK5iqWBgXypq+tz+vXauO2rQ0wLOqQ9Foy 9SSPQm1v6JKTvn5uewKTU30Tlx1g2FKfsG3xzfRvtvUPbjf9MNS+Fcjk2SVfaCczNfuuQuSi0 PIDdR6Hdxo+W3eiwFfTe0F19+cNPfFuC1WUWIozEg21mIuKEwEgLE5HuAIAAA== X-Env-Sender: bhupinder.thakur@linaro.org X-Msg-Ref: server-3.tower-206.messagelabs.com!1498117178!100948003!1 X-Originating-IP: [209.85.192.180] 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 27467 invoked from network); 22 Jun 2017 07:39:39 -0000 Received: from mail-pf0-f180.google.com (HELO mail-pf0-f180.google.com) (209.85.192.180) by server-3.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 22 Jun 2017 07:39:39 -0000 Received: by mail-pf0-f180.google.com with SMTP id c73so5131531pfk.2 for ; Thu, 22 Jun 2017 00:39:38 -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=0VlPY7ezJVvMAptDe7WOlRVIfVn5WlbHc6weXyYkglA=; b=jyELvP2v55aamwz+0IKIg3BKy/irTsQLVQO/Nw3lwrt+TuMeWuFJFz8DUE8+U0Ckjj AjnMY2isPynkQHM156Q2dalUK1v1AjlcOgdZgCsYKnSQpKfPLAO0u4ZX0KVkcPKbxWZ5 5GqsCEEggshO3dFzmmG2B9MX87UTBdky32mOM= 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=0VlPY7ezJVvMAptDe7WOlRVIfVn5WlbHc6weXyYkglA=; b=X8qIdSqbRQdKLITMxUZA00FaUkWnw/vhdZjdNiUgWGaKyuM+BSx0Kc+dp9fhOMbCBB n9/PWbkR4hU8pdrIgUfrOuuosw2SSiunmTpctloa46oB3l1Mx90Fv0wqcf4dfz/e7uAN r/EldB/BUQ629y5g99sX0kbzjnySjfnt3d6e4MvneUNd7J6gTeWO1XkWzQ7h38nUGf84 DEEnDQ/u89jVYWWaWhkbnR3TJrybBxHeby63TMP9XMOZl97VEf/+/CFLZpgY7sJiYCIf GdxPCCoxOwvBNOwYX0biX43+pAnye0i27nBO68S4NvurcQmwGj43441uDpfn5X8bNWkM r1qA== X-Gm-Message-State: AKS2vOwuhT8Do8GAk3fgVBfnJIkXIV8/OxxnwTdWAddMqC8evkcEBla+ pqjqBPrb3HJZ+JRFC1R3vg== X-Received: by 10.84.232.197 with SMTP id x5mr1374039plm.159.1498117177375; Thu, 22 Jun 2017 00:39:37 -0700 (PDT) Received: from blr-ubuntu-linaro.wlan.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id w69sm1883591pfk.107.2017.06.22.00.39.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 22 Jun 2017 00:39:36 -0700 (PDT) From: Bhupinder Thakur To: xen-devel@lists.xenproject.org Date: Thu, 22 Jun 2017 13:08:47 +0530 Message-Id: <1498117132-27139-13-git-send-email-bhupinder.thakur@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1498117132-27139-1-git-send-email-bhupinder.thakur@linaro.org> References: <1498117132-27139-1-git-send-email-bhupinder.thakur@linaro.org> Cc: Wei Liu , Julien Grall , Stefano Stabellini , Ian Jackson Subject: [Xen-devel] [PATCH 12/17 v5] 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 Acked-by: Wei Liu --- CC: Ian Jackson CC: Wei Liu CC: Stefano Stabellini CC: Julien Grall Changes since v3: - The changes in xenconsole have been split into four patches. This is the second patch. tools/console/daemon/io.c | 79 +++++++++++++++++++++++------------------------ 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c index 6f5c69c..a2a3496 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->xspath, "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(con->xce_handle); con->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->xspath, domid_str); if (success) - domain_create_ring(dom); + console_create_ring(con); else xs_unwatch(xs, con->xspath, domid_str); } else { @@ -695,6 +692,7 @@ static struct domain *create_domain(int domid) con->slave_fd = -1; con->log_fd = -1; con->xce_pollfd_idx = -1; + con->d = dom; con->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); @@ -768,7 +766,7 @@ static void shutdown_domain(struct domain *d) d->is_dead = true; watch_domain(d, false); - domain_unmap_interface(d); + console_unmap_interface(con); if (con->xce_handle != NULL) xenevtchn_close(con->xce_handle); con->xce_handle = NULL; @@ -799,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; @@ -816,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; @@ -853,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++) { @@ -864,15 +861,15 @@ static void handle_tty_read(struct domain *dom) intf->in_prod = prod; xenevtchn_notify(con->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; @@ -882,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); } @@ -901,7 +898,7 @@ static void handle_ring_read(struct domain *dom) con->event_count++; - buffer_append(dom); + buffer_append(con); if (con->event_count < RATE_LIMIT_ALLOWANCE) (void)xenevtchn_unmask(con->xce_handle, port); @@ -925,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); @@ -975,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); } } @@ -1121,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)) @@ -1208,15 +1205,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); } }