* [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).