svn commit: r248763 - head/sys/dev/nvme

Jim Harris jimharris at FreeBSD.org
Tue Mar 26 21:19:27 UTC 2013


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

Log:
  Remove the is_started flag from struct nvme_controller.
  
  This flag was originally added to communicate to the sysctl code
  which oids should be built, but there are easier ways to do this.  This
  needs to be cleaned up prior to adding new controller states - for example,
  controller failure.
  
  Sponsored by:	Intel
  Reviewed by:	carl

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

Modified: head/sys/dev/nvme/nvme.c
==============================================================================
--- head/sys/dev/nvme/nvme.c	Tue Mar 26 21:16:53 2013	(r248762)
+++ head/sys/dev/nvme/nvme.c	Tue Mar 26 21:19:26 2013	(r248763)
@@ -283,7 +283,9 @@ nvme_attach(device_t dev)
 	if (status != 0)
 		return (status);
 
-	ctrlr->config_hook.ich_func = nvme_ctrlr_start;
+	nvme_sysctl_initialize_ctrlr(ctrlr);
+
+	ctrlr->config_hook.ich_func = nvme_ctrlr_start_config_hook;
 	ctrlr->config_hook.ich_arg = ctrlr;
 
 	config_intrhook_establish(&ctrlr->config_hook);

Modified: head/sys/dev/nvme/nvme_ctrlr.c
==============================================================================
--- head/sys/dev/nvme/nvme_ctrlr.c	Tue Mar 26 21:16:53 2013	(r248762)
+++ head/sys/dev/nvme/nvme_ctrlr.c	Tue Mar 26 21:19:26 2013	(r248763)
@@ -733,7 +733,7 @@ nvme_ctrlr_configure_int_coalescing(stru
 	    ctrlr->int_coal_threshold, NULL, NULL);
 }
 
-void
+static void
 nvme_ctrlr_start(void *ctrlr_arg)
 {
 	struct nvme_controller *ctrlr = ctrlr_arg;
@@ -746,40 +746,31 @@ nvme_ctrlr_start(void *ctrlr_arg)
 	nvme_admin_qpair_enable(&ctrlr->adminq);
 
 	if (nvme_ctrlr_identify(ctrlr) != 0)
-		goto err;
+		return;
 
 	if (nvme_ctrlr_set_num_qpairs(ctrlr) != 0)
-		goto err;
+		return;
 
 	if (nvme_ctrlr_create_qpairs(ctrlr) != 0)
-		goto err;
+		return;
 
 	if (nvme_ctrlr_construct_namespaces(ctrlr) != 0)
-		goto err;
+		return;
 
 	nvme_ctrlr_configure_aer(ctrlr);
 	nvme_ctrlr_configure_int_coalescing(ctrlr);
 
 	for (i = 0; i < ctrlr->num_io_queues; i++)
 		nvme_io_qpair_enable(&ctrlr->ioq[i]);
+}
 
-	ctrlr->is_started = TRUE;
-
-err:
-
-	if (ctrlr->num_start_attempts == 0) {
-		/*
-		 * Initialize sysctls, even if controller failed to start, to
-		 *  assist with debugging admin queue pair.  Only run this
-		 *  code on the initial start attempt though, and not
-		 *  subsequent start attempts due to controller-level resets.
-		 *
-		 */
-		nvme_sysctl_initialize_ctrlr(ctrlr);
-		config_intrhook_disestablish(&ctrlr->config_hook);
-	}
+void
+nvme_ctrlr_start_config_hook(void *arg)
+{
+	struct nvme_controller *ctrlr = arg;
 
-	ctrlr->num_start_attempts++;
+	nvme_ctrlr_start(ctrlr);
+	config_intrhook_disestablish(&ctrlr->config_hook);
 }
 
 static void
@@ -906,8 +897,6 @@ nvme_ctrlr_construct(struct nvme_control
 	int			timeout_period;
 
 	ctrlr->dev = dev;
-	ctrlr->is_started = FALSE;
-	ctrlr->num_start_attempts = 0;
 
 	status = nvme_ctrlr_allocate_bar(ctrlr);
 

Modified: head/sys/dev/nvme/nvme_private.h
==============================================================================
--- head/sys/dev/nvme/nvme_private.h	Tue Mar 26 21:16:53 2013	(r248762)
+++ head/sys/dev/nvme/nvme_private.h	Tue Mar 26 21:19:26 2013	(r248763)
@@ -250,7 +250,6 @@ struct nvme_controller {
 	struct intr_config_hook	config_hook;
 	uint32_t		ns_identified;
 	uint32_t		queues_created;
-	uint32_t		num_start_attempts;
 	struct task		reset_task;
 	struct taskqueue	*taskqueue;
 
@@ -287,8 +286,6 @@ struct nvme_controller {
 
 	struct cdev			*cdev;
 
-	boolean_t			is_started;
-
 	uint32_t			num_aers;
 	struct nvme_async_event_request	aer[NVME_MAX_ASYNC_EVENTS];
 
@@ -401,7 +398,7 @@ void	nvme_ctrlr_destruct(struct nvme_con
 int	nvme_ctrlr_hw_reset(struct nvme_controller *ctrlr);
 void	nvme_ctrlr_reset(struct nvme_controller *ctrlr);
 /* ctrlr defined as void * to allow use with config_intrhook. */
-void	nvme_ctrlr_start(void *ctrlr_arg);
+void	nvme_ctrlr_start_config_hook(void *ctrlr_arg);
 void	nvme_ctrlr_submit_admin_request(struct nvme_controller *ctrlr,
 					struct nvme_request *req);
 void	nvme_ctrlr_submit_io_request(struct nvme_controller *ctrlr,

Modified: head/sys/dev/nvme/nvme_sysctl.c
==============================================================================
--- head/sys/dev/nvme/nvme_sysctl.c	Tue Mar 26 21:16:53 2013	(r248762)
+++ head/sys/dev/nvme/nvme_sysctl.c	Tue Mar 26 21:19:26 2013	(r248763)
@@ -251,38 +251,36 @@ nvme_sysctl_initialize_ctrlr(struct nvme
 	ctrlr_tree = device_get_sysctl_tree(ctrlr->dev);
 	ctrlr_list = SYSCTL_CHILDREN(ctrlr_tree);
 
-	if (ctrlr->is_started) {
-		SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
-		    "int_coal_time", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0,
-		    nvme_sysctl_int_coal_time, "IU",
-		    "Interrupt coalescing timeout (in microseconds)");
-
-		SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
-		    "int_coal_threshold", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0,
-		    nvme_sysctl_int_coal_threshold, "IU",
-		    "Interrupt coalescing threshold");
-
-		SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
-		    "timeout_period", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0,
-		    nvme_sysctl_timeout_period, "IU",
-		    "Timeout period (in seconds)");
-
-		SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
-		    "num_cmds", CTLTYPE_S64 | CTLFLAG_RD,
-		    ctrlr, 0, nvme_sysctl_num_cmds, "IU",
-		    "Number of commands submitted");
-
-		SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
-		    "num_intr_handler_calls", CTLTYPE_S64 | CTLFLAG_RD,
-		    ctrlr, 0, nvme_sysctl_num_intr_handler_calls, "IU",
-		    "Number of times interrupt handler was invoked (will "
-		    "typically be less than number of actual interrupts "
-		    "generated due to coalescing)");
-
-		SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
-		    "reset_stats", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0,
-		    nvme_sysctl_reset_stats, "IU", "Reset statistics to zero");
-	}
+	SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
+	    "int_coal_time", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0,
+	    nvme_sysctl_int_coal_time, "IU",
+	    "Interrupt coalescing timeout (in microseconds)");
+
+	SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
+	    "int_coal_threshold", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0,
+	    nvme_sysctl_int_coal_threshold, "IU",
+	    "Interrupt coalescing threshold");
+
+	SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
+	    "timeout_period", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0,
+	    nvme_sysctl_timeout_period, "IU",
+	    "Timeout period (in seconds)");
+
+	SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
+	    "num_cmds", CTLTYPE_S64 | CTLFLAG_RD,
+	    ctrlr, 0, nvme_sysctl_num_cmds, "IU",
+	    "Number of commands submitted");
+
+	SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
+	    "num_intr_handler_calls", CTLTYPE_S64 | CTLFLAG_RD,
+	    ctrlr, 0, nvme_sysctl_num_intr_handler_calls, "IU",
+	    "Number of times interrupt handler was invoked (will "
+	    "typically be less than number of actual interrupts "
+	    "generated due to coalescing)");
+
+	SYSCTL_ADD_PROC(ctrlr_ctx, ctrlr_list, OID_AUTO,
+	    "reset_stats", CTLTYPE_UINT | CTLFLAG_RW, ctrlr, 0,
+	    nvme_sysctl_reset_stats, "IU", "Reset statistics to zero");
 
 	que_tree = SYSCTL_ADD_NODE(ctrlr_ctx, ctrlr_list, OID_AUTO, "adminq",
 	    CTLFLAG_RD, NULL, "Admin Queue");


More information about the svn-src-all mailing list