Module Name: src Committed By: nat Date: Fri Dec 9 19:13:47 UTC 2016
Modified Files: src/sys/kern: subr_devsw.c src/sys/miscfs/specfs: spec_vnops.c src/sys/sys: conf.h Log Message: Add functions to access device flags. This restores simultaneous audio open/close. OK hannken@ christos@ To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 src/sys/kern/subr_devsw.c cvs rdiff -u -r1.166 -r1.167 src/sys/miscfs/specfs/spec_vnops.c cvs rdiff -u -r1.148 -r1.149 src/sys/sys/conf.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/subr_devsw.c diff -u src/sys/kern/subr_devsw.c:1.34 src/sys/kern/subr_devsw.c:1.35 --- src/sys/kern/subr_devsw.c:1.34 Mon Feb 1 05:05:43 2016 +++ src/sys/kern/subr_devsw.c Fri Dec 9 19:13:47 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_devsw.c,v 1.34 2016/02/01 05:05:43 riz Exp $ */ +/* $NetBSD: subr_devsw.c,v 1.35 2016/12/09 19:13:47 nat Exp $ */ /*- * Copyright (c) 2001, 2002, 2007, 2008 The NetBSD Foundation, Inc. @@ -69,7 +69,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_devsw.c,v 1.34 2016/02/01 05:05:43 riz Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_devsw.c,v 1.35 2016/12/09 19:13:47 nat Exp $"); #ifdef _KERNEL_OPT #include "opt_dtrace.h" @@ -796,6 +796,16 @@ bdev_dump(dev_t dev, daddr_t addr, void } int +bdev_flags(dev_t dev) +{ + const struct bdevsw *d; + + if ((d = bdevsw_lookup(dev)) == NULL) + return 0; + return d->d_flag & ~D_TYPEMASK; +} + +int bdev_type(dev_t dev) { const struct bdevsw *d; @@ -1026,6 +1036,16 @@ cdev_discard(dev_t dev, off_t pos, off_t } int +cdev_flags(dev_t dev) +{ + const struct cdevsw *d; + + if ((d = cdevsw_lookup(dev)) == NULL) + return 0; + return d->d_flag & ~D_TYPEMASK; +} + +int cdev_type(dev_t dev) { const struct cdevsw *d; Index: src/sys/miscfs/specfs/spec_vnops.c diff -u src/sys/miscfs/specfs/spec_vnops.c:1.166 src/sys/miscfs/specfs/spec_vnops.c:1.167 --- src/sys/miscfs/specfs/spec_vnops.c:1.166 Thu Dec 8 10:28:44 2016 +++ src/sys/miscfs/specfs/spec_vnops.c Fri Dec 9 19:13:47 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: spec_vnops.c,v 1.166 2016/12/08 10:28:44 nat Exp $ */ +/* $NetBSD: spec_vnops.c,v 1.167 2016/12/09 19:13:47 nat Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -58,7 +58,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.166 2016/12/08 10:28:44 nat Exp $"); +__KERNEL_RCSID(0, "$NetBSD: spec_vnops.c,v 1.167 2016/12/09 19:13:47 nat Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -1227,7 +1227,7 @@ spec_close(void *v) sd->sd_bdevvp = NULL; mutex_exit(&device_lock); - if (count != 0 && (vp->v_type != VCHR || cdev_type(dev) != D_MCLOSE)) + if (count != 0 && (vp->v_type != VCHR || !(cdev_flags(dev) & D_MCLOSE))) return 0; /* Index: src/sys/sys/conf.h diff -u src/sys/sys/conf.h:1.148 src/sys/sys/conf.h:1.149 --- src/sys/sys/conf.h:1.148 Thu Dec 8 20:53:12 2016 +++ src/sys/sys/conf.h Fri Dec 9 19:13:47 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: conf.h,v 1.148 2016/12/08 20:53:12 nat Exp $ */ +/* $NetBSD: conf.h,v 1.149 2016/12/09 19:13:47 nat Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -175,7 +175,9 @@ dev_type_kqfilter(cdev_kqfilter); dev_type_discard(cdev_discard); int cdev_type(dev_t); +int cdev_flags(dev_t); int bdev_type(dev_t); +int bdev_flags(dev_t); /* symbolic sleep message strings */ extern const char devopn[], devio[], devwait[], devin[], devout[];