From patchwork Thu Oct 18 10:22:29 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 192267 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 09CB32C0089 for ; Thu, 18 Oct 2012 21:24:04 +1100 (EST) Received: from localhost ([::1]:39983 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TOnGj-00007N-Vt for incoming@patchwork.ozlabs.org; Thu, 18 Oct 2012 06:24:01 -0400 Received: from eggs.gnu.org ([208.118.235.92]:45131) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TOnGB-0007tM-9B for qemu-devel@nongnu.org; Thu, 18 Oct 2012 06:23:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TOnG5-0001b3-6V for qemu-devel@nongnu.org; Thu, 18 Oct 2012 06:23:27 -0400 Received: from mail-da0-f45.google.com ([209.85.210.45]:36000) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TOnG4-0001au-Pr for qemu-devel@nongnu.org; Thu, 18 Oct 2012 06:23:21 -0400 Received: by mail-da0-f45.google.com with SMTP id n15so3414377dad.4 for ; Thu, 18 Oct 2012 03:23:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; bh=V5hoplBaYuM0JkVdA84K8SIjxO44KxtDIe9qk2NG1m4=; b=fsKVBShelRhUG4kwJs9H2YCE/LIjrmfI0veUmuJ/2GVP8W6g3ldV9gUxjUULXlWOH1 lRk9x+9ONpLtpQQOZeuGTwr1xG7R5Zuu5o0pIVQ87uq2zTw3MzB+15hPA3/yboIAL53h mYX6AooO7jYsn/WD6vJgrVpu/N8fcfAZa8vk8BjNNvxc1Z8/Ds9R6fCCFAuMCOkuJx+7 qOtzhceFVdtAbczjgrYfyQrj+kHo/e0NiwPpNiIaFmUeYUfOxy8rqSX3i5G5d+tO3vEf SJ7/FlbFsctq1uyqwhPbSG9OFaTF1yLqpdMtcBeqMaIItW+l0AluIS+Cg+ZDpPEibBNt 29+Q== Received: by 10.68.232.131 with SMTP id to3mr65169715pbc.58.1350555800074; Thu, 18 Oct 2012 03:23:20 -0700 (PDT) Received: from yakj.usersys.redhat.com (93-34-169-1.ip50.fastwebnet.it. [93.34.169.1]) by mx.google.com with ESMTPS id hu5sm3581193pbc.72.2012.10.18.03.23.17 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 18 Oct 2012 03:23:19 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Thu, 18 Oct 2012 12:22:29 +0200 Message-Id: <1350555758-29988-4-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.7.12.1 In-Reply-To: <1350555758-29988-1-git-send-email-pbonzini@redhat.com> References: <1350555758-29988-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.85.210.45 Cc: quintela@redhat.com Subject: [Qemu-devel] [PATCH 03/12] migration: add qemu_get_fd X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Paolo Bonzini Reviewed-by: Orit Wasserman Reviewed-by: Juan Quintela --- buffered_file.c | 8 ++++++++ qemu-file.h | 6 ++++++ savevm.c | 27 +++++++++++++++++++++++++++ 3 file modificati, 41 inserzioni(+) diff --git a/buffered_file.c b/buffered_file.c index a5c0b12..bd0f61d 100644 --- a/buffered_file.c +++ b/buffered_file.c @@ -174,6 +174,13 @@ static int buffered_close(void *opaque) * 1: Time to stop * negative: There has been an error */ +static int buffered_get_fd(void *opaque) +{ + QEMUFileBuffered *s = opaque; + + return qemu_get_fd(s->file); +} + static int buffered_rate_limit(void *opaque) { QEMUFileBuffered *s = opaque; @@ -235,6 +242,7 @@ static void buffered_rate_tick(void *opaque) } static const QEMUFileOps buffered_file_ops = { + .get_fd = buffered_get_fd, .put_buffer = buffered_put_buffer, .close = buffered_close, .rate_limit = buffered_rate_limit, diff --git a/qemu-file.h b/qemu-file.h index c89e8e0..d552f5d 100644 --- a/qemu-file.h +++ b/qemu-file.h @@ -47,6 +47,10 @@ typedef int (QEMUFileGetBufferFunc)(void *opaque, uint8_t *buf, */ typedef int (QEMUFileCloseFunc)(void *opaque); +/* Called to return the OS file descriptor associated to the QEMUFile. + */ +typedef int (QEMUFileGetFD)(void *opaque); + /* Called to determine if the file has exceeded its bandwidth allocation. The * bandwidth capping is a soft limit, not a hard limit. */ @@ -63,6 +67,7 @@ typedef struct QEMUFileOps { QEMUFilePutBufferFunc *put_buffer; QEMUFileGetBufferFunc *get_buffer; QEMUFileCloseFunc *close; + QEMUFileGetFD *get_fd; QEMUFileRateLimit *rate_limit; QEMUFileSetRateLimit *set_rate_limit; QEMUFileGetRateLimit *get_rate_limit; @@ -74,6 +79,7 @@ QEMUFile *qemu_fdopen(int fd, const char *mode); QEMUFile *qemu_fopen_socket(int fd); QEMUFile *qemu_popen(FILE *popen_file, const char *mode); QEMUFile *qemu_popen_cmd(const char *command, const char *mode); +int qemu_get_fd(QEMUFile *f); int qemu_stdio_fd(QEMUFile *f); int qemu_fclose(QEMUFile *f); void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size); diff --git a/savevm.c b/savevm.c index c3ce00a..5c0a756 100644 --- a/savevm.c +++ b/savevm.c @@ -187,6 +187,13 @@ typedef struct QEMUFileSocket QEMUFile *file; } QEMUFileSocket; +static int socket_get_fd(void *opaque) +{ + QEMUFileSocket *s = opaque; + + return s->fd; +} + static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size) { QEMUFileSocket *s = opaque; @@ -209,6 +216,13 @@ static int socket_close(void *opaque) return 0; } +static int stdio_get_fd(void *opaque) +{ + QEMUFileStdio *s = opaque; + + return fileno(s->stdio_file); +} + static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size) { QEMUFileStdio *s = opaque; @@ -252,11 +266,13 @@ static int stdio_fclose(void *opaque) } static const QEMUFileOps stdio_pipe_read_ops = { + .get_fd = stdio_get_fd, .get_buffer = stdio_get_buffer, .close = stdio_pclose }; static const QEMUFileOps stdio_pipe_write_ops = { + .get_fd = stdio_get_fd, .put_buffer = stdio_put_buffer, .close = stdio_pclose }; @@ -306,11 +322,13 @@ int qemu_stdio_fd(QEMUFile *f) } static const QEMUFileOps stdio_file_read_ops = { + .get_fd = stdio_get_fd, .get_buffer = stdio_get_buffer, .close = stdio_fclose }; static const QEMUFileOps stdio_file_write_ops = { + .get_fd = stdio_get_fd, .put_buffer = stdio_put_buffer, .close = stdio_fclose }; @@ -344,6 +362,7 @@ fail: } static const QEMUFileOps socket_read_ops = { + .get_fd = socket_get_fd, .get_buffer = socket_get_buffer, .close = socket_close }; @@ -491,6 +510,14 @@ static void qemu_fill_buffer(QEMUFile *f) qemu_file_set_error(f, len); } +int qemu_get_fd(QEMUFile *f) +{ + if (f->ops->get_fd) { + return f->ops->get_fd(f->opaque); + } + return -1; +} + /** Closes the file * * Returns negative error value if any error happened on previous operations or