[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.