[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 17/41] savevm, buffered_file: introduce method to
From: |
Isaku Yamahata |
Subject: |
[Qemu-devel] [PATCH v2 17/41] savevm, buffered_file: introduce method to drain buffer of buffered file |
Date: |
Mon, 4 Jun 2012 18:57:19 +0900 |
Introduce a new method to drain the buffer of QEMUBufferedFile.
When postcopy migration, buffer size can increase unboundedly.
To keep the buffer size reasonably small, introduce the method to
wait for buffer to drain.
Signed-off-by: Isaku Yamahata <address@hidden>
---
buffered_file.c | 20 +++++++++++++++-----
buffered_file.h | 1 +
qemu-file.h | 1 +
savevm.c | 7 +++++++
4 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/buffered_file.c b/buffered_file.c
index f170aa0..a38caec 100644
--- a/buffered_file.c
+++ b/buffered_file.c
@@ -170,6 +170,15 @@ static int buffered_put_buffer(void *opaque, const uint8_t
*buf, int64_t pos, in
return offset;
}
+static void buffered_drain(QEMUFileBuffered *s)
+{
+ while (!qemu_file_get_error(s->file) && s->buffer_size) {
+ buffered_flush(s);
+ if (s->freeze_output)
+ s->wait_for_unfreeze(s->opaque);
+ }
+}
+
static int buffered_close(void *opaque)
{
QEMUFileBuffered *s = opaque;
@@ -177,11 +186,7 @@ static int buffered_close(void *opaque)
DPRINTF("closing\n");
- while (!qemu_file_get_error(s->file) && s->buffer_size) {
- buffered_flush(s);
- if (s->freeze_output)
- s->wait_for_unfreeze(s->opaque);
- }
+ buffered_drain(s);
ret = s->close(s->opaque);
@@ -291,3 +296,8 @@ QEMUFile *qemu_fopen_ops_buffered(void *opaque,
return s->file;
}
+
+void qemu_buffered_file_drain_buffer(void *buffered_file)
+{
+ buffered_drain(buffered_file);
+}
diff --git a/buffered_file.h b/buffered_file.h
index 98d358b..cd8e1e8 100644
--- a/buffered_file.h
+++ b/buffered_file.h
@@ -26,5 +26,6 @@ QEMUFile *qemu_fopen_ops_buffered(void *opaque, size_t
xfer_limit,
BufferedPutReadyFunc *put_ready,
BufferedWaitForUnfreezeFunc
*wait_for_unfreeze,
BufferedCloseFunc *close);
+void qemu_buffered_file_drain_buffer(void *buffered_file);
#endif
diff --git a/qemu-file.h b/qemu-file.h
index 880ef4b..331ac8b 100644
--- a/qemu-file.h
+++ b/qemu-file.h
@@ -72,6 +72,7 @@ QEMUFile *qemu_popen(FILE *popen_file, const char *mode);
QEMUFile *qemu_popen_cmd(const char *command, const char *mode);
int qemu_stdio_fd(QEMUFile *f);
void qemu_fflush(QEMUFile *f);
+void qemu_buffered_file_drain(QEMUFile *f);
int qemu_fclose(QEMUFile *f);
void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size);
void qemu_put_byte(QEMUFile *f, int v);
diff --git a/savevm.c b/savevm.c
index 2992f97..fb47529 100644
--- a/savevm.c
+++ b/savevm.c
@@ -85,6 +85,7 @@
#include "cpus.h"
#include "memory.h"
#include "qmp-commands.h"
+#include "buffered_file.h"
#define SELF_ANNOUNCE_ROUNDS 5
@@ -477,6 +478,12 @@ void qemu_fflush(QEMUFile *f)
}
}
+void qemu_buffered_file_drain(QEMUFile *f)
+{
+ qemu_fflush(f);
+ qemu_buffered_file_drain_buffer(f->opaque);
+}
+
static void qemu_fill_buffer(QEMUFile *f)
{
int len;
--
1.7.1.1
- [Qemu-devel] [PATCH v2 00/41] postcopy live migration, Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 16/41] savevm: qemu_pending_size() to return pending buffered size, Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 04/41] arch_init: refactor host_from_stream_offset(), Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 06/41] arch_init: refactor ram_save_block(), Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 03/41] arch_init/ram_save: introduce constant for ram save version = 4, Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 17/41] savevm, buffered_file: introduce method to drain buffer of buffered file,
Isaku Yamahata <=
- [Qemu-devel] [PATCH v2 20/41] savevm/QEMUFileSocket: drop duplicated member fd, Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 01/41] arch_init: export sort_ram_list() and ram_save_block(), Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 18/41] QEMUFile: add qemu_file_fd() for later use, Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 24/41] migration: export migrate_fd_completed() and migrate_fd_cleanup(), Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 05/41] arch_init/ram_save_live: factor out RAM_SAVE_FLAG_MEM_SIZE case, Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 31/41] configure: add CONFIG_POSTCOPY option, Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 22/41] savevm/QEMUFile: introduce qemu_fopen_fd, Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 09/41] arch_init: introduce helper function to find ram block with id string, Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 02/41] arch_init: export RAM_SAVE_xxx flags for postcopy, Isaku Yamahata, 2012/06/04
- [Qemu-devel] [PATCH v2 13/41] exec.c: factor out qemu_get_ram_ptr(), Isaku Yamahata, 2012/06/04