libvirt/docs/schemas
Laine Stump c329db7180 qemu: make PCI multifunction support more manual
When support for was added for PCI multifunction cards (in commit
9f8baf, first included in libvirt 0.9.3), it was done by always
turning on the multifunction bit for all PCI devices. Since that time
it has been realized that this is not an ideal solution, and that the
multifunction bit must be selectively turned on. For example, see

  https://bugzilla.redhat.com/show_bug.cgi?id=728174

and the discussion before and after

  https://www.redhat.com/archives/libvir-list/2011-September/msg01036.html

This patch modifies multifunction support so that the multifunction=on
option is only added to the qemu commandline for a device if its PCI
<address> definition has the attribute "multifunction='on'", e.g.:

  <address type='pci' domain='0x0000' bus='0x00'
           slot='0x04' function='0x0' multifunction='on'/>

In practice, the multifunction bit should only be turned on if
function='0' AND other functions will be used in the same slot - it
usually isn't needed for functions 1-7 (although there are apparently
some exceptions, e.g. the Intel X53 according to the QEMU source
code), and should never be set if only function 0 will be used in the
slot. The test cases have been changed accordingly to illustrate.

With this patch in place, if a user attempts to assign multiple
functions in a slot without setting the multifunction bit for function
0, libvirt will issue an error when the domain is defined, and the
define operation will fail. In the future, we may decide to detect
this situation and automatically add multifunction=on to avoid the
error; even then it will still be useful to have a manual method of
turning on multifunction since, as stated above, there are some
devices that excpect it to be turned on for all functions in a slot.

A side effect of this patch is that attempts to use the same PCI
address for two different devices will now log an error (previously
this would cause the domain define operation to fail, but there would
be no log message generated). Because the function doing this log was
almost completely rewritten, I didn't think it worthwhile to make a
separate patch for that fix (the entire patch would immediately be
obsoleted).
2011-10-01 11:48:28 -04:00
..
basictypes.rng xml: create an RNG file for common types and move some definitions there 2011-07-05 12:33:21 -04:00
capability.rng microblaze: Add architecture support 2011-07-07 17:49:21 -06:00
domain.rng snapshot: update rng to support full domain in xml 2011-09-03 08:12:13 -06:00
domaincommon.rng qemu: make PCI multifunction support more manual 2011-10-01 11:48:28 -04:00
domainsnapshot.rng snapshot: also support disks by path 2011-09-05 07:03:04 -06:00
interface.rng xml: create an RNG file for common types and move some definitions there 2011-07-05 12:33:21 -04:00
Makefile.am snapshot: update rng to support full domain in xml 2011-09-03 08:12:13 -06:00
network.rng link-state: conf: Add element to XML for controling link state 2011-09-06 16:08:15 +08:00
networkcommon.rng bandwidth: Define schema and create documentation 2011-07-25 13:49:06 +08:00
nodedev.rng maint: convert leading TABs in *.rng files to equivalent spaces 2010-03-01 20:19:20 +01:00
nwfilter.rng nwfilter: enable filtering of gratuitous ARP packets 2011-05-23 19:41:18 -04:00
secret.rng Fix a wellformedness problem in secret.rng 2009-12-10 17:03:47 +01:00
storageencryption.rng Remove accidentally added UUID re-definition in storage schema 2009-09-14 19:11:13 +01:00
storagepool.rng Fix parsing of port attribute in storage XML configuration 2010-11-23 14:55:33 +00:00
storagevol.rng maint: convert leading TABs in *.rng files to equivalent spaces 2010-03-01 20:19:20 +01:00