From: Wei Liu <wei.liu2@citrix.com>
To: Bhupinder Thakur <bhupinder.thakur@linaro.org>
Cc: xen-devel@lists.xenproject.org,
Julien Grall <julien.grall@arm.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Ian Jackson <ian.jackson@eu.citrix.com>,
Wei Liu <wei.liu2@citrix.com>
Subject: Re: [PATCH 13/17 v5] xen/arm: vpl011: Modify xenconsole to support multiple consoles
Date: Wed, 28 Jun 2017 18:16:58 +0100 [thread overview]
Message-ID: <20170628171658.r2gnlymebv4kp4j2@citrix.com> (raw)
In-Reply-To: <1498117132-27139-14-git-send-email-bhupinder.thakur@linaro.org>
On Thu, Jun 22, 2017 at 01:08:48PM +0530, Bhupinder Thakur wrote:
> This patch adds the support for multiple consoles and introduces the iterator
> functions to operate on multiple consoles.
>
> This patch is in preparation to support a new vuart console.
>
> Signed-off-by: Bhupinder Thakur <bhupinder.thakur@linaro.org>
> ---
> CC: Ian Jackson <ian.jackson@eu.citrix.com>
> CC: Wei Liu <wei.liu2@citrix.com>
> CC: Stefano Stabellini <sstabellini@kernel.org>
> CC: Julien Grall <julien.grall@arm.com>
>
> Changes since v4:
> - Changes to make event channel handling per console rather than per domain.
>
> Changes since v3:
> - The changes in xenconsole have been split into four patches. This is the third patch.
>
> tools/console/daemon/io.c | 435 ++++++++++++++++++++++++++++++++--------------
> 1 file changed, 302 insertions(+), 133 deletions(-)
>
> diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c
> index a2a3496..baf0e2e 100644
> --- a/tools/console/daemon/io.c
> +++ b/tools/console/daemon/io.c
> @@ -90,12 +90,14 @@ struct buffer {
> };
>
> struct console {
> + char *ttyname;
> int master_fd;
> int master_pollfd_idx;
> int slave_fd;
> int log_fd;
> struct buffer buffer;
> char *xspath;
> + char *log_suffix;
I suppose both new fields can be const.
> int ring_ref;
> xenevtchn_handle *xce_handle;
> int xce_pollfd_idx;
> @@ -107,16 +109,112 @@ struct console {
> struct domain *d;
> };
>
> +struct console_data {
> + char *xsname;
> + char *ttyname;
> + char *log_suffix;
const for all three.
> +};
> +
> +static struct console_data console_data[] = {
> +
Stray line.
> + {
> + .xsname = "/console",
> + .ttyname = "tty",
> + .log_suffix = "",
> + },
> +};
> +
> +#define MAX_CONSOLE (sizeof(console_data)/sizeof(struct console_data))
> +
> struct domain {
> int domid;
> bool is_dead;
> unsigned last_seen;
> struct domain *next;
> - struct console console;
> + struct console console[MAX_CONSOLE];
> };
>
> static struct domain *dom_head;
>
> +typedef void (*VOID_ITER_FUNC_ARG1)(struct console *);
> +typedef bool (*BOOL_ITER_FUNC_ARG1)(struct console *);
> +typedef int (*INT_ITER_FUNC_ARG1)(struct console *);
> +typedef void (*VOID_ITER_FUNC_ARG2)(struct console *, void *);
> +typedef int (*INT_ITER_FUNC_ARG3)(struct console *,
> + struct domain *dom, void **);
> +
> +static inline bool console_enabled(struct console *con)
> +{
> + return con->local_port != -1;
> +}
> +
> +static inline void console_iter_void_arg1(struct domain *d,
> + VOID_ITER_FUNC_ARG1 iter_func)
Too many tabs here and below?
You might want to configure your editor to display tab as 8 spaces.
> +{
> + int i = 0;
> + struct console *con = &(d->console[0]);
> +
No need to have the (), I think.
> -static struct domain *create_domain(int domid)
> +static int console_init(struct console *con, struct domain *dom, void **data)
> {
> - struct domain *dom;
> char *s;
> + int err = -1;
> struct timespec ts;
> - struct console *con;
> + struct console_data **con_data = (struct console_data **)data;
> + char *xsname;
>
> if (clock_gettime(CLOCK_MONOTONIC, &ts) < 0) {
> dolog(LOG_ERR, "Cannot get time of day %s:%s:L%d",
> __FILE__, __FUNCTION__, __LINE__);
> - return NULL;
> + return err;
> + }
> +
There is a danger that you return at this point, the cleanup path in
caller will free garbage.
I suggest you at least initialise all pointers to NULL at the beginning.
> + con->master_fd = -1;
> + con->master_pollfd_idx = -1;
> + con->slave_fd = -1;
> + con->log_fd = -1;
> + con->ring_ref = -1;
> + con->local_port = -1;
> + con->remote_port = -1;
> + con->xce_pollfd_idx = -1;
> + con->next_period = ((long long)ts.tv_sec * 1000) + (ts.tv_nsec / 1000000) + RATE_LIMIT_PERIOD;
> + con->d = dom;
> + con->ttyname = (*con_data)->ttyname;
> + con->log_suffix = (*con_data)->log_suffix;
> + xsname = (*con_data)->xsname;
> + con->xspath = xs_get_domain_path(xs, dom->domid);
> + s = realloc(con->xspath, strlen(con->xspath) +
> + strlen(xsname) + 1);
> + if (s)
> + {
> + con->xspath = s;
> + strcat(con->xspath, xsname);
> + err = 0;
> }
>
> + (*con_data)++;
> +
> + return err;
> +}
> +
> +
[...]
> +static void handle_console_ring(struct console *con)
> +{
> + if (con->event_count < RATE_LIMIT_ALLOWANCE) {
> + if (con->xce_handle != NULL &&
> + con->xce_pollfd_idx != -1 &&
> + !(fds[con->xce_pollfd_idx].revents &
> + ~(POLLIN|POLLOUT|POLLPRI)) &&
> + (fds[con->xce_pollfd_idx].revents &
> + POLLIN))
> + handle_ring_read(con);
> + }
Refactoring like this should go to its own patch(es).
It is currently very hard to review this patch because refactoring is
mixed with all the iterator changes.
I can't really continue at this point. Sorry. Please split the
refactoring of all the buffer_* and handle_console_* functions to
separate patches.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-06-28 17:17 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-22 7:38 [PATCH 00/17 v5] SBSA UART emulation support in Xen Bhupinder Thakur
2017-06-22 7:38 ` [PATCH 01/17 v5] xen/arm: vpl011: Move vgic register access functions to vreg.h Bhupinder Thakur
2017-06-22 7:38 ` [PATCH 02/17 v5] xen/arm: vpl011: Rename vgic_reg* functions definitions and calls to vreg_reg* Bhupinder Thakur
2017-06-23 9:42 ` Julien Grall
2017-06-22 7:38 ` [PATCH 03/17 v5] xen/arm: vpl011: Define common ring buffer helper functions in console.h Bhupinder Thakur
2017-06-22 22:36 ` Stefano Stabellini
2017-06-28 17:16 ` Wei Liu
2017-06-22 7:38 ` [PATCH 04/17 v5] xen/arm: vpl011: Add SBSA UART emulation in Xen Bhupinder Thakur
2017-06-22 22:53 ` Stefano Stabellini
2017-06-23 12:33 ` Julien Grall
2017-06-23 18:28 ` Stefano Stabellini
2017-06-23 19:58 ` Julien Grall
2017-06-23 13:10 ` Julien Grall
2017-06-22 7:38 ` [PATCH 05/17 v5] xen/arm: vpl011: Allocate a new GFN in the toolstack for vuart Bhupinder Thakur
2017-06-22 7:38 ` [PATCH 06/17 v5] xen/arm: vpl011: Add support for vuart in libxl Bhupinder Thakur
2017-06-22 22:57 ` Stefano Stabellini
2017-06-28 17:16 ` Wei Liu
2017-06-22 7:38 ` [PATCH 07/17 v5] xen/arm: vpl011: Rearrange xen header includes in alphabetical order in domctl.c Bhupinder Thakur
2017-06-22 22:58 ` Stefano Stabellini
2017-06-23 13:14 ` Julien Grall
2017-06-22 7:38 ` [PATCH 08/17 v5] xen/arm: vpl011: Add a new domctl API to initialize vpl011 Bhupinder Thakur
2017-06-22 23:04 ` Stefano Stabellini
2017-06-23 13:17 ` Julien Grall
2017-06-23 13:25 ` Julien Grall
2017-06-23 17:57 ` Stefano Stabellini
2017-06-27 13:43 ` Bhupinder Thakur
2017-06-27 13:57 ` Julien Grall
2017-06-23 13:26 ` Julien Grall
2017-06-28 17:16 ` Wei Liu
2017-06-22 7:38 ` [PATCH 09/17 v5] xen/arm: vpl011: Add a new vuart node in the xenstore Bhupinder Thakur
2017-06-22 23:06 ` Stefano Stabellini
2017-06-28 17:16 ` Wei Liu
2017-06-22 7:38 ` [PATCH 10/17 v5] xen/arm: vpl011: Modify xenconsole to define and use a new console structure Bhupinder Thakur
2017-06-22 23:20 ` Stefano Stabellini
2017-06-28 17:16 ` Wei Liu
2017-06-22 7:38 ` [PATCH 11/17 v5] xen/arm: vpl011: Rename the console structure field conspath to xspath Bhupinder Thakur
2017-06-22 23:21 ` Stefano Stabellini
2017-06-28 17:16 ` Wei Liu
2017-06-22 7:38 ` [PATCH 12/17 v5] xen/arm: vpl011: Modify xenconsole functions to take console structure as input Bhupinder Thakur
2017-06-28 17:16 ` Wei Liu
2017-06-22 7:38 ` [PATCH 13/17 v5] xen/arm: vpl011: Modify xenconsole to support multiple consoles Bhupinder Thakur
2017-06-22 23:51 ` Stefano Stabellini
2017-06-28 17:16 ` Wei Liu [this message]
2017-07-07 13:52 ` Bhupinder Thakur
2017-07-07 14:00 ` Wei Liu
2017-07-07 14:19 ` Bhupinder Thakur
2017-07-07 14:23 ` Wei Liu
2017-06-22 7:38 ` [PATCH 14/17 v5] xen/arm: vpl011: Add support for vuart console in xenconsole Bhupinder Thakur
2017-06-23 0:02 ` Stefano Stabellini
2017-06-28 17:17 ` Wei Liu
2017-06-22 7:38 ` [PATCH 15/17 v5] xen/arm: vpl011: Add a new vuart console type to xenconsole client Bhupinder Thakur
2017-06-22 23:09 ` Stefano Stabellini
2017-06-28 17:17 ` Wei Liu
2017-06-29 9:33 ` Bhupinder Thakur
2017-06-29 10:11 ` Wei Liu
2017-06-22 7:38 ` [PATCH 16/17 v5] xen/arm: vpl011: Add a pl011 uart DT node in the guest device tree Bhupinder Thakur
2017-06-28 17:17 ` Wei Liu
2017-06-22 7:38 ` [PATCH 17/17 v5] xen/arm: vpl011: Update documentation for vuart console support Bhupinder Thakur
2017-06-23 10:42 ` [PATCH 00/17 v5] SBSA UART emulation support in Xen Julien Grall
2017-06-23 17:58 ` Stefano Stabellini
2017-07-04 7:31 ` Bhupinder Thakur
2017-07-05 8:36 ` Julien Grall
2017-07-05 19:06 ` Stefano Stabellini
2017-07-05 19:43 ` Julien Grall
2017-07-05 19:51 ` Julien Grall
2017-07-05 20:05 ` Stefano Stabellini
2017-07-05 20:18 ` Julien Grall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170628171658.r2gnlymebv4kp4j2@citrix.com \
--to=wei.liu2@citrix.com \
--cc=bhupinder.thakur@linaro.org \
--cc=ian.jackson@eu.citrix.com \
--cc=julien.grall@arm.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).