Ubuntu上安裝了Xend 4,執行sudo /etc/init.d/xend start 後報Fail。
於是查看xend的日志 /var/log/xen/xend.log ,發現如下報錯:
[2014-03-09 22:22:40 3970] INFO (SrvDaemon:336) Xend changeset: unavailable.
[2014-03-09 22:22:40 3970] ERROR (SrvDaemon:349) Exception starting xend (Looped capability chain: 0000:03:00.0)
Traceback (most recent call last):
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/server/SrvDaemon.py", line 341, in run
servers = SrvServer.create()
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/server/SrvServer.py", line 258, in create
root.putChild('xend', SrvRoot())
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/server/SrvRoot.py", line 40, in __init__
self.get(name)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/web/SrvDir.py", line 84, in get
val = val.getobj()
File "/usr/lib/xen-4.1/bin/../lib/python/xen/web/SrvDir.py", line 52, in getobj
self.obj = klassobj()
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/server/SrvNode.py", line 30, in __init__
self.xn = XendNode.instance()
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/XendNode.py", line 1181, in instance
inst = XendNode()
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/XendNode.py", line 159, in __init__
self._init_PPCIs()
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xend/XendNode.py", line 282, in _init_PPCIs
for pci_dev in PciUtil.get_all_pci_devices():
File "/usr/lib/xen-4.1/bin/../lib/python/xen/util/pci.py", line 474, in get_all_pci_devices
return map(PciDevice, get_all_pci_dict())
File "/usr/lib/xen-4.1/bin/../lib/python/xen/util/pci.py", line 699, in __init__
self.get_info_from_sysfs()
File "/usr/lib/xen-4.1/bin/../lib/python/xen/util/pci.py", line 1269, in get_info_from_sysfs
self.find_capability(0x11)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/util/pci.py", line 1236, in find_capability
('Looped capability chain: %s' % self.name))
PciDeviceParseError: Looped capability chain: 0000:03:00.0
看報錯的trace信息發現是/usr/lib/xen-4.1/bin/../lib/python/xen/util/pci.py 的find_capability 拋出了exception而沒有被
catch住。
在網上找到了關於這個問題的一個bug https://bugzilla.redhat.com/show_bug.cgi?id=767742#c3
通過lspci命令可以找到導致出現looped報錯的設備信息
sun@localhost:~$ lspci -vvv -xxx -s 0000:03:00.0
03:00.0 SD Host controller: Ricoh Co Ltd MMC/SD Host Controller (rev ff) (prog-if ff)
!!! Unknown header type 7f
Kernel modules: sdhci-pci
00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
當前一種比較dirty的處理方式是修改/usr/lib/xen-4.1/bin/../lib/python/xen/util/pci.py 腳本,對調動用find_capability的代碼進行try catch
具體path可以參見 https://bugzilla.redhat.com/attachment.cgi?id=546883&action=diff