From: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>
To: qemu-devel@nongnu.org
Cc: aarcange@redhat.com, yamahata@private.email.ne.jp,
lilei@linux.vnet.ibm.com, quintela@redhat.com
Subject: [Qemu-devel] [PATCH 22/46] Migration parameters: Add qmp/hmp commands for setting/viewing
Date: Fri, 4 Jul 2014 18:41:33 +0100 [thread overview]
Message-ID: <1404495717-4239-23-git-send-email-dgilbert@redhat.com> (raw)
In-Reply-To: <1404495717-4239-1-git-send-email-dgilbert@redhat.com>
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Add somewhere for the various migration parameters to be set with
one command;
As suggested in the thread:
http://lists.gnu.org/archive/html/qemu-devel/2012-11/msg00243.html
There are many existing migration parameters that are scattered over
many individual commands; moving those to this scheme would probably break
things for others, so I've left them be.
Preserve the migration tunable values across the reinit of the migration
status in the same way that the capability flags are preserved.
Add completion routine for it.
Use the postcopy time out setting as the first parameter.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
hmp-commands.hx | 17 ++++++++++
hmp.c | 54 ++++++++++++++++++++++++++++++
hmp.h | 4 +++
include/migration/migration.h | 4 +++
migration.c | 78 ++++++++++++++++++++++++++++++++++---------
monitor.c | 25 ++++++++++++++
qapi-schema.json | 50 +++++++++++++++++++++++++++
qmp-commands.hx | 23 +++++++++++++
8 files changed, 239 insertions(+), 16 deletions(-)
diff --git a/hmp-commands.hx b/hmp-commands.hx
index d0943b1..4098a52 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -987,6 +987,21 @@ Enable/Disable the usage of a capability @var{capability} for migration.
ETEXI
{
+ .name = "migrate_set_parameter",
+ .args_type = "parameter:s,value:l",
+ .params = "parameter value",
+ .help = "Change the value of the given parameter",
+ .mhandler.cmd = hmp_migrate_set_parameter,
+ .command_completion = migrate_set_parameter_completion,
+ },
+
+STEXI
+@item migrate_set_parameter @var{parameter} @var{value}
+@findex migrate_set_parameter
+Change the value of a migration parameter @var{parameter}.
+ETEXI
+
+ {
.name = "client_migrate_info",
.args_type = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?",
.params = "protocol hostname port tls-port cert-subject",
@@ -1770,6 +1785,8 @@ show migration status
show current migration capabilities
@item info migrate_cache_size
show current migration XBZRLE cache size
+@item info migrate_parameters
+show current migration parameters
@item info balloon
show balloon information
@item info qtree
diff --git a/hmp.c b/hmp.c
index 4d1838e..1d14aa4 100644
--- a/hmp.c
+++ b/hmp.c
@@ -156,6 +156,9 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict)
monitor_printf(mon, "\n");
}
+ if (info->has_status)
+ hmp_info_migrate_parameters(mon, NULL);
+
if (info->has_status) {
monitor_printf(mon, "Migration status: %s\n", info->status);
monitor_printf(mon, "total time: %" PRIu64 " milliseconds\n",
@@ -252,6 +255,25 @@ void hmp_info_migrate_cache_size(Monitor *mon, const QDict *qdict)
qmp_query_migrate_cache_size(NULL) >> 10);
}
+void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict)
+{
+ MigrationParameterList *params, *param;
+
+ params = qmp_query_migrate_parameters(NULL);
+
+ if (params) {
+ monitor_printf(mon, "parameters: ");
+ for (param = params; param; param = param->next) {
+ monitor_printf(mon, "%s: %" PRIu64 " ",
+ MigrationParameterName_lookup[param->value->parameter],
+ param->value->value);
+ }
+ monitor_printf(mon, "\n");
+ }
+
+ qapi_free_MigrationParameterList(params);
+}
+
void hmp_info_cpus(Monitor *mon, const QDict *qdict)
{
CpuInfoList *cpu_list, *cpu;
@@ -1077,6 +1099,38 @@ void hmp_migrate_set_capability(Monitor *mon, const QDict *qdict)
}
}
+void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
+{
+ const char *param_name = qdict_get_str(qdict, "parameter");
+ int64_t value = qdict_get_int(qdict, "value");
+ Error *err = NULL;
+ MigrationParameterList *params = g_malloc0(sizeof(*params));
+ int i;
+
+ for (i = 0; i < MIGRATION_PARAMETER_NAME_MAX; i++) {
+ if (strcmp(param_name, MigrationParameterName_lookup[i]) == 0) {
+ params->value = g_malloc0(sizeof(*params->value));
+ params->value->parameter = i;
+ params->value->value = value;
+ params->next = NULL;
+ qmp_migrate_set_parameters(params, &err);
+ break;
+ }
+ }
+
+ if (i == MIGRATION_PARAMETER_NAME_MAX) {
+ error_set(&err, QERR_INVALID_PARAMETER, param_name);
+ }
+
+ qapi_free_MigrationParameterList(params);
+
+ if (err) {
+ monitor_printf(mon, "migrate_set_parameter: %s\n",
+ error_get_pretty(err));
+ error_free(err);
+ }
+}
+
void hmp_set_password(Monitor *mon, const QDict *qdict)
{
const char *protocol = qdict_get_str(qdict, "protocol");
diff --git a/hmp.h b/hmp.h
index 4fd3c4a..609241c 100644
--- a/hmp.h
+++ b/hmp.h
@@ -29,6 +29,7 @@ void hmp_info_mice(Monitor *mon, const QDict *qdict);
void hmp_info_migrate(Monitor *mon, const QDict *qdict);
void hmp_info_migrate_capabilities(Monitor *mon, const QDict *qdict);
void hmp_info_migrate_cache_size(Monitor *mon, const QDict *qdict);
+void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict);
void hmp_info_cpus(Monitor *mon, const QDict *qdict);
void hmp_info_block(Monitor *mon, const QDict *qdict);
void hmp_info_blockstats(Monitor *mon, const QDict *qdict);
@@ -64,6 +65,7 @@ void hmp_migrate_set_downtime(Monitor *mon, const QDict *qdict);
void hmp_migrate_set_speed(Monitor *mon, const QDict *qdict);
void hmp_migrate_set_capability(Monitor *mon, const QDict *qdict);
void hmp_migrate_set_cache_size(Monitor *mon, const QDict *qdict);
+void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict);
void hmp_set_password(Monitor *mon, const QDict *qdict);
void hmp_expire_password(Monitor *mon, const QDict *qdict);
void hmp_eject(Monitor *mon, const QDict *qdict);
@@ -110,6 +112,8 @@ void watchdog_action_completion(ReadLineState *rs, int nb_args,
const char *str);
void migrate_set_capability_completion(ReadLineState *rs, int nb_args,
const char *str);
+void migrate_set_parameter_completion(ReadLineState *rs, int nb_args,
+ const char *str);
void host_net_add_completion(ReadLineState *rs, int nb_args, const char *str);
void host_net_remove_completion(ReadLineState *rs, int nb_args,
const char *str);
diff --git a/include/migration/migration.h b/include/migration/migration.h
index cf66921..d2754f7 100644
--- a/include/migration/migration.h
+++ b/include/migration/migration.h
@@ -35,6 +35,7 @@
#define QEMU_VM_SUBSECTION 0x05
#define QEMU_VM_COMMAND 0x06
+/* This is state currently only used by block */
struct MigrationParams {
bool blk;
bool shared;
@@ -75,6 +76,7 @@ struct MigrationIncomingState {
MigrationIncomingState *migration_incoming_state_init(QEMUFile *f);
void migration_incoming_state_destroy(MigrationIncomingState *mis);
+/* State for the outgoing migration */
struct MigrationState
{
int64_t bandwidth_limit;
@@ -95,6 +97,8 @@ struct MigrationState
int64_t dirty_pages_rate;
int64_t dirty_bytes_rate;
bool enabled_capabilities[MIGRATION_CAPABILITY_MAX];
+ /* For migrate_set_parameters command */
+ int64_t tunables[MIGRATION_PARAMETER_NAME_MAX];
int64_t xbzrle_cache_size;
int64_t setup_time;
int64_t dirty_sync_count;
diff --git a/migration.c b/migration.c
index 8343679..20ed6fa 100644
--- a/migration.c
+++ b/migration.c
@@ -226,6 +226,64 @@ MigrationCapabilityStatusList *qmp_query_migrate_capabilities(Error **errp)
return head;
}
+void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
+ Error **errp)
+{
+ MigrationState *s = migrate_get_current();
+ MigrationCapabilityStatusList *cap;
+
+ if (s->state == MIG_STATE_ACTIVE || s->state == MIG_STATE_SETUP) {
+ error_set(errp, QERR_MIGRATION_ACTIVE);
+ return;
+ }
+
+ for (cap = params; cap; cap = cap->next) {
+ s->enabled_capabilities[cap->value->capability] = cap->value->state;
+ }
+}
+
+void qmp_migrate_set_parameters(MigrationParameterList *params,
+ Error **errp)
+{
+ MigrationState *s = migrate_get_current();
+ MigrationParameterList *parm;
+
+ if (s->state == MIG_STATE_ACTIVE || s->state == MIG_STATE_SETUP) {
+ error_set(errp, QERR_MIGRATION_ACTIVE);
+ return;
+ }
+
+ for (parm = params; parm; parm = parm->next) {
+ s->tunables[parm->value->parameter] = parm->value->value;
+ }
+}
+
+MigrationParameterList *qmp_query_migrate_parameters(Error **errp)
+{
+ MigrationParameterList *head = NULL;
+ MigrationParameterList *parms;
+ MigrationState *s = migrate_get_current();
+ int i;
+
+ parms = NULL;
+ for (i = 0; i < MIGRATION_PARAMETER_NAME_MAX; i++) {
+ if (head == NULL) {
+ head = g_malloc0(sizeof(*parms));
+ parms = head;
+ } else {
+ parms->next = g_malloc0(sizeof(*parms));
+ parms = parms->next;
+ }
+ parms->value =
+ g_malloc(sizeof(*parms->value));
+ parms->value->parameter = i;
+ parms->value->value = s->tunables[i];
+ }
+
+ return head;
+}
+
+
static void get_xbzrle_cache_stats(MigrationInfo *info)
{
if (migrate_use_xbzrle()) {
@@ -326,22 +384,6 @@ MigrationInfo *qmp_query_migrate(Error **errp)
return info;
}
-void qmp_migrate_set_capabilities(MigrationCapabilityStatusList *params,
- Error **errp)
-{
- MigrationState *s = migrate_get_current();
- MigrationCapabilityStatusList *cap;
-
- if (s->state == MIG_STATE_ACTIVE || s->state == MIG_STATE_SETUP) {
- error_set(errp, QERR_MIGRATION_ACTIVE);
- return;
- }
-
- for (cap = params; cap; cap = cap->next) {
- s->enabled_capabilities[cap->value->capability] = cap->value->state;
- }
-}
-
/* shared migration helpers */
static void migrate_set_state(MigrationState *s, int old_state, int new_state)
@@ -447,15 +489,19 @@ MigrationState *migrate_init(const MigrationParams *params)
MigrationState *s = migrate_get_current();
int64_t bandwidth_limit = s->bandwidth_limit;
bool enabled_capabilities[MIGRATION_CAPABILITY_MAX];
+ int64_t tunables[MIGRATION_PARAMETER_NAME_MAX];
int64_t xbzrle_cache_size = s->xbzrle_cache_size;
+ /* Preserve user settings across this clear */
memcpy(enabled_capabilities, s->enabled_capabilities,
sizeof(enabled_capabilities));
+ memcpy(tunables, s->tunables, sizeof(tunables));
memset(s, 0, sizeof(*s));
s->params = *params;
memcpy(s->enabled_capabilities, enabled_capabilities,
sizeof(enabled_capabilities));
+ memcpy(s->tunables, tunables, sizeof(tunables));
s->xbzrle_cache_size = xbzrle_cache_size;
s->bandwidth_limit = bandwidth_limit;
diff --git a/monitor.c b/monitor.c
index 5bc70a6..f354b7b 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2869,6 +2869,13 @@ static mon_cmd_t info_cmds[] = {
.mhandler.cmd = hmp_info_migrate_cache_size,
},
{
+ .name = "migrate_parameters",
+ .args_type = "",
+ .params = "",
+ .help = "show current migration parameters",
+ .mhandler.cmd = hmp_info_migrate_parameters,
+ },
+ {
.name = "balloon",
.args_type = "",
.params = "",
@@ -4553,6 +4560,24 @@ void migrate_set_capability_completion(ReadLineState *rs, int nb_args,
}
}
+void migrate_set_parameter_completion(ReadLineState *rs, int nb_args,
+ const char *str)
+{
+ size_t len;
+
+ len = strlen(str);
+ readline_set_completion_index(rs, len);
+ if (nb_args == 2) {
+ int i;
+ for (i = 0; i < MIGRATION_PARAMETER_NAME_MAX; i++) {
+ const char *name = MigrationParameterName_lookup[i];
+ if (!strncmp(str, name, len)) {
+ readline_add_completion(rs, name);
+ }
+ }
+ }
+}
+
void host_net_add_completion(ReadLineState *rs, int nb_args, const char *str)
{
int i;
diff --git a/qapi-schema.json b/qapi-schema.json
index eac3739..678ad26 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -538,6 +538,56 @@
{ 'command': 'query-migrate-capabilities', 'returns': ['MigrationCapabilityStatus']}
##
+# @MigrationParameterName
+#
+# Migration parameter enumeration
+# Most existing parameters have separate commands/entries but it seems
+# better to group them in the same way as the capability flags
+#
+# @x-postcopy-start-time: Time (in ms) after the start of migration to consider
+# switching to postcopy mode
+#
+# Since: 2.0
+##
+{ 'enum': 'MigrationParameterName',
+ 'data': ['x-postcopy-start-time'] }
+
+##
+# @MigrationParameter
+# @parameter: parameter enum
+#
+# @value: value int
+#
+# Since: 2.0
+##
+{ 'type': 'MigrationParameter',
+ 'data': {'parameter': 'MigrationParameterName', 'value': 'int' } }
+
+##
+# @migrate-set-parameters
+#
+# Change the given migration parameter
+#
+# @parameters: json array of parameters to be changed
+#
+# Since: 2.0
+##
+{ 'command': 'migrate-set-parameters',
+ 'data': { 'parameters': ['MigrationParameter']}}
+
+##
+# @query-migrate-parameters
+#
+# Returns the current settings of the migration parameters
+#
+# Returns: @MigrationParameter
+#
+# Since: 2.0
+##
+{ 'command': 'query-migrate-parameters',
+ 'returns': ['MigrationParameter']}
+
+##
# @MouseInfo:
#
# Information about a mouse device.
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 4be4765..7931c6a 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -3202,6 +3202,29 @@ EQMP
.mhandler.cmd_new = qmp_marshal_input_migrate_set_capabilities,
},
SQMP
+migrate-set-parameters
+------------------------
+
+Set migration parameters
+
+- "x-postcopy-start-time": Postcopy start time
+
+Arguments:
+
+Example:
+
+-> { "execute": "migrate-set-parameters" , "arguments":
+ { "parameters": [ { "parameter": "x-postcopy-start-time", "value": 30 } ] } }
+
+EQMP
+
+ {
+ .name = "migrate-set-parameters",
+ .args_type = "parameters:O",
+ .params = "parameter:s,value:i",
+ .mhandler.cmd_new = qmp_marshal_input_migrate_set_parameters,
+ },
+SQMP
query-migrate-capabilities
--------------------------
--
1.9.3
next prev parent reply other threads:[~2014-07-04 17:42 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-04 17:41 [Qemu-devel] [PATCH 00/46] Postcopy implementation Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 01/46] qemu_ram_foreach_block: pass up error value, and down the ramblock name Dr. David Alan Gilbert (git)
2014-07-07 15:46 ` Eric Blake
2014-07-07 15:48 ` Dr. David Alan Gilbert
2014-07-04 17:41 ` [Qemu-devel] [PATCH 02/46] Move QEMUFile structure to qemu-file.h Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 03/46] QEMUSizedBuffer/QEMUFile Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 04/46] improve DPRINTF macros, add to savevm Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 05/46] Add qemu_get_counted_string to read a string prefixed by a count byte Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 06/46] Create MigrationIncomingState Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 07/46] Return path: Open a return path on QEMUFile for sockets Dr. David Alan Gilbert (git)
2014-07-05 10:06 ` Paolo Bonzini
2014-07-16 9:37 ` Dr. David Alan Gilbert
2014-07-16 9:50 ` Paolo Bonzini
2014-07-16 11:52 ` Dr. David Alan Gilbert
2014-07-16 12:31 ` Paolo Bonzini
2014-07-16 17:10 ` Dr. David Alan Gilbert
2014-07-17 6:25 ` Paolo Bonzini
2014-07-04 17:41 ` [Qemu-devel] [PATCH 08/46] Return path: socket_writev_buffer: Block even on non-blocking fd's Dr. David Alan Gilbert (git)
2014-07-05 10:07 ` Paolo Bonzini
2014-07-04 17:41 ` [Qemu-devel] [PATCH 09/46] Migration commands Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 10/46] Return path: Control commands Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 11/46] Return path: Send responses from destination to source Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 12/46] Return path: Source handling of return path Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 13/46] qemu_loadvm debug Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 14/46] ram_debug_dump_bitmap: Dump a migration bitmap as text Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 15/46] Rework loadvm path for subloops Dr. David Alan Gilbert (git)
2014-07-05 10:26 ` Paolo Bonzini
2014-07-07 14:35 ` Dr. David Alan Gilbert
2014-07-07 14:53 ` Paolo Bonzini
2014-07-07 15:04 ` Dr. David Alan Gilbert
2014-07-16 9:25 ` Dr. David Alan Gilbert
2014-07-04 17:41 ` [Qemu-devel] [PATCH 16/46] Add migration-capability boolean for postcopy-ram Dr. David Alan Gilbert (git)
2014-07-07 19:41 ` Eric Blake
2014-07-07 20:23 ` Dr. David Alan Gilbert
2014-07-10 16:17 ` Paolo Bonzini
2014-07-10 19:02 ` Dr. David Alan Gilbert
2014-07-04 17:41 ` [Qemu-devel] [PATCH 17/46] Add wrappers and handlers for sending/receiving the postcopy-ram migration messages Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 18/46] QEMU_VM_CMD_PACKAGED: Send a packaged chunk of migration stream Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 19/46] migrate_init: Call from savevm Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 20/46] Allow savevm handlers to state whether they could go into postcopy Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 21/46] postcopy: OS support test Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` Dr. David Alan Gilbert (git) [this message]
2014-07-07 19:50 ` [Qemu-devel] [PATCH 22/46] Migration parameters: Add qmp/hmp commands for setting/viewing Eric Blake
2014-07-04 17:41 ` [Qemu-devel] [PATCH 23/46] MIG_STATE_POSTCOPY_ACTIVE: Add new migration state Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 24/46] qemu_savevm_state_complete: Postcopy changes Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 25/46] Postcopy: Maintain sentmap during postcopy pre phase Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 26/46] Postcopy page-map-incoming (PMI) structure Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 27/46] postcopy: Add incoming_init/cleanup functions Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 28/46] postcopy: Incoming initialisation Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 29/46] postcopy: ram_enable_notify to switch on userfault Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 30/46] Postcopy: postcopy_start Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 31/46] Postcopy: Rework migration thread for postcopy mode Dr. David Alan Gilbert (git)
2014-07-05 10:19 ` Paolo Bonzini
2014-08-28 11:04 ` Dr. David Alan Gilbert
2014-08-28 11:23 ` Paolo Bonzini
2014-07-04 17:41 ` [Qemu-devel] [PATCH 32/46] mig fd_connect: open return path Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 33/46] Postcopy: Create a fault handler thread before marking the ram as userfault Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 34/46] Page request: Add MIG_RPCOMM_REQPAGES reverse command Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 35/46] Page request: Process incoming page request Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 36/46] Page request: Consume pages off the post-copy queue Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 37/46] Add assertion to check migration_dirty_pages doesn't go -ve; have seen it happen once but not sure why Dr. David Alan Gilbert (git)
2014-07-11 15:20 ` Eric Blake
2014-07-11 15:41 ` Dr. David Alan Gilbert
2014-07-04 17:41 ` [Qemu-devel] [PATCH 38/46] postcopy_ram.c: place_page and helpers Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 39/46] Postcopy: Use helpers to map pages during migration Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 40/46] qemu_ram_block_from_host Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 41/46] Handle userfault requests (although userfaultfd not done yet) Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 42/46] Start up a postcopy/listener thread ready for incoming page data Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 43/46] postcopy: Wire up loadvm_postcopy_ram_handle_{run, end} commands Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 44/46] postcopy: Use userfaultfd Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 45/46] End of migration for postcopy Dr. David Alan Gilbert (git)
2014-07-04 17:41 ` [Qemu-devel] [PATCH 46/46] Start documenting how postcopy works Dr. David Alan Gilbert (git)
2014-07-05 10:28 ` [Qemu-devel] [PATCH 00/46] Postcopy implementation Paolo Bonzini
2014-07-07 14:02 ` Dr. David Alan Gilbert
2014-07-07 14:35 ` Paolo Bonzini
2014-07-07 14:58 ` Dr. David Alan Gilbert
2014-07-10 11:29 ` Dr. David Alan Gilbert
2014-07-10 12:48 ` Eric Blake
2014-07-10 13:37 ` Dr. David Alan Gilbert
2014-07-10 15:33 ` Andrea Arcangeli
2014-07-10 15:49 ` Dr. David Alan Gilbert
2014-07-11 4:05 ` Sanidhya Kashyap
2014-08-11 15:31 ` Dr. David Alan Gilbert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1404495717-4239-23-git-send-email-dgilbert@redhat.com \
--to=dgilbert@redhat.com \
--cc=aarcange@redhat.com \
--cc=lilei@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=yamahata@private.email.ne.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).