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[];

Reply via email to