Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Apr 2008 00:35:26 +0300
From:      Andriy Gapon <avg@icyb.net.ua>
To:        John Baldwin <jhb@freebsd.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: devctl (alike?) for devfs
Message-ID:  <4810FD1E.70602@icyb.net.ua>
In-Reply-To: <200804240811.26183.jhb@freebsd.org>
References:  <480E4269.2090604@icyb.net.ua> <480FBAB9.1000904@icyb.net.ua> <48103F36.6060707@icyb.net.ua> <200804240811.26183.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]

I decided to do it in devfs_devs.c because there are less entry points
there and the code is much simpler (you know: aliases, clones).
I also had to add !cold condition, because apparently we have devices
created so early in the boot, that devctl is not ready to handle a
notification. My system hanged after only getting to the following line
in verbose boot:
ULE: setup cpu 0
However it is possible that it did something wrong - at that time I had
devctl calls in kern_conf.

I guess this also should be OK from the user perspective because they
would be interested in device events after a system is booted and devd
is running.

Here is a log of devd started with -dD flags in single-user mode, then I
attached and later detached an external hdd:
http://www.icyb.net.ua/~avg/devd.log.gz
Search for DEVFS for interesting lines.

-- 
Andriy Gapon

[-- Attachment #2 --]
diff --git a/sys/fs/devfs/devfs_devs.c b/sys/fs/devfs/devfs_devs.c
index ca5c2de..3556799 100644
--- a/sys/fs/devfs/devfs_devs.c
+++ b/sys/fs/devfs/devfs_devs.c
@@ -33,6 +33,7 @@
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/conf.h>
+#include <sys/bus.h>
 #include <sys/dirent.h>
 #include <sys/kernel.h>
 #include <sys/limits.h>
@@ -518,6 +519,9 @@ devfs_create(struct cdev *dev)
 	dev_refl(dev);
 	TAILQ_INSERT_TAIL(&cdevp_list, cdp, cdp_list);
 	devfs_generation++;
+
+	if (!cold)
+		devctl_notify("DEVFS", dev->si_name, "ATTACH", NULL);
 }
 
 void
@@ -529,6 +533,9 @@ devfs_destroy(struct cdev *dev)
 	cdp = dev->si_priv;
 	cdp->cdp_flags &= ~CDP_ACTIVE;
 	devfs_generation++;
+
+	if (!cold)
+		devctl_notify("DEVFS", dev->si_name, "DETACH", NULL);
 }
 
 static void

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