static void virtio_rng_device_realize(DeviceState *dev, Error **errp)

{

    VirtIODevice *vdev = VIRTIO_DEVICE(dev);

    VirtIORNG *vrng = VIRTIO_RNG(dev);

    Error *local_err = NULL;



    if (!vrng->conf.period_ms > 0) {

        error_setg(errp, "'period' parameter expects a positive integer");

        return;

    }



    /* Workaround: Property parsing does not enforce unsigned integers,

     * So this is a hack to reject such numbers. */

    if (vrng->conf.max_bytes > INT64_MAX) {

        error_setg(errp, "'max-bytes' parameter must be non-negative, "

                   "and less than 2^63");

        return;

    }



    if (vrng->conf.rng == NULL) {

        vrng->conf.default_backend = RNG_RANDOM(object_new(TYPE_RNG_RANDOM));



        user_creatable_complete(OBJECT(vrng->conf.default_backend),

                                &local_err);

        if (local_err) {

            error_propagate(errp, local_err);

            object_unref(OBJECT(vrng->conf.default_backend));

            return;

        }



        object_property_add_child(OBJECT(dev),

                                  "default-backend",

                                  OBJECT(vrng->conf.default_backend),

                                  NULL);



        /* The child property took a reference, we can safely drop ours now */

        object_unref(OBJECT(vrng->conf.default_backend));



        object_property_set_link(OBJECT(dev),

                                 OBJECT(vrng->conf.default_backend),

                                 "rng", NULL);

    }



    vrng->rng = vrng->conf.rng;

    if (vrng->rng == NULL) {

        error_setg(errp, "'rng' parameter expects a valid object");

        return;

    }



    virtio_init(vdev, "virtio-rng", VIRTIO_ID_RNG, 0);



    vrng->vq = virtio_add_queue(vdev, 8, handle_input);

    vrng->quota_remaining = vrng->conf.max_bytes;



    vrng->rate_limit_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL,

                                               check_rate_limit, vrng);



    timer_mod(vrng->rate_limit_timer,

                   qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + vrng->conf.period_ms);



    register_savevm(dev, "virtio-rng", -1, 1, virtio_rng_save,

                    virtio_rng_load, vrng);

}

static void virtio_rng_device_realize(DeviceState *dev, Error **errp)

{

    VirtIODevice *vdev = VIRTIO_DEVICE(dev);

    VirtIORNG *vrng = VIRTIO_RNG(dev);

    Error *local_err = NULL;



    if (!vrng->conf.period_ms > 0) {

        error_setg(errp, "'period' parameter expects a positive integer");

        return;

    }



    



    if (vrng->conf.max_bytes > INT64_MAX) {

        error_setg(errp, "'max-bytes' parameter must be non-negative, "

                   "and less than 2^63");

        return;

    }



    if (vrng->conf.rng == NULL) {

        vrng->conf.default_backend = RNG_RANDOM(object_new(TYPE_RNG_RANDOM));



        user_creatable_complete(OBJECT(vrng->conf.default_backend),

                                &local_err);

        if (local_err) {

            error_propagate(errp, local_err);

            object_unref(OBJECT(vrng->conf.default_backend));

            return;

        }



        object_property_add_child(OBJECT(dev),

                                  "default-backend",

                                  OBJECT(vrng->conf.default_backend),

                                  NULL);



        

        object_unref(OBJECT(vrng->conf.default_backend));



        object_property_set_link(OBJECT(dev),

                                 OBJECT(vrng->conf.default_backend),

                                 "rng", NULL);

    }



    vrng->rng = vrng->conf.rng;

    if (vrng->rng == NULL) {

        error_setg(errp, "'rng' parameter expects a valid object");

        return;

    }



    virtio_init(vdev, "virtio-rng", VIRTIO_ID_RNG, 0);



    vrng->vq = virtio_add_queue(vdev, 8, handle_input);

    vrng->quota_remaining = vrng->conf.max_bytes;



    vrng->rate_limit_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL,

                                               check_rate_limit, vrng);



    timer_mod(vrng->rate_limit_timer,

                   qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + vrng->conf.period_ms);



    register_savevm(dev, "virtio-rng", -1, 1, virtio_rng_save,

                    virtio_rng_load, vrng);

}

static void FUNC_0(DeviceState *VAR_0, Error **VAR_1)

{

    VirtIODevice *vdev = VIRTIO_DEVICE(VAR_0);

    VirtIORNG *vrng = VIRTIO_RNG(VAR_0);

    Error *local_err = NULL;



    if (!vrng->conf.period_ms > 0) {

        error_setg(VAR_1, "'period' parameter expects a positive integer");

        return;

    }



    



    if (vrng->conf.max_bytes > INT64_MAX) {

        error_setg(VAR_1, "'max-bytes' parameter must be non-negative, "

                   "and less than 2^63");

        return;

    }



    if (vrng->conf.rng == NULL) {

        vrng->conf.default_backend = RNG_RANDOM(object_new(TYPE_RNG_RANDOM));



        user_creatable_complete(OBJECT(vrng->conf.default_backend),

                                &local_err);

        if (local_err) {

            error_propagate(VAR_1, local_err);

            object_unref(OBJECT(vrng->conf.default_backend));

            return;

        }



        object_property_add_child(OBJECT(VAR_0),

                                  "default-backend",

                                  OBJECT(vrng->conf.default_backend),

                                  NULL);



        

        object_unref(OBJECT(vrng->conf.default_backend));



        object_property_set_link(OBJECT(VAR_0),

                                 OBJECT(vrng->conf.default_backend),

                                 "rng", NULL);

    }



    vrng->rng = vrng->conf.rng;

    if (vrng->rng == NULL) {

        error_setg(VAR_1, "'rng' parameter expects a valid object");

        return;

    }



    virtio_init(vdev, "virtio-rng", VIRTIO_ID_RNG, 0);



    vrng->vq = virtio_add_queue(vdev, 8, handle_input);

    vrng->quota_remaining = vrng->conf.max_bytes;



    vrng->rate_limit_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL,

                                               check_rate_limit, vrng);



    timer_mod(vrng->rate_limit_timer,

                   qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + vrng->conf.period_ms);



    register_savevm(VAR_0, "virtio-rng", -1, 1, virtio_rng_save,

                    virtio_rng_load, vrng);

}

static void FUNC_0(DeviceState *VAR_0, Error **VAR_1)
{ VirtIODevice *vdev = VIRTIO_DEVICE(VAR_0); VirtIORNG *vrng = VIRTIO_RNG(VAR_0); Error *local_err = NULL; if (!vrng->conf.period_ms > 0) { error_setg(VAR_1, "'period' parameter expects a positive integer"); return; } if (vrng->conf.max_bytes > INT64_MAX) { error_setg(VAR_1, "'max-bytes' parameter must be non-negative, "
"and less than 2^63"); return; } if (vrng->conf.rng == NULL) { vrng->conf.default_backend = RNG_RANDOM(object_new(TYPE_RNG_RANDOM)); user_creatable_complete(OBJECT(vrng->conf.default_backend),
&local_err); if (local_err) { error_propagate(VAR_1, local_err); object_unref(OBJECT(vrng->conf.default_backend)); return; } object_property_add_child(OBJECT(VAR_0),
"default-backend",
OBJECT(vrng->conf.default_backend),
NULL); object_unref(OBJECT(vrng->conf.default_backend)); object_property_set_link(OBJECT(VAR_0),
OBJECT(vrng->conf.default_backend),
"rng", NULL); } vrng->rng = vrng->conf.rng; if (vrng->rng == NULL) { error_setg(VAR_1, "'rng' parameter expects a valid object"); return; } virtio_init(vdev, "virtio-rng", VIRTIO_ID_RNG, 0); vrng->vq = virtio_add_queue(vdev, 8, handle_input); vrng->quota_remaining = vrng->conf.max_bytes; vrng->rate_limit_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL,
check_rate_limit, vrng); timer_mod(vrng->rate_limit_timer,
qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + vrng->conf.period_ms); register_savevm(VAR_0, "virtio-rng", -1, 1, virtio_rng_save,
virtio_rng_load, vrng); }