xen-netback: move netback_probe() and netback_remove() to the end...
authorPaul Durrant <pdurrant@amazon.com>
Tue, 17 Dec 2019 13:32:16 +0000 (13:32 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 18 Dec 2019 07:03:33 +0000 (23:03 -0800)
...of xenbus.c

This is a cosmetic function re-ordering to reduce churn in a subsequent
patch. Some style fix-up was done to make checkpatch.pl happier.

No functional change.

Signed-off-by: Paul Durrant <pdurrant@amazon.com>
Acked-by: Wei Liu <wei.liu@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/xen-netback/xenbus.c

index f533b73..bb61316 100644 (file)
@@ -195,185 +195,6 @@ static void xenvif_debugfs_delif(struct xenvif *vif)
 }
 #endif /* CONFIG_DEBUG_FS */
 
-static int netback_remove(struct xenbus_device *dev)
-{
-       struct backend_info *be = dev_get_drvdata(&dev->dev);
-
-       set_backend_state(be, XenbusStateClosed);
-
-       unregister_hotplug_status_watch(be);
-       if (be->vif) {
-               kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
-               xen_unregister_watchers(be->vif);
-               xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status");
-               xenvif_free(be->vif);
-               be->vif = NULL;
-       }
-       kfree(be->hotplug_script);
-       kfree(be);
-       dev_set_drvdata(&dev->dev, NULL);
-       return 0;
-}
-
-
-/**
- * Entry point to this code when a new device is created.  Allocate the basic
- * structures and switch to InitWait.
- */
-static int netback_probe(struct xenbus_device *dev,
-                        const struct xenbus_device_id *id)
-{
-       const char *message;
-       struct xenbus_transaction xbt;
-       int err;
-       int sg;
-       const char *script;
-       struct backend_info *be = kzalloc(sizeof(struct backend_info),
-                                         GFP_KERNEL);
-       if (!be) {
-               xenbus_dev_fatal(dev, -ENOMEM,
-                                "allocating backend structure");
-               return -ENOMEM;
-       }
-
-       be->dev = dev;
-       dev_set_drvdata(&dev->dev, be);
-
-       be->state = XenbusStateInitialising;
-       err = xenbus_switch_state(dev, XenbusStateInitialising);
-       if (err)
-               goto fail;
-
-       sg = 1;
-
-       do {
-               err = xenbus_transaction_start(&xbt);
-               if (err) {
-                       xenbus_dev_fatal(dev, err, "starting transaction");
-                       goto fail;
-               }
-
-               err = xenbus_printf(xbt, dev->nodename, "feature-sg", "%d", sg);
-               if (err) {
-                       message = "writing feature-sg";
-                       goto abort_transaction;
-               }
-
-               err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv4",
-                                   "%d", sg);
-               if (err) {
-                       message = "writing feature-gso-tcpv4";
-                       goto abort_transaction;
-               }
-
-               err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv6",
-                                   "%d", sg);
-               if (err) {
-                       message = "writing feature-gso-tcpv6";
-                       goto abort_transaction;
-               }
-
-               /* We support partial checksum setup for IPv6 packets */
-               err = xenbus_printf(xbt, dev->nodename,
-                                   "feature-ipv6-csum-offload",
-                                   "%d", 1);
-               if (err) {
-                       message = "writing feature-ipv6-csum-offload";
-                       goto abort_transaction;
-               }
-
-               /* We support rx-copy path. */
-               err = xenbus_printf(xbt, dev->nodename,
-                                   "feature-rx-copy", "%d", 1);
-               if (err) {
-                       message = "writing feature-rx-copy";
-                       goto abort_transaction;
-               }
-
-               /*
-                * We don't support rx-flip path (except old guests who don't
-                * grok this feature flag).
-                */
-               err = xenbus_printf(xbt, dev->nodename,
-                                   "feature-rx-flip", "%d", 0);
-               if (err) {
-                       message = "writing feature-rx-flip";
-                       goto abort_transaction;
-               }
-
-               /* We support dynamic multicast-control. */
-               err = xenbus_printf(xbt, dev->nodename,
-                                   "feature-multicast-control", "%d", 1);
-               if (err) {
-                       message = "writing feature-multicast-control";
-                       goto abort_transaction;
-               }
-
-               err = xenbus_printf(xbt, dev->nodename,
-                                   "feature-dynamic-multicast-control",
-                                   "%d", 1);
-               if (err) {
-                       message = "writing feature-dynamic-multicast-control";
-                       goto abort_transaction;
-               }
-
-               err = xenbus_transaction_end(xbt, 0);
-       } while (err == -EAGAIN);
-
-       if (err) {
-               xenbus_dev_fatal(dev, err, "completing transaction");
-               goto fail;
-       }
-
-       /*
-        * Split event channels support, this is optional so it is not
-        * put inside the above loop.
-        */
-       err = xenbus_printf(XBT_NIL, dev->nodename,
-                           "feature-split-event-channels",
-                           "%u", separate_tx_rx_irq);
-       if (err)
-               pr_debug("Error writing feature-split-event-channels\n");
-
-       /* Multi-queue support: This is an optional feature. */
-       err = xenbus_printf(XBT_NIL, dev->nodename,
-                           "multi-queue-max-queues", "%u", xenvif_max_queues);
-       if (err)
-               pr_debug("Error writing multi-queue-max-queues\n");
-
-       err = xenbus_printf(XBT_NIL, dev->nodename,
-                           "feature-ctrl-ring",
-                           "%u", true);
-       if (err)
-               pr_debug("Error writing feature-ctrl-ring\n");
-
-       script = xenbus_read(XBT_NIL, dev->nodename, "script", NULL);
-       if (IS_ERR(script)) {
-               err = PTR_ERR(script);
-               xenbus_dev_fatal(dev, err, "reading script");
-               goto fail;
-       }
-
-       be->hotplug_script = script;
-
-
-       /* This kicks hotplug scripts, so do it immediately. */
-       err = backend_create_xenvif(be);
-       if (err)
-               goto fail;
-
-       return 0;
-
-abort_transaction:
-       xenbus_transaction_end(xbt, 1);
-       xenbus_dev_fatal(dev, err, "%s", message);
-fail:
-       pr_debug("failed\n");
-       netback_remove(dev);
-       return err;
-}
-
-
 /*
  * Handle the creation of the hotplug script environment.  We add the script
  * and vif variables to the environment, for the benefit of the vif-* hotplug
@@ -1128,6 +949,180 @@ static int read_xenbus_vif_flags(struct backend_info *be)
        return 0;
 }
 
+static int netback_remove(struct xenbus_device *dev)
+{
+       struct backend_info *be = dev_get_drvdata(&dev->dev);
+
+       set_backend_state(be, XenbusStateClosed);
+
+       unregister_hotplug_status_watch(be);
+       if (be->vif) {
+               kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE);
+               xen_unregister_watchers(be->vif);
+               xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status");
+               xenvif_free(be->vif);
+               be->vif = NULL;
+       }
+       kfree(be->hotplug_script);
+       kfree(be);
+       dev_set_drvdata(&dev->dev, NULL);
+       return 0;
+}
+
+/**
+ * Entry point to this code when a new device is created.  Allocate the basic
+ * structures and switch to InitWait.
+ */
+static int netback_probe(struct xenbus_device *dev,
+                        const struct xenbus_device_id *id)
+{
+       const char *message;
+       struct xenbus_transaction xbt;
+       int err;
+       int sg;
+       const char *script;
+       struct backend_info *be = kzalloc(sizeof(*be), GFP_KERNEL);
+
+       if (!be) {
+               xenbus_dev_fatal(dev, -ENOMEM,
+                                "allocating backend structure");
+               return -ENOMEM;
+       }
+
+       be->dev = dev;
+       dev_set_drvdata(&dev->dev, be);
+
+       be->state = XenbusStateInitialising;
+       err = xenbus_switch_state(dev, XenbusStateInitialising);
+       if (err)
+               goto fail;
+
+       sg = 1;
+
+       do {
+               err = xenbus_transaction_start(&xbt);
+               if (err) {
+                       xenbus_dev_fatal(dev, err, "starting transaction");
+                       goto fail;
+               }
+
+               err = xenbus_printf(xbt, dev->nodename, "feature-sg", "%d", sg);
+               if (err) {
+                       message = "writing feature-sg";
+                       goto abort_transaction;
+               }
+
+               err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv4",
+                                   "%d", sg);
+               if (err) {
+                       message = "writing feature-gso-tcpv4";
+                       goto abort_transaction;
+               }
+
+               err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv6",
+                                   "%d", sg);
+               if (err) {
+                       message = "writing feature-gso-tcpv6";
+                       goto abort_transaction;
+               }
+
+               /* We support partial checksum setup for IPv6 packets */
+               err = xenbus_printf(xbt, dev->nodename,
+                                   "feature-ipv6-csum-offload",
+                                   "%d", 1);
+               if (err) {
+                       message = "writing feature-ipv6-csum-offload";
+                       goto abort_transaction;
+               }
+
+               /* We support rx-copy path. */
+               err = xenbus_printf(xbt, dev->nodename,
+                                   "feature-rx-copy", "%d", 1);
+               if (err) {
+                       message = "writing feature-rx-copy";
+                       goto abort_transaction;
+               }
+
+               /* We don't support rx-flip path (except old guests who
+                * don't grok this feature flag).
+                */
+               err = xenbus_printf(xbt, dev->nodename,
+                                   "feature-rx-flip", "%d", 0);
+               if (err) {
+                       message = "writing feature-rx-flip";
+                       goto abort_transaction;
+               }
+
+               /* We support dynamic multicast-control. */
+               err = xenbus_printf(xbt, dev->nodename,
+                                   "feature-multicast-control", "%d", 1);
+               if (err) {
+                       message = "writing feature-multicast-control";
+                       goto abort_transaction;
+               }
+
+               err = xenbus_printf(xbt, dev->nodename,
+                                   "feature-dynamic-multicast-control",
+                                   "%d", 1);
+               if (err) {
+                       message = "writing feature-dynamic-multicast-control";
+                       goto abort_transaction;
+               }
+
+               err = xenbus_transaction_end(xbt, 0);
+       } while (err == -EAGAIN);
+
+       if (err) {
+               xenbus_dev_fatal(dev, err, "completing transaction");
+               goto fail;
+       }
+
+       /* Split event channels support, this is optional so it is not
+        * put inside the above loop.
+        */
+       err = xenbus_printf(XBT_NIL, dev->nodename,
+                           "feature-split-event-channels",
+                           "%u", separate_tx_rx_irq);
+       if (err)
+               pr_debug("Error writing feature-split-event-channels\n");
+
+       /* Multi-queue support: This is an optional feature. */
+       err = xenbus_printf(XBT_NIL, dev->nodename,
+                           "multi-queue-max-queues", "%u", xenvif_max_queues);
+       if (err)
+               pr_debug("Error writing multi-queue-max-queues\n");
+
+       err = xenbus_printf(XBT_NIL, dev->nodename,
+                           "feature-ctrl-ring",
+                           "%u", true);
+       if (err)
+               pr_debug("Error writing feature-ctrl-ring\n");
+
+       script = xenbus_read(XBT_NIL, dev->nodename, "script", NULL);
+       if (IS_ERR(script)) {
+               err = PTR_ERR(script);
+               xenbus_dev_fatal(dev, err, "reading script");
+               goto fail;
+       }
+
+       be->hotplug_script = script;
+
+       /* This kicks hotplug scripts, so do it immediately. */
+       err = backend_create_xenvif(be);
+       if (err)
+               goto fail;
+
+       return 0;
+
+abort_transaction:
+       xenbus_transaction_end(xbt, 1);
+       xenbus_dev_fatal(dev, err, "%s", message);
+fail:
+       pr_debug("failed\n");
+       netback_remove(dev);
+       return err;
+}
+
 static const struct xenbus_device_id netback_ids[] = {
        { "vif" },
        { "" }