Description of problem: Upstream libvirt (git ea1eadd6a31 from today) no longer seems to work with cpu host-passthrough. When running libguestfs-test-tool (or any other libguestfs using program), it says: Original error from libvirt: unsupported configuration: CPU specification not supported by hypervisor [code=67 domain=10] Version-Release number of selected component (if applicable): libvirt from git libguestfs 1.25.43 qemu-1.7.0-5.fc21.x86_64 How reproducible: 100% Steps to Reproduce: 1. Compile libvirt from git. 2. Run this command: /path/to/libvirt/run libguestfs-test-tool Additional information: The libvirt XML that libguestfs generates is this: <?xml version="1.0"?> <domain type="kvm" xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0"> <name>guestfs-4g8uz7ybjc5p4wu2</name> <memory unit="MiB">500</memory> <currentMemory unit="MiB">500</currentMemory> <cpu mode="host-passthrough"> <model fallback="allow"/> </cpu> <vcpu>1</vcpu> <clock offset="utc"> <timer name="rtc" tickpolicy="catchup"/> <timer name="pit" tickpolicy="delay"/> <timer name="hpet" present="no"/> </clock> <os> <type>hvm</type> <kernel>/var/tmp/.guestfs-1000/appliance.d/kernel</kernel> <initrd>/var/tmp/.guestfs-1000/appliance.d/initrd</initrd> <cmdline>panic=1 console=ttyS0 udevtimeout=600 no_timer_check acpi=off printk.time=1 cgroup_disable=memory root=/dev/sdb selinux=0 guestfs_verbose=1 TERM=xterm-256color</cmdline> </os> <on_reboot>destroy</on_reboot> <devices> <controller type="scsi" index="0" model="virtio-scsi"/> <disk device="disk" type="file"> <source file="/tmp/libguestfs0yo7yP/scratch.1"/> <target dev="sda" bus="scsi"/> <driver name="qemu" type="raw" cache="unsafe"/> <address type="drive" controller="0" bus="0" target="0" unit="0"/> </disk> <disk type="file" device="disk"> <source file="/tmp/libguestfs0yo7yP/overlay2"/> <target dev="sdb" bus="scsi"/> <driver name="qemu" type="qcow2" cache="unsafe"/> <address type="drive" controller="0" bus="0" target="1" unit="0"/> <shareable/> </disk> <serial type="unix"> <source mode="connect" path="/tmp/libguestfs0yo7yP/console.sock"/> <target port="0"/> </serial> <channel type="unix"> <source mode="connect" path="/tmp/libguestfs0yo7yP/guestfsd.sock"/> <target type="virtio" name="org.libguestfs.channel.0"/> </channel> </devices> <qemu:commandline> <qemu:env name="TMPDIR" value="/var/tmp"/> </qemu:commandline> </domain> Libvirt capabilities: <capabilities> <host> <uuid>764d0cdd-007b-4fb4-a0e0-656db4931b03</uuid> <cpu> <arch>x86_64</arch> <topology sockets='1' cores='2' threads='2'/> </cpu> <power_management> <suspend_mem/> <suspend_disk/> <suspend_hybrid/> </power_management> <migration_features> <live/> <uri_transports> <uri_transport>tcp</uri_transport> </uri_transports> </migration_features> <topology> <cells num='1'> <cell id='0'> <memory unit='KiB'>16127992</memory> <cpus num='4'> <cpu id='0' socket_id='0' core_id='0' siblings='0-1'/> <cpu id='1' socket_id='0' core_id='0' siblings='0-1'/> <cpu id='2' socket_id='0' core_id='1' siblings='2-3'/> <cpu id='3' socket_id='0' core_id='1' siblings='2-3'/> </cpus> </cell> </cells> </topology> <secmodel> <model>selinux</model> <doi>0</doi> <baselabel type='kvm'>system_u:system_r:svirt_t:s0</baselabel> <baselabel type='qemu'>system_u:system_r:svirt_tcg_t:s0</baselabel> </secmodel> </host> <guest> <os_type>hvm</os_type> <arch name='alpha'> <wordsize>64</wordsize> <emulator>/usr/bin/qemu-system-alpha</emulator> <machine maxCpus='4'>clipper</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='armv7l'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-arm</emulator> <machine maxCpus='1'>integratorcp</machine> <machine maxCpus='1'>z2</machine> <machine maxCpus='1'>xilinx-zynq-a9</machine> <machine maxCpus='4'>vexpress-a15</machine> <machine maxCpus='4'>vexpress-a9</machine> <machine maxCpus='1'>versatileab</machine> <machine maxCpus='1'>versatilepb</machine> <machine maxCpus='1'>tosa</machine> <machine maxCpus='1'>lm3s6965evb</machine> <machine maxCpus='1'>lm3s811evb</machine> <machine maxCpus='1'>terrier</machine> <machine maxCpus='1'>borzoi</machine> <machine maxCpus='1'>spitz</machine> <machine maxCpus='1'>akita</machine> <machine maxCpus='4'>realview-pbx-a9</machine> <machine maxCpus='1'>realview-pb-a8</machine> <machine maxCpus='4'>realview-eb-mpcore</machine> <machine maxCpus='1'>realview-eb</machine> <machine maxCpus='1'>cheetah</machine> <machine maxCpus='1'>sx1-v1</machine> <machine maxCpus='1'>sx1</machine> <machine maxCpus='1'>n810</machine> <machine maxCpus='1'>n800</machine> <machine maxCpus='1'>musicpal</machine> <machine maxCpus='1'>mainstone</machine> <machine maxCpus='1'>kzm</machine> <machine maxCpus='4'>midway</machine> <machine maxCpus='4'>highbank</machine> <machine maxCpus='1'>verdex</machine> <machine maxCpus='1'>connex</machine> <machine maxCpus='2'>smdkc210</machine> <machine maxCpus='2'>nuri</machine> <machine maxCpus='1'>collie</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='cris'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-cris</emulator> <machine maxCpus='1'>axis-dev88</machine> <domain type='qemu'> </domain> </arch> </guest> <guest> <os_type>hvm</os_type> <arch name='i686'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-i386</emulator> <machine canonical='pc-i440fx-1.7' maxCpus='255'>pc</machine> <machine maxCpus='255'>pc-q35-1.4</machine> <machine maxCpus='255'>pc-q35-1.5</machine> <machine maxCpus='255'>pc-q35-1.6</machine> <machine canonical='pc-q35-1.7' maxCpus='255'>q35</machine> <machine maxCpus='1'>isapc</machine> <machine maxCpus='255'>pc-0.10</machine> <machine maxCpus='255'>pc-0.11</machine> <machine maxCpus='255'>pc-0.12</machine> <machine maxCpus='255'>pc-0.13</machine> <machine maxCpus='255'>pc-0.14</machine> <machine maxCpus='255'>pc-0.15</machine> <machine maxCpus='255'>pc-1.0</machine> <machine maxCpus='255'>pc-1.1</machine> <machine maxCpus='255'>pc-1.2</machine> <machine maxCpus='255'>pc-1.3</machine> <machine maxCpus='255'>pc-i440fx-1.4</machine> <machine maxCpus='255'>pc-i440fx-1.5</machine> <machine maxCpus='255'>pc-i440fx-1.6</machine> <domain type='qemu'> </domain> <domain type='kvm'> <emulator>/usr/bin/qemu-kvm</emulator> <machine canonical='pc-i440fx-1.7' maxCpus='255'>pc</machine> <machine maxCpus='255'>pc-q35-1.4</machine> <machine maxCpus='255'>pc-q35-1.5</machine> <machine maxCpus='255'>pc-q35-1.6</machine> <machine canonical='pc-q35-1.7' maxCpus='255'>q35</machine> <machine maxCpus='1'>isapc</machine> <machine maxCpus='255'>pc-0.10</machine> <machine maxCpus='255'>pc-0.11</machine> <machine maxCpus='255'>pc-0.12</machine> <machine maxCpus='255'>pc-0.13</machine> <machine maxCpus='255'>pc-0.14</machine> <machine maxCpus='255'>pc-0.15</machine> <machine maxCpus='255'>pc-1.0</machine> <machine maxCpus='255'>pc-1.1</machine> <machine maxCpus='255'>pc-1.2</machine> <machine maxCpus='255'>pc-1.3</machine> <machine maxCpus='255'>pc-i440fx-1.4</machine> <machine maxCpus='255'>pc-i440fx-1.5</machine> <machine maxCpus='255'>pc-i440fx-1.6</machine> </domain> </arch> <features> <deviceboot/> <acpi default='on' toggle='yes'/> <apic default='on' toggle='no'/> <pae/> <nonpae/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='lm32'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-lm32</emulator> <machine maxCpus='1'>lm32-evr</machine> <machine maxCpus='1'>milkymist</machine> <machine maxCpus='1'>lm32-uclinux</machine> <domain type='qemu'> </domain> </arch> </guest> <guest> <os_type>hvm</os_type> <arch name='m68k'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-m68k</emulator> <machine maxCpus='1'>mcf5208evb</machine> <machine maxCpus='1'>dummy</machine> <machine maxCpus='1'>an5206</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='microblaze'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-microblaze</emulator> <machine maxCpus='1'>petalogix-s3adsp1800</machine> <machine maxCpus='1'>petalogix-ml605</machine> <domain type='qemu'> </domain> </arch> </guest> <guest> <os_type>hvm</os_type> <arch name='microblazeel'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-microblazeel</emulator> <machine maxCpus='1'>petalogix-s3adsp1800</machine> <machine maxCpus='1'>petalogix-ml605</machine> <domain type='qemu'> </domain> </arch> </guest> <guest> <os_type>hvm</os_type> <arch name='mips'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-mips</emulator> <machine maxCpus='16'>malta</machine> <machine maxCpus='1'>mips</machine> <machine maxCpus='1'>mipssim</machine> <machine maxCpus='1'>pica61</machine> <machine maxCpus='1'>magnum</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='mipsel'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-mipsel</emulator> <machine maxCpus='16'>malta</machine> <machine maxCpus='1'>mips</machine> <machine maxCpus='1'>mipssim</machine> <machine maxCpus='1'>pica61</machine> <machine maxCpus='1'>magnum</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='mips64'> <wordsize>64</wordsize> <emulator>/usr/bin/qemu-system-mips64</emulator> <machine maxCpus='16'>malta</machine> <machine maxCpus='1'>mips</machine> <machine maxCpus='1'>mipssim</machine> <machine maxCpus='1'>pica61</machine> <machine maxCpus='1'>magnum</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='mips64el'> <wordsize>64</wordsize> <emulator>/usr/bin/qemu-system-mips64el</emulator> <machine maxCpus='16'>malta</machine> <machine maxCpus='1'>mips</machine> <machine maxCpus='1'>mipssim</machine> <machine maxCpus='1'>pica61</machine> <machine maxCpus='1'>magnum</machine> <machine maxCpus='1'>fulong2e</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='ppc'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-ppc</emulator> <machine maxCpus='1'>g3beige</machine> <machine maxCpus='1'>virtex-ml507</machine> <machine maxCpus='1'>prep</machine> <machine maxCpus='1'>bamboo</machine> <machine maxCpus='1'>taihu</machine> <machine maxCpus='1'>ref405ep</machine> <machine maxCpus='15'>mpc8544ds</machine> <machine maxCpus='1'>mac99</machine> <machine maxCpus='32'>ppce500</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='ppc64'> <wordsize>64</wordsize> <emulator>/usr/bin/qemu-system-ppc64</emulator> <machine maxCpus='256'>pseries</machine> <machine maxCpus='1'>virtex-ml507</machine> <machine maxCpus='1'>prep</machine> <machine maxCpus='1'>bamboo</machine> <machine maxCpus='1'>taihu</machine> <machine maxCpus='1'>ref405ep</machine> <machine maxCpus='15'>mpc8544ds</machine> <machine maxCpus='1'>g3beige</machine> <machine maxCpus='1'>mac99</machine> <machine maxCpus='32'>ppce500</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='ppcemb'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-ppcemb</emulator> <machine maxCpus='1'>g3beige</machine> <machine maxCpus='1'>virtex-ml507</machine> <machine maxCpus='1'>prep</machine> <machine maxCpus='1'>bamboo</machine> <machine maxCpus='1'>taihu</machine> <machine maxCpus='1'>ref405ep</machine> <machine maxCpus='15'>mpc8544ds</machine> <machine maxCpus='1'>mac99</machine> <machine maxCpus='32'>ppce500</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='s390x'> <wordsize>64</wordsize> <emulator>/usr/bin/qemu-system-s390x</emulator> <machine canonical='s390-virtio' maxCpus='255'>s390</machine> <machine canonical='s390-ccw-virtio' maxCpus='255'>s390-ccw</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='sh4'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-sh4</emulator> <machine maxCpus='1'>shix</machine> <machine maxCpus='1'>r2d</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='sh4eb'> <wordsize>64</wordsize> <emulator>/usr/bin/qemu-system-sh4eb</emulator> <machine maxCpus='1'>shix</machine> <machine maxCpus='1'>r2d</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='sparc'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-sparc</emulator> <machine maxCpus='1'>SS-5</machine> <machine maxCpus='1'>SPARCbook</machine> <machine maxCpus='1'>SPARCClassic</machine> <machine maxCpus='1'>SS-4</machine> <machine maxCpus='1'>LX</machine> <machine maxCpus='1'>Voyager</machine> <machine maxCpus='4'>SS-20</machine> <machine maxCpus='4'>SS-600MP</machine> <machine maxCpus='4'>SS-10</machine> <machine maxCpus='1'>leon3_generic</machine> <domain type='qemu'> </domain> </arch> </guest> <guest> <os_type>hvm</os_type> <arch name='sparc64'> <wordsize>64</wordsize> <emulator>/usr/bin/qemu-system-sparc64</emulator> <machine maxCpus='1'>sun4u</machine> <machine maxCpus='1'>Niagara</machine> <machine maxCpus='1'>sun4v</machine> <domain type='qemu'> </domain> </arch> <features> <deviceboot/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='unicore32'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-unicore32</emulator> <machine maxCpus='1'>puv3</machine> <domain type='qemu'> </domain> </arch> </guest> <guest> <os_type>hvm</os_type> <arch name='x86_64'> <wordsize>64</wordsize> <emulator>/usr/bin/qemu-system-x86_64</emulator> <machine canonical='pc-i440fx-1.7' maxCpus='255'>pc</machine> <machine maxCpus='255'>pc-q35-1.4</machine> <machine maxCpus='255'>pc-q35-1.5</machine> <machine maxCpus='255'>pc-q35-1.6</machine> <machine canonical='pc-q35-1.7' maxCpus='255'>q35</machine> <machine maxCpus='1'>isapc</machine> <machine maxCpus='255'>pc-0.10</machine> <machine maxCpus='255'>pc-0.11</machine> <machine maxCpus='255'>pc-0.12</machine> <machine maxCpus='255'>pc-0.13</machine> <machine maxCpus='255'>pc-0.14</machine> <machine maxCpus='255'>pc-0.15</machine> <machine maxCpus='255'>pc-1.0</machine> <machine maxCpus='255'>pc-1.1</machine> <machine maxCpus='255'>pc-1.2</machine> <machine maxCpus='255'>pc-1.3</machine> <machine maxCpus='255'>pc-i440fx-1.4</machine> <machine maxCpus='255'>pc-i440fx-1.5</machine> <machine maxCpus='255'>pc-i440fx-1.6</machine> <domain type='qemu'> </domain> <domain type='kvm'> <emulator>/usr/bin/qemu-kvm</emulator> <machine canonical='pc-i440fx-1.7' maxCpus='255'>pc</machine> <machine maxCpus='255'>pc-q35-1.4</machine> <machine maxCpus='255'>pc-q35-1.5</machine> <machine maxCpus='255'>pc-q35-1.6</machine> <machine canonical='pc-q35-1.7' maxCpus='255'>q35</machine> <machine maxCpus='1'>isapc</machine> <machine maxCpus='255'>pc-0.10</machine> <machine maxCpus='255'>pc-0.11</machine> <machine maxCpus='255'>pc-0.12</machine> <machine maxCpus='255'>pc-0.13</machine> <machine maxCpus='255'>pc-0.14</machine> <machine maxCpus='255'>pc-0.15</machine> <machine maxCpus='255'>pc-1.0</machine> <machine maxCpus='255'>pc-1.1</machine> <machine maxCpus='255'>pc-1.2</machine> <machine maxCpus='255'>pc-1.3</machine> <machine maxCpus='255'>pc-i440fx-1.4</machine> <machine maxCpus='255'>pc-i440fx-1.5</machine> <machine maxCpus='255'>pc-i440fx-1.6</machine> </domain> </arch> <features> <deviceboot/> <acpi default='on' toggle='yes'/> <apic default='on' toggle='no'/> </features> </guest> <guest> <os_type>hvm</os_type> <arch name='xtensa'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-xtensa</emulator> <machine maxCpus='4'>sim</machine> <machine maxCpus='4'>lx200</machine> <machine maxCpus='4'>lx60</machine> <domain type='qemu'> </domain> </arch> </guest> <guest> <os_type>hvm</os_type> <arch name='xtensaeb'> <wordsize>32</wordsize> <emulator>/usr/bin/qemu-system-xtensaeb</emulator> <machine maxCpus='4'>sim</machine> <machine maxCpus='4'>lx200</machine> <machine maxCpus='4'>lx60</machine> <domain type='qemu'> </domain> </arch> </guest> </capabilities> Additional request: Please run libvirt against latest libguestfs-test-tool to ensure it doesn't regress.
Rich, I don't think there is a regression here. Capabilities XML shows <cpu> <arch>x86_64</arch> <topology sockets='1' cores='2' threads='2'/> </cpu> which means libvirt was not able to detect host CPU model. If you think there should be no reason for this when you are asking for host-passthrough model, you're definitely correct but libvirt currently requires it and always has. We should fix it though. Anyway, the question is why libvirt did not find any CPU model on your host. Since you're running libvirt from git, I suspect this is because libvirtd was not able to find cpu_map.xml. Do you also have libvirt installed on the host? In other words, does /usr/share/libvirt/cpu_map.xml exist? If not, we found the reason for the failure described in this bug.
So it turns out that using: ./configure --prefix=/usr fixes it. However: (1) The error message should say that it cannot load cpu_map.xml. (2) This is using the system libvirt cpu_map.xml, which works in this case, but wouldn't work in other cases. The ./run script should be able to set an environment variable so libvirt picks the cpu_map.xml from its source tree.
Patch proposed upstream: https://www.redhat.com/archives/libvir-list/2014-March/msg00621.html
This is now fixed in git by v1.2.2-100-ge562e82: commit e562e82f76614beff132ab48d3f0dabf64b20c5b Author: Jiri Denemark <jdenemar> Date: Mon Mar 10 16:00:49 2014 +0100 Load CPU map from builddir when run uninstalled When libvirtd is run from a build directory without being installed, it should not depend on files from a libvirt package installed in the system. Not only because there may not be any libvirt installed at all. We already do a good job for plugins but cpu_map.xml was still loaded from the system. The Makefile.am change is necessary to make this all work from VPATH builds since libvirtd has no idea where to find libvirt sources. It only knows the path from which it was started, i.e, a builddir. https://bugzilla.redhat.com/show_bug.cgi?id=1074327 Signed-off-by: Jiri Denemark <jdenemar>