Cui, Dexuan
2009-Jul-29 02:57 UTC
[Xen-devel] RE: [Xen-changelog] [xen-unstable] xend: pass-through: device state in xenstore may be null
Hi Tom and Simon,
The patch looks like a workaround to me.
Could you please explain under what condition the state may be null?
On my host I don''t meet with the issue, but I did hear the same issue
on some host and I would look into it when the host is available for me.
Thanks,
-- Dexuan
-----Original Message-----
From: xen-changelog-bounces@lists.xensource.com
[mailto:xen-changelog-bounces@lists.xensource.com] On Behalf Of Xen
patchbot-unstable
Sent: 2009?7?29? 0:11
To: xen-changelog@lists.xensource.com
Subject: [Xen-changelog] [xen-unstable] xend: pass-through: device state in
xenstore may be null
# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1248795146 -3600
# Node ID 0c7a560822d9d9516dfc83cef6fceec944fd97a8
# Parent 6120f7a92d82ccb1747feffa1a72eb704e642fb0
xend: pass-through: device state in xenstore may be null
Signed-off-by: Tom Rotenberg <tom.rotenberg@gmail.com>
---
tools/python/xen/xend/server/pciif.py | 6 +++++-
1 files changed, 5 insertions(+), 1 deletion(-)
diff -r 6120f7a92d82 -r 0c7a560822d9 tools/python/xen/xend/server/pciif.py
--- a/tools/python/xen/xend/server/pciif.py Tue Jul 28 16:28:21 2009 +0100
+++ b/tools/python/xen/xend/server/pciif.py Tue Jul 28 16:32:26 2009 +0100
@@ -489,7 +489,11 @@ class PciController(DevController):
num_devs = int(self.readBackend(devid, ''num_devs''))
new_num_devs = 0
for i in range(num_devs):
- state = int(self.readBackend(devid, ''state-%i'' %
i))
+ try:
+ state = int(self.readBackend(devid,
''state-%i'' % i))
+ except:
+ state = xenbusState[''Unknown'']
+
if state == xenbusState[''Closing'']:
# Detach I/O resources.
pci_dev = parse_pci_name(self.readBackend(devid,
''dev-%i'' % i))
_______________________________________________
Xen-changelog mailing list
Xen-changelog@lists.xensource.com
http://lists.xensource.com/xen-changelog
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Simon Horman
2009-Jul-29 04:06 UTC
[Xen-devel] Re: [Xen-changelog] [xen-unstable] xend: pass-through: device state in xenstore may be null
On Wed, Jul 29, 2009 at 10:57:40AM +0800, Cui, Dexuan wrote:> Hi Tom and Simon, > The patch looks like a workaround to me. > Could you please explain under what condition the state may be null? > > On my host I don''t meet with the issue, but I did hear the same issue on > some host and I would look into it when the host is available for me.Hi Dexuan, I agree that this looks a lot like a work-around. I was initially very reluctant to apply it. And I would still be very happy if someone could find a better solution. My analysis of the problem is as follows: What I now think is happening is that for some reason on your system when _createDevices() initialises the devices in xenstore using _createDevice() then end up with no state entry. Whereas on my system then end up with state 3=Initialised. It seems to me that actually the behaviour of your system is correct and my system is bogus. I really don''t know why that is the case - are you using the stock xenstore implementation in C, or the Ocaml version? In any case, it seems to be that your original work-around was more or less correct. I''ll just tweak it a bit to handle the case where cleanupDevices() is shuffling entries because one or more have been deleted and repost it. Ref: http://lists.xensource.com/archives/html/xen-devel/2009-07/msg01082.html> > Thanks, > -- Dexuan > > -----Original Message----- > From: xen-changelog-bounces@lists.xensource.com [mailto:xen-changelog-bounces@lists.xensource.com] On Behalf Of Xen patchbot-unstable > Sent: 2009?7?29? 0:11 > To: xen-changelog@lists.xensource.com > Subject: [Xen-changelog] [xen-unstable] xend: pass-through: device state in xenstore may be null > > # HG changeset patch > # User Keir Fraser <keir.fraser@citrix.com> > # Date 1248795146 -3600 > # Node ID 0c7a560822d9d9516dfc83cef6fceec944fd97a8 > # Parent 6120f7a92d82ccb1747feffa1a72eb704e642fb0 > xend: pass-through: device state in xenstore may be null > > Signed-off-by: Tom Rotenberg <tom.rotenberg@gmail.com> > --- > tools/python/xen/xend/server/pciif.py | 6 +++++- > 1 files changed, 5 insertions(+), 1 deletion(-) > > diff -r 6120f7a92d82 -r 0c7a560822d9 tools/python/xen/xend/server/pciif.py > --- a/tools/python/xen/xend/server/pciif.py Tue Jul 28 16:28:21 2009 +0100 > +++ b/tools/python/xen/xend/server/pciif.py Tue Jul 28 16:32:26 2009 +0100 > @@ -489,7 +489,11 @@ class PciController(DevController): > num_devs = int(self.readBackend(devid, ''num_devs'')) > new_num_devs = 0 > for i in range(num_devs): > - state = int(self.readBackend(devid, ''state-%i'' % i)) > + try: > + state = int(self.readBackend(devid, ''state-%i'' % i)) > + except: > + state = xenbusState[''Unknown''] > + > if state == xenbusState[''Closing'']: > # Detach I/O resources. > pci_dev = parse_pci_name(self.readBackend(devid, ''dev-%i'' % i)) > > _______________________________________________ > Xen-changelog mailing list > Xen-changelog@lists.xensource.com > http://lists.xensource.com/xen-changelog_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Cui, Dexuan
2009-Jul-29 04:19 UTC
[Xen-devel] RE: [Xen-changelog] [xen-unstable] xend: pass-through: device state in xenstore may be null
Hi Simon, Thanks a lot for the info! I''ll try to look into the issue later. Thanks, -- Dexuan -----Original Message----- From: Simon Horman [mailto:horms@verge.net.au] Sent: 2009?7?29? 12:06 To: Cui, Dexuan Cc: Tom Rotenberg; xen-devel@lists.xensource.com Subject: Re: [Xen-changelog] [xen-unstable] xend: pass-through: device state in xenstore may be null On Wed, Jul 29, 2009 at 10:57:40AM +0800, Cui, Dexuan wrote:> Hi Tom and Simon, > The patch looks like a workaround to me. > Could you please explain under what condition the state may be null? > > On my host I don''t meet with the issue, but I did hear the same issue on > some host and I would look into it when the host is available for me.Hi Dexuan, I agree that this looks a lot like a work-around. I was initially very reluctant to apply it. And I would still be very happy if someone could find a better solution. My analysis of the problem is as follows: What I now think is happening is that for some reason on your system when _createDevices() initialises the devices in xenstore using _createDevice() then end up with no state entry. Whereas on my system then end up with state 3=Initialised. It seems to me that actually the behaviour of your system is correct and my system is bogus. I really don''t know why that is the case - are you using the stock xenstore implementation in C, or the Ocaml version? In any case, it seems to be that your original work-around was more or less correct. I''ll just tweak it a bit to handle the case where cleanupDevices() is shuffling entries because one or more have been deleted and repost it. Ref: http://lists.xensource.com/archives/html/xen-devel/2009-07/msg01082.html> > Thanks, > -- Dexuan > > -----Original Message----- > From: xen-changelog-bounces@lists.xensource.com [mailto:xen-changelog-bounces@lists.xensource.com] On Behalf Of Xen patchbot-unstable > Sent: 2009?7?29? 0:11 > To: xen-changelog@lists.xensource.com > Subject: [Xen-changelog] [xen-unstable] xend: pass-through: device state in xenstore may be null > > # HG changeset patch > # User Keir Fraser <keir.fraser@citrix.com> > # Date 1248795146 -3600 > # Node ID 0c7a560822d9d9516dfc83cef6fceec944fd97a8 > # Parent 6120f7a92d82ccb1747feffa1a72eb704e642fb0 > xend: pass-through: device state in xenstore may be null > > Signed-off-by: Tom Rotenberg <tom.rotenberg@gmail.com> > --- > tools/python/xen/xend/server/pciif.py | 6 +++++- > 1 files changed, 5 insertions(+), 1 deletion(-) > > diff -r 6120f7a92d82 -r 0c7a560822d9 tools/python/xen/xend/server/pciif.py > --- a/tools/python/xen/xend/server/pciif.py Tue Jul 28 16:28:21 2009 +0100 > +++ b/tools/python/xen/xend/server/pciif.py Tue Jul 28 16:32:26 2009 +0100 > @@ -489,7 +489,11 @@ class PciController(DevController): > num_devs = int(self.readBackend(devid, ''num_devs'')) > new_num_devs = 0 > for i in range(num_devs): > - state = int(self.readBackend(devid, ''state-%i'' % i)) > + try: > + state = int(self.readBackend(devid, ''state-%i'' % i)) > + except: > + state = xenbusState[''Unknown''] > + > if state == xenbusState[''Closing'']: > # Detach I/O resources. > pci_dev = parse_pci_name(self.readBackend(devid, ''dev-%i'' % i)) > > _______________________________________________ > Xen-changelog mailing list > Xen-changelog@lists.xensource.com > http://lists.xensource.com/xen-changelog_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel