WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] Fix pci passthru in xend interface used by libvi

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: Re: [Xen-devel] [PATCH] Fix pci passthru in xend interface used by libvirt
From: Jim Fehlig <jfehlig@xxxxxxxxxx>
Date: Thu, 04 Nov 2010 08:35:37 -0600
Delivery-date: Thu, 04 Nov 2010 07:36:27 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <461b9d3a643a2c67c961.1288302096@xxxxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <461b9d3a643a2c67c961.1288302096@xxxxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.18 (X11/20081112)
Could someone review this patch please?

The reporter of the bug has successfully tested the patch, but I'd
prefer an upstream ACK as well before adding it to our patch set.

Thanks,
Jim


Jim Fehlig wrote:
> # HG changeset patch
> # User Jim Fehlig <jfehlig@xxxxxxxxxx>
> # Date 1288301229 21600
> # Branch xend-pci
> # Node ID 461b9d3a643a2c67c961d9fc468a804891f3770d
> # Parent  28a16074681582f1209c9077f870ccf44927133e
> Fix pci passthru in xend interface used by libvirt
>
> Attempting to define or create a domain whose XML config contains a
> passthru PCI device fails with libvirt
>
> xen84: # cat win2k8r2.xml
> ...
>    <hostdev mode='subsystem' type='pci' managed='no'>
>       <source>
>         <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
>       </source>
>     </hostdev>
> ...
>
> xen84: # virsh create ./win2k8r2.xml
> error: Failed to create domain from ./win2k8r2.xml
> error: POST operation failed: xend_post: error from xen daemon:
>   (xend.err "Error creating domain: 'key'")
>
> The PCI device config maintained by xend includes a 'key' field, which is
> initialized by xm client when using that tool and traditional xen config
> file.  libvirt, which uses xend's sexpr-over-http interface (is that the
> proper name for that interface??), does not initialize this field - and
> shouldn't be expected to do so IMO.  Clients should not be bothered with
> xend's internal representation of a PCI device.
>
> This patch populates the 'key' field within xend if it is uninitialized,
> similar to current initialization of 'uuid' field.  The 'vdevfn' field
> suffers a similar problem if not (optionally) specified by user.
> AFAICT, the xm client initializes 'vdevfn' to 0x100 if not specified so
> I've done the same here.
>
>     Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxxxx>
>
> diff -r 28a160746815 -r 461b9d3a643a tools/python/xen/util/pci.py
> --- a/tools/python/xen/util/pci.py    Wed Oct 27 12:24:28 2010 +0100
> +++ b/tools/python/xen/util/pci.py    Thu Oct 28 15:27:09 2010 -0600
> @@ -240,10 +240,16 @@
>          pci_dev_info = dict(pci_dev[1:])
>          if 'opts' in pci_dev_info:
>              pci_dev_info['opts'] = pci_opts_list_from_sxp(pci_dev)
> -        # append uuid to each pci device that does't already have one.
> +        # If necessary, initialize uuid, key, and vdevfn for each pci device
>          if not pci_dev_info.has_key('uuid'):
> -            dpci_uuid = pci_dev_info.get('uuid', uuid.createString())
> -            pci_dev_info['uuid'] = dpci_uuid
> +            pci_dev_info['uuid'] = uuid.createString()
> +        if not pci_dev_info.has_key('key'):
> +            pci_dev_info['key'] = "%02x:%02x.%x" % \
> +            (int(pci_dev_info['bus'], 16),
> +             int(pci_dev_info['slot'], 16),
> +             int(pci_dev_info['func'], 16))
> +        if not pci_dev_info.has_key('vdevfn'):
> +            pci_dev_info['vdevfn'] =  "0x%02x" % AUTO_PHP_SLOT
>          pci_devs.append(pci_dev_info)
>      dev_config['devs'] = pci_devs
>  
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
>   

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