RELEASE=3.3
# also update debian/changelog
-KVMVER=2.1
-KVMPKGREL=10
+KVMVER=2.2
+KVMPKGREL=1
KVMPACKAGE=pve-qemu-kvm
KVMDIR=qemu-kvm
.PHONY: download
download:
rm -rf ${KVMDIR} ${KVMSRC}
- git clone git://git.qemu-project.org/qemu.git -b stable-2.1 ${KVMDIR}
- cd ${KVMDIR}; git checkout v2.1.2
+ #git clone git://git.qemu-project.org/qemu.git -b stable-2.1 ${KVMDIR}
+ git clone git://git.qemu-project.org/qemu.git ${KVMDIR}
+ cd ${KVMDIR}; git checkout v2.2.0-rc2
tar czf ${KVMSRC} --exclude CVS --exclude .git --exclude .svn ${KVMDIR}
${KVM_DEB} kvm: ${KVMSRC}
+pve-qemu-kvm (2.2-1) unstable; urgency=low
+
+ * update to qemu v2.2.0-rc2
+
+ -- Proxmox Support Team <support@proxmox.com> Thu, 20 Nov 2014 07:56:27 +0100
+
pve-qemu-kvm (2.1-10) unstable; urgency=low
* enable support for write_zeroes and discard for images on xfs filesystem
Index: new/include/net/net.h
===================================================================
---- new.orig/include/net/net.h 2014-07-16 11:53:56.000000000 +0200
-+++ new/include/net/net.h 2014-07-16 12:01:25.000000000 +0200
-@@ -196,8 +196,9 @@
+--- new.orig/include/net/net.h 2014-11-20 06:45:06.000000000 +0100
++++ new/include/net/net.h 2014-11-20 06:47:47.000000000 +0100
+@@ -195,8 +195,9 @@
int net_hub_id_for_client(NetClientState *nc, int *id);
NetClientState *net_hub_port_find(int hub_id);
#define DEFAULT_BRIDGE_HELPER CONFIG_QEMU_HELPERDIR "/qemu-bridge-helper"
#define DEFAULT_BRIDGE_INTERFACE "br0"
-Index: new/net/tap_int.h
-===================================================================
---- new.orig/net/tap_int.h 2014-07-16 11:53:56.000000000 +0200
-+++ new/net/tap_int.h 2014-07-16 12:01:25.000000000 +0200
-@@ -29,8 +29,6 @@
- #include "qemu-common.h"
- #include "qapi-types.h"
-
--#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
--#define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
-
- int tap_open(char *ifname, int ifname_size, int *vnet_hdr,
- int vnet_hdr_required, int mq_required);
Index: new/qapi-schema.json
===================================================================
---- new.orig/qapi-schema.json 2014-07-16 12:01:34.000000000 +0200
-+++ new/qapi-schema.json 2014-07-16 12:01:35.000000000 +0200
-@@ -388,7 +388,7 @@
+--- new.orig/qapi-schema.json 2014-11-20 08:59:29.000000000 +0100
++++ new/qapi-schema.json 2014-11-20 09:03:23.000000000 +0100
+@@ -391,7 +391,7 @@
# @vma: Proxmox vma backup format
##
{ 'enum': 'BackupFormat',
# @backup:
Index: new/blockdev.c
===================================================================
---- new.orig/blockdev.c 2014-07-16 12:01:34.000000000 +0200
-+++ new/blockdev.c 2014-07-16 12:01:35.000000000 +0200
-@@ -1895,6 +1895,8 @@
+--- new.orig/blockdev.c 2014-11-20 08:59:29.000000000 +0100
++++ new/blockdev.c 2014-11-20 09:04:05.000000000 +0100
+@@ -1979,6 +1979,8 @@
uint8_t dev_id;
//bool started;
bool completed;
} PVEBackupDevInfo;
static void pvebackup_run_next_job(void);
-@@ -1963,8 +1965,6 @@
+@@ -2047,8 +2049,6 @@
{
PVEBackupDevInfo *di = opaque;
di->completed = true;
if (ret < 0 && !backup_state.error) {
-@@ -1975,8 +1975,11 @@
+@@ -2059,8 +2059,11 @@
BlockDriverState *bs = di->bs;
di->bs = NULL;
block_job_cb(bs, ret);
-@@ -2054,6 +2057,7 @@
+@@ -2138,6 +2141,7 @@
bool has_speed, int64_t speed, Error **errp)
{
BlockDriverState *bs;
Error *local_err = NULL;
uuid_t uuid;
VmaWriter *vmaw = NULL;
-@@ -2070,11 +2074,6 @@
+@@ -2154,11 +2158,6 @@
/* Todo: try to auto-detect format based on file name */
format = has_format ? format : BACKUP_FORMAT_VMA;
if (has_devlist) {
devs = g_strsplit_set(devlist, ",;:", -1);
-@@ -2141,27 +2140,63 @@
+@@ -2225,27 +2224,63 @@
uuid_generate(uuid);
+ goto err;
+ }
+
-+ di->target = bdrv_new("", &error_abort);
++ di->target = bdrv_new();
+ if (bdrv_open(&di->target, di->targetfile, NULL, NULL, flags, NULL, &local_err) < 0) {
+ bdrv_unref(di->target);
+ error_propagate(errp, local_err);
}
/* add configuration file to archive */
-@@ -2174,12 +2209,27 @@
+@@ -2258,12 +2293,27 @@
goto err;
}
g_free(cdata);
}
-@@ -2219,10 +2269,11 @@
+@@ -2303,10 +2353,11 @@
PVEBackupDevInfo *di = (PVEBackupDevInfo *)l->data;
l = g_list_next(l);
if (local_err != NULL) {
error_setg(&backup_state.error, "backup_job_create failed");
pvebackup_cancel(NULL);
-@@ -2239,8 +2290,17 @@
+@@ -2323,8 +2374,17 @@
l = di_list;
while (l) {
}
g_list_free(di_list);
-@@ -2254,6 +2314,10 @@
+@@ -2338,6 +2398,10 @@
unlink(backup_file);
}
Index: new/hmp-commands.hx
===================================================================
---- new.orig/hmp-commands.hx 2014-07-16 12:01:34.000000000 +0200
-+++ new/hmp-commands.hx 2014-07-16 12:01:35.000000000 +0200
+--- new.orig/hmp-commands.hx 2014-11-20 08:59:29.000000000 +0100
++++ new/hmp-commands.hx 2014-11-20 09:03:23.000000000 +0100
@@ -90,9 +90,11 @@
{
Index: new/hmp.c
===================================================================
---- new.orig/hmp.c 2014-07-16 12:01:34.000000000 +0200
-+++ new/hmp.c 2014-07-16 12:01:35.000000000 +0200
-@@ -1262,11 +1262,13 @@
+--- new.orig/hmp.c 2014-11-20 08:59:29.000000000 +0100
++++ new/hmp.c 2014-11-20 09:03:23.000000000 +0100
+@@ -1264,11 +1264,13 @@
{
Error *error = NULL;
Index: new/blockdev.c
===================================================================
---- new.orig/blockdev.c 2014-07-16 12:01:34.000000000 +0200
-+++ new/blockdev.c 2014-07-16 12:01:34.000000000 +0200
-@@ -44,6 +44,7 @@
+--- new.orig/blockdev.c 2014-11-20 07:36:12.000000000 +0100
++++ new/blockdev.c 2014-11-20 07:47:31.000000000 +0100
+@@ -46,6 +46,7 @@
#include "qmp-commands.h"
#include "trace.h"
#include "sysemu/arch_init.h"
+#include "vma.h"
- static QTAILQ_HEAD(drivelist, DriveInfo) drives = QTAILQ_HEAD_INITIALIZER(drives);
-
-@@ -1546,7 +1547,6 @@
- }
- }
-
--
- static void eject_device(BlockDriverState *bs, int force, Error **errp)
- {
- if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_EJECT, errp)) {
-@@ -1871,6 +1871,437 @@
+ static const char *const if_name[IF_COUNT] = {
+ [IF_NONE] = "none",
+@@ -1954,6 +1955,437 @@
bdrv_put_ref_bh_schedule(bs);
}
bool has_backing_file, const char *backing_file,
Index: new/hmp-commands.hx
===================================================================
---- new.orig/hmp-commands.hx 2014-07-16 11:53:55.000000000 +0200
-+++ new/hmp-commands.hx 2014-07-16 12:01:34.000000000 +0200
+--- new.orig/hmp-commands.hx 2014-11-20 06:45:05.000000000 +0100
++++ new/hmp-commands.hx 2014-11-20 07:47:31.000000000 +0100
@@ -88,6 +88,35 @@
Copy data from a backing file into a block device.
ETEXI
{
.name = "block_job_set_speed",
.args_type = "device:B,speed:o",
-@@ -1764,6 +1793,8 @@
+@@ -1760,6 +1789,8 @@
show CPU statistics
@item info usernet
show user network stack connection states
@item info migrate_capabilities
Index: new/hmp.c
===================================================================
---- new.orig/hmp.c 2014-07-16 12:01:29.000000000 +0200
-+++ new/hmp.c 2014-07-16 12:01:34.000000000 +0200
+--- new.orig/hmp.c 2014-11-20 07:26:23.000000000 +0100
++++ new/hmp.c 2014-11-20 07:47:31.000000000 +0100
@@ -137,6 +137,44 @@
qapi_free_MouseInfoList(mice_list);
}
void hmp_info_migrate(Monitor *mon, const QDict *qdict)
{
MigrationInfo *info;
-@@ -1210,6 +1248,29 @@
+@@ -1212,6 +1250,29 @@
hmp_handle_error(mon, &error);
}
{
Index: new/hmp.h
===================================================================
---- new.orig/hmp.h 2014-07-16 11:53:55.000000000 +0200
-+++ new/hmp.h 2014-07-16 12:01:34.000000000 +0200
+--- new.orig/hmp.h 2014-11-20 06:45:05.000000000 +0100
++++ new/hmp.h 2014-11-20 07:47:31.000000000 +0100
@@ -29,6 +29,7 @@
void hmp_info_migrate(Monitor *mon, const QDict *qdict);
void hmp_info_migrate_capabilities(Monitor *mon, const QDict *qdict);
void hmp_block_job_pause(Monitor *mon, const QDict *qdict);
Index: new/monitor.c
===================================================================
---- new.orig/monitor.c 2014-07-16 11:53:55.000000000 +0200
-+++ new/monitor.c 2014-07-16 12:01:34.000000000 +0200
+--- new.orig/monitor.c 2014-11-20 06:45:06.000000000 +0100
++++ new/monitor.c 2014-11-20 07:47:31.000000000 +0100
@@ -2848,6 +2848,13 @@
},
#endif
.params = "",
Index: new/qapi-schema.json
===================================================================
---- new.orig/qapi-schema.json 2014-07-16 12:01:31.000000000 +0200
-+++ new/qapi-schema.json 2014-07-16 12:01:34.000000000 +0200
-@@ -349,6 +349,95 @@
+--- new.orig/qapi-schema.json 2014-11-20 07:26:43.000000000 +0100
++++ new/qapi-schema.json 2014-11-20 07:47:31.000000000 +0100
+@@ -352,6 +352,95 @@
##
{ 'command': 'query-events', 'returns': ['EventInfo'] }
#
Index: new/qmp-commands.hx
===================================================================
---- new.orig/qmp-commands.hx 2014-07-16 12:01:29.000000000 +0200
-+++ new/qmp-commands.hx 2014-07-16 12:01:34.000000000 +0200
-@@ -1098,6 +1098,24 @@
+--- new.orig/qmp-commands.hx 2014-11-20 07:26:23.000000000 +0100
++++ new/qmp-commands.hx 2014-11-20 07:47:31.000000000 +0100
+@@ -1097,6 +1097,24 @@
EQMP
{
Index: new/Makefile
===================================================================
---- new.orig/Makefile 2014-07-16 11:53:56.000000000 +0200
-+++ new/Makefile 2014-07-16 12:01:32.000000000 +0200
-@@ -146,7 +146,7 @@
+--- new.orig/Makefile 2014-11-20 08:12:54.000000000 +0100
++++ new/Makefile 2014-11-20 08:15:12.000000000 +0100
+@@ -152,7 +152,7 @@
include $(SRC_PATH)/libcacard/Makefile
endif
config-host.h: config-host.h-timestamp
config-host.h-timestamp: config-host.mak
-@@ -214,6 +214,7 @@
+@@ -220,6 +220,7 @@
qemu-img$(EXESUF): qemu-img.o $(block-obj-y) libqemuutil.a libqemustub.a
qemu-nbd$(EXESUF): qemu-nbd.o $(block-obj-y) libqemuutil.a libqemustub.a
qemu-io$(EXESUF): qemu-io.o $(block-obj-y) libqemuutil.a libqemustub.a
Index: new/vma-reader.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ new/vma-reader.c 2014-07-16 12:01:32.000000000 +0200
++++ new/vma-reader.c 2014-11-20 08:15:12.000000000 +0100
@@ -0,0 +1,799 @@
+/*
+ * VMA: Virtual Machine Archive
Index: new/vma-writer.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ new/vma-writer.c 2014-07-16 12:01:32.000000000 +0200
++++ new/vma-writer.c 2014-11-20 08:31:06.000000000 +0100
@@ -0,0 +1,876 @@
+/*
+ * VMA: Virtual Machine Archive
+ /* this should not happen - just to be sure */
+ while (!qemu_co_queue_empty(&vmaw->wqueue)) {
+ DPRINTF("vma_writer_close wait\n");
-+ co_sleep_ns(QEMU_CLOCK_REALTIME, 1000000);
++ co_aio_sleep_ns(qemu_get_aio_context(), QEMU_CLOCK_REALTIME, 1000000);
+ }
+
+ if (vmaw->cmd) {
Index: new/vma.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ new/vma.c 2014-07-16 12:01:32.000000000 +0200
-@@ -0,0 +1,583 @@
++++ new/vma.c 2014-11-20 08:47:23.000000000 +0100
+@@ -0,0 +1,582 @@
+/*
+ * VMA: Virtual Machine Archive
+ *
+ write_zero = false;
+ }
+
-+ BlockDriverState *bs = bdrv_new(di->devname, &errp);
++ BlockDriverState *bs = bdrv_new();
+ if (errp || bdrv_open(&bs, devfn, NULL, NULL, flags, NULL, &errp)) {
+ g_error("can't open file %s - %s", devfn,
+ error_get_pretty(errp));
+
+ BlockDriver *drv = NULL;
+ Error *errp = NULL;
-+ BlockDriverState *bs = bdrv_new(devname, &errp);
-+
-+ if (errp) {
-+ g_error("bdrv_new '%s' failed - %s", devname, error_get_pretty(errp));
-+ }
-+
++ BlockDriverState *bs = bdrv_new();
++
+ res = bdrv_open(&bs, path, NULL, NULL, BDRV_O_CACHE_WB , drv, &errp);
+ if (res < 0) {
+ unlink(archivename);
+int main(int argc, char **argv)
+{
+ const char *cmdname;
++ Error *main_loop_err = NULL;
+
+ error_set_progname(argv[0]);
+
-+ qemu_init_main_loop();
++ if (qemu_init_main_loop(&main_loop_err)) {
++ g_error("%s", error_get_pretty(main_loop_err));
++ }
+
+ bdrv_init();
+
Index: new/vma.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ new/vma.h 2014-07-16 12:01:32.000000000 +0200
++++ new/vma.h 2014-11-20 08:15:12.000000000 +0100
@@ -0,0 +1,146 @@
+/*
+ * VMA: Virtual Machine Archive
+#endif /* BACKUP_VMA_H */
Index: new/Makefile.objs
===================================================================
---- new.orig/Makefile.objs 2014-07-16 11:53:56.000000000 +0200
-+++ new/Makefile.objs 2014-07-16 12:01:32.000000000 +0200
-@@ -14,6 +14,7 @@
+--- new.orig/Makefile.objs 2014-11-20 08:12:54.000000000 +0100
++++ new/Makefile.objs 2014-11-20 08:15:12.000000000 +0100
+@@ -13,6 +13,7 @@
+ block-obj-$(CONFIG_WIN32) += aio-win32.o
block-obj-y += block/
- block-obj-y += qapi-types.o qapi-visit.o qapi-event.o
block-obj-y += qemu-io-cmds.o
+block-obj-y += vma-writer.o
Index: new/vma-reader.c
===================================================================
---- new.orig/vma-reader.c 2014-07-16 12:01:32.000000000 +0200
-+++ new/vma-reader.c 2014-07-16 12:01:32.000000000 +0200
+--- new.orig/vma-reader.c 2014-11-20 08:15:12.000000000 +0100
++++ new/vma-reader.c 2014-11-20 08:47:30.000000000 +0100
@@ -53,6 +53,8 @@
time_t start_time;
int64_t cluster_count;
+
Index: new/vma.c
===================================================================
---- new.orig/vma.c 2014-07-16 12:01:32.000000000 +0200
-+++ new/vma.c 2014-07-16 12:01:32.000000000 +0200
+--- new.orig/vma.c 2014-11-20 08:47:23.000000000 +0100
++++ new/vma.c 2014-11-20 08:47:30.000000000 +0100
@@ -34,6 +34,7 @@
"vma list <filename>\n"
"vma create <filename> [-c config] <archive> pathname ...\n"
typedef struct BackupJob {
BlockDriverState *bs;
int64_t len;
-@@ -576,6 +629,8 @@
+@@ -575,6 +628,8 @@
return create_archive(argc, argv);
} else if (!strcmp(cmdname, "extract")) {
return extract_content(argc, argv);
help();
Index: new/vma.h
===================================================================
---- new.orig/vma.h 2014-07-16 12:01:32.000000000 +0200
-+++ new/vma.h 2014-07-16 12:01:32.000000000 +0200
+--- new.orig/vma.h 2014-11-20 08:15:12.000000000 +0100
++++ new/vma.h 2014-11-20 08:47:30.000000000 +0100
@@ -142,5 +142,6 @@
Error **errp);
int vma_reader_restore(VmaReader *vmar, int vmstate_fd, bool verbose,
Index: new/blockdev.c
===================================================================
---- new.orig/blockdev.c 2014-07-16 12:01:35.000000000 +0200
-+++ new/blockdev.c 2014-07-16 12:01:35.000000000 +0200
-@@ -1907,6 +1907,11 @@
+--- new.orig/blockdev.c 2014-11-20 07:49:05.000000000 +0100
++++ new/blockdev.c 2014-11-20 07:49:14.000000000 +0100
+@@ -1991,6 +1991,11 @@
{
PVEBackupDevInfo *di = opaque;
if (sector_num & 0x7f) {
if (!backup_state.error) {
error_setg(&backup_state.error,
-@@ -1917,7 +1922,6 @@
+@@ -2001,7 +2006,6 @@
}
int64_t cluster_num = sector_num >> 7;
int ret = -1;
-@@ -1925,17 +1929,27 @@
+@@ -2009,17 +2013,27 @@
size_t zero_bytes = 0;
ret = vma_writer_write(backup_state.vmaw, di->dev_id, cluster_num,
buf, &zero_bytes);
}
static void pvebackup_cleanup(void)
-@@ -2007,7 +2021,7 @@
+@@ -2091,7 +2105,7 @@
BlockJob *job = di->bs->job;
if (job) {
if (!di->completed) {
Index: new/block/backup.c
===================================================================
---- new.orig/block/backup.c 2014-07-16 11:53:56.000000000 +0200
-+++ new/block/backup.c 2014-07-16 12:01:34.000000000 +0200
+--- new.orig/block/backup.c 2014-11-20 07:55:31.000000000 +0100
++++ new/block/backup.c 2014-11-20 08:56:23.000000000 +0100
@@ -39,6 +39,7 @@
BlockDriverState *target;
MirrorSyncMode sync_mode;
}
}
-@@ -248,9 +260,11 @@
+@@ -264,9 +276,11 @@
job->bitmap = hbitmap_alloc(end, 0);
bdrv_add_before_write_notifier(bs, &before_write);
-@@ -343,8 +357,10 @@
+@@ -359,7 +373,9 @@
hbitmap_free(job->bitmap);
- bdrv_iostatus_disable(target);
-- bdrv_unref(target);
+ if (target) {
+ bdrv_iostatus_disable(target);
-+ bdrv_unref(target);
+ }
- block_job_completed(&job->common, ret);
- }
-@@ -353,13 +369,15 @@
+ data = g_malloc(sizeof(*data));
+ data->ret = ret;
+@@ -370,13 +386,15 @@
int64_t speed, MirrorSyncMode sync_mode,
BlockdevOnError on_source_error,
BlockdevOnError on_target_error,
+ BackupDumpFunc *dump_cb,
- BlockDriverCompletionFunc *cb, void *opaque,
+ BlockCompletionFunc *cb, void *opaque,
+ bool paused,
Error **errp)
{
assert(cb);
if ((on_source_error == BLOCKDEV_ON_ERROR_STOP ||
-@@ -382,10 +400,12 @@
+@@ -399,10 +417,12 @@
return;
}
qemu_coroutine_enter(job->common.co, job);
Index: new/blockdev.c
===================================================================
---- new.orig/blockdev.c 2014-07-16 11:53:56.000000000 +0200
-+++ new/blockdev.c 2014-07-16 12:01:34.000000000 +0200
-@@ -2115,7 +2115,7 @@
- }
+--- new.orig/blockdev.c 2014-11-20 07:55:31.000000000 +0100
++++ new/blockdev.c 2014-11-20 08:48:02.000000000 +0100
+@@ -2223,7 +2223,7 @@
+ bdrv_set_aio_context(target_bs, aio_context);
backup_start(bs, target_bs, speed, sync, on_source_error, on_target_error,
- block_job_cb, bs, &local_err);
error_propagate(errp, local_err);
Index: new/include/block/block_int.h
===================================================================
---- new.orig/include/block/block_int.h 2014-07-16 11:53:56.000000000 +0200
-+++ new/include/block/block_int.h 2014-07-16 12:01:34.000000000 +0200
-@@ -56,6 +56,9 @@
+--- new.orig/include/block/block_int.h 2014-11-20 07:55:31.000000000 +0100
++++ new/include/block/block_int.h 2014-11-20 08:52:59.000000000 +0100
+@@ -57,6 +57,9 @@
#define BLOCK_OPT_REDUNDANCY "redundancy"
#define BLOCK_OPT_NOCOW "nocow"
typedef struct BdrvTrackedRequest {
BlockDriverState *bs;
int64_t offset;
-@@ -539,7 +542,9 @@
+@@ -583,7 +586,9 @@
int64_t speed, MirrorSyncMode sync_mode,
BlockdevOnError on_source_error,
BlockdevOnError on_target_error,
+ BackupDumpFunc *dump_cb,
- BlockDriverCompletionFunc *cb, void *opaque,
+ BlockCompletionFunc *cb, void *opaque,
+ bool paused,
Error **errp);
- #endif /* BLOCK_INT_H */
+ void blk_dev_change_media_cb(BlockBackend *blk, bool load);
Index: new/vma.c
===================================================================
---- new.orig/vma.c 2014-07-16 12:01:32.000000000 +0200
-+++ new/vma.c 2014-07-16 12:01:33.000000000 +0200
+--- new.orig/vma.c 2014-11-20 08:47:30.000000000 +0100
++++ new/vma.c 2014-11-20 08:47:47.000000000 +0100
@@ -32,6 +32,7 @@
"usage: vma command [command options]\n"
"\n"
"vma create <filename> [-c config] <archive> pathname ...\n"
"vma extract <filename> [-r <fifo>] <targetdir>\n"
"vma verify <filename> [-v]\n"
-@@ -605,6 +606,67 @@
+@@ -601,6 +602,67 @@
return 0;
}
int main(int argc, char **argv)
{
const char *cmdname;
-@@ -631,6 +693,8 @@
+@@ -630,6 +692,8 @@
return extract_content(argc, argv);
} else if (!strcmp(cmdname, "verify")) {
return verify_content(argc, argv);
Index: new/vma-reader.c
===================================================================
---- new.orig/vma-reader.c 2014-07-16 12:01:33.000000000 +0200
-+++ new/vma-reader.c 2014-07-16 12:01:39.000000000 +0200
+--- new.orig/vma-reader.c 2014-11-20 07:34:34.000000000 +0100
++++ new/vma-reader.c 2014-11-20 07:54:47.000000000 +0100
@@ -334,11 +334,6 @@
}
}
return ret;
Index: new/vma-writer.c
===================================================================
---- new.orig/vma-writer.c 2014-07-16 12:01:36.000000000 +0200
-+++ new/vma-writer.c 2014-07-16 12:01:39.000000000 +0200
+--- new.orig/vma-writer.c 2014-11-20 07:49:23.000000000 +0100
++++ new/vma-writer.c 2014-11-20 07:54:47.000000000 +0100
@@ -258,7 +258,7 @@
}
return open_drives;
Index: new/vma.c
===================================================================
---- new.orig/vma.c 2014-07-16 12:01:33.000000000 +0200
-+++ new/vma.c 2014-07-16 12:01:39.000000000 +0200
+--- new.orig/vma.c 2014-11-20 07:34:32.000000000 +0100
++++ new/vma.c 2014-11-20 07:54:47.000000000 +0100
@@ -33,7 +33,7 @@
"\n"
"vma list <filename>\n"
bdrv_drain_all();
Index: new/vma.h
===================================================================
---- new.orig/vma.h 2014-07-16 12:01:35.000000000 +0200
-+++ new/vma.h 2014-07-16 12:01:39.000000000 +0200
+--- new.orig/vma.h 2014-11-20 07:49:17.000000000 +0100
++++ new/vma.h 2014-11-20 07:54:47.000000000 +0100
@@ -128,6 +128,7 @@
size_t *zero_bytes);
Index: new/vma-writer.c
===================================================================
---- new.orig/vma-writer.c 2014-07-16 12:01:32.000000000 +0200
-+++ new/vma-writer.c 2014-07-16 12:01:35.000000000 +0200
+--- new.orig/vma-writer.c 2014-11-20 07:34:19.000000000 +0100
++++ new/vma-writer.c 2014-11-20 07:49:17.000000000 +0100
@@ -798,6 +798,13 @@
return transferred;
}
g_assert(vmaw != NULL);
Index: new/vma.h
===================================================================
---- new.orig/vma.h 2014-07-16 12:01:32.000000000 +0200
-+++ new/vma.h 2014-07-16 12:01:35.000000000 +0200
+--- new.orig/vma.h 2014-11-20 07:34:27.000000000 +0100
++++ new/vma.h 2014-11-20 07:49:17.000000000 +0100
@@ -116,6 +116,7 @@
VmaWriter *vma_writer_create(const char *filename, uuid_t uuid, Error **errp);
size_t len);
Index: new/blockdev.c
===================================================================
---- new.orig/blockdev.c 2014-07-16 12:01:35.000000000 +0200
-+++ new/blockdev.c 2014-07-16 12:01:35.000000000 +0200
-@@ -1931,7 +1931,7 @@
+--- new.orig/blockdev.c 2014-11-20 07:49:14.000000000 +0100
++++ new/blockdev.c 2014-11-20 07:49:17.000000000 +0100
+@@ -2015,7 +2015,7 @@
buf, &zero_bytes);
if (ret < 0) {
if (!backup_state.error) {
Index: new/vma-writer.c
===================================================================
---- new.orig/vma-writer.c 2014-07-16 12:01:35.000000000 +0200
-+++ new/vma-writer.c 2014-07-16 12:01:36.000000000 +0200
+--- new.orig/vma-writer.c 2014-11-20 09:08:33.000000000 +0100
++++ new/vma-writer.c 2014-11-20 09:10:14.000000000 +0100
@@ -34,14 +34,8 @@
do { if (DEBUG_VMA) { printf("vma: " fmt, ## __VA_ARGS__); } } while (0)
- /* this should not happen - just to be sure */
- while (!qemu_co_queue_empty(&vmaw->wqueue)) {
- DPRINTF("vma_writer_close wait\n");
-- co_sleep_ns(QEMU_CLOCK_REALTIME, 1000000);
+- co_aio_sleep_ns(qemu_get_aio_context(), QEMU_CLOCK_REALTIME, 1000000);
- }
+ assert(vmaw->co_writer == NULL);
}
Index: new/blockdev.c
===================================================================
---- new.orig/blockdev.c 2014-07-16 12:01:35.000000000 +0200
-+++ new/blockdev.c 2014-07-16 12:01:36.000000000 +0200
-@@ -2010,6 +2010,11 @@
+--- new.orig/blockdev.c 2014-11-20 09:08:33.000000000 +0100
++++ new/blockdev.c 2014-11-20 09:08:49.000000000 +0100
+@@ -2094,6 +2094,11 @@
error_setg(&backup_state.error, "backup cancelled");
}
/* drain all i/o (awake jobs waiting for aio) */
bdrv_drain_all();
-@@ -2022,6 +2027,7 @@
+@@ -2106,6 +2111,7 @@
if (job) {
if (!di->completed) {
block_job_cancel_sync(job);
Index: new/hw/net/e1000.c
===================================================================
---- new.orig/hw/net/e1000.c 2014-07-16 11:53:55.000000000 +0200
-+++ new/hw/net/e1000.c 2014-07-16 12:01:38.000000000 +0200
-@@ -1590,7 +1590,7 @@
+--- new.orig/hw/net/e1000.c 2014-11-20 06:45:06.000000000 +0100
++++ new/hw/net/e1000.c 2014-11-20 07:54:14.000000000 +0100
+@@ -1606,7 +1606,7 @@
k->init = pci_e1000_init;
k->exit = pci_e1000_uninit;
k->revision = info->revision;
Index: new/hw/net/ne2000.c
===================================================================
---- new.orig/hw/net/ne2000.c 2014-07-16 11:53:55.000000000 +0200
-+++ new/hw/net/ne2000.c 2014-07-16 12:01:38.000000000 +0200
-@@ -765,7 +765,7 @@
+--- new.orig/hw/net/ne2000.c 2014-11-20 06:45:06.000000000 +0100
++++ new/hw/net/ne2000.c 2014-11-20 07:54:14.000000000 +0100
+@@ -773,7 +773,7 @@
k->init = pci_ne2000_init;
k->exit = pci_ne2000_exit;
k->class_id = PCI_CLASS_NETWORK_ETHERNET;
Index: new/hw/net/pcnet-pci.c
===================================================================
---- new.orig/hw/net/pcnet-pci.c 2014-07-16 11:53:55.000000000 +0200
-+++ new/hw/net/pcnet-pci.c 2014-07-16 12:01:38.000000000 +0200
-@@ -358,7 +358,7 @@
+--- new.orig/hw/net/pcnet-pci.c 2014-11-20 06:45:06.000000000 +0100
++++ new/hw/net/pcnet-pci.c 2014-11-20 07:54:14.000000000 +0100
+@@ -367,7 +367,7 @@
k->init = pci_pcnet_init;
k->exit = pci_pcnet_uninit;
k->revision = 0x10;
Index: new/hw/net/rtl8139.c
===================================================================
---- new.orig/hw/net/rtl8139.c 2014-07-16 11:53:55.000000000 +0200
-+++ new/hw/net/rtl8139.c 2014-07-16 12:01:38.000000000 +0200
-@@ -3557,7 +3557,7 @@
+--- new.orig/hw/net/rtl8139.c 2014-11-20 06:45:06.000000000 +0100
++++ new/hw/net/rtl8139.c 2014-11-20 07:54:14.000000000 +0100
+@@ -3562,7 +3562,7 @@
k->init = pci_rtl8139_init;
k->exit = pci_rtl8139_uninit;
k->revision = RTL8139_PCI_REVID; /* >=0x20 is for 8139C+ */
Index: new/hw/virtio/virtio-pci.c
===================================================================
---- new.orig/hw/virtio/virtio-pci.c 2014-07-16 11:53:55.000000000 +0200
-+++ new/hw/virtio/virtio-pci.c 2014-07-16 12:01:38.000000000 +0200
-@@ -1444,7 +1444,7 @@
+--- new.orig/hw/virtio/virtio-pci.c 2014-11-20 06:45:06.000000000 +0100
++++ new/hw/virtio/virtio-pci.c 2014-11-20 07:54:14.000000000 +0100
+@@ -1445,7 +1445,7 @@
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
VirtioPCIClass *vpciklass = VIRTIO_PCI_CLASS(klass);
-Index: new/vl.c
+Index: new/accel.c
===================================================================
---- new.orig/vl.c 2014-07-16 12:01:28.000000000 +0200
-+++ new/vl.c 2014-07-16 12:01:29.000000000 +0200
-@@ -2687,8 +2687,8 @@
+--- new.orig/accel.c 2014-11-20 06:45:05.000000000 +0100
++++ new/accel.c 2014-11-20 07:25:45.000000000 +0100
+@@ -87,8 +87,8 @@
p = qemu_opt_get(qemu_get_machine_opts(), "accel");
if (p == NULL) {
Index: new/qemu-options.hx
===================================================================
---- new.orig/qemu-options.hx 2014-07-16 11:53:56.000000000 +0200
-+++ new/qemu-options.hx 2014-07-16 12:01:27.000000000 +0200
-@@ -379,6 +379,12 @@
+--- new.orig/qemu-options.hx 2014-11-20 06:45:06.000000000 +0100
++++ new/qemu-options.hx 2014-11-20 06:50:44.000000000 +0100
+@@ -386,6 +386,12 @@
@table @option
ETEXI
DEF("fdb", HAS_ARG, QEMU_OPTION_fdb, "", QEMU_ARCH_ALL)
Index: new/vl.c
===================================================================
---- new.orig/vl.c 2014-07-16 11:53:56.000000000 +0200
-+++ new/vl.c 2014-07-16 12:01:27.000000000 +0200
+--- new.orig/vl.c 2014-11-20 06:45:06.000000000 +0100
++++ new/vl.c 2014-11-20 06:50:44.000000000 +0100
@@ -101,6 +101,8 @@
#endif
#include "sysemu/qtest.h"
#include "disas/disas.h"
-@@ -153,6 +155,7 @@
+@@ -154,6 +156,7 @@
CharDriverState *sclp_hds[MAX_SCLP_CONSOLES];
int win2k_install_hack = 0;
int singlestep = 0;
int smp_cpus = 1;
int max_cpus = 0;
int smp_cores = 1;
-@@ -2897,6 +2900,9 @@
+@@ -2738,6 +2741,9 @@
int main(int argc, char **argv, char **envp)
{
int i;
+ long int fairsched_id_long = 0;
+ char *ep;
int snapshot, linux_boot;
- const char *icount_option = NULL;
const char *initrd_filename;
-@@ -3717,6 +3723,21 @@
+ const char *kernel_filename, *kernel_cmdline;
+@@ -3560,6 +3566,21 @@
exit(1);
}
break;
case QEMU_OPTION_vnc:
#ifdef CONFIG_VNC
display_remote++;
-@@ -3992,6 +4013,40 @@
+@@ -3844,6 +3865,40 @@
OBJECT_CLASS(machine_class))));
object_property_add_child(object_get_root(), "machine",
OBJECT(current_machine), &error_abort);
Index: new/vzsyscalls.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ new/vzsyscalls.h 2014-07-16 12:01:27.000000000 +0200
++++ new/vzsyscalls.h 2014-11-20 06:50:44.000000000 +0100
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2000-2008, Parallels, Inc. All rights reserved.
Index: new/qemu-img.c
===================================================================
---- new.orig/qemu-img.c 2014-07-16 11:53:56.000000000 +0200
-+++ new/qemu-img.c 2014-07-16 12:01:29.000000000 +0200
-@@ -1931,7 +1931,8 @@
+--- new.orig/qemu-img.c 2014-11-20 06:45:06.000000000 +0100
++++ new/qemu-img.c 2014-11-20 06:51:05.000000000 +0100
+@@ -2080,7 +2080,8 @@
list = collect_image_info_list(filename, fmt, chain);
if (!list) {
Index: new/Makefile.objs
===================================================================
---- new.orig/Makefile.objs 2014-08-07 11:56:07.000000000 +0200
-+++ new/Makefile.objs 2014-08-07 11:56:38.000000000 +0200
-@@ -57,6 +57,7 @@
+--- new.orig/Makefile.objs 2014-11-20 09:13:01.000000000 +0100
++++ new/Makefile.objs 2014-11-20 09:16:47.000000000 +0100
+@@ -56,6 +56,7 @@
common-obj-y += qemu-char.o #aio.o
common-obj-y += block-migration.o
common-obj-y += page_cache.o xbzrle.o
Index: new/block.c
===================================================================
---- new.orig/block.c 2014-08-02 15:03:20.000000000 +0200
-+++ new/block.c 2014-08-07 13:26:45.000000000 +0200
-@@ -2083,7 +2083,7 @@
+--- new.orig/block.c 2014-11-20 09:13:01.000000000 +0100
++++ new/block.c 2014-11-20 09:16:47.000000000 +0100
+@@ -2119,7 +2119,7 @@
bdrv_set_backing_hd(bs_top, bs_new);
}
-static void bdrv_delete(BlockDriverState *bs)
+void bdrv_delete(BlockDriverState *bs)
{
- assert(!bs->dev);
assert(!bs->job);
+ assert(bdrv_op_blocker_is_empty(bs));
Index: new/hmp-commands.hx
===================================================================
---- new.orig/hmp-commands.hx 2014-08-07 11:56:20.000000000 +0200
-+++ new/hmp-commands.hx 2014-08-07 11:56:38.000000000 +0200
-@@ -1803,6 +1803,8 @@
+--- new.orig/hmp-commands.hx 2014-11-20 09:13:01.000000000 +0100
++++ new/hmp-commands.hx 2014-11-20 09:16:47.000000000 +0100
+@@ -1799,6 +1799,8 @@
show current migration capabilities
@item info migrate_cache_size
show current migration XBZRLE cache size
@item info balloon
show balloon information
@item info qtree
-@@ -1824,3 +1826,35 @@
+@@ -1822,3 +1824,35 @@
STEXI
@end table
ETEXI
+ },
Index: new/hmp.c
===================================================================
---- new.orig/hmp.c 2014-08-07 11:56:20.000000000 +0200
-+++ new/hmp.c 2014-08-07 11:56:38.000000000 +0200
-@@ -1805,3 +1805,60 @@
+--- new.orig/hmp.c 2014-11-20 09:13:01.000000000 +0100
++++ new/hmp.c 2014-11-20 09:16:47.000000000 +0100
+@@ -1849,3 +1849,60 @@
- monitor_printf(mon, "\n");
+ qapi_free_MemoryDeviceInfoList(info_list);
}
+
+void hmp_savevm_start(Monitor *mon, const QDict *qdict)
+}
Index: new/hmp.h
===================================================================
---- new.orig/hmp.h 2014-08-07 11:56:19.000000000 +0200
-+++ new/hmp.h 2014-08-07 11:56:38.000000000 +0200
+--- new.orig/hmp.h 2014-11-20 09:13:01.000000000 +0100
++++ new/hmp.h 2014-11-20 09:16:47.000000000 +0100
@@ -26,6 +26,7 @@
void hmp_info_uuid(Monitor *mon, const QDict *qdict);
void hmp_info_chardev(Monitor *mon, const QDict *qdict);
void hmp_nbd_server_start(Monitor *mon, const QDict *qdict);
Index: new/include/block/block.h
===================================================================
---- new.orig/include/block/block.h 2014-08-02 15:03:21.000000000 +0200
-+++ new/include/block/block.h 2014-08-07 11:56:38.000000000 +0200
-@@ -275,6 +275,7 @@
- const char *backing_file);
+--- new.orig/include/block/block.h 2014-11-20 09:13:01.000000000 +0100
++++ new/include/block/block.h 2014-11-20 09:16:47.000000000 +0100
+@@ -235,6 +235,7 @@
int bdrv_get_backing_file_depth(BlockDriverState *bs);
+ void bdrv_refresh_filename(BlockDriverState *bs);
int bdrv_truncate(BlockDriverState *bs, int64_t offset);
+void bdrv_delete(BlockDriverState *bs);
+ int64_t bdrv_nb_sectors(BlockDriverState *bs);
int64_t bdrv_getlength(BlockDriverState *bs);
int64_t bdrv_get_allocated_file_size(BlockDriverState *bs);
- void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr);
Index: new/include/sysemu/sysemu.h
===================================================================
---- new.orig/include/sysemu/sysemu.h 2014-08-02 15:03:21.000000000 +0200
-+++ new/include/sysemu/sysemu.h 2014-08-07 11:56:38.000000000 +0200
+--- new.orig/include/sysemu/sysemu.h 2014-11-20 09:13:01.000000000 +0100
++++ new/include/sysemu/sysemu.h 2014-11-20 09:16:47.000000000 +0100
@@ -76,16 +76,17 @@
void do_savevm(Monitor *mon, const QDict *qdict);
int qemu_loadvm_state(QEMUFile *f);
Index: new/monitor.c
===================================================================
---- new.orig/monitor.c 2014-08-07 11:56:19.000000000 +0200
-+++ new/monitor.c 2014-08-07 11:56:38.000000000 +0200
+--- new.orig/monitor.c 2014-11-20 09:13:01.000000000 +0100
++++ new/monitor.c 2014-11-20 09:16:47.000000000 +0100
@@ -2876,6 +2876,13 @@
.mhandler.cmd = hmp_info_migrate_cache_size,
},
.params = "",
Index: new/qapi-schema.json
===================================================================
---- new.orig/qapi-schema.json 2014-08-07 11:56:20.000000000 +0200
-+++ new/qapi-schema.json 2014-08-07 11:56:38.000000000 +0200
-@@ -547,6 +547,42 @@
+--- new.orig/qapi-schema.json 2014-11-20 09:13:01.000000000 +0100
++++ new/qapi-schema.json 2014-11-20 09:16:47.000000000 +0100
+@@ -550,6 +550,42 @@
'*downtime': 'int',
'*setup-time': 'int'} }
##
# @query-migrate
#
-@@ -2644,8 +2680,18 @@
+@@ -2649,8 +2685,18 @@
#
# Since: 1.2.0
##
#
Index: new/qemu-options.hx
===================================================================
---- new.orig/qemu-options.hx 2014-08-07 11:55:39.000000000 +0200
-+++ new/qemu-options.hx 2014-08-07 11:56:38.000000000 +0200
-@@ -2951,6 +2951,19 @@
+--- new.orig/qemu-options.hx 2014-11-20 09:13:01.000000000 +0100
++++ new/qemu-options.hx 2014-11-20 09:16:47.000000000 +0100
+@@ -2975,6 +2975,19 @@
Start right away with a saved state (@code{loadvm} in monitor)
ETEXI
"-daemonize daemonize QEMU after initializing\n", QEMU_ARCH_ALL)
Index: new/qmp-commands.hx
===================================================================
---- new.orig/qmp-commands.hx 2014-08-07 11:56:19.000000000 +0200
-+++ new/qmp-commands.hx 2014-08-07 11:56:38.000000000 +0200
-@@ -3786,3 +3786,34 @@
+--- new.orig/qmp-commands.hx 2014-11-20 09:13:01.000000000 +0100
++++ new/qmp-commands.hx 2014-11-20 09:16:47.000000000 +0100
+@@ -3883,3 +3883,34 @@
<- { "return": {} }
EQMP
Index: new/savevm-async.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ new/savevm-async.c 2014-08-07 13:29:41.000000000 +0200
-@@ -0,0 +1,488 @@
++++ new/savevm-async.c 2014-11-20 09:17:48.000000000 +0100
+@@ -0,0 +1,484 @@
+#include "qemu-common.h"
+#include "qapi/qmp/qerror.h"
+#include "sysemu/sysemu.h"
+ }
+
+ /* Open the image */
-+ snap_state.bs = bdrv_new("vmstate", &local_err);
-+ if (local_err) {
-+ error_propagate(errp, local_err);
-+ goto restart;
-+ }
-+
++ snap_state.bs = bdrv_new();
++
+ ret = bdrv_open(&snap_state.bs, statefile, NULL, NULL, bdrv_oflags, drv, &local_err);
+ if (ret < 0) {
+ error_set(errp, ERROR_CLASS_GENERIC_ERROR, "failed to open '%s'", statefile);
+ QEMUFile *f;
+ int ret = -1;
+
-+ bs = bdrv_new("vmstate", &error_abort);
++ bs = bdrv_new();
+ ret = bdrv_open(&bs, filename, NULL, NULL, BDRV_O_CACHE_WB, drv, &local_err);
+ error_setg(&blocker, "block device is in use by load state");
+ bdrv_op_block_all(bs, blocker);
+}
Index: new/savevm.c
===================================================================
---- new.orig/savevm.c 2014-08-02 15:03:21.000000000 +0200
-+++ new/savevm.c 2014-08-07 11:56:38.000000000 +0200
+--- new.orig/savevm.c 2014-11-20 09:13:01.000000000 +0100
++++ new/savevm.c 2014-11-20 09:16:47.000000000 +0100
@@ -596,11 +596,11 @@
return false;
}
uint64_t qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size)
Index: new/vl.c
===================================================================
---- new.orig/vl.c 2014-08-07 11:55:57.000000000 +0200
-+++ new/vl.c 2014-08-07 11:56:38.000000000 +0200
-@@ -2930,6 +2930,7 @@
+--- new.orig/vl.c 2014-11-20 09:13:01.000000000 +0100
++++ new/vl.c 2014-11-20 09:16:47.000000000 +0100
+@@ -2760,6 +2760,7 @@
int optind;
const char *optarg;
const char *loadvm = NULL;
MachineClass *machine_class;
const char *cpu_model;
const char *vga_model = NULL;
-@@ -3625,6 +3626,9 @@
+@@ -3457,6 +3458,9 @@
case QEMU_OPTION_loadvm:
loadvm = optarg;
break;
case QEMU_OPTION_full_screen:
full_screen = 1;
break;
-@@ -4569,6 +4573,10 @@
+@@ -4428,6 +4432,10 @@
if (load_vmstate(loadvm) < 0) {
autostart = 0;
}
+ }
}
- qdev_prop_check_global();
+ qdev_prop_check_globals();
Index: new/ui/vnc.c
===================================================================
---- new.orig/ui/vnc.c 2014-07-16 11:53:56.000000000 +0200
-+++ new/ui/vnc.c 2014-07-16 12:01:27.000000000 +0200
-@@ -1631,6 +1631,10 @@
+--- new.orig/ui/vnc.c 2014-11-20 06:45:06.000000000 +0100
++++ new/ui/vnc.c 2014-11-20 06:50:51.000000000 +0100
+@@ -1633,6 +1633,10 @@
static void do_key_event(VncState *vs, int down, int keycode, int sym)
{
/* QEMU console switch */
switch(keycode) {
case 0x2a: /* Left Shift */
-@@ -1710,7 +1714,24 @@
+@@ -1712,7 +1716,24 @@
}
if (qemu_console_is_graphic(NULL)) {
} else {
bool numlock = vs->modifiers_state[0x45];
bool control = (vs->modifiers_state[0x1d] ||
-@@ -1849,7 +1870,8 @@
+@@ -1851,7 +1872,8 @@
lsym = lsym - 'A' + 'a';
}
trace_vnc_key_event_map(down, sym, keycode, code2name(keycode));
do_key_event(vs, down, keycode, sym);
}
-@@ -3032,7 +3054,7 @@
+@@ -3046,7 +3068,7 @@
char *vnc_display_local_addr(DisplayState *ds)
{
VncDisplay *vs = vnc_display;
Index: new/qapi-schema.json
===================================================================
---- new.orig/qapi-schema.json 2014-07-16 12:01:29.000000000 +0200
-+++ new/qapi-schema.json 2014-07-16 12:01:30.000000000 +0200
-@@ -2388,6 +2388,8 @@
+--- new.orig/qapi-schema.json 2014-11-20 07:26:23.000000000 +0100
++++ new/qapi-schema.json 2014-11-20 07:26:39.000000000 +0100
+@@ -2393,6 +2393,8 @@
#
# @default: #optional whether the machine is default
#
# @cpu-max: maximum number of CPUs supported by the machine type
# (since 1.5.0)
#
-@@ -2395,7 +2397,7 @@
+@@ -2400,7 +2402,7 @@
##
{ 'type': 'MachineInfo',
'data': { 'name': 'str', '*alias': 'str',
# @query-machines:
Index: new/vl.c
===================================================================
---- new.orig/vl.c 2014-07-16 12:01:29.000000000 +0200
-+++ new/vl.c 2014-07-16 12:01:30.000000000 +0200
-@@ -1660,6 +1660,11 @@
+--- new.orig/vl.c 2014-11-20 06:50:55.000000000 +0100
++++ new/vl.c 2014-11-20 07:26:39.000000000 +0100
+@@ -1534,6 +1534,11 @@
info->name = g_strdup(mc->name);
info->cpu_max = !mc->max_cpus ? 1 : mc->max_cpus;
Index: new/ui/spice-core.c
===================================================================
---- new.orig/ui/spice-core.c 2014-07-16 11:53:56.000000000 +0200
-+++ new/ui/spice-core.c 2014-07-16 12:01:31.000000000 +0200
+--- new.orig/ui/spice-core.c 2014-11-20 06:45:06.000000000 +0100
++++ new/ui/spice-core.c 2014-11-20 07:26:43.000000000 +0100
@@ -544,6 +544,11 @@
micro = SPICE_SERVER_VERSION & 0xff;
info->compiled_version = g_strdup_printf("%d.%d.%d", major, minor, micro);
info->port = port;
Index: new/qapi-schema.json
===================================================================
---- new.orig/qapi-schema.json 2014-07-16 12:01:30.000000000 +0200
-+++ new/qapi-schema.json 2014-07-16 12:01:31.000000000 +0200
-@@ -865,11 +865,14 @@
+--- new.orig/qapi-schema.json 2014-11-20 07:26:39.000000000 +0100
++++ new/qapi-schema.json 2014-11-20 07:26:43.000000000 +0100
+@@ -868,11 +868,14 @@
#
# @channels: a list of @SpiceChannel for each active spice channel
#
Index: new/ui/vnc.c
===================================================================
---- new.orig/ui/vnc.c 2014-07-16 12:01:27.000000000 +0200
-+++ new/ui/vnc.c 2014-07-16 12:01:28.000000000 +0200
+--- new.orig/ui/vnc.c 2014-11-20 06:50:51.000000000 +0100
++++ new/ui/vnc.c 2014-11-20 06:50:55.000000000 +0100
@@ -46,6 +46,125 @@
#include "vnc_keysym.h"
#include "d3des.h"
static VncDisplay *vnc_display; /* needed for info vnc */
static int vnc_cursor_define(VncState *vs);
-@@ -3142,6 +3261,7 @@
+@@ -3156,6 +3275,7 @@
tls = 1; /* Require TLS */
} else if (strncmp(options, "x509", 4) == 0) {
char *start, *end;
x509 = 1; /* Require x509 certificates */
if (strncmp(options, "x509verify", 10) == 0)
vs->tls.x509verify = 1; /* ...and verify client certs */
-@@ -3162,8 +3282,10 @@
+@@ -3176,8 +3296,10 @@
}
g_free(path);
} else {
}
#endif
#if defined(CONFIG_VNC_TLS) || defined(CONFIG_VNC_SASL)
-@@ -3236,10 +3358,10 @@
+@@ -3250,10 +3372,10 @@
vs->auth = VNC_AUTH_VENCRYPT;
if (x509) {
VNC_DEBUG("Initializing VNC server with x509 password auth\n");
#endif /* CONFIG_VNC_TLS */
Index: new/ui/vnc-auth-vencrypt.c
===================================================================
---- new.orig/ui/vnc-auth-vencrypt.c 2014-07-16 11:53:56.000000000 +0200
-+++ new/ui/vnc-auth-vencrypt.c 2014-07-16 12:01:28.000000000 +0200
+--- new.orig/ui/vnc-auth-vencrypt.c 2014-11-20 06:45:06.000000000 +0100
++++ new/ui/vnc-auth-vencrypt.c 2014-11-20 06:50:55.000000000 +0100
@@ -26,6 +26,107 @@
#include "vnc.h"
VNC_DEBUG("Start TLS auth VNC\n");
Index: new/ui/vnc.h
===================================================================
---- new.orig/ui/vnc.h 2014-07-16 11:53:56.000000000 +0200
-+++ new/ui/vnc.h 2014-07-16 12:01:28.000000000 +0200
-@@ -281,6 +281,8 @@
+--- new.orig/ui/vnc.h 2014-11-20 06:45:06.000000000 +0100
++++ new/ui/vnc.h 2014-11-20 06:50:55.000000000 +0100
+@@ -282,6 +282,8 @@
char challenge[VNC_AUTH_CHALLENGE_SIZE];
#ifdef CONFIG_VNC_TLS
int subauth; /* Used by VeNCrypt */
VncStateTLS tls;
#endif
#ifdef CONFIG_VNC_SASL
-@@ -596,4 +598,6 @@
+@@ -597,4 +599,6 @@
int vnc_zywrle_send_framebuffer_update(VncState *vs, int x, int y, int w, int h);
void vnc_zrle_clear(VncState *vs);
#endif /* __QEMU_VNC_H */
Index: new/ui/vnc-tls.c
===================================================================
---- new.orig/ui/vnc-tls.c 2014-07-16 11:53:56.000000000 +0200
-+++ new/ui/vnc-tls.c 2014-07-16 12:01:28.000000000 +0200
+--- new.orig/ui/vnc-tls.c 2014-11-20 06:45:06.000000000 +0100
++++ new/ui/vnc-tls.c 2014-11-20 06:50:55.000000000 +0100
@@ -302,6 +302,14 @@
static int vnc_set_gnutls_priority(gnutls_session_t s, int x509)
rc = gnutls_kx_set_priority(s, x509 ? kx_x509 : kx_anon);
if (rc != GNUTLS_E_SUCCESS) {
return -1;
-@@ -464,6 +477,24 @@
+@@ -462,6 +475,24 @@
return 0;
}
const char *certdir)
Index: new/ui/vnc-tls.h
===================================================================
---- new.orig/ui/vnc-tls.h 2014-07-16 11:53:56.000000000 +0200
-+++ new/ui/vnc-tls.h 2014-07-16 12:01:28.000000000 +0200
+--- new.orig/ui/vnc-tls.h 2014-11-20 06:45:06.000000000 +0100
++++ new/ui/vnc-tls.h 2014-11-20 06:50:55.000000000 +0100
@@ -68,6 +68,8 @@
int vnc_tls_validate_certificate(VncState *vs);
Index: new/vl.c
===================================================================
---- new.orig/vl.c 2014-07-16 12:01:27.000000000 +0200
-+++ new/vl.c 2014-07-16 12:01:28.000000000 +0200
-@@ -3730,6 +3730,7 @@
+--- new.orig/vl.c 2014-11-20 06:50:44.000000000 +0100
++++ new/vl.c 2014-11-20 06:50:55.000000000 +0100
+@@ -3573,6 +3573,7 @@
fprintf(stderr, "Invalid ID\n");
exit(1);
}
cpuunits = atoi(optarg);
Index: new/include/ui/console.h
===================================================================
---- new.orig/include/ui/console.h 2014-07-16 11:53:56.000000000 +0200
-+++ new/include/ui/console.h 2014-07-16 12:01:28.000000000 +0200
-@@ -317,6 +317,7 @@
+--- new.orig/include/ui/console.h 2014-11-20 06:45:06.000000000 +0100
++++ new/include/ui/console.h 2014-11-20 06:50:55.000000000 +0100
+@@ -327,6 +327,7 @@
void cocoa_display_init(DisplayState *ds, int full_screen);
/* vnc.c */
Index: new/hw/i386/pc.c
===================================================================
---- new.orig/hw/i386/pc.c 2014-07-16 11:53:56.000000000 +0200
-+++ new/hw/i386/pc.c 2014-07-16 12:01:30.000000000 +0200
-@@ -1023,9 +1023,9 @@
+--- new.orig/hw/i386/pc.c 2014-11-20 06:45:06.000000000 +0100
++++ new/hw/i386/pc.c 2014-11-20 07:26:33.000000000 +0100
+@@ -1020,9 +1020,9 @@
/* init CPUs */
if (cpu_model == NULL) {
#ifdef TARGET_X86_64
Index: new/ui/spice-core.c
===================================================================
---- new.orig/ui/spice-core.c 2014-07-16 12:01:31.000000000 +0200
-+++ new/ui/spice-core.c 2014-07-16 12:01:31.000000000 +0200
+--- new.orig/ui/spice-core.c 2014-11-20 07:26:43.000000000 +0100
++++ new/ui/spice-core.c 2014-11-20 07:33:22.000000000 +0100
@@ -682,32 +682,35 @@
if (tls_port) {
x509_dir = qemu_opt_get(opts, "x509-dir");
-- if (NULL == x509_dir) {
+- if (!x509_dir) {
- x509_dir = ".";
- }
Index: new/hmp.c
===================================================================
---- new.orig/hmp.c 2014-07-16 11:53:56.000000000 +0200
-+++ new/hmp.c 2014-07-16 12:01:29.000000000 +0200
+--- new.orig/hmp.c 2014-11-20 06:45:05.000000000 +0100
++++ new/hmp.c 2014-11-20 07:26:23.000000000 +0100
@@ -539,7 +539,35 @@
return;
}
}
Index: new/hw/virtio/virtio-balloon.c
===================================================================
---- new.orig/hw/virtio/virtio-balloon.c 2014-07-16 11:53:56.000000000 +0200
-+++ new/hw/virtio/virtio-balloon.c 2014-07-16 12:01:29.000000000 +0200
-@@ -309,6 +309,35 @@
+--- new.orig/hw/virtio/virtio-balloon.c 2014-11-20 06:45:06.000000000 +0100
++++ new/hw/virtio/virtio-balloon.c 2014-11-20 07:26:23.000000000 +0100
+@@ -314,6 +314,35 @@
VirtIOBalloon *dev = opaque;
info->actual = ram_size - ((uint64_t) dev->actual <<
VIRTIO_BALLOON_PFN_SHIFT);
static void virtio_balloon_to_target(void *opaque, ram_addr_t target)
Index: new/qapi-schema.json
===================================================================
---- new.orig/qapi-schema.json 2014-07-16 11:53:56.000000000 +0200
-+++ new/qapi-schema.json 2014-07-16 12:01:29.000000000 +0200
-@@ -885,15 +885,34 @@
+--- new.orig/qapi-schema.json 2014-11-20 06:45:06.000000000 +0100
++++ new/qapi-schema.json 2014-11-20 07:26:23.000000000 +0100
+@@ -888,15 +888,34 @@
##
# @BalloonInfo:
# @query-balloon:
Index: new/qmp-commands.hx
===================================================================
---- new.orig/qmp-commands.hx 2014-07-16 11:53:56.000000000 +0200
-+++ new/qmp-commands.hx 2014-07-16 12:01:29.000000000 +0200
-@@ -3235,6 +3235,13 @@
+--- new.orig/qmp-commands.hx 2014-11-20 06:45:06.000000000 +0100
++++ new/qmp-commands.hx 2014-11-20 07:26:23.000000000 +0100
+@@ -3234,6 +3234,13 @@
json-object will be returned containing the following data:
- "actual": current balloon value in bytes (json-int)
Example:
-@@ -3242,6 +3249,12 @@
+@@ -3241,6 +3248,12 @@
<- {
"return":{
"actual":1073741824,