[PATCH 1/2] nvme: send uevent on connection up

Martin Belanger nitram_67 at hotmail.com
Wed Feb 2 13:34:50 PST 2022


From: Martin Belanger <martin.belanger at dell.com>

When connectivity with a controller is lost, the driver will keep trying
to reconnect once every 10 sec. When connection is restored, user-space
apps need to be informed so that they can take proper action. For
example, TP8010 introduces the DIM PDU, which is used to register with
a discovery controller (DC). The DIM PDU is sent from user-space.  The
DIM PDU must be sent every time a connection is established with a DC.
Therefore, the kernel must tell user-space apps when connection is
restored so that registration can happen.

The uevent sent is a "change" uevent with environmental data
set to: "NVME_EVENT=connected".

Signed-off-by: Martin Belanger <martin.belanger at dell.com>
---
 drivers/nvme/host/core.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 961a5f8a44d2..872c389dc6d3 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -4231,6 +4231,13 @@ static int nvme_class_uevent(struct device *dev, struct kobj_uevent_env *env)
 	return ret;
 }
 
+static void nvme_change_uevent(struct nvme_ctrl *ctrl, char *envdata)
+{
+	char *envp[2] = { envdata, NULL };
+
+	kobject_uevent_env(&ctrl->device->kobj, KOBJ_CHANGE, envp);
+}
+
 static void nvme_aen_uevent(struct nvme_ctrl *ctrl)
 {
 	char *envp[2] = { NULL, NULL };
@@ -4405,6 +4412,8 @@ void nvme_start_ctrl(struct nvme_ctrl *ctrl)
 		nvme_queue_scan(ctrl);
 		nvme_start_queues(ctrl);
 	}
+
+	nvme_change_uevent(ctrl, "NVME_EVENT=connected");
 }
 EXPORT_SYMBOL_GPL(nvme_start_ctrl);
 
-- 
2.34.1




More information about the Linux-nvme mailing list