diff options
author | phk <phk@FreeBSD.org> | 2005-03-31 10:29:57 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2005-03-31 10:29:57 +0000 |
commit | 2379f6177018b1f39ea760b905f7535cadd5a2a1 (patch) | |
tree | 3b6e732e6baeaf832a7af4a5bea1d4b593e5412d /sys/kern | |
parent | b83adaf8e5c6ba7cf04e5a5842aa96980e2c96e9 (diff) | |
download | FreeBSD-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.c | 24 |
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(); |