devctl (alike?) for devfs
kostikbel at gmail.com
Fri Apr 25 09:50:35 UTC 2008
On Fri, Apr 25, 2008 at 12:35:26AM +0300, Andriy Gapon wrote:
> 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:
> Search for DEVFS for interesting lines.
> Andriy Gapon
> 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)
> TAILQ_INSERT_TAIL(&cdevp_list, cdp, cdp_list);
> + if (!cold)
> + devctl_notify("DEVFS", dev->si_name, "ATTACH", NULL);
> @@ -529,6 +533,9 @@ devfs_destroy(struct cdev *dev)
> cdp = dev->si_priv;
> cdp->cdp_flags &= ~CDP_ACTIVE;
> + if (!cold)
> + devctl_notify("DEVFS", dev->si_name, "DETACH", NULL);
> static void
Did you run this with WITNESS ?
You put the whole devctl_notify() call under the dev_mtx. This includes
the malloc(), PROC_LOCK() and signalling, and some internal devctl_queue()
stuff. This is wrong.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 195 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20080425/45513301/attachment.pgp
More information about the freebsd-hackers