Miscellaneous patches for 2019-04-02

-----BEGIN PGP SIGNATURE-----
 
 iQIcBAABAgAGBQJco01zAAoJEDhwtADrkYZTzJkP/1izIRaWBMOwhwwDORgdxIro
 Qgd8cgXSiC2WAPtagEdaQQRtYdEwlBTCcnRBqXQixWnJ52FnaijwRdUx2cwTXP2x
 rX0G0inhS7xE7P9Zr9sPhTMafLN5kUyFsm5WsZZbLDcimXMZtAYm7vZAdvneMfMj
 MjOu7FXLtlwvU2Gg1z8Kog3+ShkafHsUm1lQnAp2YQSsSCHRIazTuyyqIpqZEyUt
 ie7zI7GMA0arIJfNQSfrgLiquD4Rj+Cn4RHp4RnKeGTExhNrZJcSk3+IUz25MJIK
 O+Rlftr+iHk/FzoAa0NeASaNuI+cUjbxTEJwvz+sbulSVLBX58pP22vxh4wauslm
 VjrHzj5xRo6w6RKPmkJn0CgJnIAGc7Ulzyt/gpVT+Qm2SRY5EnV3KoEtYcU7xtHw
 uK8YRWThadkG+nHc2LOR8DjjT/h+JitpjwvPadt2NZpoGZkrvGuKZAJ4TKf8Yv0z
 eiyfxV4trZisCEInIcMOVa7cAhO7i7/eUO1/IFNrD+X++/BTWFAlW3cqj41PUl+E
 exGWHHP+Z08TFV2kKobmee1xrv1RRhdFYk8BcWHS83fxqHNGCoPHE/dfB/kJGCMr
 96JE6LTDVIRmMHQjzs0nMHtTZPfaONvdjHuv9kuQj6wnbjYAE8z0ZlcnEa9sSZZQ
 CcaSZLqGJstkoUJwRZQx
 =yOO7
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/armbru/tags/pull-misc-2019-04-02' into staging

Miscellaneous patches for 2019-04-02

# gpg: Signature made Tue 02 Apr 2019 12:54:27 BST
# gpg:                using RSA key 3870B400EB918653
# gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full]
# gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>" [full]
# Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867  4E5F 3870 B400 EB91 8653

* remotes/armbru/tags/pull-misc-2019-04-02:
  accel: Unbreak accelerator fallback
  vl: Document dependencies hiding in global and compat props
  migration: Support adding migration blockers earlier
  Revert "migration: move only_migratable to MigrationState"
  Revert "vl: Fix to create migration object before block backends again"
  qapi/migration.json: Rename COLOStatus last_mode to last-mode
  qapi/migration.json: Fix ColoStatus member last_mode's version
  vl: Fix error location of positional arguments

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2019-04-02 16:13:59 +01:00
commit 37301a8d0f
7 changed files with 44 additions and 27 deletions

View File

@ -65,8 +65,9 @@ static int accel_init_machine(AccelClass *acc, MachineState *ms)
ms->accelerator = NULL; ms->accelerator = NULL;
*(acc->allowed) = false; *(acc->allowed) = false;
object_unref(OBJECT(accel)); object_unref(OBJECT(accel));
} else {
object_set_accelerator_compat_props(acc->compat_props);
} }
object_set_accelerator_compat_props(acc->compat_props);
return ret; return ret;
} }

View File

@ -14,6 +14,7 @@
/* vl.c */ /* vl.c */
extern const char *bios_name; extern const char *bios_name;
extern int only_migratable;
extern const char *qemu_name; extern const char *qemu_name;
extern QemuUUID qemu_uuid; extern QemuUUID qemu_uuid;
extern bool qemu_uuid_set; extern bool qemu_uuid_set;

View File

@ -1646,7 +1646,11 @@ bool migration_in_postcopy_after_devices(MigrationState *s)
bool migration_is_idle(void) bool migration_is_idle(void)
{ {
MigrationState *s = migrate_get_current(); MigrationState *s = current_migration;
if (!s) {
return true;
}
switch (s->state) { switch (s->state) {
case MIGRATION_STATUS_NONE: case MIGRATION_STATUS_NONE:
@ -1707,7 +1711,7 @@ static GSList *migration_blockers;
int migrate_add_blocker(Error *reason, Error **errp) int migrate_add_blocker(Error *reason, Error **errp)
{ {
if (migrate_get_current()->only_migratable) { if (only_migratable) {
error_propagate_prepend(errp, error_copy(reason), error_propagate_prepend(errp, error_copy(reason),
"disallowing migration blocker " "disallowing migration blocker "
"(--only_migratable) for: "); "(--only_migratable) for: ");
@ -3337,7 +3341,7 @@ void migration_global_dump(Monitor *mon)
monitor_printf(mon, "store-global-state: %s\n", monitor_printf(mon, "store-global-state: %s\n",
ms->store_global_state ? "on" : "off"); ms->store_global_state ? "on" : "off");
monitor_printf(mon, "only-migratable: %s\n", monitor_printf(mon, "only-migratable: %s\n",
ms->only_migratable ? "on" : "off"); only_migratable ? "on" : "off");
monitor_printf(mon, "send-configuration: %s\n", monitor_printf(mon, "send-configuration: %s\n",
ms->send_configuration ? "on" : "off"); ms->send_configuration ? "on" : "off");
monitor_printf(mon, "send-section-footer: %s\n", monitor_printf(mon, "send-section-footer: %s\n",
@ -3352,7 +3356,6 @@ void migration_global_dump(Monitor *mon)
static Property migration_properties[] = { static Property migration_properties[] = {
DEFINE_PROP_BOOL("store-global-state", MigrationState, DEFINE_PROP_BOOL("store-global-state", MigrationState,
store_global_state, true), store_global_state, true),
DEFINE_PROP_BOOL("only-migratable", MigrationState, only_migratable, false),
DEFINE_PROP_BOOL("send-configuration", MigrationState, DEFINE_PROP_BOOL("send-configuration", MigrationState,
send_configuration, true), send_configuration, true),
DEFINE_PROP_BOOL("send-section-footer", MigrationState, DEFINE_PROP_BOOL("send-section-footer", MigrationState,

View File

@ -219,9 +219,6 @@ struct MigrationState
*/ */
bool store_global_state; bool store_global_state;
/* Whether the VM is only allowing for migratable devices */
bool only_migratable;
/* Whether we send QEMU_VM_CONFIGURATION during migration */ /* Whether we send QEMU_VM_CONFIGURATION during migration */
bool send_configuration; bool send_configuration;
/* Whether we send section footer during migration */ /* Whether we send section footer during migration */

View File

@ -2844,7 +2844,7 @@ void vmstate_register_ram_global(MemoryRegion *mr)
bool vmstate_check_only_migratable(const VMStateDescription *vmsd) bool vmstate_check_only_migratable(const VMStateDescription *vmsd)
{ {
/* check needed if --only-migratable is specified */ /* check needed if --only-migratable is specified */
if (!migrate_get_current()->only_migratable) { if (!only_migratable) {
return true; return true;
} }

View File

@ -1380,16 +1380,16 @@
# @mode: COLO running mode. If COLO is running, this field will return # @mode: COLO running mode. If COLO is running, this field will return
# 'primary' or 'secondary'. # 'primary' or 'secondary'.
# #
# @last_mode: COLO last running mode. If COLO is running, this field # @last-mode: COLO last running mode. If COLO is running, this field
# will return same like mode field, after failover we can # will return same like mode field, after failover we can
# use this field to get last colo mode. (since 4.1) # use this field to get last colo mode. (since 4.0)
# #
# @reason: describes the reason for the COLO exit. # @reason: describes the reason for the COLO exit.
# #
# Since: 3.1 # Since: 3.1
## ##
{ 'struct': 'COLOStatus', { 'struct': 'COLOStatus',
'data': { 'mode': 'COLOMode', 'last_mode': 'COLOMode', 'data': { 'mode': 'COLOMode', 'last-mode': 'COLOMode',
'reason': 'COLOExitReason' } } 'reason': 'COLOExitReason' } }
## ##

45
vl.c
View File

@ -185,6 +185,7 @@ const char *prom_envs[MAX_PROM_ENVS];
int boot_menu; int boot_menu;
bool boot_strict; bool boot_strict;
uint8_t *boot_splash_filedata; uint8_t *boot_splash_filedata;
int only_migratable; /* turn it off unless user states otherwise */
bool wakeup_suspend_enabled; bool wakeup_suspend_enabled;
int icount_align_option; int icount_align_option;
@ -3119,6 +3120,7 @@ int main(int argc, char **argv, char **envp)
if (optind >= argc) if (optind >= argc)
break; break;
if (argv[optind][0] != '-') { if (argv[optind][0] != '-') {
loc_set_cmdline(argv, optind, 1);
drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS); drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS);
} else { } else {
const QEMUOption *popt; const QEMUOption *popt;
@ -3799,13 +3801,7 @@ int main(int argc, char **argv, char **envp)
incoming = optarg; incoming = optarg;
break; break;
case QEMU_OPTION_only_migratable: case QEMU_OPTION_only_migratable:
/* only_migratable = 1;
* TODO: we can remove this option one day, and we
* should all use:
*
* "-global migration.only-migratable=true"
*/
qemu_global_option("migration.only-migratable=true");
break; break;
case QEMU_OPTION_nodefaults: case QEMU_OPTION_nodefaults:
has_defaults = 0; has_defaults = 0;
@ -4276,17 +4272,10 @@ int main(int argc, char **argv, char **envp)
exit(0); exit(0);
} }
/*
* Migration object can only be created after global properties
* are applied correctly.
*/
migration_object_init();
/* /*
* Note: we need to create block backends before * Note: we need to create block backends before
* machine_set_property(), so machine properties can refer to * machine_set_property(), so machine properties can refer to
* them, and after migration_object_init(), so we can create * them.
* migration blockers.
*/ */
configure_blockdev(&bdo_queue, machine_class, snapshot); configure_blockdev(&bdo_queue, machine_class, snapshot);
@ -4297,13 +4286,39 @@ int main(int argc, char **argv, char **envp)
current_machine->maxram_size = maxram_size; current_machine->maxram_size = maxram_size;
current_machine->ram_slots = ram_slots; current_machine->ram_slots = ram_slots;
/*
* Note: uses machine properties such as kernel-irqchip, must run
* after machine_set_property().
*/
configure_accelerator(current_machine, argv[0]); configure_accelerator(current_machine, argv[0]);
/*
* Beware, QOM objects created before this point miss global and
* compat properties.
*
* Global properties get set up by qdev_prop_register_global(),
* called from user_register_global_props(), and certain option
* desugaring. Also in CPU feature desugaring (buried in
* parse_cpu_model()), which happens below this point, but may
* only target the CPU type, which can only be created after
* parse_cpu_model() returned the type.
*
* Machine compat properties: object_set_machine_compat_props().
* Accelerator compat props: object_set_accelerator_compat_props(),
* called from configure_accelerator().
*/
if (!qtest_enabled() && machine_class->deprecation_reason) { if (!qtest_enabled() && machine_class->deprecation_reason) {
error_report("Machine type '%s' is deprecated: %s", error_report("Machine type '%s' is deprecated: %s",
machine_class->name, machine_class->deprecation_reason); machine_class->name, machine_class->deprecation_reason);
} }
/*
* Note: creates a QOM object, must run only after global and
* compat properties have been set up.
*/
migration_object_init();
if (qtest_chrdev) { if (qtest_chrdev) {
qtest_init(qtest_chrdev, qtest_log, &error_fatal); qtest_init(qtest_chrdev, qtest_log, &error_fatal);
} }