[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 3/8] virtio-serial: Discard unconsumed data before s
From: |
Amit Shah |
Subject: |
[Qemu-devel] [PATCH 3/8] virtio-serial: Discard unconsumed data before sending port close event |
Date: |
Thu, 8 Apr 2010 02:32:31 +0530 |
The guest kernel can reclaim the buffers when it receives the port close
event or when a port is being removed. Ensure we free up the buffers
before we send out any events to the guest.
Signed-off-by: Amit Shah <address@hidden>
---
hw/virtio-serial-bus.c | 13 +++++++++----
1 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
index 8d77c94..c0044b3 100644
--- a/hw/virtio-serial-bus.c
+++ b/hw/virtio-serial-bus.c
@@ -186,14 +186,15 @@ int virtio_serial_open(VirtIOSerialPort *port)
int virtio_serial_close(VirtIOSerialPort *port)
{
port->host_connected = false;
- send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN, 0);
-
/*
* If there's any data the guest sent which the app didn't
* consume, reset the throttling flag and discard the data.
*/
port->throttled = false;
flush_queued_data(port, true);
+
+ send_control_event(port, VIRTIO_CONSOLE_PORT_OPEN, 0);
+
return 0;
}
@@ -631,13 +632,17 @@ static void add_port(VirtIOSerial *vser, uint32_t port_id)
static void remove_port(VirtIOSerial *vser, uint32_t port_id)
{
+ VirtIOSerialPort *port;
unsigned int i;
i = port_id / 32;
vser->ports_map[i] &= ~(1U << (port_id % 32));
- send_control_event(find_port_by_id(vser, port_id),
- VIRTIO_CONSOLE_PORT_REMOVE, 1);
+ port = find_port_by_id(vser, port_id);
+ /* Flush out any unconsumed buffers first */
+ flush_queued_data(port, true);
+
+ send_control_event(port, VIRTIO_CONSOLE_PORT_REMOVE, 1);
}
static int virtser_port_qdev_init(DeviceState *qdev, DeviceInfo *base)
--
1.6.2.5
- [Qemu-devel] [PATCH 0/8] (v2) chardev, virtio-console: flow control, error handling, fixes, Amit Shah, 2010/04/07
- [Qemu-devel] [PATCH 1/8] virtio-serial: throttling: check for throttled status before sending any data, Amit Shah, 2010/04/07
- [Qemu-devel] [PATCH 2/8] virtio-serial: Unthrottle ports once they're closed, Amit Shah, 2010/04/07
- [Qemu-devel] [PATCH 3/8] virtio-serial: Discard unconsumed data before sending port close event,
Amit Shah <=
- [Qemu-devel] [PATCH 4/8] virtio-serial: Bus info message for showing port's throttled status, Amit Shah, 2010/04/07
- [Qemu-devel] [PATCH 5/8] char: Let writers know how much data was written in case of errors, Amit Shah, 2010/04/07
- [Qemu-devel] [PATCH 6/8] char: unix: For files that are nonblocking, report -EAGAIN to calling functions, Amit Shah, 2010/04/07
- [Qemu-devel] [PATCH 7/8] virtio-console: Factor out common init between console and generic ports, Amit Shah, 2010/04/07
- [Qemu-devel] [PATCH 8/8] virtio-console: Throttle virtio-serial-bus if we can't consume any more guest data, Amit Shah, 2010/04/07
[Qemu-devel] Re: [PATCH 0/8] (v2) chardev, virtio-console: flow control, error handling, fixes, Paul Brook, 2010/04/07