Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Feb 2018 16:40:37 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r328681 - in stable/11/sys: conf dev/nvd dev/nvme
Message-ID:  <201802011640.w11GebCJ021950@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Thu Feb  1 16:40:37 2018
New Revision: 328681
URL: https://svnweb.freebsd.org/changeset/base/328681

Log:
  MFC r322036 (by imp):
  Make nvd vs nda choice boot-time rather than build-time
  
  Introduce hw.nvme.use_nvd tunable. This tunable allows both nvd and
  nda to be installed in the kernel, while allowing only one of them to
  create devices. This is an all-or-nothing setting, and you can't
  change it after boot-time. However, it will allow easier A/B testing.

Modified:
  stable/11/sys/conf/files
  stable/11/sys/conf/files.amd64
  stable/11/sys/dev/nvd/nvd.c
  stable/11/sys/dev/nvme/nvme.h
  stable/11/sys/dev/nvme/nvme_sim.c
  stable/11/sys/dev/nvme/nvme_sysctl.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/conf/files
==============================================================================
--- stable/11/sys/conf/files	Thu Feb  1 16:35:40 2018	(r328680)
+++ stable/11/sys/conf/files	Thu Feb  1 16:40:37 2018	(r328681)
@@ -86,8 +86,8 @@ cam/cam_xpt.c			optional scbus
 cam/ata/ata_all.c		optional scbus
 cam/ata/ata_xpt.c		optional scbus
 cam/ata/ata_pmp.c		optional scbus
-cam/nvme/nvme_all.c		optional scbus nvme 
-cam/nvme/nvme_da.c		optional scbus nvme da !nvd
+cam/nvme/nvme_all.c		optional scbus nvme
+cam/nvme/nvme_da.c		optional scbus nvme da
 cam/nvme/nvme_xpt.c		optional scbus nvme
 cam/scsi/scsi_xpt.c		optional scbus
 cam/scsi/scsi_all.c		optional scbus

Modified: stable/11/sys/conf/files.amd64
==============================================================================
--- stable/11/sys/conf/files.amd64	Thu Feb  1 16:35:40 2018	(r328680)
+++ stable/11/sys/conf/files.amd64	Thu Feb  1 16:40:37 2018	(r328681)
@@ -336,7 +336,7 @@ dev/nvme/nvme_ctrlr_cmd.c	optional	nvme
 dev/nvme/nvme_ns.c		optional	nvme
 dev/nvme/nvme_ns_cmd.c		optional	nvme
 dev/nvme/nvme_qpair.c		optional	nvme
-dev/nvme/nvme_sim.c		optional	nvme scbus !nvd
+dev/nvme/nvme_sim.c		optional	nvme scbus
 dev/nvme/nvme_sysctl.c		optional	nvme
 dev/nvme/nvme_test.c		optional	nvme
 dev/nvme/nvme_util.c		optional	nvme

Modified: stable/11/sys/dev/nvd/nvd.c
==============================================================================
--- stable/11/sys/dev/nvd/nvd.c	Thu Feb  1 16:35:40 2018	(r328680)
+++ stable/11/sys/dev/nvd/nvd.c	Thu Feb  1 16:40:37 2018	(r328681)
@@ -134,6 +134,8 @@ MODULE_DEPEND(nvd, nvme, 1, 1, 1);
 static int
 nvd_load()
 {
+	if (!nvme_use_nvd)
+		return 0;
 
 	TAILQ_INIT(&ctrlr_head);
 	TAILQ_INIT(&disk_head);
@@ -149,6 +151,9 @@ nvd_unload()
 {
 	struct nvd_controller	*ctrlr;
 	struct nvd_disk		*disk;
+
+	if (!nvme_use_nvd)
+		return;
 
 	while (!TAILQ_EMPTY(&ctrlr_head)) {
 		ctrlr = TAILQ_FIRST(&ctrlr_head);

Modified: stable/11/sys/dev/nvme/nvme.h
==============================================================================
--- stable/11/sys/dev/nvme/nvme.h	Thu Feb  1 16:35:40 2018	(r328680)
+++ stable/11/sys/dev/nvme/nvme.h	Thu Feb  1 16:40:37 2018	(r328681)
@@ -1003,6 +1003,8 @@ void	nvme_ns_trim_cmd(struct nvme_command *cmd, uint16
 	cmd->cdw11 = NVME_DSM_ATTR_DEALLOCATE;
 }
 
+extern int nvme_use_nvd;
+
 #endif /* _KERNEL */
 
 #endif /* __NVME_H__ */

Modified: stable/11/sys/dev/nvme/nvme_sim.c
==============================================================================
--- stable/11/sys/dev/nvme/nvme_sim.c	Thu Feb  1 16:35:40 2018	(r328680)
+++ stable/11/sys/dev/nvme/nvme_sim.c	Thu Feb  1 16:40:37 2018	(r328681)
@@ -379,6 +379,8 @@ struct nvme_consumer *consumer_cookie;
 static void
 nvme_sim_init(void)
 {
+	if (nvme_use_nvd)
+		return;
 
 	consumer_cookie = nvme_register_consumer(nvme_sim_new_ns,
 	    nvme_sim_new_controller, NULL, nvme_sim_controller_fail);
@@ -390,6 +392,8 @@ SYSINIT(nvme_sim_register, SI_SUB_DRIVERS, SI_ORDER_AN
 static void
 nvme_sim_uninit(void)
 {
+	if (nvme_use_nvd)
+		return;
 	/* XXX Cleanup */
 
 	nvme_unregister_consumer(consumer_cookie);

Modified: stable/11/sys/dev/nvme/nvme_sysctl.c
==============================================================================
--- stable/11/sys/dev/nvme/nvme_sysctl.c	Thu Feb  1 16:35:40 2018	(r328680)
+++ stable/11/sys/dev/nvme/nvme_sysctl.c	Thu Feb  1 16:40:37 2018	(r328681)
@@ -33,6 +33,12 @@ __FBSDID("$FreeBSD$");
 
 #include "nvme_private.h"
 
+int nvme_use_nvd = 1;
+
+SYSCTL_NODE(_hw, OID_AUTO, nvme, CTLFLAG_RD, 0, "NVMe sysctl tunables");
+SYSCTL_INT(_hw_nvme, OID_AUTO, use_nvd, CTLFLAG_RDTUN,
+    &nvme_use_nvd, 1, "1 = Create NVD devices, 0 = Create NDA devices");
+
 /*
  * CTLTYPE_S64 and sysctl_handle_64 were added in r217616.  Define these
  *  explicitly here for older kernels that don't include the r217616



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201802011640.w11GebCJ021950>