Author: jimharris
Date: Tue Mar 26 18:34:19 2013
New Revision: 248736
URL: http://svnweb.freebsd.org/changeset/base/248736

Log:
  Move controller destruction code from nvme_detach() to new 
nvme_ctrlr_destruct()
  function.
  
  Sponsored by: Intel

Modified:
  head/sys/dev/nvme/nvme.c
  head/sys/dev/nvme/nvme_ctrlr.c
  head/sys/dev/nvme/nvme_private.h

Modified: head/sys/dev/nvme/nvme.c
==============================================================================
--- head/sys/dev/nvme/nvme.c    Tue Mar 26 18:31:46 2013        (r248735)
+++ head/sys/dev/nvme/nvme.c    Tue Mar 26 18:34:19 2013        (r248736)
@@ -286,53 +286,8 @@ static int
 nvme_detach (device_t dev)
 {
        struct nvme_controller  *ctrlr = DEVICE2SOFTC(dev);
-       struct nvme_namespace   *ns;
-       int                     i;
-
-       for (i = 0; i < NVME_MAX_NAMESPACES; i++) {
-               ns = &ctrlr->ns[i];
-               if (ns->cdev)
-                       destroy_dev(ns->cdev);
-       }
-
-       if (ctrlr->cdev)
-               destroy_dev(ctrlr->cdev);
-
-       for (i = 0; i < ctrlr->num_io_queues; i++) {
-               nvme_io_qpair_destroy(&ctrlr->ioq[i]);
-       }
-
-       free(ctrlr->ioq, M_NVME);
-
-       nvme_admin_qpair_destroy(&ctrlr->adminq);
-
-       if (ctrlr->resource != NULL) {
-               bus_release_resource(dev, SYS_RES_MEMORY,
-                   ctrlr->resource_id, ctrlr->resource);
-       }
-
-       if (ctrlr->bar4_resource != NULL) {
-               bus_release_resource(dev, SYS_RES_MEMORY,
-                   ctrlr->bar4_resource_id, ctrlr->bar4_resource);
-       }
-
-#ifdef CHATHAM2
-       if (ctrlr->chatham_resource != NULL) {
-               bus_release_resource(dev, SYS_RES_MEMORY,
-                   ctrlr->chatham_resource_id, ctrlr->chatham_resource);
-       }
-#endif
-
-       if (ctrlr->tag)
-               bus_teardown_intr(ctrlr->dev, ctrlr->res, ctrlr->tag);
-
-       if (ctrlr->res)
-               bus_release_resource(ctrlr->dev, SYS_RES_IRQ,
-                   rman_get_rid(ctrlr->res), ctrlr->res);
-
-       if (ctrlr->msix_enabled)
-               pci_release_msi(dev);
 
+       nvme_ctrlr_destruct(ctrlr, dev);
        return (0);
 }
 

Modified: head/sys/dev/nvme/nvme_ctrlr.c
==============================================================================
--- head/sys/dev/nvme/nvme_ctrlr.c      Tue Mar 26 18:31:46 2013        
(r248735)
+++ head/sys/dev/nvme/nvme_ctrlr.c      Tue Mar 26 18:34:19 2013        
(r248736)
@@ -808,6 +808,57 @@ intx:
 }
 
 void
+nvme_ctrlr_destruct(struct nvme_controller *ctrlr, device_t dev)
+{
+       struct nvme_namespace   *ns;
+       int                     i;
+
+       for (i = 0; i < NVME_MAX_NAMESPACES; i++) {
+               ns = &ctrlr->ns[i];
+               if (ns->cdev)
+                       destroy_dev(ns->cdev);
+       }
+
+       if (ctrlr->cdev)
+               destroy_dev(ctrlr->cdev);
+
+       for (i = 0; i < ctrlr->num_io_queues; i++) {
+               nvme_io_qpair_destroy(&ctrlr->ioq[i]);
+       }
+
+       free(ctrlr->ioq, M_NVME);
+
+       nvme_admin_qpair_destroy(&ctrlr->adminq);
+
+       if (ctrlr->resource != NULL) {
+               bus_release_resource(dev, SYS_RES_MEMORY,
+                   ctrlr->resource_id, ctrlr->resource);
+       }
+
+       if (ctrlr->bar4_resource != NULL) {
+               bus_release_resource(dev, SYS_RES_MEMORY,
+                   ctrlr->bar4_resource_id, ctrlr->bar4_resource);
+       }
+
+#ifdef CHATHAM2
+       if (ctrlr->chatham_resource != NULL) {
+               bus_release_resource(dev, SYS_RES_MEMORY,
+                   ctrlr->chatham_resource_id, ctrlr->chatham_resource);
+       }
+#endif
+
+       if (ctrlr->tag)
+               bus_teardown_intr(ctrlr->dev, ctrlr->res, ctrlr->tag);
+
+       if (ctrlr->res)
+               bus_release_resource(ctrlr->dev, SYS_RES_IRQ,
+                   rman_get_rid(ctrlr->res), ctrlr->res);
+
+       if (ctrlr->msix_enabled)
+               pci_release_msi(dev);
+}
+
+void
 nvme_ctrlr_submit_admin_request(struct nvme_controller *ctrlr,
     struct nvme_request *req)
 {

Modified: head/sys/dev/nvme/nvme_private.h
==============================================================================
--- head/sys/dev/nvme/nvme_private.h    Tue Mar 26 18:31:46 2013        
(r248735)
+++ head/sys/dev/nvme/nvme_private.h    Tue Mar 26 18:34:19 2013        
(r248736)
@@ -358,6 +358,7 @@ void        nvme_payload_map_uio(void *arg, bus
                             bus_size_t mapsize, int error);
 
 int    nvme_ctrlr_construct(struct nvme_controller *ctrlr, device_t dev);
+void   nvme_ctrlr_destruct(struct nvme_controller *ctrlr, device_t dev);
 int    nvme_ctrlr_reset(struct nvme_controller *ctrlr);
 /* ctrlr defined as void * to allow use with config_intrhook. */
 void   nvme_ctrlr_start(void *ctrlr_arg);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to