On Wed, Nov 23, 2022 at 18:34:38 +0530, manish.mishra wrote: > oh i see you meant something like this, > > <cpu mode='custom' match='exact' check='none'> > <numa> > <cell id='0' cpus='0-239' memory='8388608' unit='KiB' memAccess='shared'/> > </numa> > </cpu> > > <qemu:commandline> > <qemu:arg value='-cpu'/> > <qemu:arg value='enforce,Icelake-v4,x2apic=on,hv-time,kvm-pv-eoi=on'/> > </qemu:commandline> This won't work as libvirt should add a default CPU model there and replace check='none' with check='full' once the domain starts. But we actually have a way to do what you need even without any change in libvirt: <cpu mode='host-passthrough' check='none'> <topology .../> <numa> ... </numa> ... </cpu> <qemu:commandline> <qemu:arg value='-cpu'/> <qemu:arg value='Icelake-Server-v4,enforce,x2apic=on,hv-time,kvm-pv-eoi=on'/> </qemu:commandline> This will result in -cpu host,migratable=on ... -cpu Icelake-Server-v4,enforce,x2apic=on,hv-time,kvm-pv-eoi=on and libvirt will not touch the check='none' attribute once the domain starts and it would not complain about any unknown CPU features or models as there's nothing to check in <cpu/>. That is, there's no need to come up with anything special to support passing arbitrary options to -cpu. Jirka