Commit 5763795f authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/amit-virtio-rng/tags/rng-for-2.6-2' into staging



rng: use simpleq instead of gslist

# gpg: Signature made Tue 08 Mar 2016 10:51:23 GMT using RSA key ID 854083B6
# gpg: Good signature from "Amit Shah <amit@amitshah.net>"
# gpg:                 aka "Amit Shah <amit@kernel.org>"
# gpg:                 aka "Amit Shah <amitshah@gmx.net>"

* remotes/amit-virtio-rng/tags/rng-for-2.6-2:
  rng: switch request queue to QSIMPLEQ

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents d1cc881d 443590c2
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -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);
+3 −3
Original line number Diff line number Diff line
@@ -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);
+10 −7
Original line number Diff line number Diff line
@@ -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,
+2 −1
Original line number Diff line number Diff line
@@ -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;
};