From patchwork Fri Sep 22 08:23:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhupinder Thakur X-Patchwork-Id: 113990 Delivered-To: patch@linaro.org Received: by 10.140.106.117 with SMTP id d108csp3011317qgf; Fri, 22 Sep 2017 01:26:16 -0700 (PDT) X-Received: by 10.107.10.9 with SMTP id u9mr7410189ioi.107.1506068775808; Fri, 22 Sep 2017 01:26:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1506068775; cv=none; d=google.com; s=arc-20160816; b=0rGjX66vcyr1B1fFRz6esCSF6lOaxoJ2s3VVrEI2/5POQRzGtvJvIVgDkymnp+WiMY ogZbBFt06ARGtdcBNKn2j5d5SUpFlU8ZVItmRyaWYnBhgPAXAGTQwuvjUJvRdOdPW3aq AIi3wOWoSe2rz56DXUnyqNVOfm58B69iQbm7OEOBpjSjFp9cHFKE5b9hYNQcb5fgDdvg zOc+supSK13HM6lknTk0AGE9m8Asl2vkdXkRRJZcNV4QjLjgO5IMVXjTdB5ELasSOAcy u0M0Ymcj3YwVVuMAG7rC0kku1iD3IPlYHfJDhBKOrDgqFNCdLoB65yHuO1T9rjRfCbiK 6NEQ== 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=WXsVKFtSEvooh/gQViJFmbABTRKBe0u52bhIWXyD934=; b=iAIxzTl2Bz9L+3SOak/xYFnEaJ4c2uORgDiA7krGJflp9skwCAI8KYMxsyiuZmdKQS ZMb/ibdmInIPUwhvLd3k6Y5iwNXYF9Xwasl6FVTXQjBmeUZ8AoD+LWz8cyaWQtAq4dyA neIeI2l3Fftzczarei+FnczsYEbA/Gp1u1fGhnQhPxTD1bSjhss+LbQ+iTI7U5zL1WVJ hRUTlV5NxOziwQnWywg2s+0auRl0xwwDVD3riEGnWYgPNffaT2d9kmRtPNlddvwLwcZl ilQckeF4fUZN9kTeVSMhUfsT3R/eGR0HIGCxlebAGcgianu5TsY7aafnn4V55Cb6AbH8 a/EA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=V1Weyo+y; 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 x88si3422362ita.38.2017.09.22.01.26.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Sep 2017 01:26:15 -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.s=google header.b=V1Weyo+y; 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 1dvJFo-0003uV-It; Fri, 22 Sep 2017 08:24:08 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dvJFn-0003th-Va for xen-devel@lists.xenproject.org; Fri, 22 Sep 2017 08:24:08 +0000 Received: from [85.158.137.68] by server-1.bemta-3.messagelabs.com id 0C/5B-02048-7A8C4C95; Fri, 22 Sep 2017 08:24:07 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrMIsWRWlGSWpSXmKPExsXiVRtsprvsxJF Ig/8/FS2+b5nM5MDocfjDFZYAxijWzLyk/IoE1oyGE2eZC956VnQd2sHYwPjXpouRi0NIYDqj xMsd05hAHBaBecwSu1fcYAdxJAT6WSXWv9zM1sXICeTkSTz4tJsdwk6T+Lf7OZRdKbGp+wJYj ZCAlsTRU7NZIcbuYJK4vLwdyOHgYBMwkZjVIQFSIyKgJHFv1WSwbcwC8xklmib1gjULC2RJ3P r/gBXEZhFQldhxvxkszivgI9F7bxozxDI5iZvnOsFsTqD42v8bWCAWe0tsvXGVZQKj4AJGhlW MGsWpRWWpRbqGhnpJRZnpGSW5iZk5uoYGxnq5qcXFiempOYlJxXrJ+bmbGIFBxwAEOxhX/3Y6 xCjJwaQkyvv4yJFIIb6k/JTKjMTijPii0pzU4kOMMhwcShK8tceBcoJFqempFWmZOcDwh0lLc PAoifCGg6R5iwsSc4sz0yFSpxiNOfbtufWHiaPj5t0/TEIsefl5qVLivPNBSgVASjNK8+AGwe LyEqOslDAvI9BpQjwFqUW5mSWo8q8YxTkYlYR5Y0Cm8GTmlcDtewV0ChPQKeWrwU4pSURISTU wHmINOLex3r9/0kb7mFNZ0xcXmGj9Y+uRlLGVZuRS8djmck/VUXWeo4Rnxj4RpQTG9Xtl27KF PVb2L1l8j/l0xdayCRPlQkxylTmmqM8LX/zzQd+bwPiUP0zefHPEq3e3nv5QnbxW8LdW+eT1C 8JstrN/1xZ+sJp5a1RGbflza6bGdqOm+SJKLMUZiYZazEXFiQB3hPwBxgIAAA== X-Env-Sender: bhupinder.thakur@linaro.org X-Msg-Ref: server-2.tower-31.messagelabs.com!1506068645!104321874!1 X-Originating-IP: [74.125.83.54] X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG X-StarScan-Received: X-StarScan-Version: 9.4.45; banners=-,-,- X-VirusChecked: Checked Received: (qmail 21467 invoked from network); 22 Sep 2017 08:24:06 -0000 Received: from mail-pg0-f54.google.com (HELO mail-pg0-f54.google.com) (74.125.83.54) by server-2.tower-31.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 22 Sep 2017 08:24:06 -0000 Received: by mail-pg0-f54.google.com with SMTP id i195so243628pgd.9 for ; Fri, 22 Sep 2017 01:24:06 -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=/c87JD9XyWkvHP2iWascyeQ5IUSzbfWQc11J8Ir9N+k=; b=V1Weyo+yfUM0Xislyq0iT1T+V0EWz2sdraO4N/eZgQUfoKu4qfxr2wweX0KJwXQJWO hs2qX54aGZUsIUTacr8XNcFE+WUMSiUo+3PBS6VjAReM48D6QFcAKDRQ8KH0YTtMe5dX hRJc/3lqK14d8LQy/MS9b2eFnPKad8dNWMSWk= 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=/c87JD9XyWkvHP2iWascyeQ5IUSzbfWQc11J8Ir9N+k=; b=XAHsBnjGr9dkKI4OVKNBqTweujzKxvKkUdW0jomrtjCXvTmEeECQBpotAZzE03/aQt C53eQp1MJPxSNhm2zd6CwYi24+YcjBMqFeUs7+a3y9+aaBhkhmhqE3cIWpbcwAuXxCYS 3Gkaixp0CMEfE/icuOaX4eyAYb0pZoWH2VJZWR6AV0UqElX8uWXWne996Dq0vju1SEP9 NUPUaw1pzzF0nbeXz4Xpwg+mPc0Maq66kyxARE4uSxLZ/7+6iShOO97lCSC7WmoWJjd2 n970OYCJNO7+5r+TCZYaVen2YGu7SaVoSKYj0nXf1KrilqHM3BVO6H9JAjlOX7fw49OA qvdQ== X-Gm-Message-State: AHPjjUgNIuCaB0si7Lo++n3o4QctpVlnpbqmkwWEN0XQG0PX1UA+wa/N u4NZlMdbUnYfi86Eei6vB3e9SMRhNd4= X-Google-Smtp-Source: AOwi7QA0KkIH29icJCvySw+1cqQh83g5zTp14v0jNcTyuvsJmaDkAlD3Ub8UkiIHeCO2Lui57Hp2+w== X-Received: by 10.98.204.69 with SMTP id a66mr8621969pfg.132.1506068644643; Fri, 22 Sep 2017 01:24:04 -0700 (PDT) Received: from blr-ubuntu-linaro.qualcomm.com (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id f74sm5569284pfa.36.2017.09.22.01.24.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 22 Sep 2017 01:24:04 -0700 (PDT) From: Bhupinder Thakur To: xen-devel@lists.xenproject.org Date: Fri, 22 Sep 2017 13:53:09 +0530 Message-Id: <1506068606-17066-11-git-send-email-bhupinder.thakur@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1506068606-17066-1-git-send-email-bhupinder.thakur@linaro.org> References: <1506068606-17066-1-git-send-email-bhupinder.thakur@linaro.org> Cc: Wei Liu , Julien Grall , Stefano Stabellini , Ian Jackson Subject: [Xen-devel] [PATCH 10/27 v10] 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 multiple 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); } }