From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Jan Beulich <JBeulich@novell.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>,
james.harper@bendigoit.com.au, xen-devel@lists.xensource.com,
bastian@waldi.eu.org
Subject: Re: Re: [Bug 1612] Can't start VM when vif set and udev version is greater than 151
Date: Wed, 7 Jul 2010 10:48:57 -0400 [thread overview]
Message-ID: <20100707144857.GF4823@phenom.dumpdata.com> (raw)
In-Reply-To: <4C34492B0200007800009EC0@vpn.id2.novell.com>
[-- Attachment #1: Type: text/plain, Size: 3167 bytes --]
On Wed, Jul 07, 2010 at 08:30:19AM +0100, Jan Beulich wrote:
> >>> On 06.07.10 at 18:46, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> wrote:
> >> For reference, below is the diff for what we're now using.
> >
> > Ah nice..
> >
> > I get this:
> > patch -p1 --dry-run < ~/p.patch
> > patching file drivers/xen/netback/xenbus.c
> > Hunk #1 succeeded at 19 with fuzz 1.
> > Hunk #2 FAILED at 29.
> > Hunk #3 FAILED at 40.
> > patch: **** malformed patch at line 120: nv *env)
> >
> > If it would not be too much trouble, can you attach it as an attachment?
>
> Sure, here you go.
And attached is it redone against the pv-ops kernel. Let me poke the
folks on the BZ to see if they would be willing to test this.
diff --git a/drivers/xen/netback/xenbus.c b/drivers/xen/netback/xenbus.c
index ba7b1de..805ce48 100644
--- a/drivers/xen/netback/xenbus.c
+++ b/drivers/xen/netback/xenbus.c
@@ -19,6 +19,7 @@
#include <stdarg.h>
#include <linux/module.h>
+#include <linux/rwsem.h>
#include <xen/xenbus.h>
#include "common.h"
@@ -28,6 +29,7 @@
printk("netback/xenbus (%s:%d) " fmt ".\n", __FUNCTION__, __LINE__, ##args)
#endif
+static DECLARE_RWSEM(teardown_sem);
static int connect_rings(struct backend_info *);
static void connect(struct backend_info *);
@@ -41,14 +43,19 @@ static int netback_remove(struct xenbus_device *dev)
//netback_remove_accelerators(be, dev);
unregister_hotplug_status_watch(be);
- if (be->netif) {
+ if (be->netif)
kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
+
+ down_write(&teardown_sem);
+ if (be->netif) {
xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status");
netif_disconnect(be->netif);
be->netif = NULL;
}
- kfree(be);
dev_set_drvdata(&dev->dev, NULL);
+ up_write(&teardown_sem);
+ kfree(be);
+
return 0;
}
@@ -168,7 +175,7 @@ static int netback_uevent(struct xenbus_device *xdev, struct kobj_uevent_env *en
DPRINTK("netback_uevent");
- be = dev_get_drvdata(&xdev->dev);
+ be = dev_get_drvdata(&xdev->dev);/
if (!be)
return 0;
netif = be->netif;
@@ -187,9 +194,14 @@ static int netback_uevent(struct xenbus_device *xdev, struct kobj_uevent_env *en
kfree(val);
}
- if (add_uevent_var(env, "vif=%s", netif->dev->name))
- return -ENOMEM;
-
+ down_read(&teardown_sem);
+ be = dev_get_drvdata(&xdev->dev);
+ if (be && be->netif)
+ if (add_uevent_var(env, "vif=%s", netif->dev->name)) {
+ up_read(&teardown_sem);
+ return -ENOMEM;
+ }
+ up_read(&teardown_sem);
return 0;
}
@@ -199,6 +211,7 @@ static void backend_create_netif(struct backend_info *be)
int err;
long handle;
struct xenbus_device *dev = be->dev;
+ netif_t *netif;
if (be->netif != NULL)
return;
@@ -209,13 +222,13 @@ static void backend_create_netif(struct backend_info *be)
return;
}
- be->netif = netif_alloc(&dev->dev, dev->otherend_id, handle);
- if (IS_ERR(be->netif)) {
- err = PTR_ERR(be->netif);
- be->netif = NULL;
+ netif = netif_alloc(&dev->dev, dev->otherend_id, handle);
+ if (IS_ERR(netif)) {
+ err = PTR_ERR(netif);
xenbus_dev_fatal(dev, err, "creating interface");
return;
}
+ be->netif = netif;
kobject_uevent(&dev->dev.kobj, KOBJ_ONLINE);
}
[-- Attachment #2: netback-xenbus-redone.diff --]
[-- Type: text/plain, Size: 2448 bytes --]
diff --git a/drivers/xen/netback/xenbus.c b/drivers/xen/netback/xenbus.c
index ba7b1de..805ce48 100644
--- a/drivers/xen/netback/xenbus.c
+++ b/drivers/xen/netback/xenbus.c
@@ -19,6 +19,7 @@
#include <stdarg.h>
#include <linux/module.h>
+#include <linux/rwsem.h>
#include <xen/xenbus.h>
#include "common.h"
@@ -28,6 +29,7 @@
printk("netback/xenbus (%s:%d) " fmt ".\n", __FUNCTION__, __LINE__, ##args)
#endif
+static DECLARE_RWSEM(teardown_sem);
static int connect_rings(struct backend_info *);
static void connect(struct backend_info *);
@@ -41,14 +43,19 @@ static int netback_remove(struct xenbus_device *dev)
//netback_remove_accelerators(be, dev);
unregister_hotplug_status_watch(be);
- if (be->netif) {
+ if (be->netif)
kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
+
+ down_write(&teardown_sem);
+ if (be->netif) {
xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status");
netif_disconnect(be->netif);
be->netif = NULL;
}
- kfree(be);
dev_set_drvdata(&dev->dev, NULL);
+ up_write(&teardown_sem);
+ kfree(be);
+
return 0;
}
@@ -168,7 +175,7 @@ static int netback_uevent(struct xenbus_device *xdev, struct kobj_uevent_env *en
DPRINTK("netback_uevent");
- be = dev_get_drvdata(&xdev->dev);
+ be = dev_get_drvdata(&xdev->dev);/
if (!be)
return 0;
netif = be->netif;
@@ -187,9 +194,14 @@ static int netback_uevent(struct xenbus_device *xdev, struct kobj_uevent_env *en
kfree(val);
}
- if (add_uevent_var(env, "vif=%s", netif->dev->name))
- return -ENOMEM;
-
+ down_read(&teardown_sem);
+ be = dev_get_drvdata(&xdev->dev);
+ if (be && be->netif)
+ if (add_uevent_var(env, "vif=%s", netif->dev->name)) {
+ up_read(&teardown_sem);
+ return -ENOMEM;
+ }
+ up_read(&teardown_sem);
return 0;
}
@@ -199,6 +211,7 @@ static void backend_create_netif(struct backend_info *be)
int err;
long handle;
struct xenbus_device *dev = be->dev;
+ netif_t *netif;
if (be->netif != NULL)
return;
@@ -209,13 +222,13 @@ static void backend_create_netif(struct backend_info *be)
return;
}
- be->netif = netif_alloc(&dev->dev, dev->otherend_id, handle);
- if (IS_ERR(be->netif)) {
- err = PTR_ERR(be->netif);
- be->netif = NULL;
+ netif = netif_alloc(&dev->dev, dev->otherend_id, handle);
+ if (IS_ERR(netif)) {
+ err = PTR_ERR(netif);
xenbus_dev_fatal(dev, err, "creating interface");
return;
}
+ be->netif = netif;
kobject_uevent(&dev->dev.kobj, KOBJ_ONLINE);
}
[-- Attachment #3: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
next prev parent reply other threads:[~2010-07-07 14:48 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <bug-1612-1575@http.bugzilla.xensource.com/bugzilla/>
[not found] ` <201007051720.o65HKsI6030388@bugzilla.xensource.com>
2010-07-06 15:10 ` [Bug 1612] Can't start VM when vif set and udev version is greater than 151 Konrad Rzeszutek Wilk
2010-07-06 15:36 ` Jan Beulich
2010-07-06 16:46 ` Konrad Rzeszutek Wilk
2010-07-07 7:30 ` Jan Beulich
2010-07-07 14:48 ` Konrad Rzeszutek Wilk [this message]
2010-07-07 15:26 ` Jeremy Fitzhardinge
2010-07-07 17:18 ` Konrad Rzeszutek Wilk
2010-07-07 17:34 ` Jeremy Fitzhardinge
2010-07-07 17:57 ` Set up bridging under Xen 4.1-unstable ( 2.6.31.15 pvops) on top of Ubuntu 10.04 Server Boris Derzhavets
2010-07-07 18:21 ` Sander Eikelenboom
2010-07-07 19:11 ` Boris Derzhavets
2010-07-08 9:11 ` Stefano Stabellini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100707144857.GF4823@phenom.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=JBeulich@novell.com \
--cc=bastian@waldi.eu.org \
--cc=james.harper@bendigoit.com.au \
--cc=jeremy@goop.org \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).