qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/1] rng: use simpleq instead of gslist
@ 2016-03-08 10:54 Amit Shah
  2016-03-08 10:54 ` [Qemu-devel] [PULL 1/1] rng: switch request queue to QSIMPLEQ Amit Shah
  2016-03-09  0:44 ` [Qemu-devel] [PULL 0/1] rng: use simpleq instead of gslist Peter Maydell
  0 siblings, 2 replies; 3+ messages in thread
From: Amit Shah @ 2016-03-08 10:54 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Amit Shah, qemu list

The following changes since commit 97556fe80e4f7252300b3498b3477fb4295153a3:

  Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging (2016-03-08 04:53:37 +0000)

are available in the git repository at:

  https://git.kernel.org/pub/scm/virt/qemu/amit/virtio-rng.git tags/rng-for-2.6-2

for you to fetch changes up to 443590c2044968a97f5e7cddd35100c6075856a4:

  rng: switch request queue to QSIMPLEQ (2016-03-08 12:54:14 +0530)

----------------------------------------------------------------
rng: use simpleq instead of gslist

----------------------------------------------------------------

Ladi Prosek (1):
  rng: switch request queue to QSIMPLEQ

 backends/rng-egd.c    |  9 ++++-----
 backends/rng-random.c |  6 +++---
 backends/rng.c        | 17 ++++++++++-------
 include/sysemu/rng.h  |  3 ++-
 4 files changed, 19 insertions(+), 16 deletions(-)

-- 
2.5.0

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Qemu-devel] [PULL 1/1] rng: switch request queue to QSIMPLEQ
  2016-03-08 10:54 [Qemu-devel] [PULL 0/1] rng: use simpleq instead of gslist Amit Shah
@ 2016-03-08 10:54 ` Amit Shah
  2016-03-09  0:44 ` [Qemu-devel] [PULL 0/1] rng: use simpleq instead of gslist Peter Maydell
  1 sibling, 0 replies; 3+ messages in thread
From: Amit Shah @ 2016-03-08 10:54 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Amit Shah, Ladi Prosek, qemu list

From: Ladi Prosek <lprosek@redhat.com>

QSIMPLEQ supports appending to tail in O(1) and is intrusive so
it doesn't require extra memory allocations for the bookkeeping
data.

Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Amit Shah <amit.shah@redhat.com>
Message-Id: <1457010971-24771-1-git-send-email-lprosek@redhat.com>
Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
 backends/rng-egd.c    |  9 ++++-----
 backends/rng-random.c |  6 +++---
 backends/rng.c        | 17 ++++++++++-------
 include/sysemu/rng.h  |  3 ++-
 4 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/backends/rng-egd.c b/backends/rng-egd.c
index 30332ed..6e0ba22 100644
--- a/backends/rng-egd.c
+++ b/backends/rng-egd.c
@@ -49,11 +49,10 @@ static void rng_egd_request_entropy(RngBackend *b, RngRequest *req)
 static int rng_egd_chr_can_read(void *opaque)
 {
     RngEgd *s = RNG_EGD(opaque);
-    GSList *i;
+    RngRequest *req;
     int size = 0;
 
-    for (i = s->parent.requests; i; i = i->next) {
-        RngRequest *req = i->data;
+    QSIMPLEQ_FOREACH(req, &s->parent.requests, next) {
         size += req->size - req->offset;
     }
 
@@ -65,8 +64,8 @@ static void rng_egd_chr_read(void *opaque, const uint8_t *buf, int size)
     RngEgd *s = RNG_EGD(opaque);
     size_t buf_offset = 0;
 
-    while (size > 0 && s->parent.requests) {
-        RngRequest *req = s->parent.requests->data;
+    while (size > 0 && !QSIMPLEQ_EMPTY(&s->parent.requests)) {
+        RngRequest *req = QSIMPLEQ_FIRST(&s->parent.requests);
         int len = MIN(size, req->size - req->offset);
 
         memcpy(req->data + req->offset, buf + buf_offset, len);
diff --git a/backends/rng-random.c b/backends/rng-random.c
index a6cb385..122e8d4 100644
--- a/backends/rng-random.c
+++ b/backends/rng-random.c
@@ -35,8 +35,8 @@ static void entropy_available(void *opaque)
 {
     RndRandom *s = RNG_RANDOM(opaque);
 
-    while (s->parent.requests != NULL) {
-        RngRequest *req = s->parent.requests->data;
+    while (!QSIMPLEQ_EMPTY(&s->parent.requests)) {
+        RngRequest *req = QSIMPLEQ_FIRST(&s->parent.requests);
         ssize_t len;
 
         len = read(s->fd, req->data, req->size);
@@ -58,7 +58,7 @@ static void rng_random_request_entropy(RngBackend *b, RngRequest *req)
 {
     RndRandom *s = RNG_RANDOM(b);
 
-    if (s->parent.requests == NULL) {
+    if (QSIMPLEQ_EMPTY(&s->parent.requests)) {
         /* If there are no pending requests yet, we need to
          * install our fd handler. */
         qemu_set_fd_handler(s->fd, entropy_available, NULL, s);
diff --git a/backends/rng.c b/backends/rng.c
index 277a41b..e57e2b4 100644
--- a/backends/rng.c
+++ b/backends/rng.c
@@ -33,7 +33,7 @@ void rng_backend_request_entropy(RngBackend *s, size_t size,
 
         k->request_entropy(s, req);
 
-        s->requests = g_slist_append(s->requests, req);
+        QSIMPLEQ_INSERT_TAIL(&s->requests, req, next);
     }
 }
 
@@ -83,24 +83,27 @@ static void rng_backend_free_request(RngRequest *req)
 
 static void rng_backend_free_requests(RngBackend *s)
 {
-    GSList *i;
+    RngRequest *req, *next;
 
-    for (i = s->requests; i; i = i->next) {
-        rng_backend_free_request(i->data);
+    QSIMPLEQ_FOREACH_SAFE(req, &s->requests, next, next) {
+        rng_backend_free_request(req);
     }
 
-    g_slist_free(s->requests);
-    s->requests = NULL;
+    QSIMPLEQ_INIT(&s->requests);
 }
 
 void rng_backend_finalize_request(RngBackend *s, RngRequest *req)
 {
-    s->requests = g_slist_remove(s->requests, req);
+    QSIMPLEQ_REMOVE(&s->requests, req, RngRequest, next);
     rng_backend_free_request(req);
 }
 
 static void rng_backend_init(Object *obj)
 {
+    RngBackend *s = RNG_BACKEND(obj);
+
+    QSIMPLEQ_INIT(&s->requests);
+
     object_property_add_bool(obj, "opened",
                              rng_backend_prop_get_opened,
                              rng_backend_prop_set_opened,
diff --git a/include/sysemu/rng.h b/include/sysemu/rng.h
index 4fffd68..45629c4 100644
--- a/include/sysemu/rng.h
+++ b/include/sysemu/rng.h
@@ -39,6 +39,7 @@ struct RngRequest
     void *opaque;
     size_t offset;
     size_t size;
+    QSIMPLEQ_ENTRY(RngRequest) next;
 };
 
 struct RngBackendClass
@@ -56,7 +57,7 @@ struct RngBackend
 
     /*< protected >*/
     bool opened;
-    GSList *requests;
+    QSIMPLEQ_HEAD(requests, RngRequest) requests;
 };
 
 
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PULL 0/1] rng: use simpleq instead of gslist
  2016-03-08 10:54 [Qemu-devel] [PULL 0/1] rng: use simpleq instead of gslist Amit Shah
  2016-03-08 10:54 ` [Qemu-devel] [PULL 1/1] rng: switch request queue to QSIMPLEQ Amit Shah
@ 2016-03-09  0:44 ` Peter Maydell
  1 sibling, 0 replies; 3+ messages in thread
From: Peter Maydell @ 2016-03-09  0:44 UTC (permalink / raw)
  To: Amit Shah; +Cc: qemu list

On 8 March 2016 at 17:54, Amit Shah <amit.shah@redhat.com> wrote:
> The following changes since commit 97556fe80e4f7252300b3498b3477fb4295153a3:
>
>   Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging (2016-03-08 04:53:37 +0000)
>
> are available in the git repository at:
>
>   https://git.kernel.org/pub/scm/virt/qemu/amit/virtio-rng.git tags/rng-for-2.6-2
>
> for you to fetch changes up to 443590c2044968a97f5e7cddd35100c6075856a4:
>
>   rng: switch request queue to QSIMPLEQ (2016-03-08 12:54:14 +0530)
>
> ----------------------------------------------------------------
> rng: use simpleq instead of gslist
>
> ----------------------------------------------------------------
>
> Ladi Prosek (1):
>   rng: switch request queue to QSIMPLEQ
>

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-03-09  0:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-08 10:54 [Qemu-devel] [PULL 0/1] rng: use simpleq instead of gslist Amit Shah
2016-03-08 10:54 ` [Qemu-devel] [PULL 1/1] rng: switch request queue to QSIMPLEQ Amit Shah
2016-03-09  0:44 ` [Qemu-devel] [PULL 0/1] rng: use simpleq instead of gslist Peter Maydell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).