|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 09/14 v4] xen/arm: vpl011: Modify xenconsole functions to take console structure as input
On Tue, 6 Jun 2017, Bhupinder Thakur wrote:
> 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 <bhupinder.thakur@xxxxxxxxxx>
Acked-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> ---
> 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);
> }
> }
>
> --
> 2.7.4
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |