diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-10-07 10:43:04 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-10-07 10:43:04 -0400 |
commit | a56e74f546b64be93731e42d83baf5b538cc1b11 (patch) | |
tree | 18f6dee45d801e57ac9db2a31664b0d5c0762c50 /drivers/net/xen-netback/xenbus.c | |
parent | d08e2e09042bd3f7ef66a35cb4bb92794ab26bb2 (diff) | |
parent | e4e7f10bfc4069925e99cc4b428c3434e30b6c3f (diff) |
Merge branch 'arm-aesbs' of git://git.linaro.org/people/ardbiesheuvel/linux-arm into devel-stable
Diffstat (limited to 'drivers/net/xen-netback/xenbus.c')
-rw-r--r-- | drivers/net/xen-netback/xenbus.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c index 1fe48fe364ed..a53782ef1540 100644 --- a/drivers/net/xen-netback/xenbus.c +++ b/drivers/net/xen-netback/xenbus.c | |||
@@ -42,7 +42,7 @@ static int netback_remove(struct xenbus_device *dev) | |||
42 | if (be->vif) { | 42 | if (be->vif) { |
43 | kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE); | 43 | kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE); |
44 | xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status"); | 44 | xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status"); |
45 | xenvif_disconnect(be->vif); | 45 | xenvif_free(be->vif); |
46 | be->vif = NULL; | 46 | be->vif = NULL; |
47 | } | 47 | } |
48 | kfree(be); | 48 | kfree(be); |
@@ -213,9 +213,18 @@ static void disconnect_backend(struct xenbus_device *dev) | |||
213 | { | 213 | { |
214 | struct backend_info *be = dev_get_drvdata(&dev->dev); | 214 | struct backend_info *be = dev_get_drvdata(&dev->dev); |
215 | 215 | ||
216 | if (be->vif) | ||
217 | xenvif_disconnect(be->vif); | ||
218 | } | ||
219 | |||
220 | static void destroy_backend(struct xenbus_device *dev) | ||
221 | { | ||
222 | struct backend_info *be = dev_get_drvdata(&dev->dev); | ||
223 | |||
216 | if (be->vif) { | 224 | if (be->vif) { |
225 | kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE); | ||
217 | xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status"); | 226 | xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status"); |
218 | xenvif_disconnect(be->vif); | 227 | xenvif_free(be->vif); |
219 | be->vif = NULL; | 228 | be->vif = NULL; |
220 | } | 229 | } |
221 | } | 230 | } |
@@ -246,14 +255,11 @@ static void frontend_changed(struct xenbus_device *dev, | |||
246 | case XenbusStateConnected: | 255 | case XenbusStateConnected: |
247 | if (dev->state == XenbusStateConnected) | 256 | if (dev->state == XenbusStateConnected) |
248 | break; | 257 | break; |
249 | backend_create_xenvif(be); | ||
250 | if (be->vif) | 258 | if (be->vif) |
251 | connect(be); | 259 | connect(be); |
252 | break; | 260 | break; |
253 | 261 | ||
254 | case XenbusStateClosing: | 262 | case XenbusStateClosing: |
255 | if (be->vif) | ||
256 | kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE); | ||
257 | disconnect_backend(dev); | 263 | disconnect_backend(dev); |
258 | xenbus_switch_state(dev, XenbusStateClosing); | 264 | xenbus_switch_state(dev, XenbusStateClosing); |
259 | break; | 265 | break; |
@@ -262,6 +268,7 @@ static void frontend_changed(struct xenbus_device *dev, | |||
262 | xenbus_switch_state(dev, XenbusStateClosed); | 268 | xenbus_switch_state(dev, XenbusStateClosed); |
263 | if (xenbus_dev_is_online(dev)) | 269 | if (xenbus_dev_is_online(dev)) |
264 | break; | 270 | break; |
271 | destroy_backend(dev); | ||
265 | /* fall through if not online */ | 272 | /* fall through if not online */ |
266 | case XenbusStateUnknown: | 273 | case XenbusStateUnknown: |
267 | device_unregister(&dev->dev); | 274 | device_unregister(&dev->dev); |