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

Re: [Xen-devel] xend: specify the slot for pass-through devices



Sorry, I should have noted in the subject of the original email
that this is an rfc. In particular with regards to inclusion in 3.4.
My opinion is that that it would be a good addition to 3.4.

On Fri, Mar 20, 2009 at 09:55:03PM +1100, Simon Horman wrote:
> Currently a slot may be specified for a hot-plug device,
> but not for a pass-through device that is inserted at boot time.
> This patch adds support for the latter.
> 
> The syntax is:
>      BUS:DEV.FUNC[@VSLOT]
> e.g: 0000:00:1d:0@7
> 
> This may be important as recent changes that allow any free PCI
> slot to be used for pass-through (and hotplug) may case pass-through
> devices to be assigned in different locations to before. Amongst
> other things, specifying the slot will allow users to move them
> back, if there is a need.
> 
> There is also an ioemu portion of this patch, which will be posted separately.
> 
> Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>
> 
> Index: xen-unstable.hg/tools/python/xen/xend/server/pciif.py
> ===================================================================
> --- xen-unstable.hg.orig/tools/python/xen/xend/server/pciif.py        
> 2009-03-20 21:41:12.000000000 +1100
> +++ xen-unstable.hg/tools/python/xen/xend/server/pciif.py     2009-03-20 
> 21:41:15.000000000 +1100
> @@ -75,6 +75,7 @@ class PciController(DevController):
>              bus = parse_hex(pci_config.get('bus', 0))
>              slot = parse_hex(pci_config.get('slot', 0))
>              func = parse_hex(pci_config.get('func', 0))            
> +            vslot = parse_hex(pci_config.get('vslot', 0))
>  
>              opts = pci_config.get('opts', '')
>              if len(opts) > 0:
> Index: xen-unstable.hg/tools/python/xen/xm/create.py
> ===================================================================
> --- xen-unstable.hg.orig/tools/python/xen/xm/create.py        2009-03-20 
> 21:41:12.000000000 +1100
> +++ xen-unstable.hg/tools/python/xen/xm/create.py     2009-03-20 
> 21:41:15.000000000 +1100
> @@ -1,4 +1,4 @@
> -#============================================================================
> +#============================================================================UTO
>  # This library is free software; you can redistribute it and/or
>  # modify it under the terms of version 2.1 of the GNU Lesser General Public
>  # License as published by the Free Software Foundation.
> @@ -32,6 +32,7 @@ from xen.xend import PrettyPrint as SXPP
>  from xen.xend import osdep
>  import xen.xend.XendClient
>  from xen.xend.XendBootloader import bootloader
> +from xen.xend.XendConstants import *
>  from xen.xend.server.DevConstants import xenbusState
>  from xen.util import blkif
>  from xen.util import vscsi_util
> @@ -322,10 +323,12 @@ gopts.var('disk', val='phy:DEV,VDEV,MODE
>            backend driver domain to use for the disk.
>            The option may be repeated to add more than one disk.""")
>  
> -gopts.var('pci', val='BUS:DEV.FUNC[,msitranslate=0|1][,power_mgmt=0|1]',
> +gopts.var('pci', 
> val='BUS:DEV.FUNC[@VSLOT][,msitranslate=0|1][,power_mgmt=0|1]',
>            fn=append_value, default=[],
>            use="""Add a PCI device to a domain, using given params (in hex).
>            For example 'pci=c0:02.1'.
> +          If VSLOT is supplied the device will be inserted into that
> +          virtual slot in the guest, else a free slot is selected.
>            If msitranslate is set, MSI-INTx translation is enabled if 
> possible.
>            Guest that doesn't support MSI will get IO-APIC type IRQs
>            translated from physical MSI, HVM only. Default is 1.
> @@ -696,7 +699,7 @@ def configure_pci(config_devs, vals):
>      """Create the config for pci devices.
>      """
>      config_pci = []
> -    for (domain, bus, slot, func, opts) in vals.pci:
> +    for (domain, bus, slot, func, vslot, opts) in vals.pci:
>          config_pci_opts = []
>          d = comma_sep_kv_to_dict(opts)
>  
> @@ -707,7 +710,7 @@ def configure_pci(config_devs, vals):
>              config_pci_opts.append([k, d[k]])
>  
>          config_pci_bdf = ['dev', ['domain', domain], ['bus', bus], \
> -                          ['slot', slot], ['func', func]]
> +                          ['slot', slot], ['func', func], ['vslot', vslot]]
>          map(f, d.keys())
>          if len(config_pci_opts)>0:
>              config_pci_bdf.append(['opts', config_pci_opts])
> @@ -1054,16 +1057,21 @@ def preprocess_pci(vals):
>                  r"(?P<bus>[0-9a-fA-F]{1,2})[:,]" + \
>                  r"(?P<slot>[0-9a-fA-F]{1,2})[.,]" + \
>                  r"(?P<func>[0-7])" + \
> -                r"(,(?P<opts>.*))?$", pci_dev_str)
> +                r"(@(?P<vslot>[0-9a-fA-F]))?" + \
> +                r"(,(?P<opts>.*))?$", \
> +                pci_dev_str)
>          if pci_match!=None:
>              pci_dev_info = pci_match.groupdict('')
>              if pci_dev_info['domain']=='':
>                  pci_dev_info['domain']='0'
> +            if pci_dev_info['vslot']=='':
> +                pci_dev_info['vslot']="%02x" % AUTO_PHP_SLOT
>              try:
>                  pci.append( ('0x'+pci_dev_info['domain'], \
>                          '0x'+pci_dev_info['bus'], \
>                          '0x'+pci_dev_info['slot'], \
>                          '0x'+pci_dev_info['func'], \
> +                        '0x'+pci_dev_info['vslot'], \
>                          pci_dev_info['opts']))
>              except IndexError:
>                  err('Error in PCI slot syntax "%s"'%(pci_dev_str))
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel

-- 
Simon Horman
  VA Linux Systems Japan K.K., Sydney, Australia Satellite Office
  H: www.vergenet.net/~horms/             W: www.valinux.co.jp/en


_______________________________________________
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®.