Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/pgoyette-localcount]: src/sys Adapt machine-independant code to the new ...
details: https://anonhg.NetBSD.org/src/rev/24c0bdc5f89f
branches: pgoyette-localcount
changeset: 852825:24c0bdc5f89f
user: pgoyette <pgoyette%NetBSD.org@localhost>
date: Wed Jul 20 23:47:55 2016 +0000
description:
Adapt machine-independant code to the new {b,c}devsw reference-counting
(using localcount(9)). All callers of {b,c}devsw_lookup() now call
{b,c}devsw_lookup_acquire() which retains a reference on the 'struct
{b,c}devsw'. This reference must be released by the caller once it is
finished with the structure's content (or other data that would disappear
if the 'struct {b,c}devsw' were to disappear).
diffstat:
sys/coda/coda_vfsops.c | 13 +++++++---
sys/compat/common/tty_60.c | 26 ++++++++++++--------
sys/compat/linux/arch/amd64/linux_machdep.c | 36 ++++++++++++++++------------
sys/compat/linux/arch/i386/linux_machdep.c | 23 +++++++++++-------
sys/compat/linux/common/linux_ioctl.c | 15 ++++++++----
sys/dev/clockctl.c | 18 ++++++++-----
sys/dev/dkwedge/dk.c | 7 +++--
sys/dev/ir/irframe_tty.c | 8 ++++--
sys/dev/raidframe/rf_netbsdkintf.c | 8 +++---
sys/fs/adosfs/advfsops.c | 9 ++++--
sys/fs/cd9660/cd9660_vfsops.c | 14 +++++++----
sys/fs/filecorefs/filecore_vfsops.c | 15 ++++++++----
sys/fs/hfs/hfs_vfsops.c | 13 ++++++++--
sys/fs/msdosfs/msdosfs_vfsops.c | 19 ++++++++++----
sys/fs/nilfs/nilfs_vfsops.c | 12 +++++++--
sys/fs/ntfs/ntfs_vfsops.c | 11 ++++++--
sys/fs/sysvbfs/sysvbfs_vfsops.c | 18 ++++++++++----
sys/fs/udf/udf_vfsops.c | 15 ++++++++---
sys/fs/v7fs/v7fs_vfsops.c | 22 +++++++++++++----
sys/kern/tty.c | 7 +++--
sys/kern/tty_pty.c | 36 +++++++++++++++++-----------
sys/kern/vfs_mount.c | 28 ++++++++++++----------
sys/miscfs/specfs/spec_vnops.c | 19 ++++++++------
sys/net/ppp_tty.c | 8 ++++--
sys/ufs/chfs/chfs_vfsops.c | 19 ++++++++++++---
sys/ufs/ext2fs/ext2fs_vfsops.c | 18 ++++++++-----
sys/ufs/ffs/ffs_vfsops.c | 17 ++++++++-----
sys/ufs/lfs/lfs_vfsops.c | 18 ++++++++-----
sys/uvm/uvm_device.c | 19 +++++++++++----
sys/uvm/uvm_swap.c | 14 +++++++----
30 files changed, 325 insertions(+), 180 deletions(-)
diffs (truncated from 1862 to 300 lines):
diff -r d669e1b9616c -r 24c0bdc5f89f sys/coda/coda_vfsops.c
--- a/sys/coda/coda_vfsops.c Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/coda/coda_vfsops.c Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: coda_vfsops.c,v 1.84 2014/12/13 15:59:30 hannken Exp $ */
+/* $NetBSD: coda_vfsops.c,v 1.84.2.1 2016/07/20 23:47:55 pgoyette Exp $ */
/*
*
@@ -45,7 +45,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coda_vfsops.c,v 1.84 2014/12/13 15:59:30 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coda_vfsops.c,v 1.84.2.1 2016/07/20 23:47:55 pgoyette Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -212,7 +212,7 @@
}
dev = dvp->v_rdev;
vrele(dvp);
- cdev = cdevsw_lookup(dev);
+ cdev = cdevsw_lookup_acquire(dev);
if (cdev == NULL) {
MARK_INT_FAIL(CODA_MOUNT_STATS);
return(ENXIO);
@@ -224,11 +224,13 @@
if (cdev != &vcoda_cdevsw)
{
MARK_INT_FAIL(CODA_MOUNT_STATS);
+ cdevsw_release(cdev);
return(ENXIO);
}
if (minor(dev) >= NVCODA) {
MARK_INT_FAIL(CODA_MOUNT_STATS);
+ cdevsw_release(cdev);
return(ENXIO);
}
@@ -239,6 +241,7 @@
if (!VC_OPEN(&mi->mi_vcomm)) {
MARK_INT_FAIL(CODA_MOUNT_STATS);
+ cdevsw_release(cdev);
return(ENODEV);
}
@@ -280,8 +283,10 @@
else
MARK_INT_SAT(CODA_MOUNT_STATS);
- return set_statvfs_info("/coda", UIO_SYSSPACE, "CODA", UIO_SYSSPACE,
+ error = set_statvfs_info("/coda", UIO_SYSSPACE, "CODA", UIO_SYSSPACE,
vfsp->mnt_op->vfs_name, vfsp, l);
+ cdevsw_release(cdev);
+ return error;
}
int
diff -r d669e1b9616c -r 24c0bdc5f89f sys/compat/common/tty_60.c
--- a/sys/compat/common/tty_60.c Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/compat/common/tty_60.c Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: tty_60.c,v 1.4 2015/10/22 15:18:25 christos Exp $ */
+/* $NetBSD: tty_60.c,v 1.4.2.1 2016/07/20 23:47:55 pgoyette Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tty_60.c,v 1.4 2015/10/22 15:18:25 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tty_60.c,v 1.4.2.1 2016/07/20 23:47:55 pgoyette Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -67,24 +67,28 @@
compat_60_ptmget_ioctl(dev_t dev, u_long cmd, void *data, int flag,
struct lwp *l)
{
- int ret;
+ int ret = 0;
u_long newcmd;
struct ptmget pg;
- const struct cdevsw *cd = cdevsw_lookup(dev);
+ const struct cdevsw *cd = cdevsw_lookup_acquire(dev);
- if (cd == NULL || cd->d_ioctl == NULL)
+ if (cd == NULL)
return ENXIO;
+ if (cd->d_ioctl == NULL) {
+ cdevsw_release(cd);
+ return ENXIO;
+ }
switch (cmd) {
case COMPAT_60_TIOCPTMGET: newcmd = TIOCPTMGET; break;
case COMPAT_60_TIOCPTSNAME: newcmd = TIOCPTSNAME; break;
- default: return ENOTTY;
+ default: ret = ENOTTY;
}
-
- ret = (cd->d_ioctl)(dev, newcmd, &pg, flag, l);
- if (ret != 0)
- return ret;
- ret = ptmget_to_ptmget60(&pg, data);
+ if (ret == 0)
+ ret = (cd->d_ioctl)(dev, newcmd, &pg, flag, l);
+ if (ret == 0)
+ ret = ptmget_to_ptmget60(&pg, data);
+ cdevsw_release(cd);
return ret;
}
diff -r d669e1b9616c -r 24c0bdc5f89f sys/compat/linux/arch/amd64/linux_machdep.c
--- a/sys/compat/linux/arch/amd64/linux_machdep.c Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/compat/linux/arch/amd64/linux_machdep.c Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_machdep.c,v 1.48 2014/02/19 20:50:56 dsl Exp $ */
+/* $NetBSD: linux_machdep.c,v 1.48.10.1 2016/07/20 23:47:55 pgoyette Exp $ */
/*-
* Copyright (c) 2005 Emmanuel Dreyfus, all rights reserved.
@@ -33,7 +33,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.48 2014/02/19 20:50:56 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.48.10.1 2016/07/20 23:47:55 pgoyette Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -268,26 +268,30 @@
dev_t
linux_fakedev(dev_t dev, int raw)
{
+ dev_t ret;
+ extern const struct cdevsw ptc_cdevsw, pts_cdevsw;
+ const struct cdevsw *cd = cdevsw_lookup_acquire(dev);
- extern const struct cdevsw ptc_cdevsw, pts_cdevsw;
- const struct cdevsw *cd = cdevsw_lookup(dev);
-
- if (raw) {
+ if (raw) {
#if (NWSDISPLAY > 0)
- extern const struct cdevsw wsdisplay_cdevsw;
- if (cd == &wsdisplay_cdevsw)
- return makedev(LINUX_CONS_MAJOR, (minor(dev) + 1));
+ extern const struct cdevsw wsdisplay_cdevsw;
+ if (cd == &wsdisplay_cdevsw) {
+ cdevsw_release(cd);
+ return makedev(LINUX_CONS_MAJOR, (minor(dev) + 1));
+ }
#endif
- }
+ }
- if (cd == &ptc_cdevsw)
- return makedev(LINUX_PTC_MAJOR, minor(dev));
- if (cd == &pts_cdevsw)
- return makedev(LINUX_PTS_MAJOR, minor(dev));
-
- return ((minor(dev) & 0xff) | ((major(dev) & 0xfff) << 8)
+ if (cd == &ptc_cdevsw)
+ ret = makedev(LINUX_PTC_MAJOR, minor(dev));
+ else if (cd == &pts_cdevsw)
+ ret = makedev(LINUX_PTS_MAJOR, minor(dev));
+ else ret = ((minor(dev) & 0xff) | ((major(dev) & 0xfff) << 8)
| (((unsigned long long int) (minor(dev) & ~0xff)) << 12)
| (((unsigned long long int) (major(dev) & ~0xfff)) << 32));
+
+ cdevsw_release(cd);
+ return ret;
}
int
diff -r d669e1b9616c -r 24c0bdc5f89f sys/compat/linux/arch/i386/linux_machdep.c
--- a/sys/compat/linux/arch/i386/linux_machdep.c Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/compat/linux/arch/i386/linux_machdep.c Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_machdep.c,v 1.162 2016/07/13 15:59:54 maxv Exp $ */
+/* $NetBSD: linux_machdep.c,v 1.162.2.1 2016/07/20 23:47:55 pgoyette Exp $ */
/*-
* Copyright (c) 1995, 2000, 2008, 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.162 2016/07/13 15:59:54 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.162.2.1 2016/07/20 23:47:55 pgoyette Exp $");
#if defined(_KERNEL_OPT)
#include "opt_vm86.h"
@@ -653,23 +653,28 @@
dev_t
linux_fakedev(dev_t dev, int raw)
{
+ dev_t ret;
extern const struct cdevsw ptc_cdevsw, pts_cdevsw;
- const struct cdevsw *cd = cdevsw_lookup(dev);
+ const struct cdevsw *cd = cdevsw_lookup_acquire(dev);
if (raw) {
#if (NWSDISPLAY > 0)
extern const struct cdevsw wsdisplay_cdevsw;
- if (cd == &wsdisplay_cdevsw)
+ if (cd == &wsdisplay_cdevsw) {
+ cdevsw_release(cd);
return makedev(LINUX_CONS_MAJOR, (minor(dev) + 1));
+ }
#endif
}
if (cd == &ptc_cdevsw)
- return makedev(LINUX_PTC_MAJOR, minor(dev));
- if (cd == &pts_cdevsw)
- return makedev(LINUX_PTS_MAJOR, minor(dev));
-
- return dev;
+ ret = makedev(LINUX_PTC_MAJOR, minor(dev));
+ else if (cd == &pts_cdevsw)
+ ret makedev(LINUX_PTS_MAJOR, minor(dev));
+ else
+ ret = dev;
+ cdevsw_release(cd);
+ return ret;
}
#if (NWSDISPLAY > 0)
diff -r d669e1b9616c -r 24c0bdc5f89f sys/compat/linux/common/linux_ioctl.c
--- a/sys/compat/linux/common/linux_ioctl.c Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/compat/linux/common/linux_ioctl.c Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_ioctl.c,v 1.58 2014/03/23 06:03:38 dholland Exp $ */
+/* $NetBSD: linux_ioctl.c,v 1.58.10.1 2016/07/20 23:47:55 pgoyette Exp $ */
/*-
* Copyright (c) 1995, 1998, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_ioctl.c,v 1.58 2014/03/23 06:03:38 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_ioctl.c,v 1.58.10.1 2016/07/20 23:47:55 pgoyette Exp $");
#if defined(_KERNEL_OPT)
#include "sequencer.h"
@@ -158,6 +158,7 @@
struct vnode *vp;
struct vattr va;
extern const struct cdevsw sequencer_cdevsw;
+ const struct cdevsw *cdev = NULL;
if ((fp = fd_getfile(SCARG(uap, fd))) == NULL)
return EBADF;
@@ -168,17 +169,21 @@
error = VOP_GETATTR(vp, &va, l->l_cred);
VOP_UNLOCK(vp);
if (error == 0 &&
- cdevsw_lookup(va.va_rdev) == &sequencer_cdevsw)
+ (cdev = cdevsw_lookup_acquire(va.va_rdev)) ==
+ &sequencer_cdevsw)
is_sequencer = true;
}
if (is_sequencer) {
- error = oss_ioctl_sequencer(l, (const void *)LINUX_TO_OSS(uap),
- retval);
+ error = oss_ioctl_sequencer(l,
+ (const void *)LINUX_TO_OSS(uap),
+ retval);
}
else {
error = linux_ioctl_termios(l, uap, retval);
}
fd_putfile(SCARG(uap, fd));
+ if (cdev != NULL)
+ cdevsw_release(cdev);
#else
error = linux_ioctl_termios(l, uap, retval);
#endif
diff -r d669e1b9616c -r 24c0bdc5f89f sys/dev/clockctl.c
--- a/sys/dev/clockctl.c Wed Jul 20 07:07:04 2016 +0000
+++ b/sys/dev/clockctl.c Wed Jul 20 23:47:55 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: clockctl.c,v 1.34 2016/01/06 18:06:38 christos Exp $ */
+/* $NetBSD: clockctl.c,v 1.34.2.1 2016/07/20 23:47:56 pgoyette Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.34 2016/01/06 18:06:38 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.34.2.1 2016/07/20 23:47:56 pgoyette Exp $");
Home |
Main Index |
Thread Index |
Old Index