On Mon, Jan 15, 2018 at 03:25:18PM +0100, Jiri Denemark wrote: > On Mon, Jan 15, 2018 at 12:04:55 -0200, Eduardo Habkost wrote: > > CCing libvirt developers. > ... > > This case is slightly more problematic, however: the new feature > > is actually migratable (under very controlled circumstances) > > because of patch 2/2, but it is not migration-safe[1]. This > > means libvirt shouldn't include it in "host-model" expansion > > (which uses the query-cpu-model-expansion QMP command) until we > > make the feature migration-safe. > > > > For QEMU, this means the feature shouldn't be returned by > > "query-cpu-model-expansion type=static model=max" (but it can be > > returned by "query-cpu-model-expansion type=full model=max"). > > > > Jiri, it looks like libvirt uses type=full on > > query-cpu-model-expansion on x86. It needs to use > > type=static[2], or it will have no way to find out if a feature > > is migration-safe or not. > ... > > [2] It looks like libvirt uses type=full because it wants to get > > all QOM property aliases returned. In this case, one > > solution for libvirt is to use: > > > > static_expansion = query_cpu_model_expansion(type=static, model) > > all_props = query_cpu_model_expansion(type=full, static_expansion) > > This is exactly what libvirt is doing (with model = "host") ever since > query-cpu-model-expansion support was implemented for x86. Oh, now I see that the x86 code uses QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL and not just QEMU_MONITOR_CPU_MODEL_EXPANSION_FULL. Nice! -- Eduardo