Module Name: src Committed By: skrll Date: Thu Mar 20 06:48:54 UTC 2014
Modified Files: src/sys/arch/arm/ixp12x0: ixp12x0_intr.c src/sys/arch/arm/xscale: ixp425_if_npe.c ixp425_npe.c ixp425_npevar.h src/sys/arch/xen/include: xbdvar.h src/sys/coda: coda_vnops.c src/sys/dev/mca: ed_mca.c edc_mca.c edvar.h src/sys/dev/pci: cy82c693.c src/sys/dev/pci/cxgb: cxgb_osdep.h src/sys/net: if_tap.c if_tun.c Log Message: Mechanically replace simplelock with kmutex_t. To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/sys/arch/arm/ixp12x0/ixp12x0_intr.c cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/xscale/ixp425_if_npe.c cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/xscale/ixp425_npe.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/xscale/ixp425_npevar.h cvs rdiff -u -r1.14 -r1.15 src/sys/arch/xen/include/xbdvar.h cvs rdiff -u -r1.95 -r1.96 src/sys/coda/coda_vnops.c cvs rdiff -u -r1.54 -r1.55 src/sys/dev/mca/ed_mca.c cvs rdiff -u -r1.48 -r1.49 src/sys/dev/mca/edc_mca.c cvs rdiff -u -r1.16 -r1.17 src/sys/dev/mca/edvar.h cvs rdiff -u -r1.8 -r1.9 src/sys/dev/pci/cy82c693.c cvs rdiff -u -r1.3 -r1.4 src/sys/dev/pci/cxgb/cxgb_osdep.h cvs rdiff -u -r1.73 -r1.74 src/sys/net/if_tap.c cvs rdiff -u -r1.116 -r1.117 src/sys/net/if_tun.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/ixp12x0/ixp12x0_intr.c diff -u src/sys/arch/arm/ixp12x0/ixp12x0_intr.c:1.27 src/sys/arch/arm/ixp12x0/ixp12x0_intr.c:1.28 --- src/sys/arch/arm/ixp12x0/ixp12x0_intr.c:1.27 Sun Mar 2 13:23:32 2014 +++ src/sys/arch/arm/ixp12x0/ixp12x0_intr.c Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ixp12x0_intr.c,v 1.27 2014/03/02 13:23:32 joerg Exp $ */ +/* $NetBSD: ixp12x0_intr.c,v 1.28 2014/03/20 06:48:54 skrll Exp $ */ /* * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ixp12x0_intr.c,v 1.27 2014/03/02 13:23:32 joerg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ixp12x0_intr.c,v 1.28 2014/03/20 06:48:54 skrll Exp $"); /* * Interrupt support for the Intel ixp12x0 @@ -39,7 +39,6 @@ __KERNEL_RCSID(0, "$NetBSD: ixp12x0_intr #include <sys/param.h> #include <sys/systm.h> #include <sys/malloc.h> -#include <sys/simplelock.h> #include <sys/termios.h> #include <sys/bus.h> #include <sys/intr.h> Index: src/sys/arch/arm/xscale/ixp425_if_npe.c diff -u src/sys/arch/arm/xscale/ixp425_if_npe.c:1.24 src/sys/arch/arm/xscale/ixp425_if_npe.c:1.25 --- src/sys/arch/arm/xscale/ixp425_if_npe.c:1.24 Mon Feb 24 10:47:46 2014 +++ src/sys/arch/arm/xscale/ixp425_if_npe.c Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ixp425_if_npe.c,v 1.24 2014/02/24 10:47:46 martin Exp $ */ +/* $NetBSD: ixp425_if_npe.c,v 1.25 2014/03/20 06:48:54 skrll Exp $ */ /*- * Copyright (c) 2006 Sam Leffler. All rights reserved. @@ -28,7 +28,7 @@ #if 0 __FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/if_npe.c,v 1.1 2006/11/19 23:55:23 sam Exp $"); #endif -__KERNEL_RCSID(0, "$NetBSD: ixp425_if_npe.c,v 1.24 2014/02/24 10:47:46 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ixp425_if_npe.c,v 1.25 2014/03/20 06:48:54 skrll Exp $"); /* * Intel XScale NPE Ethernet driver. @@ -57,7 +57,6 @@ __KERNEL_RCSID(0, "$NetBSD: ixp425_if_np #include <sys/socket.h> #include <sys/endian.h> #include <sys/ioctl.h> -#include <sys/simplelock.h> #include <sys/syslog.h> #include <sys/bus.h> Index: src/sys/arch/arm/xscale/ixp425_npe.c diff -u src/sys/arch/arm/xscale/ixp425_npe.c:1.9 src/sys/arch/arm/xscale/ixp425_npe.c:1.10 --- src/sys/arch/arm/xscale/ixp425_npe.c:1.9 Sun Oct 14 14:20:58 2012 +++ src/sys/arch/arm/xscale/ixp425_npe.c Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ixp425_npe.c,v 1.9 2012/10/14 14:20:58 msaitoh Exp $ */ +/* $NetBSD: ixp425_npe.c,v 1.10 2014/03/20 06:48:54 skrll Exp $ */ /*- * Copyright (c) 2006 Sam Leffler, Errno Consulting @@ -62,7 +62,7 @@ #if 0 __FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425_npe.c,v 1.1 2006/11/19 23:55:23 sam Exp $"); #endif -__KERNEL_RCSID(0, "$NetBSD: ixp425_npe.c,v 1.9 2012/10/14 14:20:58 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ixp425_npe.c,v 1.10 2014/03/20 06:48:54 skrll Exp $"); /* * Intel XScale Network Processing Engine (NPE) support. @@ -86,7 +86,7 @@ __KERNEL_RCSID(0, "$NetBSD: ixp425_npe.c #include <sys/systm.h> #include <sys/kernel.h> #include <sys/malloc.h> -#include <sys/simplelock.h> +#include <sys/mutex.h> #include <sys/time.h> #include <sys/proc.h> @@ -274,7 +274,7 @@ ixpnpe_attach(device_t parent, device_t sc->sc_dt = ixa->ixa_dt; sc->sc_unit = ixa->ixa_npe; - simple_lock_init(&sc->sc_lock); + mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_VM); /* XXX: Check features to ensure this NPE is enabled */ @@ -353,13 +353,13 @@ ixpnpe_stopandreset(struct ixpnpe_softc { int error; - simple_lock(&sc->sc_lock); + mutex_enter(&sc->sc_lock); error = npe_cpu_stop(sc); /* stop NPE */ if (error == 0) error = npe_cpu_reset(sc); /* reset it */ if (error == 0) sc->started = 0; /* mark stopped */ - simple_unlock(&sc->sc_lock); + mutex_exit(&sc->sc_lock); DPRINTF(sc->sc_dev, "%s: error %d\n", __func__, error); return error; @@ -386,9 +386,9 @@ ixpnpe_start(struct ixpnpe_softc *sc) { int ret; - simple_lock(&sc->sc_lock); + mutex_enter(&sc->sc_lock); ret = ixpnpe_start_locked(sc); - simple_unlock(&sc->sc_lock); + mutex_exit(&sc->sc_lock); return (ret); } @@ -397,11 +397,11 @@ ixpnpe_stop(struct ixpnpe_softc *sc) { int error; - simple_lock(&sc->sc_lock); + mutex_enter(&sc->sc_lock); error = npe_cpu_stop(sc); if (error == 0) sc->started = 0; - simple_unlock(&sc->sc_lock); + mutex_exit(&sc->sc_lock); DPRINTF(sc->sc_dev, "%s: error %d\n", __func__, error); return error; @@ -489,7 +489,7 @@ ixpnpe_init(struct ixpnpe_softc *sc, con * currently loaded images. If a critical error occured * during download, record that the NPE has an invalid image */ - simple_lock(&sc->sc_lock); + mutex_enter(&sc->sc_lock); error = npe_load_image(sc, imageCodePtr, 1 /*VERIFY*/); if (error == 0) { sc->validImage = 1; @@ -498,7 +498,7 @@ ixpnpe_init(struct ixpnpe_softc *sc, con sc->validImage = 0; } sc->functionalityId = IX_NPEDL_FUNCTIONID_FROM_IMAGEID_GET(imageId); - simple_unlock(&sc->sc_lock); + mutex_exit(&sc->sc_lock); done: DPRINTF(sc->sc_dev, "%s: error %d\n", __func__, error); return error; @@ -1405,11 +1405,11 @@ ixpnpe_sendandrecvmsg(struct ixpnpe_soft { int error; - simple_lock(&sc->sc_lock); + mutex_enter(&sc->sc_lock); error = ixpnpe_sendmsg_locked(sc, send); if (error == 0) error = ixpnpe_recvmsg_locked(sc, recv); - simple_unlock(&sc->sc_lock); + mutex_exit(&sc->sc_lock); return error; } @@ -1421,9 +1421,9 @@ ixpnpe_sendmsg(struct ixpnpe_softc *sc, { int error; - simple_lock(&sc->sc_lock); + mutex_enter(&sc->sc_lock); error = ixpnpe_sendmsg_locked(sc, msg); - simple_unlock(&sc->sc_lock); + mutex_exit(&sc->sc_lock); return error; } @@ -1433,12 +1433,12 @@ ixpnpe_recvmsg(struct ixpnpe_softc *sc, { int error; - simple_lock(&sc->sc_lock); + mutex_enter(&sc->sc_lock); if (sc->sc_msgwaiting) memcpy(msg, sc->sc_msg, sizeof(sc->sc_msg)); /* NB: sc_msgwaiting != 1 means the ack fetch failed */ error = sc->sc_msgwaiting != 1 ? EIO : 0; - simple_unlock(&sc->sc_lock); + mutex_exit(&sc->sc_lock); return error; } Index: src/sys/arch/arm/xscale/ixp425_npevar.h diff -u src/sys/arch/arm/xscale/ixp425_npevar.h:1.4 src/sys/arch/arm/xscale/ixp425_npevar.h:1.5 --- src/sys/arch/arm/xscale/ixp425_npevar.h:1.4 Sun Oct 14 14:20:58 2012 +++ src/sys/arch/arm/xscale/ixp425_npevar.h Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ixp425_npevar.h,v 1.4 2012/10/14 14:20:58 msaitoh Exp $ */ +/* $NetBSD: ixp425_npevar.h,v 1.5 2014/03/20 06:48:54 skrll Exp $ */ /*- * Copyright (c) 2006 Sam Leffler. All rights reserved. @@ -89,7 +89,7 @@ struct ixpnpe_softc { bus_size_t sc_size; /* size of mapped register window */ int sc_unit; void *sc_ih; /* interrupt handler */ - struct simplelock sc_lock; /* mailbox lock */ + kmutex_t sc_lock; /* mailbox lock */ uint32_t sc_msg[2]; /* reply msg collected in ixpnpe_intr */ int sc_msgwaiting; /* sc_msg holds valid data */ Index: src/sys/arch/xen/include/xbdvar.h diff -u src/sys/arch/xen/include/xbdvar.h:1.14 src/sys/arch/xen/include/xbdvar.h:1.15 --- src/sys/arch/xen/include/xbdvar.h:1.14 Thu Feb 2 19:43:01 2012 +++ src/sys/arch/xen/include/xbdvar.h Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: xbdvar.h,v 1.14 2012/02/02 19:43:01 tls Exp $ */ +/* $NetBSD: xbdvar.h,v 1.15 2014/03/20 06:48:54 skrll Exp $ */ /* * @@ -30,14 +30,11 @@ #ifndef _XEN_XBDVAR_H_ #define _XEN_XBDVAR_H_ -#include <sys/simplelock.h> - struct xbd_softc { device_t sc_dev; /* base device glue */ struct dk_softc sc_dksc; /* generic disk interface */ unsigned long sc_xd_device; /* cookie identifying device */ struct dk_intf *sc_di; /* pseudo-disk interface */ - struct simplelock sc_slock; /* our lock */ int sc_shutdown; /* about to be removed */ krndsource_t sc_rnd_source; }; Index: src/sys/coda/coda_vnops.c diff -u src/sys/coda/coda_vnops.c:1.95 src/sys/coda/coda_vnops.c:1.96 --- src/sys/coda/coda_vnops.c:1.95 Thu Feb 27 16:51:37 2014 +++ src/sys/coda/coda_vnops.c Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: coda_vnops.c,v 1.95 2014/02/27 16:51:37 hannken Exp $ */ +/* $NetBSD: coda_vnops.c,v 1.96 2014/03/20 06:48:54 skrll Exp $ */ /* * @@ -46,7 +46,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.95 2014/02/27 16:51:37 hannken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.96 2014/03/20 06:48:54 skrll Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1936,7 +1936,7 @@ coda_getpages(void *v) * XXX Perhaps we should not fully open the file, but * simply obtain a container file. */ - /* XXX Is it ok to do this while holding the simplelock? */ + /* XXX Is it ok to do this while holding the mutex? */ cerror = VOP_OPEN(vp, FREAD, cred); if (cerror) { Index: src/sys/dev/mca/ed_mca.c diff -u src/sys/dev/mca/ed_mca.c:1.54 src/sys/dev/mca/ed_mca.c:1.55 --- src/sys/dev/mca/ed_mca.c:1.54 Sun Mar 16 05:20:28 2014 +++ src/sys/dev/mca/ed_mca.c Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ed_mca.c,v 1.54 2014/03/16 05:20:28 dholland Exp $ */ +/* $NetBSD: ed_mca.c,v 1.55 2014/03/20 06:48:54 skrll Exp $ */ /* * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ed_mca.c,v 1.54 2014/03/16 05:20:28 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ed_mca.c,v 1.55 2014/03/20 06:48:54 skrll Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -158,7 +158,7 @@ ed_mca_attach(device_t parent, device_t edc_add_disk(sc, ed); bufq_alloc(&ed->sc_q, "disksort", BUFQ_SORT_RAWBLOCK); - simple_lock_init(&ed->sc_q_lock); + mutex_init(&ed->sc_q_lock, MUTEX_DEFAULT, IPL_VM); if (ed_get_params(ed, &drv_flags)) { printf(": IDENTIFY failed, no disk found\n"); @@ -257,9 +257,9 @@ edmcastrategy(struct buf *bp) bp->b_rawblkno = blkno; /* Queue transfer on drive, activate drive and controller if idle. */ - simple_lock(&ed->sc_q_lock); + mutex_enter(&ed->sc_q_lock); bufq_put(ed->sc_q, bp); - simple_unlock(&ed->sc_q_lock); + mutex_exit(&ed->sc_q_lock); /* Ring the worker thread */ wakeup(ed->edc_softc); Index: src/sys/dev/mca/edc_mca.c diff -u src/sys/dev/mca/edc_mca.c:1.48 src/sys/dev/mca/edc_mca.c:1.49 --- src/sys/dev/mca/edc_mca.c:1.48 Sat Oct 12 21:11:42 2013 +++ src/sys/dev/mca/edc_mca.c Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: edc_mca.c,v 1.48 2013/10/12 21:11:42 christos Exp $ */ +/* $NetBSD: edc_mca.c,v 1.49 2014/03/20 06:48:54 skrll Exp $ */ /* * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -46,7 +46,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: edc_mca.c,v 1.48 2013/10/12 21:11:42 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: edc_mca.c,v 1.49 2014/03/20 06:48:54 skrll Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -815,13 +815,13 @@ edcworker(void *arg) } /* Is there a buf for us ? */ - simple_lock(&ed->sc_q_lock); + mutex_enter(&ed->sc_q_lock); if ((bp = bufq_get(ed->sc_q)) == NULL) { - simple_unlock(&ed->sc_q_lock); + mutex_exit(&ed->sc_q_lock); i++; continue; } - simple_unlock(&ed->sc_q_lock); + mutex_exit(&ed->sc_q_lock); /* Instrumentation. */ disk_busy(&ed->sc_dk); Index: src/sys/dev/mca/edvar.h diff -u src/sys/dev/mca/edvar.h:1.16 src/sys/dev/mca/edvar.h:1.17 --- src/sys/dev/mca/edvar.h:1.16 Sat Oct 27 17:18:26 2012 +++ src/sys/dev/mca/edvar.h Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: edvar.h,v 1.16 2012/10/27 17:18:26 chs Exp $ */ +/* $NetBSD: edvar.h,v 1.17 2014/03/20 06:48:54 skrll Exp $ */ /* * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#include <sys/simplelock.h> +#include <sys/mutex.h> struct edc_mca_softc; @@ -39,7 +39,7 @@ struct ed_softc { /* General disk infos */ struct disk sc_dk; struct bufq_state *sc_q; - struct simplelock sc_q_lock; + kmutex_t sc_q_lock; struct edc_mca_softc *edc_softc; /* pointer to our controller */ Index: src/sys/dev/pci/cy82c693.c diff -u src/sys/dev/pci/cy82c693.c:1.8 src/sys/dev/pci/cy82c693.c:1.9 --- src/sys/dev/pci/cy82c693.c:1.8 Mon Apr 19 18:24:27 2010 +++ src/sys/dev/pci/cy82c693.c Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: cy82c693.c,v 1.8 2010/04/19 18:24:27 dyoung Exp $ */ +/* $NetBSD: cy82c693.c,v 1.9 2014/03/20 06:48:54 skrll Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -35,16 +35,13 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cy82c693.c,v 1.8 2010/04/19 18:24:27 dyoung Exp $"); - -#include "opt_multiprocessor.h" -#include "opt_lockdebug.h" +__KERNEL_RCSID(0, "$NetBSD: cy82c693.c,v 1.9 2014/03/20 06:48:54 skrll Exp $"); #include <sys/param.h> #include <sys/device.h> #include <sys/systm.h> #include <sys/bus.h> -#include <sys/simplelock.h> +#include <sys/once.h> #include <dev/pci/pcireg.h> #include <dev/pci/pcivar.h> @@ -52,40 +49,43 @@ __KERNEL_RCSID(0, "$NetBSD: cy82c693.c,v #include <dev/pci/cy82c693reg.h> #include <dev/pci/cy82c693var.h> +ONCE_DECL(cyhc_once); + static struct cy82c693_handle cyhc_handle; static int cyhc_initialized; -static struct simplelock cyhc_slock = SIMPLELOCK_INITIALIZER; +static kmutex_t cyhc_slock; + +static int +cy82c693_onceinit(void) +{ + + mutex_init(&cyhc_slock, MUTEX_DEFAULT, IPL_HIGH); -#define CYHC_LOCK(s) \ -do { \ - s = splhigh(); \ - simple_lock(&cyhc_slock); \ -} while (0) - -#define CYHC_UNLOCK(s) \ -do { \ - simple_unlock(&cyhc_slock); \ - splx(s); \ -} while (0) + return 0; +} const struct cy82c693_handle * cy82c693_init(bus_space_tag_t iot) { bus_space_handle_t ioh; - int s; + int err; - CYHC_LOCK(s); + err = RUN_ONCE(&cyhc_once, cy82c693_onceinit); + if (err) + return NULL; + + mutex_spin_enter(&cyhc_slock); if (cyhc_initialized) { - CYHC_UNLOCK(s); + mutex_spin_exit(&cyhc_slock);; KASSERT(bus_space_is_equal(iot, cyhc_handle.cyhc_iot)); - return (&cyhc_handle); + return &cyhc_handle; } if (bus_space_map(iot, CYHC_CONFIG_ADDR, 2, 0, &ioh) != 0) { - CYHC_UNLOCK(s); - return (NULL); + mutex_spin_exit(&cyhc_slock);; + return NULL; } cyhc_handle.cyhc_iot = iot; @@ -93,46 +93,44 @@ cy82c693_init(bus_space_tag_t iot) cyhc_initialized = 1; - CYHC_UNLOCK(s); + mutex_spin_exit(&cyhc_slock);; - return (&cyhc_handle); + return &cyhc_handle; } u_int8_t cy82c693_read(const struct cy82c693_handle *cyhc, int reg) { - int s; - u_int8_t rv; + uint8_t rv; - CYHC_LOCK(s); + mutex_spin_enter(&cyhc_slock); if (cyhc_initialized == 0) { - CYHC_UNLOCK(s); + mutex_spin_exit(&cyhc_slock);; panic("cy82c693_read"); } bus_space_write_1(cyhc->cyhc_iot, cyhc->cyhc_ioh, 0, reg); rv = bus_space_read_1(cyhc->cyhc_iot, cyhc->cyhc_ioh, 1); - CYHC_UNLOCK(s); + mutex_spin_exit(&cyhc_slock);; - return (rv); + return rv; } void cy82c693_write(const struct cy82c693_handle *cyhc, int reg, u_int8_t val) { - int s; - CYHC_LOCK(s); + mutex_spin_enter(&cyhc_slock); if (cyhc_initialized == 0) { - CYHC_UNLOCK(s); + mutex_spin_exit(&cyhc_slock);; panic("cy82c693_write"); } bus_space_write_1(cyhc->cyhc_iot, cyhc->cyhc_ioh, 0, reg); bus_space_write_1(cyhc->cyhc_iot, cyhc->cyhc_ioh, 1, val); - CYHC_UNLOCK(s); + mutex_spin_exit(&cyhc_slock);; } Index: src/sys/dev/pci/cxgb/cxgb_osdep.h diff -u src/sys/dev/pci/cxgb/cxgb_osdep.h:1.3 src/sys/dev/pci/cxgb/cxgb_osdep.h:1.4 --- src/sys/dev/pci/cxgb/cxgb_osdep.h:1.3 Wed Jan 23 23:31:27 2013 +++ src/sys/dev/pci/cxgb/cxgb_osdep.h Thu Mar 20 06:48:54 2014 @@ -47,8 +47,6 @@ typedef char *caddr_t; #include <netinet/in.h> #include <netinet/ip.h> -#include <sys/simplelock.h> - #include <sys/kthread.h> #include <sys/workqueue.h> @@ -69,12 +67,12 @@ void cxgb_make_task(void *); void m_cljset(struct mbuf *m, void *cl, int type); -#define mtx simplelock -#define mtx_init(a, b, c, d) { (a)->lock_data = __SIMPLELOCK_UNLOCKED; } +#define mtx kmutex_t +#define mtx_init(a, b, c, d) { mutex_init(a, MUTEX_DEFAULT, IPL_HIGH) } #define mtx_destroy(a) -#define mtx_lock(a) simple_lock(a) -#define mtx_unlock(a) simple_unlock(a) -#define mtx_trylock(a) simple_lock_try(a) +#define mtx_lock(a) mutex_spin_enter(a) +#define mtx_unlock(a) mutex_spin_exit(a) +#define mtx_trylock(a) mutex_tryenter(a) #define MA_OWNED 1 #define MA_NOTOWNED 0 #define mtx_assert(a, w) Index: src/sys/net/if_tap.c diff -u src/sys/net/if_tap.c:1.73 src/sys/net/if_tap.c:1.74 --- src/sys/net/if_tap.c:1.73 Sun Mar 16 05:20:30 2014 +++ src/sys/net/if_tap.c Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: if_tap.c,v 1.73 2014/03/16 05:20:30 dholland Exp $ */ +/* $NetBSD: if_tap.c,v 1.74 2014/03/20 06:48:54 skrll Exp $ */ /* * Copyright (c) 2003, 2004, 2008, 2009 The NetBSD Foundation. @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_tap.c,v 1.73 2014/03/16 05:20:30 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_tap.c,v 1.74 2014/03/20 06:48:54 skrll Exp $"); #if defined(_KERNEL_OPT) @@ -60,7 +60,6 @@ __KERNEL_RCSID(0, "$NetBSD: if_tap.c,v 1 #endif #include <sys/kauth.h> #include <sys/mutex.h> -#include <sys/simplelock.h> #include <sys/intr.h> #include <sys/stat.h> @@ -112,7 +111,7 @@ struct tap_softc { struct selinfo sc_rsel; pid_t sc_pgid; /* For async. IO */ kmutex_t sc_rdlock; - struct simplelock sc_kqlock; + kmutex_t sc_kqlock; void *sc_sih; struct timespec sc_atime; struct timespec sc_mtime; @@ -367,11 +366,10 @@ tap_attach(device_t parent, device_t sel * the same moment and both try and dequeue a single packet. * * The queue for event listeners (used by kqueue(9), see below) has - * to be protected, too, but we don't need the same level of - * complexity for that lock, so a simple spinning lock is fine. + * to be protected too, so use a spin lock. */ mutex_init(&sc->sc_rdlock, MUTEX_DEFAULT, IPL_NONE); - simple_lock_init(&sc->sc_kqlock); + mutex_init(&sc->sc_kqlock, MUTEX_DEFAULT, IPL_VM); selinit(&sc->sc_rsel); } @@ -1188,9 +1186,9 @@ tap_dev_poll(int unit, int events, struc if (m != NULL) revents |= events & (POLLIN|POLLRDNORM); else { - simple_lock(&sc->sc_kqlock); + mutex_spin_enter(&sc->sc_kqlock); selrecord(l, &sc->sc_rsel); - simple_unlock(&sc->sc_kqlock); + mutex_spin_exit(&sc->sc_kqlock); } } revents |= events & (POLLOUT|POLLWRNORM); @@ -1238,9 +1236,9 @@ tap_dev_kqfilter(int unit, struct knote } kn->kn_hook = sc; - simple_lock(&sc->sc_kqlock); + mutex_spin_enter(&sc->sc_kqlock); SLIST_INSERT_HEAD(&sc->sc_rsel.sel_klist, kn, kn_selnext); - simple_unlock(&sc->sc_kqlock); + mutex_spin_exit(&sc->sc_kqlock); KERNEL_UNLOCK_ONE(NULL); return (0); } @@ -1251,9 +1249,9 @@ tap_kqdetach(struct knote *kn) struct tap_softc *sc = (struct tap_softc *)kn->kn_hook; KERNEL_LOCK(1, NULL); - simple_lock(&sc->sc_kqlock); + mutex_spin_enter(&sc->sc_kqlock); SLIST_REMOVE(&sc->sc_rsel.sel_klist, kn, knote, kn_selnext); - simple_unlock(&sc->sc_kqlock); + mutex_spin_exit(&sc->sc_kqlock); KERNEL_UNLOCK_ONE(NULL); } Index: src/sys/net/if_tun.c diff -u src/sys/net/if_tun.c:1.116 src/sys/net/if_tun.c:1.117 --- src/sys/net/if_tun.c:1.116 Sun Mar 16 05:20:30 2014 +++ src/sys/net/if_tun.c Thu Mar 20 06:48:54 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: if_tun.c,v 1.116 2014/03/16 05:20:30 dholland Exp $ */ +/* $NetBSD: if_tun.c,v 1.117 2014/03/20 06:48:54 skrll Exp $ */ /* * Copyright (c) 1988, Julian Onions <j...@cs.nott.ac.uk> @@ -15,7 +15,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_tun.c,v 1.116 2014/03/16 05:20:30 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_tun.c,v 1.117 2014/03/20 06:48:54 skrll Exp $"); #include "opt_inet.h" @@ -35,7 +35,6 @@ __KERNEL_RCSID(0, "$NetBSD: if_tun.c,v 1 #include <sys/signalvar.h> #include <sys/conf.h> #include <sys/kauth.h> -#include <sys/simplelock.h> #include <sys/mutex.h> #include <sys/cpu.h> @@ -67,7 +66,7 @@ void tunattach(int); static LIST_HEAD(, tun_softc) tun_softc_list; static LIST_HEAD(, tun_softc) tunz_softc_list; -static struct simplelock tun_softc_lock; +static kmutex_t tun_softc_lock; static int tun_ioctl(struct ifnet *, u_long, void *); static int tun_output(struct ifnet *, struct mbuf *, @@ -114,7 +113,7 @@ void tunattach(int unused) { - simple_lock_init(&tun_softc_lock); + mutex_init(&tun_softc_lock, MUTEX_DEFAULT, IPL_NET); LIST_INIT(&tun_softc_list); LIST_INIT(&tunz_softc_list); if_clone_attach(&tun_cloner); @@ -122,7 +121,6 @@ tunattach(int unused) /* * Find driver instance from dev_t. - * Call at splnet(). * Returns with tp locked (if found). */ static struct tun_softc * @@ -131,20 +129,19 @@ tun_find_unit(dev_t dev) struct tun_softc *tp; int unit = minor(dev); - simple_lock(&tun_softc_lock); + mutex_enter(&tun_softc_lock); LIST_FOREACH(tp, &tun_softc_list, tun_list) if (unit == tp->tun_unit) break; if (tp) mutex_enter(&tp->tun_lock); - simple_unlock(&tun_softc_lock); + mutex_exit(&tun_softc_lock); return (tp); } /* * Find zombie driver instance by unit number. - * Call at splnet(). * Remove tp from list and return it unlocked (if found). */ static struct tun_softc * @@ -152,13 +149,13 @@ tun_find_zunit(int unit) { struct tun_softc *tp; - simple_lock(&tun_softc_lock); + mutex_enter(&tun_softc_lock); LIST_FOREACH(tp, &tunz_softc_list, tun_list) if (unit == tp->tun_unit) break; if (tp) LIST_REMOVE(tp, tun_list); - simple_unlock(&tun_softc_lock); + mutex_exit(&tun_softc_lock); #ifdef DIAGNOSTIC if (tp != NULL && (tp->tun_flags & (TUN_INITED|TUN_OPEN)) != TUN_OPEN) printf("tun%d: inconsistent flags: %x\n", unit, tp->tun_flags); @@ -191,9 +188,9 @@ tun_clone_create(struct if_clone *ifc, i tp->tun_osih = softint_establish(SOFTINT_CLOCK, tun_o_softintr, tp); tp->tun_isih = softint_establish(SOFTINT_CLOCK, tun_i_softintr, tp); - simple_lock(&tun_softc_lock); + mutex_enter(&tun_softc_lock); LIST_INSERT_HEAD(&tun_softc_list, tp, tun_list); - simple_unlock(&tun_softc_lock); + mutex_exit(&tun_softc_lock); return (0); } @@ -232,13 +229,12 @@ static int tun_clone_destroy(struct ifnet *ifp) { struct tun_softc *tp = (void *)ifp; - int s, zombie = 0; + int zombie = 0; IF_PURGE(&ifp->if_snd); ifp->if_flags &= ~IFF_RUNNING; - s = splnet(); - simple_lock(&tun_softc_lock); + mutex_enter(&tun_softc_lock); mutex_enter(&tp->tun_lock); LIST_REMOVE(tp, tun_list); if (tp->tun_flags & TUN_OPEN) { @@ -247,7 +243,7 @@ tun_clone_destroy(struct ifnet *ifp) tp->tun_flags &= ~TUN_INITED; LIST_INSERT_HEAD(&tunz_softc_list, tp, tun_list); } - simple_unlock(&tun_softc_lock); + mutex_exit(&tun_softc_lock); if (tp->tun_flags & TUN_RWAIT) { tp->tun_flags &= ~TUN_RWAIT; @@ -256,7 +252,6 @@ tun_clone_destroy(struct ifnet *ifp) selnotify(&tp->tun_rsel, 0, 0); mutex_exit(&tp->tun_lock); - splx(s); if (tp->tun_flags & TUN_ASYNC && tp->tun_pgid) fownsignal(tp->tun_pgid, SIGIO, POLL_HUP, 0, NULL); @@ -285,14 +280,13 @@ tunopen(dev_t dev, int flag, int mode, s { struct ifnet *ifp; struct tun_softc *tp; - int s, error; + int error; error = kauth_authorize_network(l->l_cred, KAUTH_NETWORK_INTERFACE_TUN, KAUTH_REQ_NETWORK_INTERFACE_TUN_ADD, NULL, NULL, NULL); if (error) return (error); - s = splnet(); tp = tun_find_unit(dev); if (tp == NULL) { @@ -315,7 +309,6 @@ tunopen(dev_t dev, int flag, int mode, s out: mutex_exit(&tp->tun_lock); out_nolock: - splx(s); return (error); } @@ -327,11 +320,9 @@ int tunclose(dev_t dev, int flag, int mode, struct lwp *l) { - int s; struct tun_softc *tp; struct ifnet *ifp; - s = splnet(); if ((tp = tun_find_zunit(minor(dev))) != NULL) { /* interface was "destroyed" before the close */ seldestroy(&tp->tun_rsel); @@ -380,7 +371,6 @@ tunclose(dev_t dev, int flag, int mode, } } out_nolock: - splx(s); return (0); }