On 9/9/08, Anthony Liguori <[EMAIL PROTECTED]> wrote:
> This patch introduces a buffered QEMUFile wrapper. This allows QEMUFile's to
> be
> rate limited. It also allows makes it easier to implement a QEMUFile that is
> asynchronous.
>
> The only real non-obvious part of the API is the "frozen" concept. If the
> backend
> returns EAGAIN, the QEMUFile is said to be "frozen". This means no
> additional
> output will be sent to the backend until the file is unfrozen.
> qemu_file_put_notify
> can be used to unfreeze a frozen file.
>
> A synchronous interface is also provided to wait for an unfreeze event.
> This is
> used during the final part of live migration when the VM is no longer
> running.
> +static int buffered_put_buffer(void *opaque, const uint8_t *buf, int64_t
> pos, int size)
> +{
> + QEMUFileBuffered *s = opaque;
> + size_t offset = 0;
> + ssize_t ret;
> +
> + if (s->has_error)
> + return -EINVAL;
> +
> + s->freeze_output = 0;
> +
> + buffered_flush(s);
> +
> + while (offset < size) {
> + if (s->bytes_xfer > s->xfer_limit)
> + break;
> +
> + ret = s->put_buffer(s->opaque, buf + offset, size - offset);
> + if (ret == -EAGAIN) {
> + s->freeze_output = 1;
> + break;
> + }
> +
> + if (ret <= 0) {
> + s->has_error = 1;
> + break;
> + }
> +
> + offset += ret;
> + s->bytes_xfer += ret;
> + }
> +
> + buffered_append(s, buf + offset, size - offset);
> +
> + return offset;
> +}
I'd change the types of the return value and parameter "size" to ssize_t.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html