On Fri, May 15, 2009 at 04:01:30PM +0900, Masaki Kanno wrote:
Content-Description: Mail message body
> Hi Simon,
>
> Thanks for your review and test.
>
> >In the case of pci-attach if I follow the folliwing steps:
> >
> >$ xm new hvm.conf
> >$ xm pci-attach hvm 00:1a.0
> >$ xm start hvm
> >[ wait a bit ]
> >$ xm pci-list hvm
> >
> >Then pci-list never indicates that 00:1a.0 has been assigned a vslot.
>
> Maybe, the domain start failed.
> Are there the following messages in a qemu-dm-hvm.log file?
>
> register_real_device: Assigning real physical device 00:1a.0 ...
> register_real_device: Error: no free virtual PCI slot
> pt_init: Error: Registration failed (00:1a.0)
> Error: Initialization failed for pass-through devices
>
> If so, the problem is solved by new patches.
> Could you review and test the patches?
Yes, I cam to the same conclusion.
Though my solution was a little different.
I think that the change below be an alternate solution
to both of your patches. Though there is still a problem
that the assigned vslot isn't reported by pci-list if
a function is attached while the domain isn't running.
I will review your patches once I have had some sleep.
In the mean time, here is the change that have been thinking about.
Index: xen-unstable.hg/tools/python/xen/xend/server/pciif.py
===================================================================
--- xen-unstable.hg.orig/tools/python/xen/xend/server/pciif.py 2009-05-16
01:40:42.000000000 +1000
+++ xen-unstable.hg/tools/python/xen/xend/server/pciif.py 2009-05-16
01:41:14.000000000 +1000
@@ -73,13 +73,15 @@ class PciController(DevController):
for pci_config in config.get('devs', []):
vslot = pci_config.get('vslot')
if vslot is not None:
- vslots = vslots + vslot + ";"
+ vslot = parse_hex(vslot)
+ vslots = "%s0x%02x;" % (vslots, vslot)
+ else:
+ vslot = parse_hex(pci_config.get('requested_vslot'))
domain = parse_hex(pci_config.get('domain', 0))
bus = parse_hex(pci_config.get('bus', 0))
slot = parse_hex(pci_config.get('slot', 0))
func = parse_hex(pci_config.get('func', 0))
- requested_vslot = parse_hex(pci_config.get('requested_vslot', 0))
opts = pci_config.get('opts', '')
if len(opts) > 0:
@@ -90,7 +92,7 @@ class PciController(DevController):
back['dev-%i' % pcidevid] = "%04x:%02x:%02x.%01x" % \
(domain, bus, slot, func)
back['uuid-%i' % pcidevid] = pci_config.get('uuid', '')
- back['vslot-%i' % pcidevid] = "%02x" % requested_vslot
+ back['vslot-%i' % pcidevid] = "%02x" % vslot
pcidevid += 1
if vslots != "":
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|