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

[Xen-devel] [PATCH 10/11] xen/arm: vpl011: Modify handle_ring_read and buffer_append to read/append vpl011 data



MOdifications in the following functions:

    - handle_ring_read() - to allow reading data from both PV or vpl011 OUT 
ring buffers
      based on which port received the event
    - buffer_append() - append data received for either PV or vp011 OUT ring 
buffer

Signed-off-by: Bhupinder Thakur <bhupinder.thakur@xxxxxxxxxx>
---
 tools/console/daemon/io.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c
index b1aa615..4e531e7 100644
--- a/tools/console/daemon/io.c
+++ b/tools/console/daemon/io.c
@@ -163,12 +163,11 @@ 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 domain *dom, struct xencons_interface *intf, 
int port)
 {
        struct buffer *buffer = &dom->buffer;
        XENCONS_RING_IDX cons, prod, size;
-       struct xencons_interface *intf = dom->interface;
-
+       
        cons = intf->out_cons;
        prod = intf->out_prod;
        xen_mb();
@@ -192,7 +191,8 @@ static void buffer_append(struct domain *dom)
 
        xen_mb();
        intf->out_cons = cons;
-       xenevtchn_notify(dom->xce_handle, dom->local_port);
+
+       xenevtchn_notify(dom->xce_handle, port);
 
        /* Get the data to the logfile as early as possible because if
         * no one is listening on the console pty then it will fill up
@@ -961,6 +961,7 @@ static void handle_tty_write(struct domain *dom)
 static void handle_ring_read(struct domain *dom)
 {
        xenevtchn_port_or_error_t port;
+       struct xencons_interface *intf;
 
        if (dom->is_dead)
                return;
@@ -970,7 +971,15 @@ static void handle_ring_read(struct domain *dom)
 
        dom->event_count++;
 
-       buffer_append(dom);
+       /*
+       * select the interface based on the port which the event received
+       */
+       if ( port == dom->vpl011_local_port )
+               intf = dom->vpl011_interface;
+       else
+               intf = dom->interface;
+
+       buffer_append(dom, intf, port);
 
        if (dom->event_count < RATE_LIMIT_ALLOWANCE)
                (void)xenevtchn_unmask(dom->xce_handle, port);
@@ -1161,6 +1170,8 @@ void handle_io(void)
                                d->next_period = now + RATE_LIMIT_PERIOD;
                                if (d->event_count >= RATE_LIMIT_ALLOWANCE) {
                                        (void)xenevtchn_unmask(d->xce_handle, 
d->local_port);
+                                       if ( d->vpl011_initialized )
+                                               
(void)xenevtchn_unmask(d->xce_handle, d->vpl011_local_port);
                                }
                                d->event_count = 0;
                        }
-- 
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®.