[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH] qemu: enable multifunction for older qemu

Now that RHEL 6.2 Beta is out, it would be nice to test multifunction
devices on that platform.  This changes things so that the multifunction
cap bit can be set in two different ways: by version comparison (needed
for qemu 0.13 which lacked a -device query), and by -device query
(provided by qemu.git and backported to the RHEL beta build of
qemu-kvm which still claims to be a modified 0.12, and therefore needed
for RHEL).

* src/qemu/qemu_capabilities.c (qemuCapsParseDeviceStr): Allow
second method of setting multifunction cap bit.
* tests/qemuhelptest.c (mymain): Test it.
* tests/qemuhelpdata/qemu-kvm- New file.
* tests/qemuhelpdata/qemu-kvm- Likewise.
 src/qemu/qemu_capabilities.c                       |    2 +
 tests/qemuhelpdata/qemu-kvm-   |  230 ++++++++++++++++++++
 .../qemu-kvm-           |  120 ++++++++++
 tests/qemuhelptest.c                               |   59 +++++
 4 files changed, 411 insertions(+), 0 deletions(-)
 create mode 100644 tests/qemuhelpdata/qemu-kvm-
 create mode 100644 tests/qemuhelpdata/qemu-kvm-

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index a653243..49be5a2 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -1264,6 +1264,8 @@ qemuCapsParseDeviceStr(const char *str, virBitmapPtr flags)
     /* Features of given devices. */
     if (strstr(str, "pci-assign.configfd"))
         qemuCapsSet(flags, QEMU_CAPS_PCI_CONFIGFD);
+    if (strstr(str, "pci-assign.multifunction"))
+        qemuCapsSet(flags, QEMU_CAPS_PCI_MULTIFUNCTION);
     if (strstr(str, "virtio-blk-pci.bootindex")) {
         qemuCapsSet(flags, QEMU_CAPS_BOOTINDEX);
         if (strstr(str, "pci-assign.bootindex"))
diff --git a/tests/qemuhelpdata/qemu-kvm- b/tests/qemuhelpdata/qemu-kvm-
new file mode 100644
index 0000000..d5927e6
--- /dev/null
+++ b/tests/qemuhelpdata/qemu-kvm-
@@ -0,0 +1,230 @@
+QEMU PC emulator version 0.12.1 (qemu-kvm-, Copyright (c) 2003-2008 Fabrice Bellard
+WARNING: Direct use of qemu-kvm from the command line is not recommended by Red Hat.
+WARNING: Some command line options listed here may not be available in future releases.
+WARNING: Red Hat recommends the use of libvirt as the stable management interface.
+usage: qemu [options] [disk_image]
+'disk_image' is a raw hard image image for IDE hard disk 0
+Standard options:
+-h or -help     display this help and exit
+-version        display version information and exit
+-M machine      select emulated machine (-M ? for list)
+-cpu cpu        select CPU (-cpu ? for list)
+-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
+                set the number of CPUs to 'n' [default=1]
+                maxcpus= maximum number of total cpus, including
+                  offline CPUs for hotplug etc.
+                cores= number of CPU cores on one socket
+                threads= number of threads on one CPU core
+                sockets= number of discrete sockets in the system
+-numa node[,mem=size][,cpus=cpu[-cpu]][,nodeid=node]
+-fda/-fdb file  use 'file' as floppy disk 0/1 image
+-hda/-hdb file  use 'file' as IDE hard disk 0/1 image
+-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image
+-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)
+-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
+       [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
+       [,cache=writethrough|writeback|none|unsafe][,format=f]
+       [,serial=s][,addr=A][,id=name][,aio=threads|native]
+       [,readonly=on|off][,copy-on-read=on|off][,stream=on|off]
+                use 'file' as a drive image
+-set group.id.arg=value
+                set <arg> parameter for item <id> of type <group>
+                i.e. -set drive.$id.file=/path/to/image
+-global driver.property=value
+                set a global default for a driver property
+-mtdblock file  use 'file' as on-board Flash memory image
+-sd file        use 'file' as SecureDigital card image
+-pflash file    use 'file' as a parallel flash image
+-boot [order=drives][,once=drives][,menu=on|off]
+                'drives': floppy (a), hard disk (c), CD-ROM (d), network (n)
+-snapshot       write to temporary files instead of disk image files
+-m megs         set virtual RAM size to megs MB [default=128]
+-k language     use keyboard layout (for example 'fr' for French)
+-audio-help     print list of audio drivers and their options
+-soundhw c1,... enable audio support
+                and only specified sound cards (comma separated list)
+                use -soundhw ? to get the list of supported cards
+                use -soundhw all to enable all of them
+-usb            enable the USB driver (will be the default soon)
+-usbdevice name add the host or guest USB device 'name'
+-device driver[,prop[=value][,...]]
+                add device (based on driver)
+                prop=value,... sets driver properties
+                use -device ? to print all possible drivers
+                use -device driver,? to print all possible properties
+-name string1[,process=string2]    set the name of the guest
+            string1 sets the window title and string2 the process name (on Linux)
+-uuid %08x-%04x-%04x-%04x-%012x
+                specify machine UUID
+Display options:
+-nographic      disable graphical output and redirect serial I/Os to console
+-spice <args>   enable spice
+-portrait       rotate graphical output 90 deg left (only PXA LCD)
+-vga [std|cirrus|vmware|qxl|xenfb|none]
+                select video card type
+-full-screen    start in full screen
+-vnc display    start a VNC server on display
+i386 target only:
+-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug
+-no-fd-bootchk  disable boot signature checking for floppy disks
+-no-acpi        disable ACPI
+-balloon none   disable balloon device
+-balloon virtio[,addr=str]
+                enable virtio balloon device (default)
+-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...]
+                ACPI table description
+-smbios file=binary
+                Load SMBIOS entry from binary file
+-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]
+                Specify SMBIOS type 0 fields
+-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]
+              [,uuid=uuid][,sku=str][,family=str]
+                Specify SMBIOS type 1 fields
+Network options:
+-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
+                create a new Network Interface Card and connect it to VLAN 'n'
+-net user[,vlan=n][,name=str][,net=addr[/mask]][,host=addr][,restrict=y|n]
+         [,hostname=host][,dhcpstart=addr][,dns=addr][,tftp=dir][,bootfile=f]
+         [,hostfwd=rule][,guestfwd=rule][,smb=dir[,smbserver=addr]]
+                connect the user mode network stack to VLAN 'n', configure its
+                DHCP server and enabled optional services
+-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile][,sndbuf=nbytes][,vnet_hdr=on|off][,vhost=on|off][,vhostfd=h][,vhostforce=on|off]
+                connect the host TAP network interface to VLAN 'n' and use the
+                network scripts 'file' (default=/etc/qemu-ifup)
+                and 'dfile' (default=/etc/qemu-ifdown);
+                use '[down]script=no' to disable script execution;
+                use 'fd=h' to connect to an already opened TAP interface
+                use 'sndbuf=nbytes' to limit the size of the send buffer (the
+                default is disabled 'sndbuf=0' to enable flow control set 'sndbuf=1048576')
+                use vnet_hdr=off to avoid enabling the IFF_VNET_HDR tap flag; use
+                vnet_hdr=on to make the lack of IFF_VNET_HDR support an error condition
+                use vhost=on to enable experimental in kernel accelerator
+                    (only has effect for virtio guests which use MSIX)
+                use vhostforce=on to force vhost on for non-MSIX virtio guests
+                use 'vhostfd=h' to connect to an already opened vhost net device
+-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]
+                connect the vlan 'n' to another VLAN using a socket connection
+-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port]
+                connect the vlan 'n' to multicast maddr and port
+-net dump[,vlan=n][,file=f][,len=n]
+                dump traffic on vlan 'n' to file 'f' (max n bytes per packet)
+-net none       use it alone to have zero network devices; if no -net option
+                is provided, the default is '-net nic -net user'
+-netdev [user|tap|socket],id=str[,option][,option][,...]
+Character device options:
+-chardev null,id=id
+-chardev socket,id=id[,host=host],port=host[,to=to][,ipv4][,ipv6][,nodelay]
+         [,server][,nowait][,telnet] (tcp)
+-chardev socket,id=id,path=path[,server][,nowait][,telnet] (unix)
+-chardev udp,id=id[,host=host],port=port[,localaddr=localaddr]
+         [,localport=localport][,ipv4][,ipv6]
+-chardev msmouse,id=id
+-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]
+-chardev file,id=id,path=path
+-chardev pipe,id=id,path=path
+-chardev pty,id=id
+-chardev stdio,id=id
+-chardev tty,id=id,path=path
+-chardev parport,id=id,path=path
+-chardev spicevmc,id=id,debug=debug,name=name
+Bluetooth(R) options:
+-bt hci,null    dumb bluetooth HCI - doesn't respond to commands
+-bt hci,host[:id]
+                use host's HCI with the given name
+-bt hci[,vlan=n]
+                emulate a standard HCI in virtual scatternet 'n'
+-bt vhci[,vlan=n]
+                add host computer to virtual scatternet 'n' using VHCI
+-bt device:dev[,vlan=n]
+                emulate a bluetooth device 'dev' in scatternet 'n'
+Linux/Multiboot boot specific:
+-kernel bzImage use 'bzImage' as kernel image
+-append cmdline use 'cmdline' as kernel command line
+-initrd file    use 'file' as initial ram disk
+Debug/Expert options:
+-serial dev     redirect the serial port to char device 'dev'
+-parallel dev   redirect the parallel port to char device 'dev'
+-monitor dev    redirect the monitor to char device 'dev'
+-qmp dev        like -monitor but opens in 'control' mode.
+-mon chardev=[name][,mode=readline|control][,default]
+-pidfile file   write PID to 'file'
+-singlestep   always run in singlestep mode
+-S              freeze CPU at startup (use 'c' to start execution)
+-gdb dev        wait for gdb connection on 'dev'
+-s              shorthand for -gdb tcp::1234
+-d item1,...    output log to /tmp/qemu.log (use -d ? for a list of log items)
+-hdachs c,h,s[,t]
+                force hard disk 0 physical geometry and the optional BIOS
+                translation (t=none or lba) (usually qemu can guess them)
+-L path         set the directory for the BIOS, VGA BIOS and keymaps
+-bios file      set the filename for the BIOS
+-enable-kvm     enable KVM full virtualization support
+-no-reboot      exit instead of rebooting
+-no-shutdown    stop before shutdown
+-loadvm [tag|id]
+                start right away with a saved state (loadvm in monitor)
+-daemonize      daemonize QEMU after initializing
+-option-rom rom load a file, rom, into the option ROM space
+-clock          force the use of the given methods for timer alarm.
+                To see what timers are available use -clock ?
+-rtc [base=utc|localtime|date][,clock=host|vm][,driftfix=none|slew]
+                set the RTC base and clock, enable drift fix for clock ticks
+-icount [N|auto]
+                enable virtual instruction counter with 2^N clock ticks per
+                instruction
+-watchdog i6300esb|ib700
+                enable virtual hardware watchdog [default=none]
+-watchdog-action reset|shutdown|poweroff|pause|debug|none
+                action when watchdog fires [default=reset]
+-echr chr       set terminal escape character instead of ctrl-a
+-virtioconsole c
+                set virtio console
+-show-cursor    show cursor
+-tb-size n      set TB size
+-incoming p     prepare for incoming migration, listen on port p
+-nodefaults     don't create default devices.
+-chroot dir     Chroot to dir just before starting the VM.
+-runas user     Change to user id user just before starting the VM.
+                do not load default config files at startup
+-readconfig <file>
+-writeconfig <file>
+                read/write config file
+-no-kvm         disable KVM hardware virtualization
+-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC
+-no-kvm-pit     disable KVM kernel mode PIT
+-no-kvm-pit-reinjection disable KVM kernel mode PIT interrupt reinjection
+-pcidevice host=bus:dev.func[,dma=none][,name=string]
+                expose a PCI device to the guest OS.
+                dma=none: don't perform any dma translations (default is to use an iommu)
+                'string' is used in log output.
+-nvram FILE          provide ia64 nvram contents
+-tdf                 enable guest time drift compensation
+-kvm-shadow-memory MEGABYTES
+                     allocate MEGABYTES for kvm mmu shadowing
+-mem-path FILE       provide backing storage for guest RAM
+-mem-prealloc        preallocate guest memory (use with -mempath)
+-redhat-disable-KSM  disable KSM on guest physical memory
+During emulation, the following keys are useful:
+ctrl-alt-f      toggle full screen
+ctrl-alt-n      switch to virtual console 'n'
+ctrl-alt        toggle mouse and keyboard grab
+When using -nographic, press 'ctrl-a h' to get some help.
+WARNING: Direct use of qemu-kvm from the command line is not recommended by Red Hat.
+WARNING: Some command line options listed here may not be available in future releases.
+WARNING: Red Hat recommends the use of libvirt as the stable management interface.
diff --git a/tests/qemuhelpdata/qemu-kvm- b/tests/qemuhelpdata/qemu-kvm-
new file mode 100644
index 0000000..ee0fd78
--- /dev/null
+++ b/tests/qemuhelpdata/qemu-kvm-
@@ -0,0 +1,120 @@
+name "pci-bridge", bus PCI
+name "virtio-balloon-pci", bus PCI
+name "virtio-serial-pci", bus PCI, alias "virtio-serial"
+name "virtio-net-pci", bus PCI
+name "virtio-blk-pci", bus PCI, alias "virtio-blk"
+name "i82562", bus PCI
+name "i82559er", bus PCI
+name "i82559c", bus PCI
+name "i82559b", bus PCI
+name "i82559a", bus PCI
+name "i82558b", bus PCI
+name "i82558a", bus PCI
+name "i82557c", bus PCI
+name "i82557b", bus PCI
+name "i82557a", bus PCI
+name "i82551", bus PCI
+name "i82550", bus PCI
+name "pcnet", bus PCI
+name "rtl8139", bus PCI
+name "e1000", bus PCI, desc "Intel Gigabit Ethernet"
+name "ide-drive", bus IDE
+name "isa-ide", bus ISA
+name "ES1370", bus PCI, desc "ENSONIQ AudioPCI ES1370"
+name "AC97", bus PCI, desc "Intel 82801AA AC97 Audio"
+name "intel-hda", bus PCI, desc "Intel HD Audio Controller"
+name "hda-duplex", bus HDA, desc "HDA Audio Codec, duplex"
+name "hda-output", bus HDA, desc "HDA Audio Codec, output-only"
+name "VGA", bus PCI
+name "SUNW,fdtwo", bus System
+name "sysbus-fdc", bus System
+name "isa-serial", bus ISA
+name "cirrus-vga", bus PCI, desc "Cirrus CLGD 54xx VGA"
+name "isa-parallel", bus ISA
+name "sga", bus ISA, desc "Serial Graphics Adapter"
+name "ich9-usb-uhci3", bus PCI
+name "ich9-usb-uhci2", bus PCI
+name "ich9-usb-uhci1", bus PCI
+name "piix4-usb-uhci", bus PCI
+name "piix3-usb-uhci", bus PCI
+name "ib700", bus ISA
+name "ne2k_isa", bus ISA
+name "testdev", bus ISA
+name "pci-assign", bus PCI, desc "pass through host pci devices to the guest"
+name "qxl", bus PCI, desc "Spice QXL GPU (secondary)"
+name "qxl-vga", bus PCI, desc "Spice QXL GPU (primary, vga compatible)"
+name "smbus-eeprom", bus I2C
+name "usb-hub", bus USB
+name "usb-host", bus USB
+name "usb-kbd", bus USB
+name "usb-mouse", bus USB
+name "usb-tablet", bus USB
+name "usb-storage", bus USB
+name "scsi-disk", bus SCSI, desc "virtual SCSI disk or CD-ROM (legacy)"
+name "scsi-cd", bus SCSI, desc "virtual SCSI CD-ROM"
+name "scsi-hd", bus SCSI, desc "virtual SCSI disk"
+name "usb-ccid", bus USB, desc "CCID Rev 1.1 smartcard reader"
+name "ccid-card-passthru", bus ccid-bus, desc "passthrough smartcard"
+name "virtserialport", bus virtio-serial-bus
+name "virtconsole", bus virtio-serial-bus
+name "ich9-usb-ehci1", bus PCI
+name "usb-ehci", bus PCI
+name "i6300esb", bus PCI
+name "ne2k_pci", bus PCI
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 8a06568..fcee41f 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -507,6 +507,65 @@ mymain(void)
+    DO_TEST("qemu-kvm-", 12001, 1, 0,
+            QEMU_CAPS_VNC_COLON,
+            QEMU_CAPS_NO_REBOOT,
+            QEMU_CAPS_DRIVE,
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_UUID,
+            QEMU_CAPS_VNET_HDR,
+            QEMU_CAPS_DRIVE_CACHE_V2,
+            QEMU_CAPS_KVM,
+            QEMU_CAPS_VGA,
+            QEMU_CAPS_0_10,
+            QEMU_CAPS_MEM_PATH,
+            QEMU_CAPS_CHARDEV,
+            QEMU_CAPS_ENABLE_KVM,
+            QEMU_CAPS_BALLOON,
+            QEMU_CAPS_DEVICE,
+            QEMU_CAPS_RTC,
+            QEMU_CAPS_VHOST_NET,
+            QEMU_CAPS_NO_KVM_PIT,
+            QEMU_CAPS_TDF,
+            QEMU_CAPS_BOOT_MENU,
+            QEMU_CAPS_VGA_QXL,
+            QEMU_CAPS_SPICE,
+            QEMU_CAPS_VGA_NONE,
+            QEMU_CAPS_HDA_DUPLEX,
+            QEMU_CAPS_DRIVE_AIO,
+            QEMU_CAPS_SGA,
+            QEMU_CAPS_PIIX3_USB_UHCI,
+            QEMU_CAPS_PIIX4_USB_UHCI,
+            QEMU_CAPS_USB_EHCI,
+            QEMU_CAPS_ICH9_USB_EHCI1,
+            QEMU_CAPS_USB_HUB,
+            QEMU_CAPS_PCI_ROMBAR);

     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]