diff options
author | Poul-Henning Kamp <phk@FreeBSD.org> | 2005-03-31 10:29:57 +0000 |
---|---|---|
committer | Poul-Henning Kamp <phk@FreeBSD.org> | 2005-03-31 10:29:57 +0000 |
commit | 9477d73e32ad9e33f3102d8c545489d7f3f2af7a (patch) | |
tree | 3b6e732e6baeaf832a7af4a5bea1d4b593e5412d /sys/kern/kern_conf.c | |
parent | eb151cb9894524bd39e112c72a401463b1c37482 (diff) | |
download | src-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.c | 24 |
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(); |