qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH RFC 2/2] rng-egd: introduce a parameter to set buffe


From: Amos Kong
Subject: [Qemu-devel] [PATCH RFC 2/2] rng-egd: introduce a parameter to set buffer size
Date: Mon, 9 Dec 2013 22:10:13 +0800

This patch makes the buffer size configurable, the max
buffer size is 65536.

 -object rng-egd,chardev=chr0,id=rng0,buf_size=1024

Signed-off-by: Amos Kong <address@hidden>
---
 backends/rng-egd.c | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/backends/rng-egd.c b/backends/rng-egd.c
index d317c61..4e5ba18 100644
--- a/backends/rng-egd.c
+++ b/backends/rng-egd.c
@@ -18,7 +18,7 @@
 #define TYPE_RNG_EGD "rng-egd"
 #define RNG_EGD(obj) OBJECT_CHECK(RngEgd, (obj), TYPE_RNG_EGD)
 
-#define BUFFER_SIZE 65536
+#define MAX_BUFFER_SIZE 65536
 
 typedef struct RngEgd
 {
@@ -31,6 +31,7 @@ typedef struct RngEgd
     GSList *requests;
     void *opaque;
     size_t req_size;
+    uint32_t buf_size;
 } RngEgd;
 
 typedef struct RngRequest
@@ -154,9 +155,16 @@ static void rng_egd_request_entropy(RngBackend *b, size_t 
size,
     }
 
     int total_size = get_total_buf_size(s);
+    int buf_size;
 
-    while (total_size < BUFFER_SIZE)  {
-        int add_size = MIN(BUFFER_SIZE - total_size, 255);
+    if (s->buf_size != 0) {
+        buf_size = MIN(s->buf_size, MAX_BUFFER_SIZE);
+    } else {
+        buf_size = MAX_BUFFER_SIZE;
+    }
+
+    while (total_size < buf_size)  {
+        int add_size = MIN(buf_size - total_size, 255);
         total_size += add_size;
         rng_egd_append_request(b, add_size, receive_entropy, opaque);
     }
@@ -253,6 +261,15 @@ static void rng_egd_opened(RngBackend *b, Error **errp)
                           NULL, s);
 }
 
+static void rng_egd_set_buf_size(Object *obj, const char *value, Error **errp)
+{
+    RngBackend *b = RNG_BACKEND(obj);
+    RngEgd *s = RNG_EGD(b);
+
+    s->buf_size = atoi(value);
+    assert(s->buf_size > 0);
+}
+
 static void rng_egd_set_chardev(Object *obj, const char *value, Error **errp)
 {
     RngBackend *b = RNG_BACKEND(obj);
@@ -281,6 +298,7 @@ static void rng_egd_init(Object *obj)
     object_property_add_str(obj, "chardev",
                             rng_egd_get_chardev, rng_egd_set_chardev,
                             NULL);
+    object_property_add_str(obj, "buf_size", NULL, rng_egd_set_buf_size, NULL);
 }
 
 static void rng_egd_finalize(Object *obj)
-- 
1.8.3.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]