All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 0/5] More migration file cleanup
@ 2014-12-12 11:13 Dr. David Alan Gilbert (git)
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 1/5] Start migrating migration code into a migration directory Dr. David Alan Gilbert (git)
                   ` (4 more replies)
  0 siblings, 5 replies; 15+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2014-12-12 11:13 UTC (permalink / raw)
  To: qemu-devel; +Cc: amit.shah, peter.maydell, quintela

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

This is a small set of patches that shuffle migration code
around, but doesn't change the behaviour:

  1) Move a lot of the migration source into a separate 'migration' directory
     Note this moves a lot of files around, git format-patch -M -B spots the
     renames
  2) Now they're in a migration directory, rename them to remove the migration-
  3) Split the 'struct QEMUFile' out into a private header
     Because the QEMU Buffered file code wants to access fields, and it's about
     to be in a separate file from QEMUFile.
  4) Split the QEMU buffered file code out in the same way as the stdio and
     unix/socket code has been split out.
  5) Update the MAINTAINERS file to fixup locations.

Dave

v3:
  xbzrle and vmstate tests now only run if configured for softmmu, since
  migration directory is only built if configured for softmmu.
  Pull the MAINTAINERS update into this set, and remove the vmstate line.

v2:
  Also move block-migration.c
  Shorten file names now they're all in the migration/ directory

-- 
2.1.0


Dr. David Alan Gilbert (5):
  Start migrating migration code into a migration directory
  Remove migration- pre/post fixes off files in migration/ dir
  Split struct QEMUFile out
  Split the QEMU buffered file code out
  MAINTAINERS: Update for migrated migration code

 MAINTAINERS                                      |   3 +-
 Makefile.objs                                    |  10 +-
 migration/Makefile.objs                          |  10 +
 block-migration.c => migration/block.c           |   0
 migration-exec.c => migration/exec.c             |   0
 migration-fd.c => migration/fd.c                 |   0
 migration.c => migration/migration.c             |   0
 qemu-file.c => migration/qemu-file-buf.c         | 511 +---------------------
 migration/qemu-file-internal.h                   |  53 +++
 qemu-file-stdio.c => migration/qemu-file-stdio.c |   0
 qemu-file-unix.c => migration/qemu-file-unix.c   |   0
 migration/qemu-file.c                            | 519 +++++++++++++++++++++++
 migration-rdma.c => migration/rdma.c             |   0
 migration-tcp.c => migration/tcp.c               |   0
 migration-unix.c => migration/unix.c             |   0
 vmstate.c => migration/vmstate.c                 |   0
 xbzrle.c => migration/xbzrle.c                   |   0
 tests/Makefile                                   |  11 +-
 18 files changed, 593 insertions(+), 524 deletions(-)
 create mode 100644 migration/Makefile.objs
 rename block-migration.c => migration/block.c (100%)
 rename migration-exec.c => migration/exec.c (100%)
 rename migration-fd.c => migration/fd.c (100%)
 rename migration.c => migration/migration.c (100%)
 rename qemu-file.c => migration/qemu-file-buf.c (51%)
 create mode 100644 migration/qemu-file-internal.h
 rename qemu-file-stdio.c => migration/qemu-file-stdio.c (100%)
 rename qemu-file-unix.c => migration/qemu-file-unix.c (100%)
 create mode 100644 migration/qemu-file.c
 rename migration-rdma.c => migration/rdma.c (100%)
 rename migration-tcp.c => migration/tcp.c (100%)
 rename migration-unix.c => migration/unix.c (100%)
 rename vmstate.c => migration/vmstate.c (100%)
 rename xbzrle.c => migration/xbzrle.c (100%)

-- 
2.1.0

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PATCH v3 1/5] Start migrating migration code into a migration directory
  2014-12-12 11:13 [Qemu-devel] [PATCH v3 0/5] More migration file cleanup Dr. David Alan Gilbert (git)
@ 2014-12-12 11:13 ` Dr. David Alan Gilbert (git)
  2014-12-18  1:10   ` David Gibson
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 2/5] Remove migration- pre/post fixes off files in migration/ dir Dr. David Alan Gilbert (git)
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 15+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2014-12-12 11:13 UTC (permalink / raw)
  To: qemu-devel; +Cc: amit.shah, peter.maydell, quintela

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

The migration code now occupies a fair chunk of the top level .c
files, it seems time to give it it's own directory.

I've not touched:
   arch_init.c - that's mostly RAM migration but has a few random other
                 bits
   savevm.c    - because it's built target specific

This is purely a code move; no code has changed.
   - it fails checkpatch because of old violations, it feels safer
     to keep this as purely a move and fix those at some mythical future
     date.

The xbzrle and vmstate tests are now only run for softmmu builds
since they require files in the migrate/ directory which is only built
for softmmu.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 Makefile.objs                                    | 10 ++--------
 migration/Makefile.objs                          | 10 ++++++++++
 block-migration.c => migration/block-migration.c |  0
 migration-exec.c => migration/migration-exec.c   |  0
 migration-fd.c => migration/migration-fd.c       |  0
 migration-rdma.c => migration/migration-rdma.c   |  0
 migration-tcp.c => migration/migration-tcp.c     |  0
 migration-unix.c => migration/migration-unix.c   |  0
 migration.c => migration/migration.c             |  0
 qemu-file-stdio.c => migration/qemu-file-stdio.c |  0
 qemu-file-unix.c => migration/qemu-file-unix.c   |  0
 qemu-file.c => migration/qemu-file.c             |  0
 vmstate.c => migration/vmstate.c                 |  0
 xbzrle.c => migration/xbzrle.c                   |  0
 tests/Makefile                                   | 10 ++++++----
 15 files changed, 18 insertions(+), 12 deletions(-)
 create mode 100644 migration/Makefile.objs
 rename block-migration.c => migration/block-migration.c (100%)
 rename migration-exec.c => migration/migration-exec.c (100%)
 rename migration-fd.c => migration/migration-fd.c (100%)
 rename migration-rdma.c => migration/migration-rdma.c (100%)
 rename migration-tcp.c => migration/migration-tcp.c (100%)
 rename migration-unix.c => migration/migration-unix.c (100%)
 rename migration.c => migration/migration.c (100%)
 rename qemu-file-stdio.c => migration/qemu-file-stdio.c (100%)
 rename qemu-file-unix.c => migration/qemu-file-unix.c (100%)
 rename qemu-file.c => migration/qemu-file.c (100%)
 rename vmstate.c => migration/vmstate.c (100%)
 rename xbzrle.c => migration/xbzrle.c (100%)

diff --git a/Makefile.objs b/Makefile.objs
index 18fd35c..abeb902 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -48,15 +48,9 @@ common-obj-$(CONFIG_POSIX) += os-posix.o
 
 common-obj-$(CONFIG_LINUX) += fsdev/
 
-common-obj-y += migration.o migration-tcp.o
-common-obj-y += vmstate.o
-common-obj-y += qemu-file.o qemu-file-unix.o qemu-file-stdio.o
-common-obj-$(CONFIG_RDMA) += migration-rdma.o
+common-obj-y += migration/
 common-obj-y += qemu-char.o #aio.o
-common-obj-y += block-migration.o
-common-obj-y += page_cache.o xbzrle.o
-
-common-obj-$(CONFIG_POSIX) += migration-exec.o migration-unix.o migration-fd.o
+common-obj-y += page_cache.o
 
 common-obj-$(CONFIG_SPICE) += spice-qemu-char.o
 
diff --git a/migration/Makefile.objs b/migration/Makefile.objs
new file mode 100644
index 0000000..63dbe93
--- /dev/null
+++ b/migration/Makefile.objs
@@ -0,0 +1,10 @@
+common-obj-y += migration.o migration-tcp.o
+common-obj-y += vmstate.o
+common-obj-y += qemu-file.o qemu-file-unix.o qemu-file-stdio.o
+common-obj-$(CONFIG_RDMA) += migration-rdma.o
+common-obj-y += xbzrle.o
+
+common-obj-$(CONFIG_POSIX) += migration-exec.o migration-unix.o migration-fd.o
+
+common-obj-y += block-migration.o
+
diff --git a/block-migration.c b/migration/block-migration.c
similarity index 100%
rename from block-migration.c
rename to migration/block-migration.c
diff --git a/migration-exec.c b/migration/migration-exec.c
similarity index 100%
rename from migration-exec.c
rename to migration/migration-exec.c
diff --git a/migration-fd.c b/migration/migration-fd.c
similarity index 100%
rename from migration-fd.c
rename to migration/migration-fd.c
diff --git a/migration-rdma.c b/migration/migration-rdma.c
similarity index 100%
rename from migration-rdma.c
rename to migration/migration-rdma.c
diff --git a/migration-tcp.c b/migration/migration-tcp.c
similarity index 100%
rename from migration-tcp.c
rename to migration/migration-tcp.c
diff --git a/migration-unix.c b/migration/migration-unix.c
similarity index 100%
rename from migration-unix.c
rename to migration/migration-unix.c
diff --git a/migration.c b/migration/migration.c
similarity index 100%
rename from migration.c
rename to migration/migration.c
diff --git a/qemu-file-stdio.c b/migration/qemu-file-stdio.c
similarity index 100%
rename from qemu-file-stdio.c
rename to migration/qemu-file-stdio.c
diff --git a/qemu-file-unix.c b/migration/qemu-file-unix.c
similarity index 100%
rename from qemu-file-unix.c
rename to migration/qemu-file-unix.c
diff --git a/qemu-file.c b/migration/qemu-file.c
similarity index 100%
rename from qemu-file.c
rename to migration/qemu-file.c
diff --git a/vmstate.c b/migration/vmstate.c
similarity index 100%
rename from vmstate.c
rename to migration/vmstate.c
diff --git a/xbzrle.c b/migration/xbzrle.c
similarity index 100%
rename from xbzrle.c
rename to migration/xbzrle.c
diff --git a/tests/Makefile b/tests/Makefile
index 16f0e4c..faba9cb 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -48,8 +48,11 @@ check-unit-y += tests/test-hbitmap$(EXESUF)
 check-unit-y += tests/test-x86-cpuid$(EXESUF)
 # all code tested by test-x86-cpuid is inside topology.h
 gcov-files-test-x86-cpuid-y =
+ifeq ($(CONFIG_SOFTMMU),y)
 check-unit-y += tests/test-xbzrle$(EXESUF)
-gcov-files-test-xbzrle-y = xbzrle.c
+gcov-files-test-xbzrle-y = migration/xbzrle.c
+check-unit-$(CONFIG_POSIX) += tests/test-vmstate$(EXESUF)
+endif
 check-unit-y += tests/test-cutils$(EXESUF)
 gcov-files-test-cutils-y += util/cutils.c
 check-unit-y += tests/test-mul64$(EXESUF)
@@ -61,7 +64,6 @@ check-unit-y += tests/test-bitops$(EXESUF)
 check-unit-$(CONFIG_HAS_GLIB_SUBPROCESS_TESTS) += tests/test-qdev-global-props$(EXESUF)
 check-unit-y += tests/check-qom-interface$(EXESUF)
 gcov-files-check-qom-interface-y = qom/object.c
-check-unit-$(CONFIG_POSIX) += tests/test-vmstate$(EXESUF)
 check-unit-y += tests/test-qemu-opts$(EXESUF)
 gcov-files-test-qemu-opts-y = qom/test-qemu-opts.c
 
@@ -247,7 +249,7 @@ tests/test-thread-pool$(EXESUF): tests/test-thread-pool.o $(block-obj-y) libqemu
 tests/test-iov$(EXESUF): tests/test-iov.o libqemuutil.a
 tests/test-hbitmap$(EXESUF): tests/test-hbitmap.o libqemuutil.a libqemustub.a
 tests/test-x86-cpuid$(EXESUF): tests/test-x86-cpuid.o
-tests/test-xbzrle$(EXESUF): tests/test-xbzrle.o xbzrle.o page_cache.o libqemuutil.a
+tests/test-xbzrle$(EXESUF): tests/test-xbzrle.o migration/xbzrle.o page_cache.o libqemuutil.a
 tests/test-cutils$(EXESUF): tests/test-cutils.o util/cutils.o
 tests/test-int128$(EXESUF): tests/test-int128.o
 tests/test-qdev-global-props$(EXESUF): tests/test-qdev-global-props.o \
@@ -258,7 +260,7 @@ tests/test-qdev-global-props$(EXESUF): tests/test-qdev-global-props.o \
 	$(test-qapi-obj-y) \
 	libqemuutil.a libqemustub.a
 tests/test-vmstate$(EXESUF): tests/test-vmstate.o \
-	vmstate.o qemu-file.o qemu-file-unix.o \
+	migration/vmstate.o migration/qemu-file.o migration/qemu-file-unix.o \
 	libqemuutil.a libqemustub.a
 
 tests/test-qapi-types.c tests/test-qapi-types.h :\
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PATCH v3 2/5] Remove migration- pre/post fixes off files in migration/ dir
  2014-12-12 11:13 [Qemu-devel] [PATCH v3 0/5] More migration file cleanup Dr. David Alan Gilbert (git)
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 1/5] Start migrating migration code into a migration directory Dr. David Alan Gilbert (git)
@ 2014-12-12 11:13 ` Dr. David Alan Gilbert (git)
  2014-12-18  1:10   ` David Gibson
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 3/5] Split struct QEMUFile out Dr. David Alan Gilbert (git)
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 15+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2014-12-12 11:13 UTC (permalink / raw)
  To: qemu-devel; +Cc: amit.shah, peter.maydell, quintela

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

The general feeling is that having migration/migration-blah
is overkill.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 migration/Makefile.objs                  | 8 ++++----
 migration/{block-migration.c => block.c} | 0
 migration/{migration-exec.c => exec.c}   | 0
 migration/{migration-fd.c => fd.c}       | 0
 migration/{migration-rdma.c => rdma.c}   | 0
 migration/{migration-tcp.c => tcp.c}     | 0
 migration/{migration-unix.c => unix.c}   | 0
 7 files changed, 4 insertions(+), 4 deletions(-)
 rename migration/{block-migration.c => block.c} (100%)
 rename migration/{migration-exec.c => exec.c} (100%)
 rename migration/{migration-fd.c => fd.c} (100%)
 rename migration/{migration-rdma.c => rdma.c} (100%)
 rename migration/{migration-tcp.c => tcp.c} (100%)
 rename migration/{migration-unix.c => unix.c} (100%)

diff --git a/migration/Makefile.objs b/migration/Makefile.objs
index 63dbe93..ce1e3c7 100644
--- a/migration/Makefile.objs
+++ b/migration/Makefile.objs
@@ -1,10 +1,10 @@
-common-obj-y += migration.o migration-tcp.o
+common-obj-y += migration.o tcp.o
 common-obj-y += vmstate.o
 common-obj-y += qemu-file.o qemu-file-unix.o qemu-file-stdio.o
-common-obj-$(CONFIG_RDMA) += migration-rdma.o
 common-obj-y += xbzrle.o
 
-common-obj-$(CONFIG_POSIX) += migration-exec.o migration-unix.o migration-fd.o
+common-obj-$(CONFIG_RDMA) += rdma.o
+common-obj-$(CONFIG_POSIX) += exec.o unix.o fd.o
 
-common-obj-y += block-migration.o
+common-obj-y += block.o
 
diff --git a/migration/block-migration.c b/migration/block.c
similarity index 100%
rename from migration/block-migration.c
rename to migration/block.c
diff --git a/migration/migration-exec.c b/migration/exec.c
similarity index 100%
rename from migration/migration-exec.c
rename to migration/exec.c
diff --git a/migration/migration-fd.c b/migration/fd.c
similarity index 100%
rename from migration/migration-fd.c
rename to migration/fd.c
diff --git a/migration/migration-rdma.c b/migration/rdma.c
similarity index 100%
rename from migration/migration-rdma.c
rename to migration/rdma.c
diff --git a/migration/migration-tcp.c b/migration/tcp.c
similarity index 100%
rename from migration/migration-tcp.c
rename to migration/tcp.c
diff --git a/migration/migration-unix.c b/migration/unix.c
similarity index 100%
rename from migration/migration-unix.c
rename to migration/unix.c
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PATCH v3 3/5] Split struct QEMUFile out
  2014-12-12 11:13 [Qemu-devel] [PATCH v3 0/5] More migration file cleanup Dr. David Alan Gilbert (git)
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 1/5] Start migrating migration code into a migration directory Dr. David Alan Gilbert (git)
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 2/5] Remove migration- pre/post fixes off files in migration/ dir Dr. David Alan Gilbert (git)
@ 2014-12-12 11:13 ` Dr. David Alan Gilbert (git)
  2014-12-18  1:11   ` David Gibson
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 4/5] Split the QEMU buffered file code out Dr. David Alan Gilbert (git)
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 5/5] MAINTAINERS: Update for migrated migration code Dr. David Alan Gilbert (git)
  4 siblings, 1 reply; 15+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2014-12-12 11:13 UTC (permalink / raw)
  To: qemu-devel; +Cc: amit.shah, peter.maydell, quintela

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

Now we've got multiple QEMUFile source files, some of them need
access to things that were defined in qemu-file.c, so create
a -internal header for them.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 migration/qemu-file-internal.h | 53 ++++++++++++++++++++++++++++++++++++++++++
 migration/qemu-file.c          | 23 +-----------------
 2 files changed, 54 insertions(+), 22 deletions(-)
 create mode 100644 migration/qemu-file-internal.h

diff --git a/migration/qemu-file-internal.h b/migration/qemu-file-internal.h
new file mode 100644
index 0000000..d95e853
--- /dev/null
+++ b/migration/qemu-file-internal.h
@@ -0,0 +1,53 @@
+/*
+ * QEMU System Emulator
+ *
+ * Copyright (c) 2003-2008 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef QEMU_FILE_INTERNAL_H
+#define QEMU_FILE_INTERNAL_H 1
+
+#include "qemu-common.h"
+#include "qemu/iov.h"
+
+#define IO_BUF_SIZE 32768
+#define MAX_IOV_SIZE MIN(IOV_MAX, 64)
+
+struct QEMUFile {
+    const QEMUFileOps *ops;
+    void *opaque;
+
+    int64_t bytes_xfer;
+    int64_t xfer_limit;
+
+    int64_t pos; /* start of buffer when writing, end of buffer
+                    when reading */
+    int buf_index;
+    int buf_size; /* 0 when writing */
+    uint8_t buf[IO_BUF_SIZE];
+
+    struct iovec iov[MAX_IOV_SIZE];
+    unsigned int iovcnt;
+
+    int last_error;
+};
+
+#endif
diff --git a/migration/qemu-file.c b/migration/qemu-file.c
index f938e36..671fba9 100644
--- a/migration/qemu-file.c
+++ b/migration/qemu-file.c
@@ -27,30 +27,9 @@
 #include "block/coroutine.h"
 #include "migration/migration.h"
 #include "migration/qemu-file.h"
+#include "migration/qemu-file-internal.h"
 #include "trace.h"
 
-#define IO_BUF_SIZE 32768
-#define MAX_IOV_SIZE MIN(IOV_MAX, 64)
-
-struct QEMUFile {
-    const QEMUFileOps *ops;
-    void *opaque;
-
-    int64_t bytes_xfer;
-    int64_t xfer_limit;
-
-    int64_t pos; /* start of buffer when writing, end of buffer
-                    when reading */
-    int buf_index;
-    int buf_size; /* 0 when writing */
-    uint8_t buf[IO_BUF_SIZE];
-
-    struct iovec iov[MAX_IOV_SIZE];
-    unsigned int iovcnt;
-
-    int last_error;
-};
-
 bool qemu_file_mode_is_not_valid(const char *mode)
 {
     if (mode == NULL ||
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PATCH v3 4/5] Split the QEMU buffered file code out
  2014-12-12 11:13 [Qemu-devel] [PATCH v3 0/5] More migration file cleanup Dr. David Alan Gilbert (git)
                   ` (2 preceding siblings ...)
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 3/5] Split struct QEMUFile out Dr. David Alan Gilbert (git)
@ 2014-12-12 11:13 ` Dr. David Alan Gilbert (git)
  2014-12-18  1:13   ` David Gibson
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 5/5] MAINTAINERS: Update for migrated migration code Dr. David Alan Gilbert (git)
  4 siblings, 1 reply; 15+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2014-12-12 11:13 UTC (permalink / raw)
  To: qemu-devel; +Cc: amit.shah, peter.maydell, quintela

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

The splitting of qemu-file and addition of the buffered file landed
at the same time; so now split the buffered file code out.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 migration/Makefile.objs   |   2 +-
 migration/qemu-file-buf.c | 486 ++++++++++++++++++++++++++++++++++++++++++++++
 migration/qemu-file.c     | 455 -------------------------------------------
 tests/Makefile            |   3 +-
 4 files changed, 489 insertions(+), 457 deletions(-)
 create mode 100644 migration/qemu-file-buf.c

diff --git a/migration/Makefile.objs b/migration/Makefile.objs
index ce1e3c7..d929e96 100644
--- a/migration/Makefile.objs
+++ b/migration/Makefile.objs
@@ -1,6 +1,6 @@
 common-obj-y += migration.o tcp.o
 common-obj-y += vmstate.o
-common-obj-y += qemu-file.o qemu-file-unix.o qemu-file-stdio.o
+common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o
 common-obj-y += xbzrle.o
 
 common-obj-$(CONFIG_RDMA) += rdma.o
diff --git a/migration/qemu-file-buf.c b/migration/qemu-file-buf.c
new file mode 100644
index 0000000..d33dd44
--- /dev/null
+++ b/migration/qemu-file-buf.c
@@ -0,0 +1,486 @@
+/*
+ * QEMU System Emulator
+ *
+ * Copyright (c) 2003-2008 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include "qemu-common.h"
+#include "qemu/iov.h"
+#include "qemu/sockets.h"
+#include "block/coroutine.h"
+#include "migration/migration.h"
+#include "migration/qemu-file.h"
+#include "migration/qemu-file-internal.h"
+#include "trace.h"
+
+#define QSB_CHUNK_SIZE      (1 << 10)
+#define QSB_MAX_CHUNK_SIZE  (16 * QSB_CHUNK_SIZE)
+
+/**
+ * Create a QEMUSizedBuffer
+ * This type of buffer uses scatter-gather lists internally and
+ * can grow to any size. Any data array in the scatter-gather list
+ * can hold different amount of bytes.
+ *
+ * @buffer: Optional buffer to copy into the QSB
+ * @len: size of initial buffer; if @buffer is given, buffer must
+ *       hold at least len bytes
+ *
+ * Returns a pointer to a QEMUSizedBuffer or NULL on allocation failure
+ */
+QEMUSizedBuffer *qsb_create(const uint8_t *buffer, size_t len)
+{
+    QEMUSizedBuffer *qsb;
+    size_t alloc_len, num_chunks, i, to_copy;
+    size_t chunk_size = (len > QSB_MAX_CHUNK_SIZE)
+                        ? QSB_MAX_CHUNK_SIZE
+                        : QSB_CHUNK_SIZE;
+
+    num_chunks = DIV_ROUND_UP(len ? len : QSB_CHUNK_SIZE, chunk_size);
+    alloc_len = num_chunks * chunk_size;
+
+    qsb = g_try_new0(QEMUSizedBuffer, 1);
+    if (!qsb) {
+        return NULL;
+    }
+
+    qsb->iov = g_try_new0(struct iovec, num_chunks);
+    if (!qsb->iov) {
+        g_free(qsb);
+        return NULL;
+    }
+
+    qsb->n_iov = num_chunks;
+
+    for (i = 0; i < num_chunks; i++) {
+        qsb->iov[i].iov_base = g_try_malloc0(chunk_size);
+        if (!qsb->iov[i].iov_base) {
+            /* qsb_free is safe since g_free can cope with NULL */
+            qsb_free(qsb);
+            return NULL;
+        }
+
+        qsb->iov[i].iov_len = chunk_size;
+        if (buffer) {
+            to_copy = (len - qsb->used) > chunk_size
+                      ? chunk_size : (len - qsb->used);
+            memcpy(qsb->iov[i].iov_base, &buffer[qsb->used], to_copy);
+            qsb->used += to_copy;
+        }
+    }
+
+    qsb->size = alloc_len;
+
+    return qsb;
+}
+
+/**
+ * Free the QEMUSizedBuffer
+ *
+ * @qsb: The QEMUSizedBuffer to free
+ */
+void qsb_free(QEMUSizedBuffer *qsb)
+{
+    size_t i;
+
+    if (!qsb) {
+        return;
+    }
+
+    for (i = 0; i < qsb->n_iov; i++) {
+        g_free(qsb->iov[i].iov_base);
+    }
+    g_free(qsb->iov);
+    g_free(qsb);
+}
+
+/**
+ * Get the number of used bytes in the QEMUSizedBuffer
+ *
+ * @qsb: A QEMUSizedBuffer
+ *
+ * Returns the number of bytes currently used in this buffer
+ */
+size_t qsb_get_length(const QEMUSizedBuffer *qsb)
+{
+    return qsb->used;
+}
+
+/**
+ * Set the length of the buffer; the primary usage of this
+ * function is to truncate the number of used bytes in the buffer.
+ * The size will not be extended beyond the current number of
+ * allocated bytes in the QEMUSizedBuffer.
+ *
+ * @qsb: A QEMUSizedBuffer
+ * @new_len: The new length of bytes in the buffer
+ *
+ * Returns the number of bytes the buffer was truncated or extended
+ * to.
+ */
+size_t qsb_set_length(QEMUSizedBuffer *qsb, size_t new_len)
+{
+    if (new_len <= qsb->size) {
+        qsb->used = new_len;
+    } else {
+        qsb->used = qsb->size;
+    }
+    return qsb->used;
+}
+
+/**
+ * Get the iovec that holds the data for a given position @pos.
+ *
+ * @qsb: A QEMUSizedBuffer
+ * @pos: The index of a byte in the buffer
+ * @d_off: Pointer to an offset that this function will indicate
+ *         at what position within the returned iovec the byte
+ *         is to be found
+ *
+ * Returns the index of the iovec that holds the byte at the given
+ * index @pos in the byte stream; a negative number if the iovec
+ * for the given position @pos does not exist.
+ */
+static ssize_t qsb_get_iovec(const QEMUSizedBuffer *qsb,
+                             off_t pos, off_t *d_off)
+{
+    ssize_t i;
+    off_t curr = 0;
+
+    if (pos > qsb->used) {
+        return -1;
+    }
+
+    for (i = 0; i < qsb->n_iov; i++) {
+        if (curr + qsb->iov[i].iov_len > pos) {
+            *d_off = pos - curr;
+            return i;
+        }
+        curr += qsb->iov[i].iov_len;
+    }
+    return -1;
+}
+
+/*
+ * Convert the QEMUSizedBuffer into a flat buffer.
+ *
+ * Note: If at all possible, try to avoid this function since it
+ *       may unnecessarily copy memory around.
+ *
+ * @qsb: pointer to QEMUSizedBuffer
+ * @start: offset to start at
+ * @count: number of bytes to copy
+ * @buf: a pointer to a buffer to write into (at least @count bytes)
+ *
+ * Returns the number of bytes copied into the output buffer
+ */
+ssize_t qsb_get_buffer(const QEMUSizedBuffer *qsb, off_t start,
+                       size_t count, uint8_t *buffer)
+{
+    const struct iovec *iov;
+    size_t to_copy, all_copy;
+    ssize_t index;
+    off_t s_off;
+    off_t d_off = 0;
+    char *s;
+
+    if (start > qsb->used) {
+        return 0;
+    }
+
+    all_copy = qsb->used - start;
+    if (all_copy > count) {
+        all_copy = count;
+    } else {
+        count = all_copy;
+    }
+
+    index = qsb_get_iovec(qsb, start, &s_off);
+    if (index < 0) {
+        return 0;
+    }
+
+    while (all_copy > 0) {
+        iov = &qsb->iov[index];
+
+        s = iov->iov_base;
+
+        to_copy = iov->iov_len - s_off;
+        if (to_copy > all_copy) {
+            to_copy = all_copy;
+        }
+        memcpy(&buffer[d_off], &s[s_off], to_copy);
+
+        d_off += to_copy;
+        all_copy -= to_copy;
+
+        s_off = 0;
+        index++;
+    }
+
+    return count;
+}
+
+/**
+ * Grow the QEMUSizedBuffer to the given size and allocate
+ * memory for it.
+ *
+ * @qsb: A QEMUSizedBuffer
+ * @new_size: The new size of the buffer
+ *
+ * Return:
+ *    a negative error code in case of memory allocation failure
+ * or
+ *    the new size of the buffer. The returned size may be greater or equal
+ *    to @new_size.
+ */
+static ssize_t qsb_grow(QEMUSizedBuffer *qsb, size_t new_size)
+{
+    size_t needed_chunks, i;
+
+    if (qsb->size < new_size) {
+        struct iovec *new_iov;
+        size_t size_diff = new_size - qsb->size;
+        size_t chunk_size = (size_diff > QSB_MAX_CHUNK_SIZE)
+                             ? QSB_MAX_CHUNK_SIZE : QSB_CHUNK_SIZE;
+
+        needed_chunks = DIV_ROUND_UP(size_diff, chunk_size);
+
+        new_iov = g_try_new(struct iovec, qsb->n_iov + needed_chunks);
+        if (new_iov == NULL) {
+            return -ENOMEM;
+        }
+
+        /* Allocate new chunks as needed into new_iov */
+        for (i = qsb->n_iov; i < qsb->n_iov + needed_chunks; i++) {
+            new_iov[i].iov_base = g_try_malloc0(chunk_size);
+            new_iov[i].iov_len = chunk_size;
+            if (!new_iov[i].iov_base) {
+                size_t j;
+
+                /* Free previously allocated new chunks */
+                for (j = qsb->n_iov; j < i; j++) {
+                    g_free(new_iov[j].iov_base);
+                }
+                g_free(new_iov);
+
+                return -ENOMEM;
+            }
+        }
+
+        /*
+         * Now we can't get any allocation errors, copy over to new iov
+         * and switch.
+         */
+        for (i = 0; i < qsb->n_iov; i++) {
+            new_iov[i] = qsb->iov[i];
+        }
+
+        qsb->n_iov += needed_chunks;
+        g_free(qsb->iov);
+        qsb->iov = new_iov;
+        qsb->size += (needed_chunks * chunk_size);
+    }
+
+    return qsb->size;
+}
+
+/**
+ * Write into the QEMUSizedBuffer at a given position and a given
+ * number of bytes. This function will automatically grow the
+ * QEMUSizedBuffer.
+ *
+ * @qsb: A QEMUSizedBuffer
+ * @source: A byte array to copy data from
+ * @pos: The position within the @qsb to write data to
+ * @size: The number of bytes to copy into the @qsb
+ *
+ * Returns @size or a negative error code in case of memory allocation failure,
+ *           or with an invalid 'pos'
+ */
+ssize_t qsb_write_at(QEMUSizedBuffer *qsb, const uint8_t *source,
+                     off_t pos, size_t count)
+{
+    ssize_t rc = qsb_grow(qsb, pos + count);
+    size_t to_copy;
+    size_t all_copy = count;
+    const struct iovec *iov;
+    ssize_t index;
+    char *dest;
+    off_t d_off, s_off = 0;
+
+    if (rc < 0) {
+        return rc;
+    }
+
+    if (pos + count > qsb->used) {
+        qsb->used = pos + count;
+    }
+
+    index = qsb_get_iovec(qsb, pos, &d_off);
+    if (index < 0) {
+        return -EINVAL;
+    }
+
+    while (all_copy > 0) {
+        iov = &qsb->iov[index];
+
+        dest = iov->iov_base;
+
+        to_copy = iov->iov_len - d_off;
+        if (to_copy > all_copy) {
+            to_copy = all_copy;
+        }
+
+        memcpy(&dest[d_off], &source[s_off], to_copy);
+
+        s_off += to_copy;
+        all_copy -= to_copy;
+
+        d_off = 0;
+        index++;
+    }
+
+    return count;
+}
+
+/**
+ * Create a deep copy of the given QEMUSizedBuffer.
+ *
+ * @qsb: A QEMUSizedBuffer
+ *
+ * Returns a clone of @qsb or NULL on allocation failure
+ */
+QEMUSizedBuffer *qsb_clone(const QEMUSizedBuffer *qsb)
+{
+    QEMUSizedBuffer *out = qsb_create(NULL, qsb_get_length(qsb));
+    size_t i;
+    ssize_t res;
+    off_t pos = 0;
+
+    if (!out) {
+        return NULL;
+    }
+
+    for (i = 0; i < qsb->n_iov; i++) {
+        res =  qsb_write_at(out, qsb->iov[i].iov_base,
+                            pos, qsb->iov[i].iov_len);
+        if (res < 0) {
+            qsb_free(out);
+            return NULL;
+        }
+        pos += res;
+    }
+
+    return out;
+}
+
+typedef struct QEMUBuffer {
+    QEMUSizedBuffer *qsb;
+    QEMUFile *file;
+} QEMUBuffer;
+
+static int buf_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
+{
+    QEMUBuffer *s = opaque;
+    ssize_t len = qsb_get_length(s->qsb) - pos;
+
+    if (len <= 0) {
+        return 0;
+    }
+
+    if (len > size) {
+        len = size;
+    }
+    return qsb_get_buffer(s->qsb, pos, len, buf);
+}
+
+static int buf_put_buffer(void *opaque, const uint8_t *buf,
+                          int64_t pos, int size)
+{
+    QEMUBuffer *s = opaque;
+
+    return qsb_write_at(s->qsb, buf, pos, size);
+}
+
+static int buf_close(void *opaque)
+{
+    QEMUBuffer *s = opaque;
+
+    qsb_free(s->qsb);
+
+    g_free(s);
+
+    return 0;
+}
+
+const QEMUSizedBuffer *qemu_buf_get(QEMUFile *f)
+{
+    QEMUBuffer *p;
+
+    qemu_fflush(f);
+
+    p = f->opaque;
+
+    return p->qsb;
+}
+
+static const QEMUFileOps buf_read_ops = {
+    .get_buffer = buf_get_buffer,
+    .close =      buf_close,
+};
+
+static const QEMUFileOps buf_write_ops = {
+    .put_buffer = buf_put_buffer,
+    .close =      buf_close,
+};
+
+QEMUFile *qemu_bufopen(const char *mode, QEMUSizedBuffer *input)
+{
+    QEMUBuffer *s;
+
+    if (mode == NULL || (mode[0] != 'r' && mode[0] != 'w') ||
+        mode[1] != '\0') {
+        error_report("qemu_bufopen: Argument validity check failed");
+        return NULL;
+    }
+
+    s = g_malloc0(sizeof(QEMUBuffer));
+    if (mode[0] == 'r') {
+        s->qsb = input;
+    }
+
+    if (s->qsb == NULL) {
+        s->qsb = qsb_create(NULL, 0);
+    }
+    if (!s->qsb) {
+        g_free(s);
+        error_report("qemu_bufopen: qsb_create failed");
+        return NULL;
+    }
+
+
+    if (mode[0] == 'r') {
+        s->file = qemu_fopen_ops(s, &buf_read_ops);
+    } else {
+        s->file = qemu_fopen_ops(s, &buf_write_ops);
+    }
+    return s->file;
+}
diff --git a/migration/qemu-file.c b/migration/qemu-file.c
index 671fba9..d2d4007 100644
--- a/migration/qemu-file.c
+++ b/migration/qemu-file.c
@@ -517,458 +517,3 @@ uint64_t qemu_get_be64(QEMUFile *f)
     v |= qemu_get_be32(f);
     return v;
 }
-
-#define QSB_CHUNK_SIZE      (1 << 10)
-#define QSB_MAX_CHUNK_SIZE  (16 * QSB_CHUNK_SIZE)
-
-/**
- * Create a QEMUSizedBuffer
- * This type of buffer uses scatter-gather lists internally and
- * can grow to any size. Any data array in the scatter-gather list
- * can hold different amount of bytes.
- *
- * @buffer: Optional buffer to copy into the QSB
- * @len: size of initial buffer; if @buffer is given, buffer must
- *       hold at least len bytes
- *
- * Returns a pointer to a QEMUSizedBuffer or NULL on allocation failure
- */
-QEMUSizedBuffer *qsb_create(const uint8_t *buffer, size_t len)
-{
-    QEMUSizedBuffer *qsb;
-    size_t alloc_len, num_chunks, i, to_copy;
-    size_t chunk_size = (len > QSB_MAX_CHUNK_SIZE)
-                        ? QSB_MAX_CHUNK_SIZE
-                        : QSB_CHUNK_SIZE;
-
-    num_chunks = DIV_ROUND_UP(len ? len : QSB_CHUNK_SIZE, chunk_size);
-    alloc_len = num_chunks * chunk_size;
-
-    qsb = g_try_new0(QEMUSizedBuffer, 1);
-    if (!qsb) {
-        return NULL;
-    }
-
-    qsb->iov = g_try_new0(struct iovec, num_chunks);
-    if (!qsb->iov) {
-        g_free(qsb);
-        return NULL;
-    }
-
-    qsb->n_iov = num_chunks;
-
-    for (i = 0; i < num_chunks; i++) {
-        qsb->iov[i].iov_base = g_try_malloc0(chunk_size);
-        if (!qsb->iov[i].iov_base) {
-            /* qsb_free is safe since g_free can cope with NULL */
-            qsb_free(qsb);
-            return NULL;
-        }
-
-        qsb->iov[i].iov_len = chunk_size;
-        if (buffer) {
-            to_copy = (len - qsb->used) > chunk_size
-                      ? chunk_size : (len - qsb->used);
-            memcpy(qsb->iov[i].iov_base, &buffer[qsb->used], to_copy);
-            qsb->used += to_copy;
-        }
-    }
-
-    qsb->size = alloc_len;
-
-    return qsb;
-}
-
-/**
- * Free the QEMUSizedBuffer
- *
- * @qsb: The QEMUSizedBuffer to free
- */
-void qsb_free(QEMUSizedBuffer *qsb)
-{
-    size_t i;
-
-    if (!qsb) {
-        return;
-    }
-
-    for (i = 0; i < qsb->n_iov; i++) {
-        g_free(qsb->iov[i].iov_base);
-    }
-    g_free(qsb->iov);
-    g_free(qsb);
-}
-
-/**
- * Get the number of used bytes in the QEMUSizedBuffer
- *
- * @qsb: A QEMUSizedBuffer
- *
- * Returns the number of bytes currently used in this buffer
- */
-size_t qsb_get_length(const QEMUSizedBuffer *qsb)
-{
-    return qsb->used;
-}
-
-/**
- * Set the length of the buffer; the primary usage of this
- * function is to truncate the number of used bytes in the buffer.
- * The size will not be extended beyond the current number of
- * allocated bytes in the QEMUSizedBuffer.
- *
- * @qsb: A QEMUSizedBuffer
- * @new_len: The new length of bytes in the buffer
- *
- * Returns the number of bytes the buffer was truncated or extended
- * to.
- */
-size_t qsb_set_length(QEMUSizedBuffer *qsb, size_t new_len)
-{
-    if (new_len <= qsb->size) {
-        qsb->used = new_len;
-    } else {
-        qsb->used = qsb->size;
-    }
-    return qsb->used;
-}
-
-/**
- * Get the iovec that holds the data for a given position @pos.
- *
- * @qsb: A QEMUSizedBuffer
- * @pos: The index of a byte in the buffer
- * @d_off: Pointer to an offset that this function will indicate
- *         at what position within the returned iovec the byte
- *         is to be found
- *
- * Returns the index of the iovec that holds the byte at the given
- * index @pos in the byte stream; a negative number if the iovec
- * for the given position @pos does not exist.
- */
-static ssize_t qsb_get_iovec(const QEMUSizedBuffer *qsb,
-                             off_t pos, off_t *d_off)
-{
-    ssize_t i;
-    off_t curr = 0;
-
-    if (pos > qsb->used) {
-        return -1;
-    }
-
-    for (i = 0; i < qsb->n_iov; i++) {
-        if (curr + qsb->iov[i].iov_len > pos) {
-            *d_off = pos - curr;
-            return i;
-        }
-        curr += qsb->iov[i].iov_len;
-    }
-    return -1;
-}
-
-/*
- * Convert the QEMUSizedBuffer into a flat buffer.
- *
- * Note: If at all possible, try to avoid this function since it
- *       may unnecessarily copy memory around.
- *
- * @qsb: pointer to QEMUSizedBuffer
- * @start: offset to start at
- * @count: number of bytes to copy
- * @buf: a pointer to a buffer to write into (at least @count bytes)
- *
- * Returns the number of bytes copied into the output buffer
- */
-ssize_t qsb_get_buffer(const QEMUSizedBuffer *qsb, off_t start,
-                       size_t count, uint8_t *buffer)
-{
-    const struct iovec *iov;
-    size_t to_copy, all_copy;
-    ssize_t index;
-    off_t s_off;
-    off_t d_off = 0;
-    char *s;
-
-    if (start > qsb->used) {
-        return 0;
-    }
-
-    all_copy = qsb->used - start;
-    if (all_copy > count) {
-        all_copy = count;
-    } else {
-        count = all_copy;
-    }
-
-    index = qsb_get_iovec(qsb, start, &s_off);
-    if (index < 0) {
-        return 0;
-    }
-
-    while (all_copy > 0) {
-        iov = &qsb->iov[index];
-
-        s = iov->iov_base;
-
-        to_copy = iov->iov_len - s_off;
-        if (to_copy > all_copy) {
-            to_copy = all_copy;
-        }
-        memcpy(&buffer[d_off], &s[s_off], to_copy);
-
-        d_off += to_copy;
-        all_copy -= to_copy;
-
-        s_off = 0;
-        index++;
-    }
-
-    return count;
-}
-
-/**
- * Grow the QEMUSizedBuffer to the given size and allocate
- * memory for it.
- *
- * @qsb: A QEMUSizedBuffer
- * @new_size: The new size of the buffer
- *
- * Return:
- *    a negative error code in case of memory allocation failure
- * or
- *    the new size of the buffer. The returned size may be greater or equal
- *    to @new_size.
- */
-static ssize_t qsb_grow(QEMUSizedBuffer *qsb, size_t new_size)
-{
-    size_t needed_chunks, i;
-
-    if (qsb->size < new_size) {
-        struct iovec *new_iov;
-        size_t size_diff = new_size - qsb->size;
-        size_t chunk_size = (size_diff > QSB_MAX_CHUNK_SIZE)
-                             ? QSB_MAX_CHUNK_SIZE : QSB_CHUNK_SIZE;
-
-        needed_chunks = DIV_ROUND_UP(size_diff, chunk_size);
-
-        new_iov = g_try_new(struct iovec, qsb->n_iov + needed_chunks);
-        if (new_iov == NULL) {
-            return -ENOMEM;
-        }
-
-        /* Allocate new chunks as needed into new_iov */
-        for (i = qsb->n_iov; i < qsb->n_iov + needed_chunks; i++) {
-            new_iov[i].iov_base = g_try_malloc0(chunk_size);
-            new_iov[i].iov_len = chunk_size;
-            if (!new_iov[i].iov_base) {
-                size_t j;
-
-                /* Free previously allocated new chunks */
-                for (j = qsb->n_iov; j < i; j++) {
-                    g_free(new_iov[j].iov_base);
-                }
-                g_free(new_iov);
-
-                return -ENOMEM;
-            }
-        }
-
-        /*
-         * Now we can't get any allocation errors, copy over to new iov
-         * and switch.
-         */
-        for (i = 0; i < qsb->n_iov; i++) {
-            new_iov[i] = qsb->iov[i];
-        }
-
-        qsb->n_iov += needed_chunks;
-        g_free(qsb->iov);
-        qsb->iov = new_iov;
-        qsb->size += (needed_chunks * chunk_size);
-    }
-
-    return qsb->size;
-}
-
-/**
- * Write into the QEMUSizedBuffer at a given position and a given
- * number of bytes. This function will automatically grow the
- * QEMUSizedBuffer.
- *
- * @qsb: A QEMUSizedBuffer
- * @source: A byte array to copy data from
- * @pos: The position within the @qsb to write data to
- * @size: The number of bytes to copy into the @qsb
- *
- * Returns @size or a negative error code in case of memory allocation failure,
- *           or with an invalid 'pos'
- */
-ssize_t qsb_write_at(QEMUSizedBuffer *qsb, const uint8_t *source,
-                     off_t pos, size_t count)
-{
-    ssize_t rc = qsb_grow(qsb, pos + count);
-    size_t to_copy;
-    size_t all_copy = count;
-    const struct iovec *iov;
-    ssize_t index;
-    char *dest;
-    off_t d_off, s_off = 0;
-
-    if (rc < 0) {
-        return rc;
-    }
-
-    if (pos + count > qsb->used) {
-        qsb->used = pos + count;
-    }
-
-    index = qsb_get_iovec(qsb, pos, &d_off);
-    if (index < 0) {
-        return -EINVAL;
-    }
-
-    while (all_copy > 0) {
-        iov = &qsb->iov[index];
-
-        dest = iov->iov_base;
-
-        to_copy = iov->iov_len - d_off;
-        if (to_copy > all_copy) {
-            to_copy = all_copy;
-        }
-
-        memcpy(&dest[d_off], &source[s_off], to_copy);
-
-        s_off += to_copy;
-        all_copy -= to_copy;
-
-        d_off = 0;
-        index++;
-    }
-
-    return count;
-}
-
-/**
- * Create a deep copy of the given QEMUSizedBuffer.
- *
- * @qsb: A QEMUSizedBuffer
- *
- * Returns a clone of @qsb or NULL on allocation failure
- */
-QEMUSizedBuffer *qsb_clone(const QEMUSizedBuffer *qsb)
-{
-    QEMUSizedBuffer *out = qsb_create(NULL, qsb_get_length(qsb));
-    size_t i;
-    ssize_t res;
-    off_t pos = 0;
-
-    if (!out) {
-        return NULL;
-    }
-
-    for (i = 0; i < qsb->n_iov; i++) {
-        res =  qsb_write_at(out, qsb->iov[i].iov_base,
-                            pos, qsb->iov[i].iov_len);
-        if (res < 0) {
-            qsb_free(out);
-            return NULL;
-        }
-        pos += res;
-    }
-
-    return out;
-}
-
-typedef struct QEMUBuffer {
-    QEMUSizedBuffer *qsb;
-    QEMUFile *file;
-} QEMUBuffer;
-
-static int buf_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
-{
-    QEMUBuffer *s = opaque;
-    ssize_t len = qsb_get_length(s->qsb) - pos;
-
-    if (len <= 0) {
-        return 0;
-    }
-
-    if (len > size) {
-        len = size;
-    }
-    return qsb_get_buffer(s->qsb, pos, len, buf);
-}
-
-static int buf_put_buffer(void *opaque, const uint8_t *buf,
-                          int64_t pos, int size)
-{
-    QEMUBuffer *s = opaque;
-
-    return qsb_write_at(s->qsb, buf, pos, size);
-}
-
-static int buf_close(void *opaque)
-{
-    QEMUBuffer *s = opaque;
-
-    qsb_free(s->qsb);
-
-    g_free(s);
-
-    return 0;
-}
-
-const QEMUSizedBuffer *qemu_buf_get(QEMUFile *f)
-{
-    QEMUBuffer *p;
-
-    qemu_fflush(f);
-
-    p = f->opaque;
-
-    return p->qsb;
-}
-
-static const QEMUFileOps buf_read_ops = {
-    .get_buffer = buf_get_buffer,
-    .close =      buf_close,
-};
-
-static const QEMUFileOps buf_write_ops = {
-    .put_buffer = buf_put_buffer,
-    .close =      buf_close,
-};
-
-QEMUFile *qemu_bufopen(const char *mode, QEMUSizedBuffer *input)
-{
-    QEMUBuffer *s;
-
-    if (mode == NULL || (mode[0] != 'r' && mode[0] != 'w') ||
-        mode[1] != '\0') {
-        error_report("qemu_bufopen: Argument validity check failed");
-        return NULL;
-    }
-
-    s = g_malloc0(sizeof(QEMUBuffer));
-    if (mode[0] == 'r') {
-        s->qsb = input;
-    }
-
-    if (s->qsb == NULL) {
-        s->qsb = qsb_create(NULL, 0);
-    }
-    if (!s->qsb) {
-        g_free(s);
-        error_report("qemu_bufopen: qsb_create failed");
-        return NULL;
-    }
-
-
-    if (mode[0] == 'r') {
-        s->file = qemu_fopen_ops(s, &buf_read_ops);
-    } else {
-        s->file = qemu_fopen_ops(s, &buf_write_ops);
-    }
-    return s->file;
-}
diff --git a/tests/Makefile b/tests/Makefile
index faba9cb..e4ddb6a 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -260,7 +260,8 @@ tests/test-qdev-global-props$(EXESUF): tests/test-qdev-global-props.o \
 	$(test-qapi-obj-y) \
 	libqemuutil.a libqemustub.a
 tests/test-vmstate$(EXESUF): tests/test-vmstate.o \
-	migration/vmstate.o migration/qemu-file.o migration/qemu-file-unix.o \
+	migration/vmstate.o migration/qemu-file.o migration/qemu-file-buf.o \
+        migration/qemu-file-unix.o \
 	libqemuutil.a libqemustub.a
 
 tests/test-qapi-types.c tests/test-qapi-types.h :\
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [Qemu-devel] [PATCH v3 5/5] MAINTAINERS: Update for migrated migration code
  2014-12-12 11:13 [Qemu-devel] [PATCH v3 0/5] More migration file cleanup Dr. David Alan Gilbert (git)
                   ` (3 preceding siblings ...)
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 4/5] Split the QEMU buffered file code out Dr. David Alan Gilbert (git)
@ 2014-12-12 11:13 ` Dr. David Alan Gilbert (git)
  2014-12-18  1:13   ` David Gibson
  4 siblings, 1 reply; 15+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2014-12-12 11:13 UTC (permalink / raw)
  To: qemu-devel; +Cc: amit.shah, peter.maydell, quintela

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

My previous patches migrated the migration code into migration/
but didn't update MAINTAINERS.

Note that does mean that the owner for block-migration.c
changes, but I'll ask block people what they want to do.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 MAINTAINERS | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index bcb69e8..ef88076 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -930,10 +930,9 @@ Migration
 M: Juan Quintela <quintela@redhat.com>
 S: Maintained
 F: include/migration/
-F: migration*
+F: migration/
 F: savevm.c
 F: arch_init.c
-F: vmstate.c
 
 Seccomp
 M: Eduardo Otubo <eduardo.otubo@profitbricks.com>
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [Qemu-devel] [PATCH v3 1/5] Start migrating migration code into a migration directory
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 1/5] Start migrating migration code into a migration directory Dr. David Alan Gilbert (git)
@ 2014-12-18  1:10   ` David Gibson
  0 siblings, 0 replies; 15+ messages in thread
From: David Gibson @ 2014-12-18  1:10 UTC (permalink / raw)
  To: Dr. David Alan Gilbert (git)
  Cc: amit.shah, peter.maydell, qemu-devel, quintela

[-- Attachment #1: Type: text/plain, Size: 1142 bytes --]

On Fri, Dec 12, 2014 at 11:13:38AM +0000, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> The migration code now occupies a fair chunk of the top level .c
> files, it seems time to give it it's own directory.
> 
> I've not touched:
>    arch_init.c - that's mostly RAM migration but has a few random other
>                  bits
>    savevm.c    - because it's built target specific
> 
> This is purely a code move; no code has changed.
>    - it fails checkpatch because of old violations, it feels safer
>      to keep this as purely a move and fix those at some mythical future
>      date.
> 
> The xbzrle and vmstate tests are now only run for softmmu builds
> since they require files in the migrate/ directory which is only built
> for softmmu.
> 
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [Qemu-devel] [PATCH v3 2/5] Remove migration- pre/post fixes off files in migration/ dir
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 2/5] Remove migration- pre/post fixes off files in migration/ dir Dr. David Alan Gilbert (git)
@ 2014-12-18  1:10   ` David Gibson
  0 siblings, 0 replies; 15+ messages in thread
From: David Gibson @ 2014-12-18  1:10 UTC (permalink / raw)
  To: Dr. David Alan Gilbert (git)
  Cc: amit.shah, peter.maydell, qemu-devel, quintela

[-- Attachment #1: Type: text/plain, Size: 540 bytes --]

On Fri, Dec 12, 2014 at 11:13:39AM +0000, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> The general feeling is that having migration/migration-blah
> is overkill.
> 
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [Qemu-devel] [PATCH v3 3/5] Split struct QEMUFile out
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 3/5] Split struct QEMUFile out Dr. David Alan Gilbert (git)
@ 2014-12-18  1:11   ` David Gibson
  0 siblings, 0 replies; 15+ messages in thread
From: David Gibson @ 2014-12-18  1:11 UTC (permalink / raw)
  To: Dr. David Alan Gilbert (git)
  Cc: amit.shah, peter.maydell, qemu-devel, quintela

[-- Attachment #1: Type: text/plain, Size: 624 bytes --]

On Fri, Dec 12, 2014 at 11:13:40AM +0000, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> Now we've got multiple QEMUFile source files, some of them need
> access to things that were defined in qemu-file.c, so create
> a -internal header for them.
> 
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/5] Split the QEMU buffered file code out
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 4/5] Split the QEMU buffered file code out Dr. David Alan Gilbert (git)
@ 2014-12-18  1:13   ` David Gibson
  2014-12-18  9:24     ` Dr. David Alan Gilbert
  0 siblings, 1 reply; 15+ messages in thread
From: David Gibson @ 2014-12-18  1:13 UTC (permalink / raw)
  To: Dr. David Alan Gilbert (git)
  Cc: amit.shah, peter.maydell, qemu-devel, quintela

[-- Attachment #1: Type: text/plain, Size: 1770 bytes --]

On Fri, Dec 12, 2014 at 11:13:41AM +0000, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> The splitting of qemu-file and addition of the buffered file landed
> at the same time; so now split the buffered file code out.
> 
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
>  migration/Makefile.objs   |   2 +-
>  migration/qemu-file-buf.c | 486 ++++++++++++++++++++++++++++++++++++++++++++++
>  migration/qemu-file.c     | 455 -------------------------------------------
>  tests/Makefile            |   3 +-
>  4 files changed, 489 insertions(+), 457 deletions(-)
>  create mode 100644 migration/qemu-file-buf.c
> 
> diff --git a/migration/Makefile.objs b/migration/Makefile.objs
> index ce1e3c7..d929e96 100644
> --- a/migration/Makefile.objs
> +++ b/migration/Makefile.objs
> @@ -1,6 +1,6 @@
>  common-obj-y += migration.o tcp.o
>  common-obj-y += vmstate.o
> -common-obj-y += qemu-file.o qemu-file-unix.o qemu-file-stdio.o
> +common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o
>  common-obj-y += xbzrle.o
>  
>  common-obj-$(CONFIG_RDMA) += rdma.o
> diff --git a/migration/qemu-file-buf.c b/migration/qemu-file-buf.c
> new file mode 100644
> index 0000000..d33dd44
> --- /dev/null
> +++ b/migration/qemu-file-buf.c
> @@ -0,0 +1,486 @@
> +/*
> + * QEMU System Emulator
> + *
> + * Copyright (c) 2003-2008 Fabrice Bellard

Bit hard to believe that only Fabrice listed on this file is correct,
given the buffered file stuff is fairly new.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [Qemu-devel] [PATCH v3 5/5] MAINTAINERS: Update for migrated migration code
  2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 5/5] MAINTAINERS: Update for migrated migration code Dr. David Alan Gilbert (git)
@ 2014-12-18  1:13   ` David Gibson
  0 siblings, 0 replies; 15+ messages in thread
From: David Gibson @ 2014-12-18  1:13 UTC (permalink / raw)
  To: Dr. David Alan Gilbert (git)
  Cc: amit.shah, peter.maydell, qemu-devel, quintela

[-- Attachment #1: Type: text/plain, Size: 686 bytes --]

On Fri, Dec 12, 2014 at 11:13:42AM +0000, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> My previous patches migrated the migration code into migration/
> but didn't update MAINTAINERS.
> 
> Note that does mean that the owner for block-migration.c
> changes, but I'll ask block people what they want to do.
> 
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/5] Split the QEMU buffered file code out
  2014-12-18  1:13   ` David Gibson
@ 2014-12-18  9:24     ` Dr. David Alan Gilbert
  2014-12-19 13:27       ` Eduardo Habkost
  2015-01-15 16:02       ` Stefan Berger
  0 siblings, 2 replies; 15+ messages in thread
From: Dr. David Alan Gilbert @ 2014-12-18  9:24 UTC (permalink / raw)
  To: David Gibson
  Cc: peter.maydell, ehabkost, stefanb, quintela, qemu-devel,
	joel.schopp, amit.shah

* David Gibson (david@gibson.dropbear.id.au) wrote:
> On Fri, Dec 12, 2014 at 11:13:41AM +0000, Dr. David Alan Gilbert (git) wrote:
> > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> > 
> > The splitting of qemu-file and addition of the buffered file landed
> > at the same time; so now split the buffered file code out.
> > 
> > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > ---
> >  migration/Makefile.objs   |   2 +-
> >  migration/qemu-file-buf.c | 486 ++++++++++++++++++++++++++++++++++++++++++++++
> >  migration/qemu-file.c     | 455 -------------------------------------------
> >  tests/Makefile            |   3 +-
> >  4 files changed, 489 insertions(+), 457 deletions(-)
> >  create mode 100644 migration/qemu-file-buf.c
> > 
> > diff --git a/migration/Makefile.objs b/migration/Makefile.objs
> > index ce1e3c7..d929e96 100644
> > --- a/migration/Makefile.objs
> > +++ b/migration/Makefile.objs
> > @@ -1,6 +1,6 @@
> >  common-obj-y += migration.o tcp.o
> >  common-obj-y += vmstate.o
> > -common-obj-y += qemu-file.o qemu-file-unix.o qemu-file-stdio.o
> > +common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o
> >  common-obj-y += xbzrle.o
> >  
> >  common-obj-$(CONFIG_RDMA) += rdma.o
> > diff --git a/migration/qemu-file-buf.c b/migration/qemu-file-buf.c
> > new file mode 100644
> > index 0000000..d33dd44
> > --- /dev/null
> > +++ b/migration/qemu-file-buf.c
> > @@ -0,0 +1,486 @@
> > +/*
> > + * QEMU System Emulator
> > + *
> > + * Copyright (c) 2003-2008 Fabrice Bellard
> 
> Bit hard to believe that only Fabrice listed on this file is correct,
> given the buffered file stuff is fairly new.

Yes, I'd be happy to add Stefan and Joel's name to that, although
they never added it in their original patch, and when splitting files
we do normally take the copyright header from what we split out of;
but you are right it's misleading.

The ordering here as far as I can tell is:

   Stefan Berger posted it originally around March 2013
     Their patch series included a patch to split chunks of savevm.c out
     into *util*/qemu-file.c and then added this code to that.
     They kept Fabrice's copyright unchanged in their util/qemu-file.c 
     ( http://lists.gnu.org/archive/html/qemu-devel/2013-03/msg03869.html )
     These changes didn't go in.

   Eduardo Habkost split qemu-file.c out of savevm.c November 2013
     but forgot to move the copyright header over
     ( 093c455a8 )

   Eduardo Habkost added the copyright header to qemu-file.c 1st October 2014
     ( 9a4ac51f )

   My merge of Stefan and Joel's code (with my changes) goes in 10th October 2014
     ( deb22f9a446 )

   This split went in 12th December 2014
     ( 977184d )

Dave

> 
> -- 
> David Gibson			| I'll have my music baroque, and my code
> david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
> 				| _way_ _around_!
> http://www.ozlabs.org/~dgibson


--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/5] Split the QEMU buffered file code out
  2014-12-18  9:24     ` Dr. David Alan Gilbert
@ 2014-12-19 13:27       ` Eduardo Habkost
  2014-12-24 14:11         ` David Gibson
  2015-01-15 16:02       ` Stefan Berger
  1 sibling, 1 reply; 15+ messages in thread
From: Eduardo Habkost @ 2014-12-19 13:27 UTC (permalink / raw)
  To: Dr. David Alan Gilbert
  Cc: peter.maydell, quintela, stefanb, qemu-devel, joel.schopp,
	amit.shah, David Gibson

On Thu, Dec 18, 2014 at 09:24:11AM +0000, Dr. David Alan Gilbert wrote:
> * David Gibson (david@gibson.dropbear.id.au) wrote:
> > On Fri, Dec 12, 2014 at 11:13:41AM +0000, Dr. David Alan Gilbert (git) wrote:
> > > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> > > 
> > > The splitting of qemu-file and addition of the buffered file landed
> > > at the same time; so now split the buffered file code out.
> > > 
> > > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > > ---
> > >  migration/Makefile.objs   |   2 +-
> > >  migration/qemu-file-buf.c | 486 ++++++++++++++++++++++++++++++++++++++++++++++
> > >  migration/qemu-file.c     | 455 -------------------------------------------
> > >  tests/Makefile            |   3 +-
> > >  4 files changed, 489 insertions(+), 457 deletions(-)
> > >  create mode 100644 migration/qemu-file-buf.c
> > > 
> > > diff --git a/migration/Makefile.objs b/migration/Makefile.objs
> > > index ce1e3c7..d929e96 100644
> > > --- a/migration/Makefile.objs
> > > +++ b/migration/Makefile.objs
> > > @@ -1,6 +1,6 @@
> > >  common-obj-y += migration.o tcp.o
> > >  common-obj-y += vmstate.o
> > > -common-obj-y += qemu-file.o qemu-file-unix.o qemu-file-stdio.o
> > > +common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o
> > >  common-obj-y += xbzrle.o
> > >  
> > >  common-obj-$(CONFIG_RDMA) += rdma.o
> > > diff --git a/migration/qemu-file-buf.c b/migration/qemu-file-buf.c
> > > new file mode 100644
> > > index 0000000..d33dd44
> > > --- /dev/null
> > > +++ b/migration/qemu-file-buf.c
> > > @@ -0,0 +1,486 @@
> > > +/*
> > > + * QEMU System Emulator
> > > + *
> > > + * Copyright (c) 2003-2008 Fabrice Bellard
> > 
> > Bit hard to believe that only Fabrice listed on this file is correct,
> > given the buffered file stuff is fairly new.
> 
> Yes, I'd be happy to add Stefan and Joel's name to that, although
> they never added it in their original patch, and when splitting files
> we do normally take the copyright header from what we split out of;
> but you are right it's misleading.

This is often a problem when we split source files, as the copyright
notices are rarely updated when people add new code. IANAL, but copying
the existing copyright header from the original file seems to be the
most reasonable thing to do. If people are unhappy with the existing
copyright header, they can submit patches for it.

Perhaps we could add a note just below the copyright info, indicating
that the code was originally in ${ORIGINAL_FILE}.c, to help copyright
archaeologists from the future.

-- 
Eduardo

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/5] Split the QEMU buffered file code out
  2014-12-19 13:27       ` Eduardo Habkost
@ 2014-12-24 14:11         ` David Gibson
  0 siblings, 0 replies; 15+ messages in thread
From: David Gibson @ 2014-12-24 14:11 UTC (permalink / raw)
  To: Eduardo Habkost
  Cc: peter.maydell, quintela, stefanb, Dr. David Alan Gilbert,
	qemu-devel, joel.schopp, amit.shah

[-- Attachment #1: Type: text/plain, Size: 3064 bytes --]

On Fri, Dec 19, 2014 at 11:27:57AM -0200, Eduardo Habkost wrote:
> On Thu, Dec 18, 2014 at 09:24:11AM +0000, Dr. David Alan Gilbert wrote:
> > * David Gibson (david@gibson.dropbear.id.au) wrote:
> > > On Fri, Dec 12, 2014 at 11:13:41AM +0000, Dr. David Alan Gilbert (git) wrote:
> > > > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> > > > 
> > > > The splitting of qemu-file and addition of the buffered file landed
> > > > at the same time; so now split the buffered file code out.
> > > > 
> > > > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > > > ---
> > > >  migration/Makefile.objs   |   2 +-
> > > >  migration/qemu-file-buf.c | 486 ++++++++++++++++++++++++++++++++++++++++++++++
> > > >  migration/qemu-file.c     | 455 -------------------------------------------
> > > >  tests/Makefile            |   3 +-
> > > >  4 files changed, 489 insertions(+), 457 deletions(-)
> > > >  create mode 100644 migration/qemu-file-buf.c
> > > > 
> > > > diff --git a/migration/Makefile.objs b/migration/Makefile.objs
> > > > index ce1e3c7..d929e96 100644
> > > > --- a/migration/Makefile.objs
> > > > +++ b/migration/Makefile.objs
> > > > @@ -1,6 +1,6 @@
> > > >  common-obj-y += migration.o tcp.o
> > > >  common-obj-y += vmstate.o
> > > > -common-obj-y += qemu-file.o qemu-file-unix.o qemu-file-stdio.o
> > > > +common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o
> > > >  common-obj-y += xbzrle.o
> > > >  
> > > >  common-obj-$(CONFIG_RDMA) += rdma.o
> > > > diff --git a/migration/qemu-file-buf.c b/migration/qemu-file-buf.c
> > > > new file mode 100644
> > > > index 0000000..d33dd44
> > > > --- /dev/null
> > > > +++ b/migration/qemu-file-buf.c
> > > > @@ -0,0 +1,486 @@
> > > > +/*
> > > > + * QEMU System Emulator
> > > > + *
> > > > + * Copyright (c) 2003-2008 Fabrice Bellard
> > > 
> > > Bit hard to believe that only Fabrice listed on this file is correct,
> > > given the buffered file stuff is fairly new.
> > 
> > Yes, I'd be happy to add Stefan and Joel's name to that, although
> > they never added it in their original patch, and when splitting files
> > we do normally take the copyright header from what we split out of;
> > but you are right it's misleading.
> 
> This is often a problem when we split source files, as the copyright
> notices are rarely updated when people add new code. IANAL, but copying
> the existing copyright header from the original file seems to be the
> most reasonable thing to do. If people are unhappy with the existing
> copyright header, they can submit patches for it.

Yeah, good point.

> Perhaps we could add a note just below the copyright info, indicating
> that the code was originally in ${ORIGINAL_FILE}.c, to help copyright
> archaeologists from the future.

That sounds like a good idea to me.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [Qemu-devel] [PATCH v3 4/5] Split the QEMU buffered file code out
  2014-12-18  9:24     ` Dr. David Alan Gilbert
  2014-12-19 13:27       ` Eduardo Habkost
@ 2015-01-15 16:02       ` Stefan Berger
  1 sibling, 0 replies; 15+ messages in thread
From: Stefan Berger @ 2015-01-15 16:02 UTC (permalink / raw)
  To: Dr. David Alan Gilbert, David Gibson
  Cc: peter.maydell, ehabkost, joel.schopp, quintela, qemu-devel, amit.shah

On 12/18/2014 04:24 AM, Dr. David Alan Gilbert wrote:
> * David Gibson (david@gibson.dropbear.id.au) wrote:
>> On Fri, Dec 12, 2014 at 11:13:41AM +0000, Dr. David Alan Gilbert (git) wrote:
>>> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>>>
>>> The splitting of qemu-file and addition of the buffered file landed
>>> at the same time; so now split the buffered file code out.
>>>
>>> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
>>> ---
>>>   migration/Makefile.objs   |   2 +-
>>>   migration/qemu-file-buf.c | 486 ++++++++++++++++++++++++++++++++++++++++++++++
>>>   migration/qemu-file.c     | 455 -------------------------------------------
>>>   tests/Makefile            |   3 +-
>>>   4 files changed, 489 insertions(+), 457 deletions(-)
>>>   create mode 100644 migration/qemu-file-buf.c
>>>
>>> diff --git a/migration/Makefile.objs b/migration/Makefile.objs
>>> index ce1e3c7..d929e96 100644
>>> --- a/migration/Makefile.objs
>>> +++ b/migration/Makefile.objs
>>> @@ -1,6 +1,6 @@
>>>   common-obj-y += migration.o tcp.o
>>>   common-obj-y += vmstate.o
>>> -common-obj-y += qemu-file.o qemu-file-unix.o qemu-file-stdio.o
>>> +common-obj-y += qemu-file.o qemu-file-buf.o qemu-file-unix.o qemu-file-stdio.o
>>>   common-obj-y += xbzrle.o
>>>   
>>>   common-obj-$(CONFIG_RDMA) += rdma.o
>>> diff --git a/migration/qemu-file-buf.c b/migration/qemu-file-buf.c
>>> new file mode 100644
>>> index 0000000..d33dd44
>>> --- /dev/null
>>> +++ b/migration/qemu-file-buf.c
>>> @@ -0,0 +1,486 @@
>>> +/*
>>> + * QEMU System Emulator
>>> + *
>>> + * Copyright (c) 2003-2008 Fabrice Bellard
>> Bit hard to believe that only Fabrice listed on this file is correct,
>> given the buffered file stuff is fairly new.
> Yes, I'd be happy to add Stefan and Joel's name to that, although
> they never added it in their original patch, and when splitting files
> we do normally take the copyright header from what we split out of;
> but you are right it's misleading.

I'll add IBM as an additional copyright holder to the qemu-file-buf.c 
and myself as an author. Whoever else wants to be added as an author, 
either let me know or submit a patch.

    Stefan

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2015-01-15 16:03 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-12 11:13 [Qemu-devel] [PATCH v3 0/5] More migration file cleanup Dr. David Alan Gilbert (git)
2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 1/5] Start migrating migration code into a migration directory Dr. David Alan Gilbert (git)
2014-12-18  1:10   ` David Gibson
2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 2/5] Remove migration- pre/post fixes off files in migration/ dir Dr. David Alan Gilbert (git)
2014-12-18  1:10   ` David Gibson
2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 3/5] Split struct QEMUFile out Dr. David Alan Gilbert (git)
2014-12-18  1:11   ` David Gibson
2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 4/5] Split the QEMU buffered file code out Dr. David Alan Gilbert (git)
2014-12-18  1:13   ` David Gibson
2014-12-18  9:24     ` Dr. David Alan Gilbert
2014-12-19 13:27       ` Eduardo Habkost
2014-12-24 14:11         ` David Gibson
2015-01-15 16:02       ` Stefan Berger
2014-12-12 11:13 ` [Qemu-devel] [PATCH v3 5/5] MAINTAINERS: Update for migrated migration code Dr. David Alan Gilbert (git)
2014-12-18  1:13   ` David Gibson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.