aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_conf.c
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>2005-03-31 10:29:57 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>2005-03-31 10:29:57 +0000
commit9477d73e32ad9e33f3102d8c545489d7f3f2af7a (patch)
tree3b6e732e6baeaf832a7af4a5bea1d4b593e5412d /sys/kern/kern_conf.c
parenteb151cb9894524bd39e112c72a401463b1c37482 (diff)
downloadsrc-9477d73e32ad9e33f3102d8c545489d7f3f2af7a.tar.gz
src-9477d73e32ad9e33f3102d8c545489d7f3f2af7a.zip
cdev (still) needs per instance uid/gid/mode
Add unlocked version of dev_ref() Clean up various stuff in sys/conf.h
Notes
Notes: svn path=/head/; revision=144385
Diffstat (limited to 'sys/kern/kern_conf.c')
-rw-r--r--sys/kern/kern_conf.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c
index c7d33ea3491e..e4d44ba027ad 100644
--- a/sys/kern/kern_conf.c
+++ b/sys/kern/kern_conf.c
@@ -68,6 +68,16 @@ dev_unlock(void)
}
void
+dev_ref(struct cdev *dev)
+{
+
+ mtx_assert(&devmtx, MA_NOTOWNED);
+ mtx_lock(&devmtx);
+ dev->si_refcount++;
+ mtx_unlock(&devmtx);
+}
+
+void
dev_refl(struct cdev *dev)
{
@@ -361,7 +371,7 @@ prep_cdevsw(struct cdevsw *devsw)
}
struct cdev *
-make_dev(struct cdevsw *devsw, int minornr, uid_t uid, gid_t gid, int perms, const char *fmt, ...)
+make_dev(struct cdevsw *devsw, int minornr, uid_t uid, gid_t gid, int mode, const char *fmt, ...)
{
struct cdev *dev;
va_list ap;
@@ -370,15 +380,8 @@ make_dev(struct cdevsw *devsw, int minornr, uid_t uid, gid_t gid, int perms, con
KASSERT((minornr & ~MAXMINOR) == 0,
("Invalid minor (0x%x) in make_dev", minornr));
- if (!(devsw->d_flags & D_INIT)) {
+ if (!(devsw->d_flags & D_INIT))
prep_cdevsw(devsw);
- if (devsw->d_uid == 0)
- devsw->d_uid = uid;
- if (devsw->d_gid == 0)
- devsw->d_gid = gid;
- if (devsw->d_mode == 0)
- devsw->d_mode = perms;
- }
dev = allocdev();
dev_lock();
dev = newdev(devsw, minornr, dev);
@@ -407,6 +410,9 @@ make_dev(struct cdevsw *devsw, int minornr, uid_t uid, gid_t gid, int perms, con
dev->si_devsw = devsw;
dev->si_flags |= SI_NAMED;
+ dev->si_uid = uid;
+ dev->si_gid = gid;
+ dev->si_mode = mode;
devfs_create(dev);
dev_unlock();