[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 07/10] xen/arm: vpl011: Add a new console type to domain structure in xenconsole



On Mon, 3 Apr 2017, Bhupinder Thakur wrote:
> Modify the domain structure to to make console specific fields as an array 
> indexed
> by the console type. Two console types are defined - PV and VCON.
> 
> Signed-off-by: Bhupinder Thakur <bhupinder.thakur@xxxxxxxxxx>
> ---
>  tools/console/daemon/io.c | 24 +++++++++++++++---------
>  1 file changed, 15 insertions(+), 9 deletions(-)
> 
> diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c
> index 7e6a886..0cd1fee 100644
> --- a/tools/console/daemon/io.c
> +++ b/tools/console/daemon/io.c
> @@ -61,6 +61,10 @@
>  /* Duration of each time period in ms */
>  #define RATE_LIMIT_PERIOD 200
>  
> +#define MAX_CONSOLE 2
> +#define CONSOLE_TYPE_PV 0
> +#define CONSOLE_TYPE_VCON 1
> +
>  extern int log_reload;
>  extern int log_guest;
>  extern int log_hv;
> @@ -91,23 +95,25 @@ struct buffer {
>  
>  struct domain {
>       int domid;
> -     int master_fd;
> -     int master_pollfd_idx;
> -     int slave_fd;
> -     int log_fd;
> +     int master_fd[MAX_CONSOLE];
> +     int master_pollfd_idx[MAX_CONSOLE];
> +     int slave_fd[MAX_CONSOLE];
> +     int log_fd[MAX_CONSOLE];
>       bool is_dead;
>       unsigned last_seen;
> -     struct buffer buffer;
> +     struct buffer buffer[MAX_CONSOLE];
>       struct domain *next;
>       char *conspath;
> -     int ring_ref;
> -     xenevtchn_port_or_error_t local_port;
> -     xenevtchn_port_or_error_t remote_port;
> +     int ring_ref[MAX_CONSOLE];
> +     xenevtchn_port_or_error_t local_port[MAX_CONSOLE];
> +     xenevtchn_port_or_error_t remote_port[MAX_CONSOLE];
>       xenevtchn_handle *xce_handle;
>       int xce_pollfd_idx;
> -     struct xencons_interface *interface;
> +     struct xencons_interface *interface[MAX_CONSOLE];
>       int event_count;
>       long long next_period;
> +     int console_data_pending;
> +     bool vcon_enabled;

I think you need to gather together all the info of one console into a
single struct, maybe called struct console. Then you'll have an array of
MAX_CONSOLE struct consoles for each domain. Something like:

    struct console {
        int master_fd;
        int master_pollfd_idx;
        int slave_fd;
        int log_fd;
        struct buffer buffer;
        int ring_ref;
        xenevtchn_port_or_error_t local_port;
        xenevtchn_port_or_error_t remote_port;
        struct xencons_interface *interface;
    }

At that point, you'll be able to generalize all functions in this file,
like buffer_append and handle_ring_read, to take a struct console* as
argument instead of a struct domain*, and they will work seamlessly on
the old pv console and the new vuart console.

The for loop in handle_io can figure out which struct console* to pass
as parameter.

The resulting patch will be much nicer.



>  };
>  
>  static struct domain *dom_head;
> -- 
> 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®.