summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2005-03-31 10:29:57 +0000
committerphk <phk@FreeBSD.org>2005-03-31 10:29:57 +0000
commit2379f6177018b1f39ea760b905f7535cadd5a2a1 (patch)
tree3b6e732e6baeaf832a7af4a5bea1d4b593e5412d /sys/kern
parentb83adaf8e5c6ba7cf04e5a5842aa96980e2c96e9 (diff)
downloadFreeBSD-src-2379f6177018b1f39ea760b905f7535cadd5a2a1.zip
FreeBSD-src-2379f6177018b1f39ea760b905f7535cadd5a2a1.tar.gz
cdev (still) needs per instance uid/gid/mode
Add unlocked version of dev_ref() Clean up various stuff in sys/conf.h
Diffstat (limited to 'sys/kern')
-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 c7d33ea..e4d44ba 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();
OpenPOWER on IntegriCloud