Blame 0104-char-Add-framework-for-a-write-unblocked-callback.patch

6986e1
From 646046655c6aed23a9e39064242e0803704d74e8 Mon Sep 17 00:00:00 2001
22d63f
From: Amit Shah <amit.shah@redhat.com>
22d63f
Date: Mon, 21 Mar 2011 21:41:42 +0100
22d63f
Subject: [PATCH] char: Add framework for a 'write unblocked' callback
22d63f
22d63f
The char layer can let users know that the driver will block on further
22d63f
input.  For users interested in not blocking, they can assign a function
22d63f
pointer that will be called back when the driver becomes writable.  This
22d63f
patch just adds the function pointers to the CharDriverState structure,
22d63f
future patches will enable the nonblocking and callback functionality.
22d63f
22d63f
Signed-off-by: Amit Shah <amit.shah@redhat.com>
22d63f
Signed-off-by: Cole Robinson <crobinso@redhat.com>
22d63f
---
22d63f
 qemu-char.c | 3 +++
22d63f
 qemu-char.h | 4 ++++
22d63f
 2 files changed, 7 insertions(+)
22d63f
22d63f
diff --git a/qemu-char.c b/qemu-char.c
22d63f
index 97247fb..c9e6e36 100644
22d63f
--- a/qemu-char.c
22d63f
+++ b/qemu-char.c
22d63f
@@ -212,11 +212,14 @@ void qemu_chr_add_handlers(CharDriverState *s,
22d63f
     }
22d63f
     s->chr_can_read = handlers->fd_can_read;
22d63f
     s->chr_read = handlers->fd_read;
22d63f
+    s->chr_write_unblocked = handlers->fd_write_unblocked;
22d63f
     s->chr_event = handlers->fd_event;
22d63f
     s->handler_opaque = opaque;
22d63f
     if (s->chr_update_read_handler)
22d63f
         s->chr_update_read_handler(s);
22d63f
 
22d63f
+    s->write_blocked = false;
22d63f
+
22d63f
     /* We're connecting to an already opened device, so let's make sure we
22d63f
        also get the open event */
22d63f
     if (s->opened) {
22d63f
diff --git a/qemu-char.h b/qemu-char.h
22d63f
index ff206cb..9e1b0f1 100644
22d63f
--- a/qemu-char.h
22d63f
+++ b/qemu-char.h
22d63f
@@ -63,6 +63,9 @@ struct CharDriverState {
22d63f
     IOEventHandler *chr_event;
22d63f
     IOCanReadHandler *chr_can_read;
22d63f
     IOReadHandler *chr_read;
22d63f
+    IOHandler *chr_write_unblocked;
22d63f
+    void (*chr_enable_write_fd_handler)(struct CharDriverState *chr);
22d63f
+    void (*chr_disable_write_fd_handler)(struct CharDriverState *chr);
22d63f
     void *handler_opaque;
22d63f
     void (*chr_close)(struct CharDriverState *chr);
22d63f
     void (*chr_accept_input)(struct CharDriverState *chr);
22d63f
@@ -75,6 +78,7 @@ struct CharDriverState {
22d63f
     char *filename;
22d63f
     int opened;
22d63f
     int avail_connections;
22d63f
+    bool write_blocked; /* Are we in a blocked state? */
22d63f
     QTAILQ_ENTRY(CharDriverState) next;
22d63f
 };
22d63f
 
22d63f
-- 
6986e1
1.8.1
22d63f