packages: qemu-kvm/qemu-kvm.spec, qemu-kvm/qemu-1.0.1.patch (NEW), qemu-kvm...

baggins baggins at pld-linux.org
Thu Feb 23 13:49:57 CET 2012


Author: baggins                      Date: Thu Feb 23 12:49:57 2012 GMT
Module: packages                      Tag: HEAD
---- Log message:
- replace patchset with a single diff between qemu 1.0 and 1.0.1

---- Files affected:
packages/qemu-kvm:
   qemu-kvm.spec (1.27 -> 1.28) , qemu-1.0.1.patch (NONE -> 1.1)  (NEW), 0001-malta-Fix-regression-i8259-interrupts-did-not-work.patch (1.1 -> NONE)  (REMOVED), 0002-exec.c-Fix-subpage-memory-access-to-RAM-MemoryRegion.patch (1.1 -> NONE)  (REMOVED), 0003-hw-9pfs-Improve-portability-to-older-systems.patch (1.1 -> NONE)  (REMOVED), 0004-hw-9pfs-use-migration-blockers-to-prevent-live-migra.patch (1.1 -> NONE)  (REMOVED), 0005-hw-9pfs-Reset-server-state-during-TVERSION.patch (1.1 -> NONE)  (REMOVED), 0006-hw-9pfs-Add-qdev.reset-callback-for-virtio-9p-pci-de.patch (1.1 -> NONE)  (REMOVED), 0007-hw-9pfs-Use-the-correct-file-descriptor-in-Fsdriver-.patch (1.1 -> NONE)  (REMOVED), 0008-hw-9pfs-replace-iovec-manipulation-with-QEMUIOVector.patch (1.1 -> NONE)  (REMOVED), 0009-hw-9pfs-Use-the-correct-signed-type-for-different-va.patch (1.1 -> NONE)  (REMOVED), 0010-target-i386-fix-cmpxchg-instruction-emulation.patch (1.1 -> NONE)  (REMOVED), 0011-configure-Enable-build-by-default-PIE-read-only-relo.patch (1.1 -> NONE)  (REMOVED), 0012-cris-Handle-conditional-stores-on-CRISv10.patch (1.1 -> NONE)  (REMOVED), 0013-pc-add-pc-0.15.patch (1.1 -> NONE)  (REMOVED), 0014-pc-fix-event_idx-compatibility-for-virtio-devices.patch (1.1 -> NONE)  (REMOVED), 0015-Fix-parse-of-usb-device-description-with-multiple-co.patch (1.1 -> NONE)  (REMOVED), 0016-usb-storage-cancel-I-O-on-reset.patch (1.1 -> NONE)  (REMOVED), 0017-usb-host-properly-release-port-on-unplug-exit.patch (1.1 -> NONE)  (REMOVED), 0018-usb-ohci-td.cbp-incorrectly-updated-near-page-end.patch (1.1 -> NONE)  (REMOVED), 0019-target-sh4-ignore-ocbp-and-ocbwb-instructions.patch (1.1 -> NONE)  (REMOVED), 0020-PPC-Fix-linker-scripts-on-ppc-hosts.patch (1.1 -> NONE)  (REMOVED), 0021-qiov-prevent-double-free-or-use-after-free.patch (1.1 -> NONE)  (REMOVED), 0022-coroutine-switch-per-thread-free-pool-to-a-global-po.patch (1.1 -> NONE)  (REMOVED), 0023-qemu-img-rebase-Fix-for-undersized-backing-files.patch (1.1 -> NONE)  (REMOVED), 0024-Documentation-Add-qemu-img-t-parameter-in-man-page.patch (1.1 -> NONE)  (REMOVED), 0025-rbd-always-set-out-parameter-in-qemu_rbd_snap_list.patch (1.1 -> NONE)  (REMOVED), 0026-e1000-bounds-packet-size-against-buffer-size.patch (1.1 -> NONE)  (REMOVED), virtio-blk_refuse_SG_IO_requests_with_scsi_off.patch (1.1 -> NONE)  (REMOVED)

---- Diffs:

================================================================
Index: packages/qemu-kvm/qemu-kvm.spec
diff -u packages/qemu-kvm/qemu-kvm.spec:1.27 packages/qemu-kvm/qemu-kvm.spec:1.28
--- packages/qemu-kvm/qemu-kvm.spec:1.27	Thu Feb 23 13:04:35 2012
+++ packages/qemu-kvm/qemu-kvm.spec	Thu Feb 23 13:49:51 2012
@@ -34,34 +34,8 @@
 Patch2:		enable_architectural_PMU_cpuid_leaf.patch
 Patch3:		qemu_virtio-scsi_support.patch
 Patch4:		qemu-kvm-cflags.patch
-# Patches queued for 1.0.1 stable
-Patch101:	0001-malta-Fix-regression-i8259-interrupts-did-not-work.patch
-Patch102:	0002-exec.c-Fix-subpage-memory-access-to-RAM-MemoryRegion.patch
-Patch103:	0003-hw-9pfs-Improve-portability-to-older-systems.patch
-Patch104:	0004-hw-9pfs-use-migration-blockers-to-prevent-live-migra.patch
-Patch105:	0005-hw-9pfs-Reset-server-state-during-TVERSION.patch
-Patch106:	0006-hw-9pfs-Add-qdev.reset-callback-for-virtio-9p-pci-de.patch
-Patch107:	0007-hw-9pfs-Use-the-correct-file-descriptor-in-Fsdriver-.patch
-Patch108:	0008-hw-9pfs-replace-iovec-manipulation-with-QEMUIOVector.patch
-Patch109:	0009-hw-9pfs-Use-the-correct-signed-type-for-different-va.patch
-Patch110:	0010-target-i386-fix-cmpxchg-instruction-emulation.patch
-Patch111:	0011-configure-Enable-build-by-default-PIE-read-only-relo.patch
-Patch112:	0012-cris-Handle-conditional-stores-on-CRISv10.patch
-Patch113:	0013-pc-add-pc-0.15.patch
-Patch114:	0014-pc-fix-event_idx-compatibility-for-virtio-devices.patch
-Patch115:	0015-Fix-parse-of-usb-device-description-with-multiple-co.patch
-Patch116:	0016-usb-storage-cancel-I-O-on-reset.patch
-Patch117:	0017-usb-host-properly-release-port-on-unplug-exit.patch
-Patch118:	0018-usb-ohci-td.cbp-incorrectly-updated-near-page-end.patch
-Patch119:	0019-target-sh4-ignore-ocbp-and-ocbwb-instructions.patch
-Patch120:	0020-PPC-Fix-linker-scripts-on-ppc-hosts.patch
-Patch121:	0021-qiov-prevent-double-free-or-use-after-free.patch
-Patch122:	0022-coroutine-switch-per-thread-free-pool-to-a-global-po.patch
-Patch123:	0023-qemu-img-rebase-Fix-for-undersized-backing-files.patch
-Patch124:	0024-Documentation-Add-qemu-img-t-parameter-in-man-page.patch
-Patch125:	0025-rbd-always-set-out-parameter-in-qemu_rbd_snap_list.patch
-Patch126:	0026-e1000-bounds-packet-size-against-buffer-size.patch
-Patch127:	virtio-blk_refuse_SG_IO_requests_with_scsi_off.patch
+# Update to qemu 1.0.1
+Patch100:	qemu-1.0.1.patch
 URL:		http://www.linux-kvm.org/
 BuildRequires:	SDL-devel >= 1.2.1
 BuildRequires:	alsa-lib-devel
@@ -353,33 +327,7 @@
 %patch3 -p1
 %patch4 -p1
 
-%patch101 -p1
-%patch102 -p1
-%patch103 -p1
-%patch104 -p1
-%patch105 -p1
-%patch106 -p1
-%patch107 -p1
-%patch108 -p1
-%patch109 -p1
-%patch110 -p1
-%patch111 -p1
-%patch112 -p1
-%patch113 -p1
-%patch114 -p1
-%patch115 -p1
-%patch116 -p1
-%patch117 -p1
-%patch118 -p1
-%patch119 -p1
-%patch120 -p1
-%patch121 -p1
-%patch122 -p1
-%patch123 -p1
-%patch124 -p1
-%patch125 -p1
-%patch126 -p1
-%patch127 -p1
+%patch100 -p1
 
 cp -a %{SOURCE1} pc-bios/bios.bin
 
@@ -707,6 +655,9 @@
 All persons listed below can be reached at <cvs_login>@pld-linux.org
 
 $Log$
+Revision 1.28  2012/02/23 12:49:51  baggins
+- replace patchset with a single diff between qemu 1.0 and 1.0.1
+
 Revision 1.27  2012/02/23 12:04:35  baggins
 - rel 3
 

================================================================
Index: packages/qemu-kvm/qemu-1.0.1.patch
diff -u /dev/null packages/qemu-kvm/qemu-1.0.1.patch:1.1
--- /dev/null	Thu Feb 23 13:49:57 2012
+++ packages/qemu-kvm/qemu-1.0.1.patch	Thu Feb 23 13:49:51 2012
@@ -0,0 +1,2131 @@
+diff -urN qemu-1.0/block/rbd.c qemu-1.0.1/block/rbd.c
+--- qemu-1.0/block/rbd.c	2011-12-01 21:07:34.000000000 +0100
++++ qemu-1.0.1/block/rbd.c	2012-02-17 20:45:39.000000000 +0100
+@@ -808,7 +808,7 @@
+     } while (snap_count == -ERANGE);
+ 
+     if (snap_count <= 0) {
+-        return snap_count;
++        goto done;
+     }
+ 
+     sn_tab = g_malloc0(snap_count * sizeof(QEMUSnapshotInfo));
+@@ -827,6 +827,7 @@
+     }
+     rbd_snap_list_end(snaps);
+ 
++ done:
+     *psn_tab = sn_tab;
+     return snap_count;
+ }
+diff -urN qemu-1.0/configure qemu-1.0.1/configure
+--- qemu-1.0/configure	2011-12-01 21:07:34.000000000 +0100
++++ qemu-1.0.1/configure	2012-02-17 20:45:39.000000000 +0100
+@@ -1116,7 +1116,7 @@
+ 
+ if test "$pie" = ""; then
+   case "$cpu-$targetos" in
+-    i386-Linux|x86_64-Linux)
++    i386-Linux|x86_64-Linux|i386-OpenBSD|x86_64-OpenBSD)
+       ;;
+     *)
+       pie="no"
+diff -urN qemu-1.0/console.c qemu-1.0.1/console.c
+--- qemu-1.0/console.c	2011-12-01 21:07:34.000000000 +0100
++++ qemu-1.0.1/console.c	2012-02-17 20:45:39.000000000 +0100
+@@ -186,7 +186,9 @@
+         consoles[0]->hw_screen_dump(consoles[0]->hw, filename);
+     }
+ 
+-    console_select(previous_active_console->index);
++    if (previous_active_console) {
++        console_select(previous_active_console->index);
++    }
+ }
+ 
+ void vga_hw_text_update(console_ch_t *chardata)
+diff -urN qemu-1.0/coroutine-ucontext.c qemu-1.0.1/coroutine-ucontext.c
+--- qemu-1.0/coroutine-ucontext.c	2011-12-01 21:07:34.000000000 +0100
++++ qemu-1.0.1/coroutine-ucontext.c	2012-02-17 20:45:39.000000000 +0100
+@@ -35,6 +35,10 @@
+     POOL_MAX_SIZE = 64,
+ };
+ 
++/** Free list to speed up creation */
++static QLIST_HEAD(, Coroutine) pool = QLIST_HEAD_INITIALIZER(pool);
++static unsigned int pool_size;
++
+ typedef struct {
+     Coroutine base;
+     void *stack;
+@@ -48,10 +52,6 @@
+     /** Currently executing coroutine */
+     Coroutine *current;
+ 
+-    /** Free list to speed up creation */
+-    QLIST_HEAD(, Coroutine) pool;
+-    unsigned int pool_size;
+-
+     /** The default coroutine */
+     CoroutineUContext leader;
+ } CoroutineThreadState;
+@@ -75,7 +75,6 @@
+     if (!s) {
+         s = g_malloc0(sizeof(*s));
+         s->current = &s->leader.base;
+-        QLIST_INIT(&s->pool);
+         pthread_setspecific(thread_state_key, s);
+     }
+     return s;
+@@ -84,14 +83,19 @@
+ static void qemu_coroutine_thread_cleanup(void *opaque)
+ {
+     CoroutineThreadState *s = opaque;
++
++    g_free(s);
++}
++
++static void __attribute__((destructor)) coroutine_cleanup(void)
++{
+     Coroutine *co;
+     Coroutine *tmp;
+ 
+-    QLIST_FOREACH_SAFE(co, &s->pool, pool_next, tmp) {
++    QLIST_FOREACH_SAFE(co, &pool, pool_next, tmp) {
+         g_free(DO_UPCAST(CoroutineUContext, base, co)->stack);
+         g_free(co);
+     }
+-    g_free(s);
+ }
+ 
+ static void __attribute__((constructor)) coroutine_init(void)
+@@ -169,13 +173,12 @@
+ 
+ Coroutine *qemu_coroutine_new(void)
+ {
+-    CoroutineThreadState *s = coroutine_get_thread_state();
+     Coroutine *co;
+ 
+-    co = QLIST_FIRST(&s->pool);
++    co = QLIST_FIRST(&pool);
+     if (co) {
+         QLIST_REMOVE(co, pool_next);
+-        s->pool_size--;
++        pool_size--;
+     } else {
+         co = coroutine_new();
+     }
+@@ -184,13 +187,12 @@
+ 
+ void qemu_coroutine_delete(Coroutine *co_)
+ {
+-    CoroutineThreadState *s = coroutine_get_thread_state();
+     CoroutineUContext *co = DO_UPCAST(CoroutineUContext, base, co_);
+ 
+-    if (s->pool_size < POOL_MAX_SIZE) {
+-        QLIST_INSERT_HEAD(&s->pool, &co->base, pool_next);
++    if (pool_size < POOL_MAX_SIZE) {
++        QLIST_INSERT_HEAD(&pool, &co->base, pool_next);
+         co->base.caller = NULL;
+-        s->pool_size++;
++        pool_size++;
+         return;
+     }
+ 
+diff -urN qemu-1.0/cpu-common.h qemu-1.0.1/cpu-common.h
+--- qemu-1.0/cpu-common.h	2011-12-01 21:07:34.000000000 +0100
++++ qemu-1.0.1/cpu-common.h	2012-02-17 20:45:39.000000000 +0100
+@@ -172,6 +172,7 @@
+ #define IO_MEM_ROM         (1 << IO_MEM_SHIFT) /* hardcoded offset */
+ #define IO_MEM_UNASSIGNED  (2 << IO_MEM_SHIFT)
+ #define IO_MEM_NOTDIRTY    (3 << IO_MEM_SHIFT)
++#define IO_MEM_SUBPAGE_RAM (4 << IO_MEM_SHIFT)
+ 
+ /* Acts like a ROM when read and like a device when written.  */
+ #define IO_MEM_ROMD        (1)
+diff -urN qemu-1.0/cutils.c qemu-1.0.1/cutils.c
+--- qemu-1.0/cutils.c	2011-12-01 21:07:34.000000000 +0100
++++ qemu-1.0.1/cutils.c	2012-02-17 20:45:39.000000000 +0100
+@@ -217,7 +217,10 @@
+ {
+     assert(qiov->nalloc != -1);
+ 
++    qemu_iovec_reset(qiov);
+     g_free(qiov->iov);
++    qiov->nalloc = 0;
++    qiov->iov = NULL;
+ }
+ 
+ void qemu_iovec_reset(QEMUIOVector *qiov)
+diff -urN qemu-1.0/exec.c qemu-1.0.1/exec.c
+--- qemu-1.0/exec.c	2011-12-01 21:07:34.000000000 +0100
++++ qemu-1.0.1/exec.c	2012-02-17 20:45:39.000000000 +0100
+@@ -3570,6 +3570,63 @@
+     &subpage_writel,
+ };
+ 
++static uint32_t subpage_ram_readb(void *opaque, target_phys_addr_t addr)
++{
++    ram_addr_t raddr = addr;
++    void *ptr = qemu_get_ram_ptr(raddr);
++    return ldub_p(ptr);
++}
++
++static void subpage_ram_writeb(void *opaque, target_phys_addr_t addr,
++                               uint32_t value)
++{
++    ram_addr_t raddr = addr;
++    void *ptr = qemu_get_ram_ptr(raddr);
++    stb_p(ptr, value);
++}
++
++static uint32_t subpage_ram_readw(void *opaque, target_phys_addr_t addr)
++{
++    ram_addr_t raddr = addr;
++    void *ptr = qemu_get_ram_ptr(raddr);
++    return lduw_p(ptr);
++}
++
++static void subpage_ram_writew(void *opaque, target_phys_addr_t addr,
++                               uint32_t value)
++{
++    ram_addr_t raddr = addr;
++    void *ptr = qemu_get_ram_ptr(raddr);
++    stw_p(ptr, value);
++}
++
++static uint32_t subpage_ram_readl(void *opaque, target_phys_addr_t addr)
++{
++    ram_addr_t raddr = addr;
++    void *ptr = qemu_get_ram_ptr(raddr);
++    return ldl_p(ptr);
++}
++
++static void subpage_ram_writel(void *opaque, target_phys_addr_t addr,
++                               uint32_t value)
++{
++    ram_addr_t raddr = addr;
++    void *ptr = qemu_get_ram_ptr(raddr);
++    stl_p(ptr, value);
++}
++
++static CPUReadMemoryFunc * const subpage_ram_read[] = {
++    &subpage_ram_readb,
++    &subpage_ram_readw,
++    &subpage_ram_readl,
++};
++
++static CPUWriteMemoryFunc * const subpage_ram_write[] = {
++    &subpage_ram_writeb,
++    &subpage_ram_writew,
++    &subpage_ram_writel,
++};
++
+ static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end,
+                              ram_addr_t memory, ram_addr_t region_offset)
+ {
+@@ -3583,8 +3640,9 @@
+     printf("%s: %p start %08x end %08x idx %08x eidx %08x mem %ld\n", __func__,
+            mmio, start, end, idx, eidx, memory);
+ #endif
+-    if ((memory & ~TARGET_PAGE_MASK) == IO_MEM_RAM)
+-        memory = IO_MEM_UNASSIGNED;
++    if ((memory & ~TARGET_PAGE_MASK) == IO_MEM_RAM) {
++        memory = IO_MEM_SUBPAGE_RAM;
++    }
+     memory = (memory >> IO_MEM_SHIFT) & (IO_MEM_NB_ENTRIES - 1);
+     for (; idx <= eidx; idx++) {
+         mmio->sub_io_index[idx] = memory;
+@@ -3817,6 +3875,9 @@
+     cpu_register_io_memory_fixed(IO_MEM_NOTDIRTY, error_mem_read,
+                                  notdirty_mem_write, NULL,
+                                  DEVICE_NATIVE_ENDIAN);
++    cpu_register_io_memory_fixed(IO_MEM_SUBPAGE_RAM, subpage_ram_read,
++                                 subpage_ram_write, NULL,
++                                 DEVICE_NATIVE_ENDIAN);
+     for (i=0; i<5; i++)
+         io_mem_used[i] = 1;
+ 
+diff -urN qemu-1.0/fsdev/file-op-9p.h qemu-1.0.1/fsdev/file-op-9p.h
+--- qemu-1.0/fsdev/file-op-9p.h	2011-12-01 21:07:34.000000000 +0100
++++ qemu-1.0.1/fsdev/file-op-9p.h	2012-02-17 20:45:39.000000000 +0100
+@@ -74,7 +74,7 @@
+ } FsContext;
+ 
+ typedef struct V9fsPath {
+-    int16_t size;
++    uint16_t size;
+     char *data;
+ } V9fsPath;
+ 
+@@ -112,10 +112,10 @@
+     ssize_t (*pwritev)(FsContext *, V9fsFidOpenState *,
+                        const struct iovec *, int, off_t);
+     int (*mkdir)(FsContext *, V9fsPath *, const char *, FsCred *);
+-    int (*fstat)(FsContext *, V9fsFidOpenState *, struct stat *);
++    int (*fstat)(FsContext *, int, V9fsFidOpenState *, struct stat *);
+     int (*rename)(FsContext *, const char *, const char *);
+     int (*truncate)(FsContext *, V9fsPath *, off_t);
+-    int (*fsync)(FsContext *, V9fsFidOpenState *, int);
++    int (*fsync)(FsContext *, int, V9fsFidOpenState *, int);
+     int (*statfs)(FsContext *s, V9fsPath *path, struct statfs *stbuf);
+     ssize_t (*lgetxattr)(FsContext *, V9fsPath *,
+                          const char *, void *, size_t);
+diff -urN qemu-1.0/fsdev/qemu-fsdev.c qemu-1.0.1/fsdev/qemu-fsdev.c
+--- qemu-1.0/fsdev/qemu-fsdev.c	2011-12-01 21:07:34.000000000 +0100
++++ qemu-1.0.1/fsdev/qemu-fsdev.c	2012-02-17 20:45:39.000000000 +0100
+@@ -23,7 +23,9 @@
+ 
+ static FsDriverTable FsDrivers[] = {
+     { .name = "local", .ops = &local_ops},
++#ifdef CONFIG_OPEN_BY_HANDLE
+     { .name = "handle", .ops = &handle_ops},
++#endif
+     { .name = "synth", .ops = &synth_ops},
+ };
+ 
+diff -urN qemu-1.0/hw/9pfs/cofile.c qemu-1.0.1/hw/9pfs/cofile.c
+--- qemu-1.0/hw/9pfs/cofile.c	2011-12-01 21:07:34.000000000 +0100
++++ qemu-1.0.1/hw/9pfs/cofile.c	2012-02-17 20:45:39.000000000 +0100
+@@ -71,7 +71,7 @@
+     }
+     v9fs_co_run_in_worker(
+         {
+-            err = s->ops->fstat(&s->ctx, &fidp->fs, stbuf);
++            err = s->ops->fstat(&s->ctx, fidp->fid_type, &fidp->fs, stbuf);
+             if (err < 0) {
+                 err = -errno;
+             }
+@@ -192,7 +192,7 @@
+     }
+     v9fs_co_run_in_worker(
+         {
+-            err = s->ops->fsync(&s->ctx, &fidp->fs, datasync);
++            err = s->ops->fsync(&s->ctx, fidp->fid_type, &fidp->fs, datasync);
+             if (err < 0) {
+                 err = -errno;
+             }
+diff -urN qemu-1.0/hw/9pfs/virtio-9p.c qemu-1.0.1/hw/9pfs/virtio-9p.c
+--- qemu-1.0/hw/9pfs/virtio-9p.c	2011-12-01 21:07:34.000000000 +0100
++++ qemu-1.0.1/hw/9pfs/virtio-9p.c	2012-02-17 20:45:39.000000000 +0100
+@@ -23,6 +23,7 @@
+ #include "virtio-9p-xattr.h"
+ #include "virtio-9p-coth.h"
+ #include "trace.h"
++#include "migration.h"
+ 
+ int open_fd_hw;
+ int total_open_fd;
+@@ -373,6 +374,19 @@
+      * Don't free the fid if it is in reclaim list
+      */
+     if (!fidp->ref && fidp->clunked) {
++        if (fidp->fid == pdu->s->root_fid) {
++            /*
++             * if the clunked fid is root fid then we
++             * have unmounted the fs on the client side.
++             * delete the migration blocker. Ideally, this
++             * should be hooked to transport close notification
++             */
++            if (pdu->s->migration_blocker) {
++                migrate_del_blocker(pdu->s->migration_blocker);
++                error_free(pdu->s->migration_blocker);
++                pdu->s->migration_blocker = NULL;
++            }
++        }
+         free_fid(pdu, fidp);
+     }
+ }
+@@ -509,6 +523,30 @@
+     return 0;
+ }
+ 
++static void virtfs_reset(V9fsPDU *pdu)
++{
++    V9fsState *s = pdu->s;
++    V9fsFidState *fidp = NULL;
++
++    /* Free all fids */
++    while (s->fid_list) {
++        fidp = s->fid_list;
++        s->fid_list = fidp->next;
++
++        if (fidp->ref) {
++            fidp->clunked = 1;
++        } else {
++            free_fid(pdu, fidp);
++        }
++    }
++    if (fidp) {
++        /* One or more unclunked fids found... */
++        error_report("9pfs:%s: One or more uncluncked fids "
++                     "found during reset", __func__);
++    }
++    return;
++}
++
+ #define P9_QID_TYPE_DIR         0x80
+ #define P9_QID_TYPE_SYMLINK     0x02
+ 
+@@ -636,40 +674,6 @@
+                              offset, size, 1);
+ }
+ 
+-static int pdu_copy_sg(V9fsPDU *pdu, size_t offset, int rx, struct iovec *sg)
+-{
+-    size_t pos = 0;
+-    int i, j;
+-    struct iovec *src_sg;
+-    unsigned int num;
+-
+-    if (rx) {
+-        src_sg = pdu->elem.in_sg;
+-        num = pdu->elem.in_num;
+-    } else {
+-        src_sg = pdu->elem.out_sg;
+-        num = pdu->elem.out_num;
+-    }
+-
+-    j = 0;
+-    for (i = 0; i < num; i++) {
+-        if (offset <= pos) {
+-            sg[j].iov_base = src_sg[i].iov_base;
+-            sg[j].iov_len = src_sg[i].iov_len;
+-            j++;
+-        } else if (offset < (src_sg[i].iov_len + pos)) {
+-            sg[j].iov_base = src_sg[i].iov_base;
+-            sg[j].iov_len = src_sg[i].iov_len;
+-            sg[j].iov_base += (offset - pos);
+-            sg[j].iov_len -= (offset - pos);
+-            j++;
+-        }
+-        pos += src_sg[i].iov_len;
+-    }
+-
+-    return j;
+-}
+-
+ static size_t pdu_unmarshal(V9fsPDU *pdu, size_t offset, const char *fmt, ...)
+ {
+     size_t old_offset = offset;
+@@ -705,12 +709,6 @@
+             *valp = le64_to_cpu(val);
+             break;
+         }
+-        case 'v': {
+-            struct iovec *iov = va_arg(ap, struct iovec *);
+-            int *iovcnt = va_arg(ap, int *);
+-            *iovcnt = pdu_copy_sg(pdu, offset, 0, iov);
+-            break;
+-        }
+         case 's': {
+             V9fsString *str = va_arg(ap, V9fsString *);
+             offset += pdu_unmarshal(pdu, offset, "w", &str->size);
+@@ -789,12 +787,6 @@
+             offset += pdu_pack(pdu, offset, &val, sizeof(val));
+             break;
+         }
+-        case 'v': {
+-            struct iovec *iov = va_arg(ap, struct iovec *);
+-            int *iovcnt = va_arg(ap, int *);
+-            *iovcnt = pdu_copy_sg(pdu, offset, 1, iov);
+-            break;
+-        }
+         case 's': {
+             V9fsString *str = va_arg(ap, V9fsString *);
+             offset += pdu_marshal(pdu, offset, "w", str->size);
+@@ -1105,42 +1097,6 @@
+     stat_to_qid(stbuf, &v9lstat->qid);
+ }
+ 
+-static struct iovec *adjust_sg(struct iovec *sg, int len, int *iovcnt)
+-{
+-    while (len && *iovcnt) {
+-        if (len < sg->iov_len) {
+-            sg->iov_len -= len;
+-            sg->iov_base += len;
+-            len = 0;
+-        } else {
+-            len -= sg->iov_len;
+-            sg++;
+-            *iovcnt -= 1;
+-        }
+-    }
+-
+-    return sg;
+-}
+-
+-static struct iovec *cap_sg(struct iovec *sg, int cap, int *cnt)
+-{
+-    int i;
+-    int total = 0;
+-
+-    for (i = 0; i < *cnt; i++) {
+-        if ((total + sg[i].iov_len) > cap) {
+-            sg[i].iov_len -= ((total + sg[i].iov_len) - cap);
+-            i++;
+-            break;
+-        }
+-        total += sg[i].iov_len;
+-    }
+-
+-    *cnt = i;
+-
+-    return sg;
+-}
+-
+ static void print_sg(struct iovec *sg, int cnt)
+ {
+     int i;
+@@ -1182,6 +1138,8 @@
+     pdu_unmarshal(pdu, offset, "ds", &s->msize, &version);
+     trace_v9fs_version(pdu->tag, pdu->id, s->msize, version.data);
+ 
++    virtfs_reset(pdu);
++
+     if (!strcmp(version.data, "9P2000.u")) {
+         s->proto_version = V9FS_PROTO_2000U;
+     } else if (!strcmp(version.data, "9P2000.L")) {
+@@ -1235,6 +1193,11 @@
+     err = offset;
+     trace_v9fs_attach_return(pdu->tag, pdu->id,
+                              qid.type, qid.version, qid.path);
++    s->root_fid = fid;
++    /* disable migration */
++    error_set(&s->migration_blocker, QERR_VIRTFS_FEATURE_BLOCKS_MIGRATION,
++              s->ctx.fs_root, s->tag);
++    migrate_add_blocker(s->migration_blocker);
+ out:
+     put_fid(pdu, fidp);
+ out_nofid:
+@@ -1731,8 +1694,8 @@
+     complete_pdu(s, pdu, err);
+ }
+ 
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/qemu-kvm/qemu-kvm.spec?r1=1.27&r2=1.28&f=u



More information about the pld-cvs-commit mailing list