On Tue, Jun 10, 2025 at 05:55:31PM -0300, Fabiano Rosas wrote: > I think I caused some confusion here. I wrote migrate_params_override() > last thing on a friday and forgot it did the right thing from the > beginning: > > migrate_params_apply(&s->defaults); > qmp_migrate_set_parameters(new, errp); > > This s->defaults is poorly named and is actualy already the merge of > defaults + globals, because qdev does it for us. migrate_params_apply()
Ha! I didn't remember this part of details when reading, but then I followed with that idea it won't apply to &defaults. > will then copy that to s->parameters and qmp_migrate_set_parameters() > will apply the 'new' params from 'config' on top s->parameters. An > example: > > Setting multifd-channels (default 2) using various methods and querying > both QMP and HMP: > > a) global overrides default: > > $ ./qemu-system-x86_64 -global migration.multifd-channels=4 ... > => QMP: "multifd-channels": 4, HMP: multifd-channels: 4 > > b) migrate-set-parameter overrides global: > > { 'execute': 'migrate-set-parameters', 'arguments': { 'multifd-channels': 8 > } } > => QMP: "multifd-channels": 8, HMP: multifd-channels: 8 > > c) config not touching the parameter, value is reset to global: > > { 'execute': 'migrate', 'arguments': { ..., 'config': { 'multifd': true } } } > => QMP: "multifd-channels": 4, HMP: multifd-channels: 4 > > d) config overrides all: > > { 'execute': 'migrate', 'arguments': { ..., 'config': {'multifd-channels': > 16 } } } > => QMP: "multifd-channels": 16, HMP: multifd-channels: 16 > > Without global: > > e) default is set initially > > $ ./qemu-system-x86_64 ... > => QMP: "multifd-channels": 2, HMP: multifd-channels: 2 > > f) migrate-set-parameter overrides default: > > { 'execute': 'migrate-set-parameters', 'arguments': { 'multifd-channels': 8 > } } > => QMP: "multifd-channels": 8, HMP: multifd-channels: 8 > > g) config not touching the parameter, value is reset to default: > > { 'execute': 'migrate', 'arguments': { ..., 'config': { 'multifd': true } } } > => "multifd-channels": 2, HMP: multifd-channels: 2 > > h) config overrides all: > > { 'execute': 'migrate', 'arguments': { ..., 'config': {'multifd-channels': > 16 } } } > => QMP: "multifd-channels": 16, HMP: multifd-channels: 16 > > I'll update the variable names and code comments to be more > precise. Sorry for the noise. Good to know it's even working. Thanks for digging it. -- Peter Xu