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

Re: [Xen-devel] [PATCH] disallow duplicate pci device strings in guest config file



On Fri, May 15, 2009 at 07:31:23PM +0800, Cui, Dexuan wrote:
> When we specify duplicate pci device strings in guest config file, like 
> pci=['01:00.0', '01:00.0'], or  pci=['01:00.0', '0000:01:00.0'], or  
> pci=['01:00.0', '0000:01:00.0@7'],
> xend doesn't detect this case and passes the pci string to ioemu and ioemu 
> invokes register_real_device() twice for the same physical device and this 
> could cause unexpected behavior.
> 
> The patch detects this case and makes the domain construction fail.
> 
> diff -r 40d4267296ad tools/python/xen/xend/server/pciif.py
> --- a/tools/python/xen/xend/server/pciif.py   Fri May 15 08:12:39 2009 +0100
> +++ b/tools/python/xen/xend/server/pciif.py   Fri May 15 17:14:43 2009 +0800
> @@ -396,6 +396,9 @@ class PciController(DevController):
>              pci_str = '%04x:%02x:%02x.%01x' % (domain, bus, slot, func)
>              pci_str_list = pci_str_list + [pci_str]
>              pci_dev_list = pci_dev_list + [(domain, bus, slot, func)]
> +
> +        if pci_str_list != list(set(pci_str_list)):
> +            raise VmError('pci: duplicate devices specified in guest 
> config?')
>  
>          for (domain, bus, slot, func) in pci_dev_list:
>              try:

Hi Dexuan, Hi Keir,

At a glance it seems that this might not be correct,
as set() may not preserve the order of pci_str_list.
However, as set will remove any duplicates, its probably
sufficient to use:

        if len(pci_str_list) != len(set(pci_str_list):

Some musings in code:

# python
>>> pci_str_list = [ "01:00.1", "01:00.0" ]
>>> print pci_str_list
['01:00.1', '01:00.0']
>>> print set(pci_str_list)
set(['01:00.0', '01:00.1'])
>>> print list(set(pci_str_list))
['01:00.0', '01:00.1']

>>> pci_str_list= [ "01:00.1", "01:00.0", "01:00.0" ]
>>> print list(set(pci_str_list))
>>> print len(set(pci_str_list))
2
>>> print len(pci_str_list)
3


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.