diff options
74 files changed, 817 insertions, 751 deletions
diff --git a/contrib/ntp/ntpd/ntp_io.c b/contrib/ntp/ntpd/ntp_io.c index 9c4f6c1553e3..97b85ee83e36 100644 --- a/contrib/ntp/ntpd/ntp_io.c +++ b/contrib/ntp/ntpd/ntp_io.c @@ -1923,7 +1923,7 @@ update_interfaces( msyslog(LOG_ERR, "cannot bind address %s", - stoa(&ep->sin)); + stoa(&ep2->sin)); } free(ep2); } diff --git a/crypto/openssh/FREEBSD-upgrade b/crypto/openssh/FREEBSD-upgrade index 98503de12ddb..815c11a8f8ca 100644 --- a/crypto/openssh/FREEBSD-upgrade +++ b/crypto/openssh/FREEBSD-upgrade @@ -181,6 +181,13 @@ skip setting DISABLE_LASTLOG which we've applied for FreeBSD, but the autoconf machinery really ought to be reworked. Reported upstream at https://lists.mindrot.org/pipermail/openssh-unix-dev/2022-May/040242.html + +11) Protocol selection + + We use the non-portable feature_present(3) API to determine which + internet protocols are supported by the kernel before trying to + connect to the target host. This avoids confusing the user with + spurious error messages. This port was brought to you by (in no particular order) DARPA, NAI diff --git a/crypto/openssh/sshconnect.c b/crypto/openssh/sshconnect.c index c86182d13673..24da9aed0007 100644 --- a/crypto/openssh/sshconnect.c +++ b/crypto/openssh/sshconnect.c @@ -458,6 +458,8 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop, memset(ntop, 0, sizeof(ntop)); memset(strport, 0, sizeof(strport)); + int inet_supported = feature_present("inet"); + int inet6_supported = feature_present("inet6"); for (attempt = 0; attempt < connection_attempts; attempt++) { if (attempt > 0) { /* Sleep a moment before retrying. */ @@ -482,6 +484,13 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop, errno = oerrno; continue; } + if ((ai->ai_family == AF_INET && !inet_supported) || + (ai->ai_family == AF_INET6 && !inet6_supported)) { + debug2_f("skipping address [%s]:%s: " + "unsupported address family", ntop, strport); + errno = EAFNOSUPPORT; + continue; + } if (options.address_family != AF_UNSPEC && ai->ai_family != options.address_family) { debug2_f("skipping address [%s]:%s: " diff --git a/libexec/rtld-elf/aarch64/rtld_machdep.h b/libexec/rtld-elf/aarch64/rtld_machdep.h index 3cc1339fcad4..d689ae354c49 100644 --- a/libexec/rtld-elf/aarch64/rtld_machdep.h +++ b/libexec/rtld-elf/aarch64/rtld_machdep.h @@ -52,6 +52,8 @@ bool arch_digest_dynamic(struct Struct_Obj_Entry *obj, const Elf_Dyn *dynp); bool arch_digest_note(struct Struct_Obj_Entry *obj, const Elf_Note *note); +#define arch_fix_auxv(a, ai) do {} while (0) + Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const struct Struct_Obj_Entry *defobj, const struct Struct_Obj_Entry *obj, const Elf_Rel *rel); diff --git a/libexec/rtld-elf/amd64/rtld_machdep.h b/libexec/rtld-elf/amd64/rtld_machdep.h index 1797d13c847d..2ee63d566bed 100644 --- a/libexec/rtld-elf/amd64/rtld_machdep.h +++ b/libexec/rtld-elf/amd64/rtld_machdep.h @@ -47,6 +47,8 @@ Elf_Dyn *rtld_dynamic_addr(void); /* No architecture specific notes */ #define arch_digest_note(obj, note) false +#define arch_fix_auxv(a, ai) do {} while (0) + Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const struct Struct_Obj_Entry *obj, const struct Struct_Obj_Entry *refobj, const Elf_Rel *rel); diff --git a/libexec/rtld-elf/arm/rtld_machdep.h b/libexec/rtld-elf/arm/rtld_machdep.h index f59b30028a3b..88fa18a0c07a 100644 --- a/libexec/rtld-elf/arm/rtld_machdep.h +++ b/libexec/rtld-elf/arm/rtld_machdep.h @@ -47,6 +47,8 @@ struct Struct_Obj_Entry; /* No architecture specific notes */ #define arch_digest_note(obj, note) false +#define arch_fix_auxv(a, ai) do {} while (0) + Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const struct Struct_Obj_Entry *defobj, const struct Struct_Obj_Entry *obj, const Elf_Rel *rel); diff --git a/libexec/rtld-elf/i386/rtld_machdep.h b/libexec/rtld-elf/i386/rtld_machdep.h index 581f1dfb002d..079991f913d6 100644 --- a/libexec/rtld-elf/i386/rtld_machdep.h +++ b/libexec/rtld-elf/i386/rtld_machdep.h @@ -60,6 +60,8 @@ Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target, #define call_init_pointer(obj, target) \ (((InitArrFunc)(target))(main_argc, main_argv, environ)) +#define arch_fix_auxv(a, ai) do {} while (0) + extern uint32_t cpu_feature; extern uint32_t cpu_feature2; extern uint32_t cpu_stdext_feature; diff --git a/libexec/rtld-elf/powerpc/reloc.c b/libexec/rtld-elf/powerpc/reloc.c index 8932c2c21278..a38cadfe76ba 100644 --- a/libexec/rtld-elf/powerpc/reloc.c +++ b/libexec/rtld-elf/powerpc/reloc.c @@ -840,3 +840,29 @@ __tls_get_addr(tls_index* ti) return (tls_get_addr_common(_tcb_get(), ti->ti_module, ti->ti_offset + TLS_DTV_OFFSET)); } + +void +arch_fix_auxv(Elf_Auxinfo *aux, Elf_Auxinfo *aux_info[]) +{ + Elf_Auxinfo *aux; + bool old_auxv_format; + + old_auxv_format = true; + for (auxp = aux; auxp->a_type != AT_NULL; auxp++) { + if (auxp->a_type == 23) /* AT_STACKPROT */ + return; + } + + /* Remap from old-style auxv numbers. */ + aux_info[23] = aux_info[21]; /* AT_STACKPROT */ + aux_info[21] = aux_info[19]; /* AT_PAGESIZESLEN */ + aux_info[19] = aux_info[17]; /* AT_NCPUS */ + aux_info[17] = aux_info[15]; /* AT_CANARYLEN */ + aux_info[15] = aux_info[13]; /* AT_EXECPATH */ + aux_info[13] = NULL; /* AT_GID */ + + aux_info[20] = aux_info[18]; /* AT_PAGESIZES */ + aux_info[18] = aux_info[16]; /* AT_OSRELDATE */ + aux_info[16] = aux_info[14]; /* AT_CANARY */ + aux_info[14] = NULL; /* AT_EGID */ +} diff --git a/libexec/rtld-elf/powerpc/rtld_machdep.h b/libexec/rtld-elf/powerpc/rtld_machdep.h index ec470f238991..de6a894ac1f5 100644 --- a/libexec/rtld-elf/powerpc/rtld_machdep.h +++ b/libexec/rtld-elf/powerpc/rtld_machdep.h @@ -46,6 +46,8 @@ bool arch_digest_dynamic(struct Struct_Obj_Entry *, const Elf_Dyn *); /* No architecture specific notes */ #define arch_digest_note(obj, note) false +void arch_fix_auxv(Elf_Auxinfo *aux, Elf_Auxinfo *aux_info[]); + Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const struct Struct_Obj_Entry *defobj, const struct Struct_Obj_Entry *obj, const Elf_Rel *rel); diff --git a/libexec/rtld-elf/powerpc64/reloc.c b/libexec/rtld-elf/powerpc64/reloc.c index 9ea14f63b5c7..29c52d8fc19f 100644 --- a/libexec/rtld-elf/powerpc64/reloc.c +++ b/libexec/rtld-elf/powerpc64/reloc.c @@ -737,3 +737,29 @@ __tls_get_addr(tls_index* ti) return (tls_get_addr_common(_tcb_get(), ti->ti_module, ti->ti_offset + TLS_DTV_OFFSET)); } + +void +arch_fix_auxv(Elf_Auxinfo *aux, Elf_Auxinfo *aux_info[]) +{ + Elf_Auxinfo *aux; + bool old_auxv_format; + + old_auxv_format = true; + for (auxp = aux; auxp->a_type != AT_NULL; auxp++) { + if (auxp->a_type == 23) /* AT_STACKPROT */ + return; + } + + /* Remap from old-style auxv numbers. */ + aux_info[23] = aux_info[21]; /* AT_STACKPROT */ + aux_info[21] = aux_info[19]; /* AT_PAGESIZESLEN */ + aux_info[19] = aux_info[17]; /* AT_NCPUS */ + aux_info[17] = aux_info[15]; /* AT_CANARYLEN */ + aux_info[15] = aux_info[13]; /* AT_EXECPATH */ + aux_info[13] = NULL; /* AT_GID */ + + aux_info[20] = aux_info[18]; /* AT_PAGESIZES */ + aux_info[18] = aux_info[16]; /* AT_OSRELDATE */ + aux_info[16] = aux_info[14]; /* AT_CANARY */ + aux_info[14] = NULL; /* AT_EGID */ +} diff --git a/libexec/rtld-elf/powerpc64/rtld_machdep.h b/libexec/rtld-elf/powerpc64/rtld_machdep.h index d628e776bae9..06eb6d884101 100644 --- a/libexec/rtld-elf/powerpc64/rtld_machdep.h +++ b/libexec/rtld-elf/powerpc64/rtld_machdep.h @@ -46,6 +46,8 @@ bool arch_digest_dynamic(struct Struct_Obj_Entry *, const Elf_Dyn *); /* No architecture specific notes */ #define arch_digest_note(obj, note) false +void arch_fix_auxv(Elf_Auxinfo *aux, Elf_Auxinfo *aux_info[]); + Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const struct Struct_Obj_Entry *defobj, const struct Struct_Obj_Entry *obj, const Elf_Rel *rel); diff --git a/libexec/rtld-elf/riscv/rtld_machdep.h b/libexec/rtld-elf/riscv/rtld_machdep.h index c6600b583612..1f4fe2e928fe 100644 --- a/libexec/rtld-elf/riscv/rtld_machdep.h +++ b/libexec/rtld-elf/riscv/rtld_machdep.h @@ -60,6 +60,8 @@ uint64_t set_gp(struct Struct_Obj_Entry *obj); /* No architecture specific notes */ #define arch_digest_note(obj, note) false +#define arch_fix_auxv(a, ai) do {} while (0) + Elf_Addr reloc_jmpslot(Elf_Addr *where, Elf_Addr target, const struct Struct_Obj_Entry *defobj, const struct Struct_Obj_Entry *obj, const Elf_Rel *rel); diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index d27af520c21d..bdfff7361e96 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -521,9 +521,6 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp) char buf[MAXPATHLEN]; int argc, fd, i, mib[4], old_osrel, osrel, phnum, rtld_argc; size_t sz; -#ifdef __powerpc__ - int old_auxv_format = 1; -#endif bool dir_enable, dir_ignore, direct_exec, explicit_fd, search_in_path; /* @@ -549,28 +546,8 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp) for (auxp = aux; auxp->a_type != AT_NULL; auxp++) { if (auxp->a_type < AT_COUNT) aux_info[auxp->a_type] = auxp; -#ifdef __powerpc__ - if (auxp->a_type == 23) /* AT_STACKPROT */ - old_auxv_format = 0; -#endif - } - -#ifdef __powerpc__ - if (old_auxv_format) { - /* Remap from old-style auxv numbers. */ - aux_info[23] = aux_info[21]; /* AT_STACKPROT */ - aux_info[21] = aux_info[19]; /* AT_PAGESIZESLEN */ - aux_info[19] = aux_info[17]; /* AT_NCPUS */ - aux_info[17] = aux_info[15]; /* AT_CANARYLEN */ - aux_info[15] = aux_info[13]; /* AT_EXECPATH */ - aux_info[13] = NULL; /* AT_GID */ - - aux_info[20] = aux_info[18]; /* AT_PAGESIZES */ - aux_info[18] = aux_info[16]; /* AT_OSRELDATE */ - aux_info[16] = aux_info[14]; /* AT_CANARY */ - aux_info[14] = NULL; /* AT_EGID */ } -#endif + arch_fix_auxv(aux, aux_info); /* Initialize and relocate ourselves. */ assert(aux_info[AT_BASE] != NULL); diff --git a/sbin/dmesg/dmesg.8 b/sbin/dmesg/dmesg.8 index 0dca0ff5da89..f9b9fce82ffc 100644 --- a/sbin/dmesg/dmesg.8 +++ b/sbin/dmesg/dmesg.8 @@ -73,7 +73,7 @@ The following variables control how the kernel timestamps entries in the message buffer: The default value is shown next to each variable. .Bl -tag -width indent -.It kern.msgbuf_show_timestamp : No 0 +.It Va kern.msgbuf_show_timestamp : No 0 If set to 0, no timestamps are added. If set to 1, then a 1-second granularity timestamp will be added to most lines in the message buffer. diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c index 02d6c9c84a32..ae3599b9e4e5 100644 --- a/sbin/pfctl/pfctl.c +++ b/sbin/pfctl/pfctl.c @@ -376,7 +376,7 @@ pfctl_enable(int dev, int opts) if (ret == EEXIST) errx(1, "pf already enabled"); else if (ret == ESRCH) - errx(1, "pfil registeration failed"); + errx(1, "pfil registration failed"); else errc(1, ret, "DIOCSTART"); } diff --git a/share/man/man4/isp.4 b/share/man/man4/isp.4 index 6fea63fdd5d5..a8f985a59d09 100644 --- a/share/man/man4/isp.4 +++ b/share/man/man4/isp.4 @@ -85,7 +85,7 @@ It may be disabled using configuration and hint options described below. .Sh HARDWARE The .Nm -driver supports the following optical Fibre Chanel adapters: +driver supports the following optical Fibre Channel adapters: .Bl -column "Qlogic 2690/2692/2694 (2684/2692)" "Speed" "PCI-X" .It Model: Ta Speed: Ta Bus: .It Qlogic QLE2874 (2814) Ta 64Gb Ta PCIe diff --git a/share/man/man4/snd_dummy.4 b/share/man/man4/snd_dummy.4 index 172b8ed70729..5e9d8aa5dd89 100644 --- a/share/man/man4/snd_dummy.4 +++ b/share/man/man4/snd_dummy.4 @@ -60,7 +60,7 @@ Alias to the device's .Pa /dev/dsp%d file created by .Xr sound 4 . -This makes it easy for tests to open the dummy devic when there are more +This makes it easy for tests to open the dummy device when there are more devices present in the system. .El .Sh SEE ALSO diff --git a/share/man/man4/vt.4 b/share/man/man4/vt.4 index 21d69bf9d495..6176c8c3093e 100644 --- a/share/man/man4/vt.4 +++ b/share/man/man4/vt.4 @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd July 7, 2024 +.Dd November 21, 2025 .Dt VT 4 .Os .Sh NAME @@ -352,6 +352,12 @@ Notification that the console bell has rung. .It Li hz Ta Tone that was requested in Hz. .El .Sh EXAMPLES +To increase the scrollback buffer size to 22500 lines, +add the following line to +.Pa /etc/rc.conf : +.Pp +.Dl allscreens_flags="-h 22500" +.Pp This example changes the default color of normal text to green on a black background, or black on a green background when reversed. Note that white space cannot be used inside the attribute string @@ -414,6 +420,7 @@ at boot: .Xr getty 8 , .Xr kldload 8 , .Xr moused 8 , +.Xr vidcontrol 8 , .Xr vtfontcvt 8 .Sh HISTORY The diff --git a/sys/arm/allwinner/a10_codec.c b/sys/arm/allwinner/a10_codec.c index 0a4ba7aa31b2..d3920eddc1f1 100644 --- a/sys/arm/allwinner/a10_codec.c +++ b/sys/arm/allwinner/a10_codec.c @@ -159,7 +159,7 @@ struct a10codec_chinfo { struct a10codec_info { device_t dev; struct resource *res[2]; - struct mtx *lock; + struct mtx lock; bus_dma_tag_t dmat; unsigned dmasize; void *ih; @@ -949,7 +949,7 @@ a10codec_chan_trigger(kobj_t obj, void *data, int go) if (!PCMTRIG_COMMON(go)) return (0); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); switch (go) { case PCMTRIG_START: ch->run = 1; @@ -964,7 +964,7 @@ a10codec_chan_trigger(kobj_t obj, void *data, int go) default: break; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -1075,7 +1075,7 @@ a10codec_attach(device_t dev) sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); sc->cfg = (void *)ofw_bus_search_compatible(dev, compat_data)->ocd_data; sc->dev = dev; - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "a10codec softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "a10codec_softc", MTX_DEF); if (bus_alloc_resources(dev, a10codec_spec, sc->res)) { device_printf(dev, "cannot allocate resources for device\n"); @@ -1180,7 +1180,7 @@ a10codec_attach(device_t dev) fail: bus_release_resources(dev, a10codec_spec, sc->res); - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); free(sc, M_DEVBUF); return (ENXIO); diff --git a/sys/arm/freescale/imx/imx6_ssi.c b/sys/arm/freescale/imx/imx6_ssi.c index 5a0e671f15a2..76870cfb29c9 100644 --- a/sys/arm/freescale/imx/imx6_ssi.c +++ b/sys/arm/freescale/imx/imx6_ssi.c @@ -173,7 +173,7 @@ struct sc_info { bus_space_tag_t bst; bus_space_handle_t bsh; device_t dev; - struct mtx *lock; + struct mtx lock; void *ih; int pos; int dma_size; @@ -242,10 +242,10 @@ ssimixer_init(struct snd_mixer *m) mask = SOUND_MASK_PCM; mask |= SOUND_MASK_VOLUME; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); pcm_setflags(scp->dev, pcm_getflags(scp->dev) | SD_F_SOFTPCMVOL); mix_setdevs(m, mask); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -290,14 +290,14 @@ ssichan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, scp = (struct sc_pcminfo *)devinfo; sc = scp->sc; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); ch = &scp->chan[0]; ch->dir = dir; ch->run = 0; ch->buffer = b; ch->channel = c; ch->parent = scp; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); if (sndbuf_setup(ch->buffer, sc->buf_base, sc->dma_size) != 0) { device_printf(scp->dev, "Can't setup sndbuf.\n"); @@ -318,9 +318,9 @@ ssichan_free(kobj_t obj, void *data) device_printf(scp->dev, "ssichan_free()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); /* TODO: free channel buffer */ - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -565,7 +565,7 @@ ssichan_trigger(kobj_t obj, void *data, int go) scp = ch->parent; sc = scp->sc; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); switch (go) { case PCMTRIG_START: @@ -590,7 +590,7 @@ ssichan_trigger(kobj_t obj, void *data, int go) break; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -736,7 +736,7 @@ ssi_attach(device_t dev) sc->pos = 0; sc->conf = malloc(sizeof(struct sdma_conf), M_DEVBUF, M_WAITOK | M_ZERO); - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "ssi softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "ssi softc"); if (sc->lock == NULL) { device_printf(dev, "Can't create mtx\n"); return (ENXIO); diff --git a/sys/arm/freescale/vybrid/vf_sai.c b/sys/arm/freescale/vybrid/vf_sai.c index 9c0125768fee..6ccfcae2bc2e 100644 --- a/sys/arm/freescale/vybrid/vf_sai.c +++ b/sys/arm/freescale/vybrid/vf_sai.c @@ -138,7 +138,7 @@ struct sc_info { bus_space_tag_t bst; bus_space_handle_t bsh; device_t dev; - struct mtx *lock; + struct mtx lock; uint32_t speed; uint32_t period; void *ih; @@ -206,10 +206,10 @@ saimixer_init(struct snd_mixer *m) mask = SOUND_MASK_PCM; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); pcm_setflags(scp->dev, pcm_getflags(scp->dev) | SD_F_SOFTPCMVOL); mix_setdevs(m, mask); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -252,14 +252,14 @@ saichan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, scp = (struct sc_pcminfo *)devinfo; sc = scp->sc; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); ch = &scp->chan[0]; ch->dir = dir; ch->run = 0; ch->buffer = b; ch->channel = c; ch->parent = scp; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); if (sndbuf_setup(ch->buffer, sc->buf_base, sc->dma_size) != 0) { device_printf(scp->dev, "Can't setup sndbuf.\n"); @@ -280,9 +280,9 @@ saichan_free(kobj_t obj, void *data) device_printf(scp->dev, "saichan_free()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); /* TODO: free channel buffer */ - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -513,7 +513,7 @@ saichan_trigger(kobj_t obj, void *data, int go) struct sc_pcminfo *scp = ch->parent; struct sc_info *sc = scp->sc; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); switch (go) { case PCMTRIG_START: @@ -532,7 +532,7 @@ saichan_trigger(kobj_t obj, void *data, int go) break; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -691,7 +691,7 @@ sai_attach(device_t dev) sc->sr = &rate_map[0]; sc->pos = 0; - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "sai softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "sai softc"); if (sc->lock == NULL) { device_printf(dev, "Cant create mtx\n"); return (ENXIO); diff --git a/sys/dev/e1000/e1000_82571.c b/sys/dev/e1000/e1000_82571.c index e8970adf996f..650169663f56 100644 --- a/sys/dev/e1000/e1000_82571.c +++ b/sys/dev/e1000/e1000_82571.c @@ -1118,7 +1118,8 @@ static s32 e1000_init_hw_82571(struct e1000_hw *hw) case e1000_82574: case e1000_82583: reg_data = E1000_READ_REG(hw, E1000_GCR); - reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX; + /* 82574 Errata 25, 82583 Errata 12 */ + reg_data &= ~E1000_GCR_L1_ACT_WITHOUT_L0S_RX; E1000_WRITE_REG(hw, E1000_GCR, reg_data); break; default: diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index b8ea3168330b..02f4c431badd 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -3080,9 +3080,13 @@ em_reset(if_ctx_t ctx) case e1000_82573: pba = E1000_PBA_12K; /* 12K for Rx, 20K for Tx */ break; + /* 82574/82583: Total Packet Buffer is 40K */ case e1000_82574: case e1000_82583: - pba = E1000_PBA_20K; /* 20K for Rx, 20K for Tx */ + if (hw->mac.max_frame_size > 8192) + pba = E1000_PBA_22K; /* 22K for Rx, 18K for Tx */ + else + pba = E1000_PBA_32K; /* 32K for RX, 8K for Tx */ break; case e1000_ich8lan: pba = E1000_PBA_8K; diff --git a/sys/dev/iwx/if_iwx.c b/sys/dev/iwx/if_iwx.c index e317ff9e271c..3c953e522973 100644 --- a/sys/dev/iwx/if_iwx.c +++ b/sys/dev/iwx/if_iwx.c @@ -4607,37 +4607,39 @@ iwx_rx_mpdu_mq(struct iwx_softc *sc, struct mbuf *m, void *pktdata, pad = 1; } -// /* -// * Hardware de-aggregates A-MSDUs and copies the same MAC header -// * in place for each subframe. But it leaves the 'A-MSDU present' -// * bit set in the frame header. We need to clear this bit ourselves. -// * (XXX This workaround is not required on AX200/AX201 devices that -// * have been tested by me, but it's unclear when this problem was -// * fixed in the hardware. It definitely affects the 9k generation. -// * Leaving this in place for now since some 9k/AX200 hybrids seem -// * to exist that we may eventually add support for.) -// * -// * And we must allow the same CCMP PN for subframes following the -// * first subframe. Otherwise they would be discarded as replays. -// */ + /* If it's a HT node then perform re-order processing */ + if (ni->ni_flags & IEEE80211_NODE_HT) + m->m_flags |= M_AMPDU; + + /* + * Hardware de-aggregates A-MSDUs and copies the same MAC header + * in place for each subframe. But it leaves the 'A-MSDU present' + * bit set in the frame header. We need to clear this bit ourselves. + * (XXX This workaround is not required on AX200/AX201 devices that + * have been tested by me, but it's unclear when this problem was + * fixed in the hardware. It definitely affects the 9k generation. + * Leaving this in place for now since some 9k/AX200 hybrids seem + * to exist that we may eventually add support for.) + * + * And we must allow the same CCMP PN for subframes following the + * first subframe. Otherwise they would be discarded as replays. + */ if (desc->mac_flags2 & IWX_RX_MPDU_MFLG2_AMSDU) { - DPRINTF(("%s: === IWX_RX_MPDU_MFLG2_AMSDU\n", __func__)); -// struct ieee80211_frame *wh = mtod(m, struct ieee80211_frame *); -// uint8_t subframe_idx = (desc->amsdu_info & -// IWX_RX_MPDU_AMSDU_SUBFRAME_IDX_MASK); -// if (subframe_idx > 0) -// rxi.rxi_flags |= IEEE80211_RXI_HWDEC_SAME_PN; -// if (ieee80211_has_qos(wh) && ieee80211_has_addr4(wh) && -// m->m_len >= sizeof(struct ieee80211_qosframe_addr4)) { -// struct ieee80211_qosframe_addr4 *qwh4 = mtod(m, -// struct ieee80211_qosframe_addr4 *); -// qwh4->i_qos[0] &= htole16(~IEEE80211_QOS_AMSDU); -// } else if (ieee80211_has_qos(wh) && -// m->m_len >= sizeof(struct ieee80211_qosframe)) { -// struct ieee80211_qosframe *qwh = mtod(m, -// struct ieee80211_qosframe *); -// qwh->i_qos[0] &= htole16(~IEEE80211_QOS_AMSDU); -// } + struct ieee80211_frame *wh = mtod(m, struct ieee80211_frame *); + uint8_t subframe_idx = (desc->amsdu_info & + IWX_RX_MPDU_AMSDU_SUBFRAME_IDX_MASK); + uint8_t *qos; + + rxs.c_pktflags |= IEEE80211_RX_F_AMSDU; + if (subframe_idx > 0) + rxs.c_pktflags |= IEEE80211_RX_F_AMSDU_MORE; + + /* XXX should keep driver statistics about this */ + IWX_DPRINTF(sc, IWX_DEBUG_AMPDU_MGMT, + "%s: === IWX_RX_MPDU_MFLG2_AMSDU\n", __func__); + + qos = ieee80211_getqos(wh); + qos[0] &= ~IEEE80211_QOS_AMSDU; } /* diff --git a/sys/dev/sound/dummy.c b/sys/dev/sound/dummy.c index 0a2717ec418c..74ca1d0c924c 100644 --- a/sys/dev/sound/dummy.c +++ b/sys/dev/sound/dummy.c @@ -64,7 +64,7 @@ struct dummy_softc { int chnum; struct dummy_chan chans[DUMMY_NCHAN]; struct callout callout; - struct mtx *lock; + struct mtx lock; bool stopped; }; @@ -74,7 +74,7 @@ dummy_active(struct dummy_softc *sc) struct dummy_chan *ch; int i; - snd_mtxassert(sc->lock); + mtx_assert(&sc->lock, MA_OWNED); for (i = 0; i < sc->chnum; i++) { ch = &sc->chans[i]; @@ -109,9 +109,9 @@ dummy_chan_io(void *arg) ch->ptr %= ch->buf->bufsize; } else sndbuf_fillsilence(ch->buf); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(ch->chan); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } if (!sc->stopped) callout_schedule(&sc->callout, 1); @@ -141,7 +141,7 @@ dummy_chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, sc = devinfo; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); ch = &sc->chans[sc->chnum++]; ch->sc = sc; @@ -150,7 +150,7 @@ dummy_chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, ch->buf = b; ch->caps = &sc->caps; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); bufsz = pcm_getbuffersize(sc->dev, 2048, 2048, 65536); buf = malloc(bufsz, M_DEVBUF, M_WAITOK | M_ZERO); @@ -199,10 +199,10 @@ dummy_chan_trigger(kobj_t obj, void *data, int go) struct dummy_chan *ch = data; struct dummy_softc *sc = ch->sc; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (sc->stopped) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -222,7 +222,7 @@ dummy_chan_trigger(kobj_t obj, void *data, int go) break; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -320,8 +320,9 @@ dummy_attach(device_t dev) sc = device_get_softc(dev); sc->dev = dev; - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_dummy softc"); - callout_init_mtx(&sc->callout, sc->lock, 0); + mtx_init(&sc->lock, device_get_nameunit(dev), "snd_dummy softc", + MTX_DEF); + callout_init_mtx(&sc->callout, &sc->lock, 0); sc->cap_fmts[0] = SND_FORMAT(AFMT_S32_LE, 2, 0); sc->cap_fmts[1] = SND_FORMAT(AFMT_S24_LE, 2, 0); @@ -362,12 +363,12 @@ dummy_detach(device_t dev) struct dummy_softc *sc = device_get_softc(dev); int err; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->stopped = true; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); callout_drain(&sc->callout); err = pcm_unregister(dev); - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); return (err); } diff --git a/sys/dev/sound/midi/midi.c b/sys/dev/sound/midi/midi.c index b39288675ea6..e14a28557406 100644 --- a/sys/dev/sound/midi/midi.c +++ b/sys/dev/sound/midi/midi.c @@ -32,34 +32,29 @@ #include <sys/param.h> #include <sys/systm.h> -#include <sys/queue.h> +#include <sys/conf.h> +#include <sys/fcntl.h> #include <sys/kernel.h> +#include <sys/kobj.h> #include <sys/lock.h> +#include <sys/module.h> #include <sys/mutex.h> -#include <sys/proc.h> -#include <sys/signalvar.h> -#include <sys/conf.h> +#include <sys/poll.h> +#include <sys/queue.h> #include <sys/selinfo.h> -#include <sys/sysctl.h> -#include <sys/malloc.h> #include <sys/sx.h> -#include <sys/proc.h> -#include <sys/fcntl.h> -#include <sys/types.h> +#include <sys/sysctl.h> #include <sys/uio.h> -#include <sys/poll.h> -#include <sys/sbuf.h> -#include <sys/kobj.h> -#include <sys/module.h> #ifdef HAVE_KERNEL_OPTION_HEADERS #include "opt_snd.h" #endif #include <dev/sound/midi/midi.h> +#include <dev/sound/midi/midiq.h> + #include "mpu_if.h" -#include <dev/sound/midi/midiq.h> MALLOC_DEFINE(M_MIDI, "midi buffers", "Midi data allocation area"); #define MIDI_NAMELEN 16 diff --git a/sys/dev/sound/midi/mpu401.c b/sys/dev/sound/midi/mpu401.c index af3149ec8180..7d3edb6323ef 100644 --- a/sys/dev/sound/midi/mpu401.c +++ b/sys/dev/sound/midi/mpu401.c @@ -27,17 +27,10 @@ */ #include <sys/param.h> -#include <sys/types.h> -#include <sys/param.h> -#include <sys/queue.h> -#include <sys/kernel.h> -#include <sys/lock.h> -#include <sys/mutex.h> -#include <sys/proc.h> #include <sys/systm.h> +#include <sys/bus.h> +#include <sys/kernel.h> #include <sys/kobj.h> -#include <sys/malloc.h> -#include <sys/bus.h> /* to get driver_intr_t */ #ifdef HAVE_KERNEL_OPTION_HEADERS #include "opt_snd.h" diff --git a/sys/dev/sound/pci/als4000.c b/sys/dev/sound/pci/als4000.c index a8c3303af74f..aea7cc6d3a64 100644 --- a/sys/dev/sound/pci/als4000.c +++ b/sys/dev/sound/pci/als4000.c @@ -79,7 +79,7 @@ struct sc_info { struct resource *reg, *irq; int regid, irqid; void *ih; - struct mtx *lock; + struct mtx lock; unsigned int bufsz; struct sc_chinfo pch, rch; @@ -208,7 +208,7 @@ alschan_init(kobj_t obj, void *devinfo, struct sc_info *sc = devinfo; struct sc_chinfo *ch; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (dir == PCMDIR_PLAY) { ch = &sc->pch; ch->gcr_fifo_status = ALS_GCR_FIFO0_STATUS; @@ -223,7 +223,7 @@ alschan_init(kobj_t obj, void *devinfo, ch->format = SND_FORMAT(AFMT_U8, 1, 0); ch->speed = 8000; ch->buffer = b; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) != 0) return NULL; @@ -278,9 +278,9 @@ alschan_getptr(kobj_t obj, void *data) struct sc_info *sc = ch->parent; int32_t pos, sz; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); pos = als_gcr_rd(ch->parent, ch->gcr_fifo_status) & 0xffff; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); sz = ch->buffer->bufsize; return (2 * sz - pos - 1) % sz; } @@ -397,7 +397,7 @@ alspchan_trigger(kobj_t obj, void *data, int go) if (!PCMTRIG_COMMON(go)) return 0; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); switch(go) { case PCMTRIG_START: als_playback_start(ch); @@ -409,7 +409,7 @@ alspchan_trigger(kobj_t obj, void *data, int go) default: break; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -493,7 +493,7 @@ alsrchan_trigger(kobj_t obj, void *data, int go) struct sc_chinfo *ch = data; struct sc_info *sc = ch->parent; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); switch(go) { case PCMTRIG_START: als_capture_start(ch); @@ -503,7 +503,7 @@ alsrchan_trigger(kobj_t obj, void *data, int go) als_capture_stop(ch); break; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -637,19 +637,19 @@ als_intr(void *p) struct sc_info *sc = (struct sc_info *)p; u_int8_t intr, sb_status; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); intr = als_intr_rd(sc); if (intr & 0x80) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(sc->pch.channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } if (intr & 0x40) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(sc->rch.channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } /* ACK interrupt in PCI core */ @@ -667,7 +667,7 @@ als_intr(void *p) if (sb_status & ALS_IRQ_CR1E) als_ack_read(sc, ALS_CR1E_ACK_PORT); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return; } @@ -749,10 +749,7 @@ als_resource_free(device_t dev, struct sc_info *sc) bus_dma_tag_destroy(sc->parent_dmat); sc->parent_dmat = 0; } - if (sc->lock) { - snd_mtxfree(sc->lock); - sc->lock = NULL; - } + mtx_destroy(&sc->lock); } static int @@ -808,7 +805,8 @@ als_pci_attach(device_t dev) char status[SND_STATUSLEN]; sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_als4000 softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "snd_als4000 softc", + MTX_DEF); sc->dev = dev; pci_enable_busmaster(dev); @@ -882,11 +880,11 @@ als_pci_suspend(device_t dev) { struct sc_info *sc = pcm_getdevinfo(dev); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->pch.dma_was_active = als_playback_stop(&sc->pch); sc->rch.dma_was_active = als_capture_stop(&sc->rch); als_uninit(sc); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -895,16 +893,16 @@ als_pci_resume(device_t dev) { struct sc_info *sc = pcm_getdevinfo(dev); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (als_init(sc) != 0) { device_printf(dev, "unable to reinitialize the card\n"); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return ENXIO; } if (mixer_reinit(dev) != 0) { device_printf(dev, "unable to reinitialize the mixer\n"); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return ENXIO; } @@ -915,7 +913,7 @@ als_pci_resume(device_t dev) if (sc->rch.dma_was_active) { als_capture_start(&sc->rch); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } diff --git a/sys/dev/sound/pci/atiixp.c b/sys/dev/sound/pci/atiixp.c index 30f061fd9388..12906ecc6253 100644 --- a/sys/dev/sound/pci/atiixp.c +++ b/sys/dev/sound/pci/atiixp.c @@ -129,7 +129,7 @@ struct atiixp_info { uint32_t blkcnt; int registered_channels; - struct mtx *lock; + struct mtx lock; struct callout poll_timer; int poll_ticks, polling; }; @@ -139,9 +139,9 @@ struct atiixp_info { #define atiixp_wr(_sc, _reg, _val) \ bus_space_write_4((_sc)->st, (_sc)->sh, _reg, _val) -#define atiixp_lock(_sc) snd_mtxlock((_sc)->lock) -#define atiixp_unlock(_sc) snd_mtxunlock((_sc)->lock) -#define atiixp_assert(_sc) snd_mtxassert((_sc)->lock) +#define atiixp_lock(_sc) mtx_lock(&(_sc)->lock) +#define atiixp_unlock(_sc) mtx_unlock(&(_sc)->lock) +#define atiixp_assert(_sc) mtx_assert(&(_sc)->lock, MA_OWNED) static uint32_t atiixp_fmt_32bit[] = { SND_FORMAT(AFMT_S16_LE, 2, 0), @@ -1019,7 +1019,7 @@ atiixp_chip_post_init(void *arg) if (sc->codec_not_ready_bits == 0) { /* wait for the interrupts to happen */ do { - msleep(sc, sc->lock, PWAIT, "ixpslp", max(hz / 10, 1)); + msleep(sc, &sc->lock, PWAIT, "ixpslp", max(hz / 10, 1)); if (sc->codec_not_ready_bits != 0) break; } while (--timeout); @@ -1157,10 +1157,7 @@ atiixp_release_resource(struct atiixp_info *sc) bus_dma_tag_destroy(sc->sgd_dmat); sc->sgd_dmat = NULL; } - if (sc->lock) { - snd_mtxfree(sc->lock); - sc->lock = NULL; - } + mtx_destroy(&sc->lock); free(sc, M_DEVBUF); } @@ -1190,7 +1187,8 @@ atiixp_pci_attach(device_t dev) int i; sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_atiixp softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "snd_atiixp softc", + MTX_DEF); sc->dev = dev; callout_init(&sc->poll_timer, 1); diff --git a/sys/dev/sound/pci/cmi.c b/sys/dev/sound/pci/cmi.c index 28427d449c8d..99925d236c08 100644 --- a/sys/dev/sound/pci/cmi.c +++ b/sys/dev/sound/pci/cmi.c @@ -116,7 +116,7 @@ struct sc_info { struct resource *reg, *irq; int regid, irqid; void *ih; - struct mtx *lock; + struct mtx lock; int spdif_enabled; unsigned int bufsz; @@ -361,13 +361,13 @@ cmichan_init(kobj_t obj, void *devinfo, } ch->dir = dir; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->dir == PCMDIR_PLAY) { cmi_dma_prog(sc, ch, CMPCI_REG_DMA0_BASE); } else { cmi_dma_prog(sc, ch, CMPCI_REG_DMA1_BASE); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return ch; } @@ -394,7 +394,7 @@ cmichan_setformat(kobj_t obj, void *data, u_int32_t format) f |= CMPCI_REG_FORMAT_MONO; } - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->dir == PCMDIR_PLAY) { cmi_partial_wr4(ch->parent, CMPCI_REG_CHANNEL_FORMAT, @@ -408,7 +408,7 @@ cmichan_setformat(kobj_t obj, void *data, u_int32_t format) CMPCI_REG_CH1_FORMAT_MASK, f); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); ch->fmt = format; return 0; @@ -422,7 +422,7 @@ cmichan_setspeed(kobj_t obj, void *data, u_int32_t speed) u_int32_t r, rsp __unused; r = cmpci_rate_to_regvalue(speed); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->dir == PCMDIR_PLAY) { if (speed < 44100) { /* disable if req before rate change */ @@ -450,7 +450,7 @@ cmichan_setspeed(kobj_t obj, void *data, u_int32_t speed) rsp >>= CMPCI_REG_ADC_FS_SHIFT; rsp &= CMPCI_REG_ADC_FS_MASK; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); ch->spd = cmpci_regvalue_to_rate(r); DEB(printf("cmichan_setspeed (%s) %d -> %d (%d)\n", @@ -484,7 +484,7 @@ cmichan_trigger(kobj_t obj, void *data, int go) if (!PCMTRIG_COMMON(go)) return 0; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->dir == PCMDIR_PLAY) { switch(go) { case PCMTRIG_START: @@ -506,7 +506,7 @@ cmichan_trigger(kobj_t obj, void *data, int go) break; } } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -517,13 +517,13 @@ cmichan_getptr(kobj_t obj, void *data) struct sc_info *sc = ch->parent; u_int32_t physptr, bufptr, sz; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->dir == PCMDIR_PLAY) { physptr = cmi_rd(sc, CMPCI_REG_DMA0_BASE, 4); } else { physptr = cmi_rd(sc, CMPCI_REG_DMA1_BASE, 4); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); sz = ch->buffer->bufsize; bufptr = (physptr - ch->phys_buf + sz - ch->bps) % sz; @@ -538,7 +538,7 @@ cmi_intr(void *data) u_int32_t intrstat; u_int32_t toclear; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); intrstat = cmi_rd(sc, CMPCI_REG_INTR_STATUS, 4); if ((intrstat & CMPCI_REG_ANY_INTR) != 0) { toclear = 0; @@ -554,7 +554,7 @@ cmi_intr(void *data) if (toclear) { cmi_clr4(sc, CMPCI_REG_INTR_CTRL, toclear); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); /* Signal interrupts to channel */ if (intrstat & CMPCI_REG_CH0_INTR) { @@ -565,14 +565,14 @@ cmi_intr(void *data) chn_intr(sc->rch.channel); } - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); cmi_set4(sc, CMPCI_REG_INTR_CTRL, toclear); } } if(sc->mpu_intr) { (sc->mpu_intr)(sc->mpu); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return; } @@ -799,10 +799,10 @@ cmi_muninit(struct mpu401 *arg, void *cookie) { struct sc_info *sc = cookie; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->mpu_intr = NULL; sc->mpu = NULL; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -933,7 +933,8 @@ cmi_attach(device_t dev) char status[SND_STATUSLEN]; sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_cmi softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "snd_cmi softc", + MTX_DEF); pci_enable_busmaster(dev); sc->dev = dev; @@ -1007,8 +1008,7 @@ cmi_attach(device_t dev) bus_release_resource(dev, SYS_RES_IRQ, sc->irqid, sc->irq); if (sc->reg) bus_release_resource(dev, SYS_RES_IOPORT, sc->regid, sc->reg); - if (sc->lock) - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); if (sc) free(sc, M_DEVBUF); @@ -1037,7 +1037,7 @@ cmi_detach(device_t dev) if (sc->mpu_reg) bus_release_resource(dev, SYS_RES_IOPORT, sc->mpu_regid, sc->mpu_reg); - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); free(sc, M_DEVBUF); return 0; @@ -1048,11 +1048,11 @@ cmi_suspend(device_t dev) { struct sc_info *sc = pcm_getdevinfo(dev); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->pch.dma_was_active = cmi_ch0_stop(sc, &sc->pch); sc->rch.dma_was_active = cmi_ch1_stop(sc, &sc->rch); cmi_power(sc, 3); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -1061,17 +1061,17 @@ cmi_resume(device_t dev) { struct sc_info *sc = pcm_getdevinfo(dev); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); cmi_power(sc, 0); if (cmi_init(sc) != 0) { device_printf(dev, "unable to reinitialize the card\n"); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return ENXIO; } if (mixer_reinit(dev) == -1) { device_printf(dev, "unable to reinitialize the mixer\n"); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return ENXIO; } @@ -1086,7 +1086,7 @@ cmi_resume(device_t dev) cmichan_setformat(NULL, &sc->rch, sc->rch.fmt); cmi_ch1_start(sc, &sc->rch); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } diff --git a/sys/dev/sound/pci/emu10k1.c b/sys/dev/sound/pci/emu10k1.c index a85031977f4b..da2ddc99f5a1 100644 --- a/sys/dev/sound/pci/emu10k1.c +++ b/sys/dev/sound/pci/emu10k1.c @@ -218,7 +218,7 @@ struct sc_info { struct resource *reg, *irq; void *ih; - struct mtx *lock; + struct mtx lock; unsigned int bufsz; int timer, timerinterval; @@ -820,10 +820,10 @@ emupchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, ch->blksz = sc->bufsz / 2; ch->fmt = SND_FORMAT(AFMT_U8, 1, 0); ch->spd = 8000; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); ch->master = emu_valloc(sc); ch->slave = emu_valloc(sc); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); r = (emu_vinit(sc, ch->master, ch->slave, sc->bufsz, ch->buffer)) ? NULL : ch; @@ -837,9 +837,9 @@ emupchan_free(kobj_t obj, void *data) struct sc_info *sc = ch->parent; int r; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); r = emu_memfree(sc, ch->buffer->buf); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return r; } @@ -869,9 +869,9 @@ emupchan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) struct sc_info *sc = ch->parent; ch->blksz = blocksize; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); emu_settimer(sc); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return blocksize; } @@ -884,7 +884,7 @@ emupchan_trigger(kobj_t obj, void *data, int go) if (!PCMTRIG_COMMON(go)) return 0; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (go == PCMTRIG_START) { emu_vsetup(ch); emu_vwrite(sc, ch->master); @@ -901,7 +901,7 @@ emupchan_trigger(kobj_t obj, void *data, int go) } ch->run = (go == PCMTRIG_START) ? 1 : 0; emu_vtrigger(sc, ch->master, ch->run); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -912,9 +912,9 @@ emupchan_getptr(kobj_t obj, void *data) struct sc_info *sc = ch->parent; int r; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); r = emu_vpos(sc, ch->master); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return r; } @@ -984,10 +984,10 @@ emurchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) != 0) return NULL; else { - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); emu_wrptr(sc, 0, ch->basereg, ch->buffer->buf_addr); emu_wrptr(sc, 0, ch->sizereg, 0); /* off */ - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return ch; } } @@ -1027,9 +1027,9 @@ emurchan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) struct sc_info *sc = ch->parent; ch->blksz = blocksize; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); emu_settimer(sc); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return blocksize; } @@ -1069,7 +1069,7 @@ emurchan_trigger(kobj_t obj, void *data, int go) sz = EMU_RECBS_BUFSIZE_4096; } - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); switch(go) { case PCMTRIG_START: ch->run = 1; @@ -1111,7 +1111,7 @@ emurchan_trigger(kobj_t obj, void *data, int go) default: break; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -1123,9 +1123,9 @@ emurchan_getptr(kobj_t obj, void *data) struct sc_info *sc = ch->parent; int r; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); r = emu_rdptr(sc, 0, ch->idxreg) & 0x0000ffff; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return r; } @@ -1171,9 +1171,9 @@ emu_muninit(struct mpu401 *arg, void *cookie) { struct sc_info *sc = cookie; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->mpu_intr = NULL; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -1216,7 +1216,7 @@ emu_intr(void *data) struct sc_info *sc = data; u_int32_t stat, ack, i, x; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); while (1) { stat = emu_rd(sc, EMU_IPR, 4); if (stat == 0) @@ -1262,7 +1262,7 @@ emu_intr(void *data) emu_wr(sc, EMU_IPR, stat, 4); if (ack) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); if (ack & EMU_IPR_INTERVALTIMER) { x = 0; @@ -1289,10 +1289,10 @@ emu_intr(void *data) chn_intr(sc->rch[2].channel); } - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); } /* -------------------------------------------------------------------- */ @@ -2071,7 +2071,8 @@ emu_pci_attach(device_t dev) char status[SND_STATUSLEN]; sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_emu10k1 softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "snd_emu10k1 softc", + MTX_DEF); sc->dev = dev; sc->type = pci_get_devid(dev); sc->rev = pci_get_revid(dev); @@ -2147,7 +2148,7 @@ bad: if (sc->ih) bus_teardown_intr(dev, sc->irq, sc->ih); if (sc->irq) bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq); if (sc->parent_dmat) bus_dma_tag_destroy(sc->parent_dmat); - if (sc->lock) snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); free(sc, M_DEVBUF); return ENXIO; } @@ -2170,7 +2171,7 @@ emu_pci_detach(device_t dev) bus_teardown_intr(dev, sc->irq, sc->ih); bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq); bus_dma_tag_destroy(sc->parent_dmat); - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); free(sc, M_DEVBUF); return 0; diff --git a/sys/dev/sound/pci/emu10kx-pcm.c b/sys/dev/sound/pci/emu10kx-pcm.c index a93d48ba71b1..25b0006e4122 100644 --- a/sys/dev/sound/pci/emu10kx-pcm.c +++ b/sys/dev/sound/pci/emu10kx-pcm.c @@ -90,7 +90,7 @@ struct emu_pcm_rchinfo { #endif struct emu_pcm_info { - struct mtx *lock; + struct mtx lock; device_t dev; /* device information */ struct emu_sc_info *card; struct emu_pcm_pchinfo pch[MAX_CHANNELS]; /* hardware channels */ @@ -771,10 +771,10 @@ emupchan_setblocksize(kobj_t obj __unused, void *c_devinfo, uint32_t blocksize) if (blocksize > ch->pcm->bufsz) blocksize = ch->pcm->bufsz; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); ch->blksz = blocksize; emu_timer_set(sc->card, ch->timer, ch->blksz / ch->buffer->align); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (ch->blksz); } @@ -787,7 +787,7 @@ emupchan_trigger(kobj_t obj __unused, void *c_devinfo, int go) if (!PCMTRIG_COMMON(go)) return (0); - snd_mtxlock(sc->lock); /* XXX can we trigger on parallel threads ? */ + mtx_lock(&sc->lock); /* XXX can we trigger on parallel threads ? */ if (go == PCMTRIG_START) { emu_vsetup(ch->master, ch->fmt, ch->spd); if (AFMT_CHANNEL(ch->fmt) > 1) @@ -802,7 +802,7 @@ emupchan_trigger(kobj_t obj __unused, void *c_devinfo, int go) /* PCM interrupt handler will handle PCMTRIG_STOP event */ ch->run = (go == PCMTRIG_START) ? 1 : 0; emu_vtrigger(sc->card, ch->master, ch->run); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -970,7 +970,7 @@ emurchan_trigger(kobj_t obj __unused, void *c_devinfo, int go) sz = EMU_RECBS_BUFSIZE_4096; } - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); switch (go) { case PCMTRIG_START: ch->run = 1; @@ -999,7 +999,7 @@ emurchan_trigger(kobj_t obj __unused, void *c_devinfo, int go) default: break; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -1130,7 +1130,7 @@ emufxrchan_trigger(kobj_t obj __unused, void *c_devinfo, int go) sz = EMU_RECBS_BUFSIZE_4096; } - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); switch (go) { case PCMTRIG_START: ch->run = 1; @@ -1169,7 +1169,7 @@ emufxrchan_trigger(kobj_t obj __unused, void *c_devinfo, int go) default: break; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -1234,24 +1234,24 @@ emu_pcm_intr(void *pcm, uint32_t stat) ack = 0; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (stat & EMU_IPR_INTERVALTIMER) { ack |= EMU_IPR_INTERVALTIMER; for (i = 0; i < MAX_CHANNELS; i++) if (sc->pch[i].channel) { if (sc->pch[i].run == 1) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(sc->pch[i].channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } else emu_timer_enable(sc->card, sc->pch[i].timer, 0); } /* ADC may install timer to get low-latency interrupts */ if ((sc->rch_adc.channel) && (sc->rch_adc.run)) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(sc->rch_adc.channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } /* * EFX does not use timer, because it will fill @@ -1262,21 +1262,21 @@ emu_pcm_intr(void *pcm, uint32_t stat) if (stat & (EMU_IPR_ADCBUFFULL | EMU_IPR_ADCBUFHALFFULL)) { ack |= stat & (EMU_IPR_ADCBUFFULL | EMU_IPR_ADCBUFHALFFULL); if (sc->rch_adc.channel) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(sc->rch_adc.channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } } if (stat & (EMU_IPR_EFXBUFFULL | EMU_IPR_EFXBUFHALFFULL)) { ack |= stat & (EMU_IPR_EFXBUFFULL | EMU_IPR_EFXBUFHALFFULL); if (sc->rch_efx.channel) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(sc->rch_efx.channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (ack); } @@ -1349,7 +1349,8 @@ emu_pcm_attach(device_t dev) return (ENXIO); } - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_emu10kx pcm softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "snd_emu10kx pcm softc", + MTX_DEF); sc->dev = dev; BUS_READ_IVAR(device_get_parent(dev), dev, EMU_VAR_ISEMU10K1, &ivar); @@ -1483,8 +1484,7 @@ emu_pcm_attach(device_t dev) bad: if (sc->codec) ac97_destroy(sc->codec); - if (sc->lock) - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); free(sc, M_DEVBUF); return (ENXIO); } @@ -1503,8 +1503,7 @@ emu_pcm_detach(device_t dev) emu_pcm_uninit(sc); - if (sc->lock) - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); free(sc, M_DEVBUF); return (0); diff --git a/sys/dev/sound/pci/envy24.c b/sys/dev/sound/pci/envy24.c index 51842bfdb480..3adb22254b72 100644 --- a/sys/dev/sound/pci/envy24.c +++ b/sys/dev/sound/pci/envy24.c @@ -116,7 +116,7 @@ struct cfg_info { /* device private data */ struct sc_info { device_t dev; - struct mtx *lock; + struct mtx lock; /* Control/Status registor */ struct resource *cs; @@ -1567,10 +1567,10 @@ envy24chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channe #if(0) device_printf(sc->dev, "envy24chan_init(obj, devinfo, b, c, %d)\n", dir); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if ((sc->chnum > ENVY24_CHAN_PLAY_SPDIF && dir != PCMDIR_REC) || (sc->chnum < ENVY24_CHAN_REC_ADC1 && dir != PCMDIR_PLAY)) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return NULL; } num = sc->chnum; @@ -1589,14 +1589,14 @@ envy24chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channe ch->dir = dir; /* set channel map */ ch->num = envy24_chanmap[num]; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); sndbuf_setup(ch->buffer, ch->data, ch->size); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); /* these 2 values are dummy */ ch->unit = 4; ch->blk = 10240; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return ch; } @@ -1610,12 +1610,12 @@ envy24chan_free(kobj_t obj, void *data) #if(0) device_printf(sc->dev, "envy24chan_free()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->data != NULL) { free(ch->data, M_ENVY24); ch->data = NULL; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -1632,21 +1632,21 @@ envy24chan_setformat(kobj_t obj, void *data, u_int32_t format) #if(0) device_printf(sc->dev, "envy24chan_setformat(obj, data, 0x%08x)\n", format); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); /* check and get format related information */ if (ch->dir == PCMDIR_PLAY) emltab = envy24_pemltab; else emltab = envy24_remltab; if (emltab == NULL) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return -1; } for (i = 0; emltab[i].format != 0; i++) if (emltab[i].format == format) break; if (emltab[i].format == 0) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return -1; } @@ -1670,7 +1670,7 @@ envy24chan_setformat(kobj_t obj, void *data, u_int32_t format) bcnt = ch->size / bsize; sndbuf_resize(ch->buffer, bcnt, bsize); #endif - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); #if(0) device_printf(sc->dev, "envy24chan_setformat(): return 0x%08x\n", 0); @@ -1723,7 +1723,7 @@ envy24chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) device_printf(sc->dev, "envy24chan_setblocksize(obj, data, %d)\n", blocksize); #endif prev = 0x7fffffff; - /* snd_mtxlock(sc->lock); */ + /* mtx_lock(&sc->lock); */ for (size = ch->size / 2; size > 0; size /= 2) { if (abs(size - blocksize) < abs(prev - blocksize)) prev = size; @@ -1745,7 +1745,7 @@ envy24chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) bsize *= ch->unit; bcnt = ch->size / bsize; sndbuf_resize(ch->buffer, bcnt, bsize); - /* snd_mtxunlock(sc->lock); */ + /* mtx_unlock(&sc->lock); */ #if(0) device_printf(sc->dev, "envy24chan_setblocksize(): return %d\n", prev); @@ -1767,7 +1767,7 @@ envy24chan_trigger(kobj_t obj, void *data, int go) device_printf(sc->dev, "envy24chan_trigger(obj, data, %d)\n", go); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->dir == PCMDIR_PLAY) slot = 0; else @@ -1862,7 +1862,7 @@ envy24chan_trigger(kobj_t obj, void *data, int go) break; } fail: - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (error); } @@ -1876,10 +1876,10 @@ envy24chan_getptr(kobj_t obj, void *data) #if(0) device_printf(sc->dev, "envy24chan_getptr()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); ptr = envy24_gethwptr(sc, ch->dir); rtn = ptr * ch->unit; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); #if(0) device_printf(sc->dev, "envy24chan_getptr(): return %d\n", @@ -1898,7 +1898,7 @@ envy24chan_getcaps(kobj_t obj, void *data) #if(0) device_printf(sc->dev, "envy24chan_getcaps()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->dir == PCMDIR_PLAY) { if (sc->run[0] == 0) rtn = &envy24_playcaps; @@ -1911,7 +1911,7 @@ envy24chan_getcaps(kobj_t obj, void *data) else rtn = &sc->caps[1]; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return rtn; } @@ -1945,12 +1945,12 @@ envy24mixer_init(struct snd_mixer *m) return -1; /* set volume control rate */ - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); envy24_wrmt(sc, ENVY24_MT_VOLRATE, 0x30, 1); /* 0x30 is default value */ mix_setdevs(m, ENVY24_MIX_MASK); mix_setrecdevs(m, ENVY24_MIX_REC_MASK); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -2003,7 +2003,7 @@ envy24mixer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right dev, left, right); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (dev == 0) { for (i = 0; i < sc->dacn; i++) { sc->cfg->codec->setvolume(sc->dac[i], PCMDIR_PLAY, left, right); @@ -2020,7 +2020,7 @@ envy24mixer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right if (hwch > ENVY24_CHAN_PLAY_SPDIF || sc->chan[ch].run) envy24_setvolume(sc, hwch); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return right << 8 | left; } @@ -2063,7 +2063,7 @@ envy24_intr(void *p) #if(0) device_printf(sc->dev, "envy24_intr()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (envy24_checkintr(sc, PCMDIR_PLAY)) { #if(0) device_printf(sc->dev, "envy24_intr(): play\n"); @@ -2085,9 +2085,9 @@ envy24_intr(void *p) device_printf(sc->dev, "envy24_intr(): chan[%d].blk = %d\n", i, ch->blk); #endif if (ch->run && ch->blk <= feed) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(ch->channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } } sc->intr[0] = ptr; @@ -2104,15 +2104,15 @@ envy24_intr(void *p) for (i = ENVY24_CHAN_REC_ADC1; i <= ENVY24_CHAN_REC_SPDIF; i++) { ch = &sc->chan[i]; if (ch->run && ch->blk <= feed) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(ch->channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } } sc->intr[1] = ptr; envy24_updintr(sc, PCMDIR_REC); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return; } @@ -2551,7 +2551,8 @@ envy24_pci_attach(device_t dev) } bzero(sc, sizeof(*sc)); - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_envy24 softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "snd_envy24 softc", + MTX_DEF); sc->dev = dev; /* initialize PCI interface */ @@ -2627,8 +2628,7 @@ bad: bus_release_resource(dev, SYS_RES_IOPORT, sc->dsid, sc->ds); if (sc->mt) bus_release_resource(dev, SYS_RES_IOPORT, sc->mtid, sc->mt); - if (sc->lock) - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); free(sc, M_ENVY24); return err; } @@ -2665,7 +2665,7 @@ envy24_pci_detach(device_t dev) bus_release_resource(dev, SYS_RES_IOPORT, sc->ddmaid, sc->ddma); bus_release_resource(dev, SYS_RES_IOPORT, sc->dsid, sc->ds); bus_release_resource(dev, SYS_RES_IOPORT, sc->mtid, sc->mt); - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); free(sc, M_ENVY24); return 0; } diff --git a/sys/dev/sound/pci/envy24ht.c b/sys/dev/sound/pci/envy24ht.c index b8202a9fa7cd..2396a340cd84 100644 --- a/sys/dev/sound/pci/envy24ht.c +++ b/sys/dev/sound/pci/envy24ht.c @@ -125,7 +125,7 @@ struct cfg_info { /* device private data */ struct sc_info { device_t dev; - struct mtx *lock; + struct mtx lock; /* Control/Status registor */ struct resource *cs; @@ -1476,11 +1476,11 @@ envy24htchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_chan #if(0) device_printf(sc->dev, "envy24htchan_init(obj, devinfo, b, c, %d)\n", dir); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); #if 0 if ((sc->chnum > ENVY24HT_CHAN_PLAY_SPDIF && dir != PCMDIR_REC) || (sc->chnum < ENVY24HT_CHAN_REC_ADC1 && dir != PCMDIR_PLAY)) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return NULL; } #endif @@ -1500,14 +1500,14 @@ envy24htchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_chan ch->dir = dir; /* set channel map */ ch->num = envy24ht_chanmap[num]; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); sndbuf_setup(ch->buffer, ch->data, ch->size); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); /* these 2 values are dummy */ ch->unit = 4; ch->blk = 10240; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return ch; } @@ -1521,12 +1521,12 @@ envy24htchan_free(kobj_t obj, void *data) #if(0) device_printf(sc->dev, "envy24htchan_free()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->data != NULL) { free(ch->data, M_ENVY24HT); ch->data = NULL; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -1543,21 +1543,21 @@ envy24htchan_setformat(kobj_t obj, void *data, u_int32_t format) #if(0) device_printf(sc->dev, "envy24htchan_setformat(obj, data, 0x%08x)\n", format); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); /* check and get format related information */ if (ch->dir == PCMDIR_PLAY) emltab = envy24ht_pemltab; else emltab = envy24ht_remltab; if (emltab == NULL) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return -1; } for (i = 0; emltab[i].format != 0; i++) if (emltab[i].format == format) break; if (emltab[i].format == 0) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return -1; } @@ -1581,7 +1581,7 @@ envy24htchan_setformat(kobj_t obj, void *data, u_int32_t format) bcnt = ch->size / bsize; sndbuf_resize(ch->buffer, bcnt, bsize); #endif - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); #if(0) device_printf(sc->dev, "envy24htchan_setformat(): return 0x%08x\n", 0); @@ -1634,7 +1634,7 @@ envy24htchan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) device_printf(sc->dev, "envy24htchan_setblocksize(obj, data, %d)\n", blocksize); #endif prev = 0x7fffffff; - /* snd_mtxlock(sc->lock); */ + /* mtx_lock(&sc->lock); */ for (size = ch->size / 2; size > 0; size /= 2) { if (abs(size - blocksize) < abs(prev - blocksize)) prev = size; @@ -1656,7 +1656,7 @@ envy24htchan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize) bsize *= ch->unit; bcnt = ch->size / bsize; sndbuf_resize(ch->buffer, bcnt, bsize); - /* snd_mtxunlock(sc->lock); */ + /* mtx_unlock(&sc->lock); */ #if(0) device_printf(sc->dev, "envy24htchan_setblocksize(): return %d\n", prev); @@ -1678,7 +1678,7 @@ envy24htchan_trigger(kobj_t obj, void *data, int go) device_printf(sc->dev, "envy24htchan_trigger(obj, data, %d)\n", go); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->dir == PCMDIR_PLAY) slot = 0; else @@ -1771,7 +1771,7 @@ envy24htchan_trigger(kobj_t obj, void *data, int go) break; } fail: - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (error); } @@ -1785,10 +1785,10 @@ envy24htchan_getptr(kobj_t obj, void *data) #if(0) device_printf(sc->dev, "envy24htchan_getptr()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); ptr = envy24ht_gethwptr(sc, ch->dir); rtn = ptr * ch->unit; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); #if(0) device_printf(sc->dev, "envy24htchan_getptr(): return %d\n", @@ -1807,7 +1807,7 @@ envy24htchan_getcaps(kobj_t obj, void *data) #if(0) device_printf(sc->dev, "envy24htchan_getcaps()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->dir == PCMDIR_PLAY) { if (sc->run[0] == 0) rtn = &envy24ht_playcaps; @@ -1820,7 +1820,7 @@ envy24htchan_getcaps(kobj_t obj, void *data) else rtn = &sc->caps[1]; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return rtn; } @@ -1854,7 +1854,7 @@ envy24htmixer_init(struct snd_mixer *m) return -1; /* set volume control rate */ - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); #if 0 envy24ht_wrmt(sc, ENVY24HT_MT_VOLRATE, 0x30, 1); /* 0x30 is default value */ #endif @@ -1864,7 +1864,7 @@ envy24htmixer_init(struct snd_mixer *m) mix_setdevs(m, ENVY24HT_MIX_MASK); mix_setrecdevs(m, ENVY24HT_MIX_REC_MASK); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return 0; } @@ -1917,7 +1917,7 @@ envy24htmixer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned rig dev, left, right); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (dev == 0) { for (i = 0; i < sc->dacn; i++) { sc->cfg->codec->setvolume(sc->dac[i], PCMDIR_PLAY, left, right); @@ -1934,7 +1934,7 @@ envy24htmixer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned rig if (hwch > ENVY24HT_CHAN_PLAY_SPDIF || sc->chan[ch].run) envy24ht_setvolume(sc, hwch); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return right << 8 | left; } @@ -1977,7 +1977,7 @@ envy24ht_intr(void *p) #if(0) device_printf(sc->dev, "envy24ht_intr()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (envy24ht_checkintr(sc, PCMDIR_PLAY)) { #if(0) device_printf(sc->dev, "envy24ht_intr(): play\n"); @@ -1999,9 +1999,9 @@ envy24ht_intr(void *p) device_printf(sc->dev, "envy24ht_intr(): chan[%d].blk = %d\n", i, ch->blk); #endif if (ch->run && ch->blk <= feed) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(ch->channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } } sc->intr[0] = ptr; @@ -2018,15 +2018,15 @@ envy24ht_intr(void *p) for (i = ENVY24HT_CHAN_REC_ADC1; i <= ENVY24HT_CHAN_REC_SPDIF; i++) { ch = &sc->chan[i]; if (ch->run && ch->blk <= feed) { - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(ch->channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } } sc->intr[1] = ptr; envy24ht_updintr(sc, PCMDIR_REC); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return; } @@ -2455,8 +2455,8 @@ envy24ht_pci_attach(device_t dev) } bzero(sc, sizeof(*sc)); - sc->lock = snd_mtxcreate(device_get_nameunit(dev), - "snd_envy24ht softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "snd_eny24ht softc", + MTX_DEF); sc->dev = dev; /* initialize PCI interface */ @@ -2524,8 +2524,7 @@ bad: bus_release_resource(dev, SYS_RES_IOPORT, sc->csid, sc->cs); if (sc->mt) bus_release_resource(dev, SYS_RES_IOPORT, sc->mtid, sc->mt); - if (sc->lock) - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); free(sc, M_ENVY24HT); return err; } @@ -2560,7 +2559,7 @@ envy24ht_pci_detach(device_t dev) bus_release_resource(dev, SYS_RES_IRQ, sc->irqid, sc->irq); bus_release_resource(dev, SYS_RES_IOPORT, sc->csid, sc->cs); bus_release_resource(dev, SYS_RES_IOPORT, sc->mtid, sc->mt); - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); free(sc, M_ENVY24HT); return 0; } diff --git a/sys/dev/sound/pci/es137x.c b/sys/dev/sound/pci/es137x.c index 6b2093e16246..cc51005309b0 100644 --- a/sys/dev/sound/pci/es137x.c +++ b/sys/dev/sound/pci/es137x.c @@ -224,14 +224,14 @@ struct es_info { uint32_t sctrl; uint32_t escfg; struct es_chinfo ch[ES_NCHANS]; - struct mtx *lock; + struct mtx lock; struct callout poll_timer; int poll_ticks, polling; }; -#define ES_LOCK(sc) snd_mtxlock((sc)->lock) -#define ES_UNLOCK(sc) snd_mtxunlock((sc)->lock) -#define ES_LOCK_ASSERT(sc) snd_mtxassert((sc)->lock) +#define ES_LOCK(sc) mtx_lock(&(sc)->lock) +#define ES_UNLOCK(sc) mtx_unlock(&(sc)->lock) +#define ES_LOCK_ASSERT(sc) mtx_assert(&(sc)->lock, MA_OWNED) /* prototypes */ static void es_intr(void *); @@ -1712,7 +1712,8 @@ es_pci_attach(device_t dev) uint32_t devid; es = malloc(sizeof *es, M_DEVBUF, M_WAITOK | M_ZERO); - es->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_es137x softc"); + mtx_init(&es->lock, device_get_nameunit(dev), "snd_es137x softc", + MTX_DEF); es->dev = dev; es->escfg = 0; mapped = 0; @@ -1888,8 +1889,7 @@ bad: ac97_destroy(codec); if (es->reg) bus_release_resource(dev, es->regtype, es->regid, es->reg); - if (es->lock) - snd_mtxfree(es->lock); + mtx_destroy(&es->lock); if (es) free(es, M_DEVBUF); return (ENXIO); @@ -1919,7 +1919,7 @@ es_pci_detach(device_t dev) bus_release_resource(dev, SYS_RES_IRQ, es->irqid, es->irq); bus_release_resource(dev, es->regtype, es->regid, es->reg); bus_dma_tag_destroy(es->parent_dmat); - snd_mtxfree(es->lock); + mtx_destroy(&es->lock); free(es, M_DEVBUF); return (0); diff --git a/sys/dev/sound/pci/hda/hdaa.c b/sys/dev/sound/pci/hda/hdaa.c index 14231107e17a..7dec437de944 100644 --- a/sys/dev/sound/pci/hda/hdaa.c +++ b/sys/dev/sound/pci/hda/hdaa.c @@ -47,9 +47,9 @@ #include "mixer_if.h" -#define hdaa_lock(devinfo) snd_mtxlock((devinfo)->lock) -#define hdaa_unlock(devinfo) snd_mtxunlock((devinfo)->lock) -#define hdaa_lockassert(devinfo) snd_mtxassert((devinfo)->lock) +#define hdaa_lock(devinfo) mtx_lock((devinfo)->lock) +#define hdaa_unlock(devinfo) mtx_unlock((devinfo)->lock) +#define hdaa_lockassert(devinfo) mtx_assert((devinfo)->lock, MA_OWNED) static const struct { const char *key; diff --git a/sys/dev/sound/pci/hda/hdac.c b/sys/dev/sound/pci/hda/hdac.c index 8a325c538b9b..d1de81e7ba29 100644 --- a/sys/dev/sound/pci/hda/hdac.c +++ b/sys/dev/sound/pci/hda/hdac.c @@ -51,9 +51,9 @@ #define HDA_DRV_TEST_REV "20120126_0002" -#define hdac_lock(sc) snd_mtxlock((sc)->lock) -#define hdac_unlock(sc) snd_mtxunlock((sc)->lock) -#define hdac_lockassert(sc) snd_mtxassert((sc)->lock) +#define hdac_lock(sc) mtx_lock(&(sc)->lock) +#define hdac_unlock(sc) mtx_unlock(&(sc)->lock) +#define hdac_lockassert(sc) mtx_assert(&(sc)->lock, MA_OWNED) #define HDAC_QUIRK_64BIT (1 << 0) #define HDAC_QUIRK_DMAPOS (1 << 1) @@ -1171,7 +1171,8 @@ hdac_attach(device_t dev) } } - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "HDA driver mutex"); + mtx_init(&sc->lock, device_get_nameunit(dev), "HDA driver mutex", + MTX_DEF); sc->dev = dev; TASK_INIT(&sc->unsolq_task, 0, hdac_unsolq_task, sc); callout_init(&sc->poll_callout, 1); @@ -1374,7 +1375,7 @@ hdac_attach_fail: hdac_dma_free(sc, &sc->rirb_dma); hdac_dma_free(sc, &sc->corb_dma); hdac_mem_free(sc); - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); return (ENXIO); } @@ -1798,7 +1799,7 @@ hdac_detach(device_t dev) sc->chan_dmat = NULL; } hdac_mem_free(sc); - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); return (0); } @@ -1888,7 +1889,7 @@ hdac_get_mtx(device_t dev, device_t child) { struct hdac_softc *sc = device_get_softc(dev); - return (sc->lock); + return (&sc->lock); } static uint32_t diff --git a/sys/dev/sound/pci/hda/hdac_private.h b/sys/dev/sound/pci/hda/hdac_private.h index c434bface240..0c6fe41fd5de 100644 --- a/sys/dev/sound/pci/hda/hdac_private.h +++ b/sys/dev/sound/pci/hda/hdac_private.h @@ -162,7 +162,7 @@ struct hdac_stream { struct hdac_softc { device_t dev; - struct mtx *lock; + struct mtx lock; struct intr_config_hook intrhook; diff --git a/sys/dev/sound/pci/hda/hdacc.c b/sys/dev/sound/pci/hda/hdacc.c index 4198982c9c2a..b001daa549b1 100644 --- a/sys/dev/sound/pci/hda/hdacc.c +++ b/sys/dev/sound/pci/hda/hdacc.c @@ -60,9 +60,9 @@ struct hdacc_softc { struct hdacc_fg *fgs; }; -#define hdacc_lock(codec) snd_mtxlock((codec)->lock) -#define hdacc_unlock(codec) snd_mtxunlock((codec)->lock) -#define hdacc_lockassert(codec) snd_mtxassert((codec)->lock) +#define hdacc_lock(codec) mtx_lock((codec)->lock) +#define hdacc_unlock(codec) mtx_unlock((codec)->lock) +#define hdacc_lockassert(codec) mtx_assert((codec)->lock, MA_OWNED) MALLOC_DEFINE(M_HDACC, "hdacc", "HDA CODEC"); diff --git a/sys/dev/sound/pci/hdsp-pcm.c b/sys/dev/sound/pci/hdsp-pcm.c index bc11199f15e8..b64cec281388 100644 --- a/sys/dev/sound/pci/hdsp-pcm.c +++ b/sys/dev/sound/pci/hdsp-pcm.c @@ -321,10 +321,10 @@ hdspmixer_init(struct snd_mixer *m) if (hdsp_channel_rec_ports(scp->hc)) mask |= SOUND_MASK_RECLEV; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); pcm_setflags(scp->dev, pcm_getflags(scp->dev) | SD_F_SOFTPCMVOL); mix_setdevs(m, mask); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -676,7 +676,7 @@ hdspchan_free(kobj_t obj, void *data) device_printf(scp->dev, "hdspchan_free()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->data != NULL) { free(ch->data, M_HDSP); ch->data = NULL; @@ -685,7 +685,7 @@ hdspchan_free(kobj_t obj, void *data) free(ch->caps, M_HDSP); ch->caps = NULL; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -702,7 +702,7 @@ hdspchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, scp = devinfo; sc = scp->sc; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); num = scp->chnum; ch = &scp->chan[num]; @@ -745,7 +745,7 @@ hdspchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, ch->dir = dir; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); if (sndbuf_setup(ch->buffer, ch->data, ch->size) != 0) { device_printf(scp->dev, "Can't setup sndbuf.\n"); @@ -767,7 +767,7 @@ hdspchan_trigger(kobj_t obj, void *data, int go) scp = ch->parent; sc = scp->sc; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); switch (go) { case PCMTRIG_START: #if 0 @@ -795,7 +795,7 @@ hdspchan_trigger(kobj_t obj, void *data, int go) break; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -812,9 +812,9 @@ hdspchan_getptr(kobj_t obj, void *data) scp = ch->parent; sc = scp->sc; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); ret = hdsp_read_2(sc, HDSP_STATUS_REG); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); pos = ret & HDSP_BUF_POSITION_MASK; pos %= (2 * sc->period * sizeof(uint32_t)); /* Double buffer. */ @@ -951,12 +951,12 @@ hdspchan_setblocksize(kobj_t obj, void *data, uint32_t blocksize) } } - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->ctrl_register &= ~HDSP_LAT_MASK; sc->ctrl_register |= hdsp_encode_latency(hl->n); hdsp_write_4(sc, HDSP_CONTROL_REG, sc->ctrl_register); sc->period = hl->period; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); #if 0 device_printf(scp->dev, "New period=%d\n", sc->period); @@ -1034,9 +1034,9 @@ hdsp_pcm_intr(struct sc_pcminfo *scp) for (i = 0; i < scp->chnum; i++) { ch = &scp->chan[i]; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(ch->channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } return (0); diff --git a/sys/dev/sound/pci/hdsp.c b/sys/dev/sound/pci/hdsp.c index 4ba23d22ebce..aefbb71807b6 100644 --- a/sys/dev/sound/pci/hdsp.c +++ b/sys/dev/sound/pci/hdsp.c @@ -109,7 +109,7 @@ hdsp_intr(void *p) sc = (struct sc_info *)p; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); status = hdsp_read_1(sc, HDSP_STATUS_REG); if (status & HDSP_AUDIO_IRQ_PENDING) { @@ -126,7 +126,7 @@ hdsp_intr(void *p) free(devlist, M_TEMP); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); } static void @@ -286,11 +286,11 @@ hdsp_sysctl_input_level(SYSCTL_HANDLER_ARGS) /* Set input level in control register. */ control &= HDSP_INPUT_LEVEL_MASK; if (control != (sc->ctrl_register & HDSP_INPUT_LEVEL_MASK)) { - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->ctrl_register &= ~HDSP_INPUT_LEVEL_MASK; sc->ctrl_register |= control; hdsp_write_4(sc, HDSP_CONTROL_REG, sc->ctrl_register); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); } return (0); } @@ -350,11 +350,11 @@ hdsp_sysctl_output_level(SYSCTL_HANDLER_ARGS) /* Set output level in control register. */ control &= HDSP_OUTPUT_LEVEL_MASK; if (control != (sc->ctrl_register & HDSP_OUTPUT_LEVEL_MASK)) { - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->ctrl_register &= ~HDSP_OUTPUT_LEVEL_MASK; sc->ctrl_register |= control; hdsp_write_4(sc, HDSP_CONTROL_REG, sc->ctrl_register); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); } return (0); } @@ -414,11 +414,11 @@ hdsp_sysctl_phones_level(SYSCTL_HANDLER_ARGS) /* Set phones level in control register. */ control &= HDSP_PHONES_LEVEL_MASK; if (control != (sc->ctrl_register & HDSP_PHONES_LEVEL_MASK)) { - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->ctrl_register &= ~HDSP_PHONES_LEVEL_MASK; sc->ctrl_register |= control; hdsp_write_4(sc, HDSP_CONTROL_REG, sc->ctrl_register); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); } return (0); } @@ -549,11 +549,11 @@ hdsp_sysctl_clock_preference(SYSCTL_HANDLER_ARGS) if (clock->name != NULL) { control = hdsp_control_clock_preference(clock->type); control &= HDSP_CONTROL_CLOCK_MASK; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->ctrl_register &= ~HDSP_CONTROL_CLOCK_MASK; sc->ctrl_register |= control; hdsp_write_4(sc, HDSP_CONTROL_REG, sc->ctrl_register); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); } return (0); } @@ -600,10 +600,10 @@ hdsp_sysctl_clock_source(SYSCTL_HANDLER_ARGS) return (ENXIO); /* Read current (autosync) clock source from status2 register. */ - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); status2 = hdsp_read_4(sc, HDSP_STATUS2_REG); status2 &= HDSP_STATUS2_CLOCK_MASK; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); /* Translate status2 register value to clock source. */ for (clock = clock_table; clock->name != NULL; ++clock) { @@ -720,10 +720,10 @@ hdsp_sysctl_sync_status(SYSCTL_HANDLER_ARGS) return (ENXIO); /* Read current lock and sync bits from status registers. */ - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); status = hdsp_read_4(sc, HDSP_STATUS_REG); status2 = hdsp_read_4(sc, HDSP_STATUS2_REG); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); /* List clock sources with lock and sync state. */ for (clock = clock_table; clock->name != NULL; ++clock) { @@ -857,8 +857,8 @@ hdsp_attach(device_t dev) #endif sc = device_get_softc(dev); - sc->lock = snd_mtxcreate(device_get_nameunit(dev), - "snd_hdsp softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "snd_hdsp softc", + MTX_DEF); sc->dev = dev; pci_enable_busmaster(dev); @@ -999,8 +999,7 @@ hdsp_detach(device_t dev) bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq); if (sc->cs) bus_release_resource(dev, SYS_RES_MEMORY, PCIR_BAR(0), sc->cs); - if (sc->lock) - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); return (0); } diff --git a/sys/dev/sound/pci/hdsp.h b/sys/dev/sound/pci/hdsp.h index 8ac438cd79f9..18737709ec3f 100644 --- a/sys/dev/sound/pci/hdsp.h +++ b/sys/dev/sound/pci/hdsp.h @@ -223,7 +223,7 @@ struct sc_pcminfo { /* HDSP device private data */ struct sc_info { device_t dev; - struct mtx *lock; + struct mtx lock; uint32_t ctrl_register; uint32_t type; diff --git a/sys/dev/sound/pci/hdspe-pcm.c b/sys/dev/sound/pci/hdspe-pcm.c index 1c0a92e45b7a..d78820732639 100644 --- a/sys/dev/sound/pci/hdspe-pcm.c +++ b/sys/dev/sound/pci/hdspe-pcm.c @@ -305,10 +305,10 @@ hdspemixer_init(struct snd_mixer *m) if (hdspe_channel_rec_ports(scp->hc)) mask |= SOUND_MASK_RECLEV; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); pcm_setflags(scp->dev, pcm_getflags(scp->dev) | SD_F_SOFTPCMVOL); mix_setdevs(m, mask); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -667,7 +667,7 @@ hdspechan_free(kobj_t obj, void *data) device_printf(scp->dev, "hdspechan_free()\n"); #endif - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); if (ch->data != NULL) { free(ch->data, M_HDSPE); ch->data = NULL; @@ -676,7 +676,7 @@ hdspechan_free(kobj_t obj, void *data) free(ch->caps, M_HDSPE); ch->caps = NULL; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -693,7 +693,7 @@ hdspechan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, scp = devinfo; sc = scp->sc; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); num = scp->chnum; ch = &scp->chan[num]; @@ -729,7 +729,7 @@ hdspechan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, ch->dir = dir; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); if (sndbuf_setup(ch->buffer, ch->data, ch->size) != 0) { device_printf(scp->dev, "Can't setup sndbuf.\n"); @@ -751,7 +751,7 @@ hdspechan_trigger(kobj_t obj, void *data, int go) scp = ch->parent; sc = scp->sc; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); switch (go) { case PCMTRIG_START: #if 0 @@ -779,7 +779,7 @@ hdspechan_trigger(kobj_t obj, void *data, int go) break; } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); return (0); } @@ -796,9 +796,9 @@ hdspechan_getptr(kobj_t obj, void *data) scp = ch->parent; sc = scp->sc; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); ret = hdspe_read_2(sc, HDSPE_STATUS_REG); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); pos = ret & HDSPE_BUF_POSITION_MASK; pos *= AFMT_CHANNEL(ch->format); /* Hardbuf with multiple channels. */ @@ -946,12 +946,12 @@ hdspechan_setblocksize(kobj_t obj, void *data, uint32_t blocksize) } } - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->ctrl_register &= ~HDSPE_LAT_MASK; sc->ctrl_register |= hdspe_encode_latency(hl->n); hdspe_write_4(sc, HDSPE_CONTROL_REG, sc->ctrl_register); sc->period = hl->period; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); #if 0 device_printf(scp->dev, "New period=%d\n", sc->period); @@ -1025,9 +1025,9 @@ hdspe_pcm_intr(struct sc_pcminfo *scp) for (i = 0; i < scp->chnum; i++) { ch = &scp->chan[i]; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); chn_intr(ch->channel); - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); } return (0); diff --git a/sys/dev/sound/pci/hdspe.c b/sys/dev/sound/pci/hdspe.c index c292b2ddef56..f468111cb16e 100644 --- a/sys/dev/sound/pci/hdspe.c +++ b/sys/dev/sound/pci/hdspe.c @@ -119,7 +119,7 @@ hdspe_intr(void *p) sc = (struct sc_info *)p; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); status = hdspe_read_1(sc, HDSPE_STATUS_REG); if (status & HDSPE_AUDIO_IRQ_PENDING) { @@ -136,7 +136,7 @@ hdspe_intr(void *p) free(devlist, M_TEMP); } - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); } static void @@ -301,11 +301,11 @@ hdspe_sysctl_input_level(SYSCTL_HANDLER_ARGS) /* Set input level in settings register. */ settings &= HDSPE_INPUT_LEVEL_MASK; if (settings != (sc->settings_register & HDSPE_INPUT_LEVEL_MASK)) { - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->settings_register &= ~HDSPE_INPUT_LEVEL_MASK; sc->settings_register |= settings; hdspe_write_4(sc, HDSPE_SETTINGS_REG, sc->settings_register); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); } return (0); } @@ -365,11 +365,11 @@ hdspe_sysctl_output_level(SYSCTL_HANDLER_ARGS) /* Set output level in settings register. */ settings &= HDSPE_OUTPUT_LEVEL_MASK; if (settings != (sc->settings_register & HDSPE_OUTPUT_LEVEL_MASK)) { - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->settings_register &= ~HDSPE_OUTPUT_LEVEL_MASK; sc->settings_register |= settings; hdspe_write_4(sc, HDSPE_SETTINGS_REG, sc->settings_register); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); } return (0); } @@ -429,11 +429,11 @@ hdspe_sysctl_phones_level(SYSCTL_HANDLER_ARGS) /* Set phones level in settings register. */ settings &= HDSPE_PHONES_LEVEL_MASK; if (settings != (sc->settings_register & HDSPE_PHONES_LEVEL_MASK)) { - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->settings_register &= ~HDSPE_PHONES_LEVEL_MASK; sc->settings_register |= settings; hdspe_write_4(sc, HDSPE_SETTINGS_REG, sc->settings_register); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); } return (0); } @@ -540,11 +540,11 @@ hdspe_sysctl_clock_preference(SYSCTL_HANDLER_ARGS) /* Set preferred clock source in settings register. */ if (clock->name != NULL) { setting = clock->setting & HDSPE_SETTING_CLOCK_MASK; - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); sc->settings_register &= ~HDSPE_SETTING_CLOCK_MASK; sc->settings_register |= setting; hdspe_write_4(sc, HDSPE_SETTINGS_REG, sc->settings_register); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); } return (0); } @@ -568,10 +568,10 @@ hdspe_sysctl_clock_source(SYSCTL_HANDLER_ARGS) return (ENXIO); /* Read current (autosync) clock source from status register. */ - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); status = hdspe_read_4(sc, HDSPE_STATUS1_REG); status &= HDSPE_STATUS1_CLOCK_MASK; - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); /* Translate status register value to clock source. */ for (clock = clock_table; clock->name != NULL; ++clock) { @@ -640,9 +640,9 @@ hdspe_sysctl_sync_status(SYSCTL_HANDLER_ARGS) return (ENXIO); /* Read current lock and sync bits from status register. */ - snd_mtxlock(sc->lock); + mtx_lock(&sc->lock); status = hdspe_read_4(sc, HDSPE_STATUS1_REG); - snd_mtxunlock(sc->lock); + mtx_unlock(&sc->lock); /* List clock sources with lock and sync state. */ for (clock = clock_table; clock->name != NULL; ++clock) { @@ -749,8 +749,8 @@ hdspe_attach(device_t dev) #endif sc = device_get_softc(dev); - sc->lock = snd_mtxcreate(device_get_nameunit(dev), - "snd_hdspe softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "snd_hdspe softc", + MTX_DEF); sc->dev = dev; pci_enable_busmaster(dev); @@ -891,8 +891,7 @@ hdspe_detach(device_t dev) bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq); if (sc->cs) bus_release_resource(dev, SYS_RES_MEMORY, PCIR_BAR(0), sc->cs); - if (sc->lock) - snd_mtxfree(sc->lock); + mtx_destroy(&sc->lock); return (0); } diff --git a/sys/dev/sound/pci/hdspe.h b/sys/dev/sound/pci/hdspe.h index bced78758068..85acbe9f7374 100644 --- a/sys/dev/sound/pci/hdspe.h +++ b/sys/dev/sound/pci/hdspe.h @@ -214,7 +214,7 @@ struct sc_pcminfo { /* HDSPe device private data */ struct sc_info { device_t dev; - struct mtx *lock; + struct mtx lock; uint32_t ctrl_register; uint32_t settings_register; diff --git a/sys/dev/sound/pci/ich.c b/sys/dev/sound/pci/ich.c index 53f4db3332a8..7e7fe95dac8c 100644 --- a/sys/dev/sound/pci/ich.c +++ b/sys/dev/sound/pci/ich.c @@ -77,9 +77,9 @@ #define AMD_768 0x7445 #define AMD_8111 0x746d -#define ICH_LOCK(sc) snd_mtxlock((sc)->ich_lock) -#define ICH_UNLOCK(sc) snd_mtxunlock((sc)->ich_lock) -#define ICH_LOCK_ASSERT(sc) snd_mtxassert((sc)->ich_lock) +#define ICH_LOCK(sc) mtx_lock(&(sc)->ich_lock) +#define ICH_UNLOCK(sc) mtx_unlock(&(sc)->ich_lock) +#define ICH_LOCK_ASSERT(sc) mtx_assert(&(sc)->ich_lock, MA_OWNED) #if 0 #define ICH_DEBUG(stmt) do { \ @@ -196,7 +196,7 @@ struct sc_info { uint16_t vendor; uint16_t devid; uint32_t flags; - struct mtx *ich_lock; + struct mtx ich_lock; }; /* -------------------------------------------------------------------- */ @@ -888,7 +888,8 @@ ich_pci_attach(device_t dev) int i; sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); - sc->ich_lock = snd_mtxcreate(device_get_nameunit(dev), "snd_ich softc"); + mtx_init(&sc->ich_lock, device_get_nameunit(dev), "snd_ich softc", + MTX_DEF); sc->dev = dev; vendor = sc->vendor = pci_get_vendor(dev); @@ -1111,8 +1112,7 @@ bad: bus_dma_tag_destroy(sc->chan_dmat); if (sc->dmat) bus_dma_tag_destroy(sc->dmat); - if (sc->ich_lock) - snd_mtxfree(sc->ich_lock); + mtx_destroy(&sc->ich_lock); free(sc, M_DEVBUF); return (ENXIO); } @@ -1136,7 +1136,7 @@ ich_pci_detach(device_t dev) bus_dmamem_free(sc->dmat, sc->dtbl, sc->dtmap); bus_dma_tag_destroy(sc->chan_dmat); bus_dma_tag_destroy(sc->dmat); - snd_mtxfree(sc->ich_lock); + mtx_destroy(&sc->ich_lock); free(sc, M_DEVBUF); return (0); } diff --git a/sys/dev/sound/pci/maestro3.c b/sys/dev/sound/pci/maestro3.c index bad2b4eee1cd..a8a52601d1a2 100644 --- a/sys/dev/sound/pci/maestro3.c +++ b/sys/dev/sound/pci/maestro3.c @@ -156,12 +156,12 @@ struct sc_info { unsigned int bufsz; u_int16_t *savemem; - struct mtx *sc_lock; + struct mtx sc_lock; }; -#define M3_LOCK(_sc) snd_mtxlock((_sc)->sc_lock) -#define M3_UNLOCK(_sc) snd_mtxunlock((_sc)->sc_lock) -#define M3_LOCK_ASSERT(_sc) snd_mtxassert((_sc)->sc_lock) +#define M3_LOCK(_sc) mtx_lock(&(_sc)->sc_lock) +#define M3_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_lock) +#define M3_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_lock, MA_OWNED) /* -------------------------------------------------------------------- */ @@ -1325,8 +1325,8 @@ m3_pci_attach(device_t dev) sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO); sc->dev = dev; sc->type = pci_get_devid(dev); - sc->sc_lock = snd_mtxcreate(device_get_nameunit(dev), - "snd_maestro3 softc"); + mtx_init(&sc->sc_lock, device_get_nameunit(dev), "snd_maestro3 softc", + MTX_DEF); for (card = m3_card_types ; card->pci_id ; card++) { if (sc->type == card->pci_id) { sc->which = card->which; @@ -1465,8 +1465,7 @@ m3_pci_attach(device_t dev) bus_release_resource(dev, sc->regtype, sc->regid, sc->reg); if (sc->parent_dmat) bus_dma_tag_destroy(sc->parent_dmat); - if (sc->sc_lock) - snd_mtxfree(sc->sc_lock); + mtx_destroy(&sc->sc_lock); free(sc, M_DEVBUF); return ENXIO; } @@ -1494,7 +1493,7 @@ m3_pci_detach(device_t dev) bus_dma_tag_destroy(sc->parent_dmat); free(sc->savemem, M_DEVBUF); - snd_mtxfree(sc->sc_lock); + mtx_destroy(&sc->sc_lock); free(sc, M_DEVBUF); return 0; } diff --git a/sys/dev/sound/pci/solo.c b/sys/dev/sound/pci/solo.c index 8229b0cffdae..2b61b594a8f3 100644 --- a/sys/dev/sound/pci/solo.c +++ b/sys/dev/sound/pci/solo.c @@ -97,12 +97,12 @@ struct ess_info { unsigned int bufsz; struct ess_chinfo pch, rch; - struct mtx *lock; + struct mtx lock; }; -#define ess_lock(_ess) snd_mtxlock((_ess)->lock) -#define ess_unlock(_ess) snd_mtxunlock((_ess)->lock) -#define ess_lock_assert(_ess) snd_mtxassert((_ess)->lock) +#define ess_lock(_ess) mtx_lock(&(_ess)->lock) +#define ess_unlock(_ess) mtx_unlock(&(_ess)->lock) +#define ess_lock_assert(_ess) mtx_assert(&(_ess)->lock, MA_OWNED) static int ess_rd(struct ess_info *sc, int reg); static void ess_wr(struct ess_info *sc, int reg, u_int8_t val); @@ -855,10 +855,7 @@ ess_release_resources(struct ess_info *sc, device_t dev) sc->parent_dmat = 0; } - if (sc->lock) { - snd_mtxfree(sc->lock); - sc->lock = NULL; - } + mtx_destroy(&sc->lock); free(sc, M_DEVBUF); } @@ -887,10 +884,11 @@ ess_alloc_resources(struct ess_info *sc, device_t dev) sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE | RF_SHAREABLE); - sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_solo softc"); + mtx_init(&sc->lock, device_get_nameunit(dev), "snd_solo softc", + MTX_DEF); return (sc->irq && sc->io && sc->sb && sc->vc && - sc->mpu && sc->gp && sc->lock)? 0 : ENXIO; + sc->mpu && sc->gp)? 0 : ENXIO; } static int diff --git a/sys/dev/sound/pci/spicds.c b/sys/dev/sound/pci/spicds.c index da0e8d9da6d5..350034d8bafb 100644 --- a/sys/dev/sound/pci/spicds.c +++ b/sys/dev/sound/pci/spicds.c @@ -49,7 +49,7 @@ struct spicds_info { unsigned int dvc; /* De-emphasis and Volume Control */ unsigned int left, right; char name[SPICDS_NAMELEN]; - struct mtx *lock; + struct mtx lock; }; static void @@ -149,7 +149,7 @@ spicds_create(device_t dev, void *devinfo, int num, spicds_ctrl ctrl) return NULL; snprintf(codec->name, SPICDS_NAMELEN, "%s:spicds%d", device_get_nameunit(dev), num); - codec->lock = snd_mtxcreate(codec->name, codec->name); + mtx_init(&codec->lock, codec->name, codec->name, MTX_DEF); codec->dev = dev; codec->ctrl = ctrl; codec->devinfo = devinfo; @@ -165,40 +165,40 @@ spicds_create(device_t dev, void *devinfo, int num, spicds_ctrl ctrl) void spicds_destroy(struct spicds_info *codec) { - snd_mtxfree(codec->lock); + mtx_destroy(&codec->lock); free(codec, M_SPICDS); } void spicds_settype(struct spicds_info *codec, unsigned int type) { - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); codec->type = type; - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); } void spicds_setcif(struct spicds_info *codec, unsigned int cif) { - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); codec->cif = cif; - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); } void spicds_setformat(struct spicds_info *codec, unsigned int format) { - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); codec->format = format; - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); } void spicds_setdvc(struct spicds_info *codec, unsigned int dvc) { - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); codec->dvc = dvc; - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); } void @@ -207,7 +207,7 @@ spicds_init(struct spicds_info *codec) #if(0) device_printf(codec->dev, "spicds_init(codec)\n"); #endif - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); if (codec->type == SPICDS_TYPE_AK4524 ||\ codec->type == SPICDS_TYPE_AK4528) { /* power off */ @@ -244,13 +244,13 @@ spicds_init(struct spicds_info *codec) spicds_wrcd(codec, 0x00, 0x8f); /* I2S, 24bit, power-up */ if (codec->type == SPICDS_TYPE_AK4396) spicds_wrcd(codec, 0x00, 0x07); /* I2S, 24bit, power-up */ - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); } void spicds_reinit(struct spicds_info *codec) { - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); if (codec->type != SPICDS_TYPE_WM8770) { /* reset */ spicds_wrcd(codec, AK4524_RESET, 0); @@ -265,7 +265,7 @@ spicds_reinit(struct spicds_info *codec) /* AK4358 reinit */ /* AK4381 reinit */ } - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); } void @@ -274,7 +274,7 @@ spicds_set(struct spicds_info *codec, int dir, unsigned int left, unsigned int r #if(0) device_printf(codec->dev, "spicds_set(codec, %d, %d, %d)\n", dir, left, right); #endif - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); if (left >= 100) if ((codec->type == SPICDS_TYPE_AK4381) || \ (codec->type == SPICDS_TYPE_AK4396)) @@ -362,7 +362,7 @@ spicds_set(struct spicds_info *codec, int dir, unsigned int left, unsigned int r spicds_wrcd(codec, AK4396_ROATT, right); } - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); } MODULE_DEPEND(snd_spicds, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER); diff --git a/sys/dev/sound/pci/t4dwave.c b/sys/dev/sound/pci/t4dwave.c index 874d1c7a2e2a..1b659118b840 100644 --- a/sys/dev/sound/pci/t4dwave.c +++ b/sys/dev/sound/pci/t4dwave.c @@ -99,7 +99,7 @@ struct tr_info { int regtype, regid, irqid; void *ih; - struct mtx *lock; + struct mtx lock; u_int32_t hwchns; u_int32_t playchns; @@ -209,7 +209,7 @@ tr_rdcd(kobj_t obj, void *devinfo, int regno) i = j = 0; regno &= 0x7f; - snd_mtxlock(tr->lock); + mtx_lock(&tr->lock); if (tr->type == ALI_PCI_ID) { u_int32_t chk1, chk2; j = trw; @@ -229,7 +229,7 @@ tr_rdcd(kobj_t obj, void *devinfo, int regno) for (i=TR_TIMEOUT_CDC; (i > 0) && (j & trw); i--) j=tr_rd(tr, treg, 4); } - snd_mtxunlock(tr->lock); + mtx_unlock(&tr->lock); if (i == 0) printf("codec timeout during read of register %x\n", regno); return (j >> TR_CDC_DATA) & 0xffff; } @@ -266,7 +266,7 @@ tr_wrcd(kobj_t obj, void *devinfo, int regno, u_int32_t data) printf("tr_wrcd: reg %x was %x", regno, tr_rdcd(devinfo, regno)); #endif j=trw; - snd_mtxlock(tr->lock); + mtx_lock(&tr->lock); if (tr->type == ALI_PCI_ID) { j = trw; for (i = TR_TIMEOUT_CDC; (i > 0) && (j & trw); i--) @@ -290,7 +290,7 @@ tr_wrcd(kobj_t obj, void *devinfo, int regno, u_int32_t data) #if 0 printf(" - wrote %x, now %x\n", data, tr_rdcd(devinfo, regno)); #endif - snd_mtxunlock(tr->lock); + mtx_unlock(&tr->lock); if (i==0) printf("codec timeout writing %x, data %x\n", regno, data); return (i > 0)? 0 : -1; } @@ -336,7 +336,7 @@ tr_enaint(struct tr_chinfo *ch, int enable) u_int32_t i, reg; int bank, chan; - snd_mtxlock(tr->lock); + mtx_lock(&tr->lock); bank = (ch->index & 0x20) ? 1 : 0; chan = ch->index & 0x1f; reg = bank? TR_REG_INTENB : TR_REG_INTENA; @@ -347,7 +347,7 @@ tr_enaint(struct tr_chinfo *ch, int enable) tr_clrint(ch); tr_wr(tr, reg, i, 4); - snd_mtxunlock(tr->lock); + mtx_unlock(&tr->lock); } /* playback channels */ @@ -429,11 +429,11 @@ tr_wrch(struct tr_chinfo *ch) cr[3]|=(ch->alpha<<20) | (ch->fms<<16) | (ch->fmc<<14); break; } - snd_mtxlock(tr->lock); + mtx_lock(&tr->lock); tr_selch(ch); for (i=0; i<TR_CHN_REGS; i++) tr_wr(tr, TR_REG_CHNBASE+(i<<2), cr[i], 4); - snd_mtxunlock(tr->lock); + mtx_unlock(&tr->lock); } static void @@ -442,11 +442,11 @@ tr_rdch(struct tr_chinfo *ch) struct tr_info *tr = ch->parent; u_int32_t cr[5], i; - snd_mtxlock(tr->lock); + mtx_lock(&tr->lock); tr_selch(ch); for (i=0; i<5; i++) cr[i]=tr_rd(tr, TR_REG_CHNBASE+(i<<2), 4); - snd_mtxunlock(tr->lock); + mtx_unlock(&tr->lock); if (tr->type == ALI_PCI_ID) ch->lba=(cr[1] & ALI_MAXADDR); @@ -830,7 +830,8 @@ tr_pci_attach(device_t dev) tr = malloc(sizeof(*tr), M_DEVBUF, M_WAITOK | M_ZERO); tr->type = pci_get_devid(dev); tr->rev = pci_get_revid(dev); - tr->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_t4dwave softc"); + mtx_init(&tr->lock, device_get_nameunit(dev), "snd_t4dwave softc", + MTX_DEF); if (resource_int_value(device_get_name(dev), device_get_unit(dev), "dac", &i) == 0) { @@ -936,7 +937,7 @@ bad: if (tr->ih) bus_teardown_intr(dev, tr->irq, tr->ih); if (tr->irq) bus_release_resource(dev, SYS_RES_IRQ, tr->irqid, tr->irq); if (tr->parent_dmat) bus_dma_tag_destroy(tr->parent_dmat); - if (tr->lock) snd_mtxfree(tr->lock); + mtx_destroy(&tr->lock); free(tr, M_DEVBUF); return ENXIO; } @@ -956,7 +957,7 @@ tr_pci_detach(device_t dev) bus_teardown_intr(dev, tr->irq, tr->ih); bus_release_resource(dev, SYS_RES_IRQ, tr->irqid, tr->irq); bus_dma_tag_destroy(tr->parent_dmat); - snd_mtxfree(tr->lock); + mtx_destroy(&tr->lock); free(tr, M_DEVBUF); return 0; diff --git a/sys/dev/sound/pci/via8233.c b/sys/dev/sound/pci/via8233.c index 47caa7ea4459..6c59397756e0 100644 --- a/sys/dev/sound/pci/via8233.c +++ b/sys/dev/sound/pci/via8233.c @@ -121,7 +121,7 @@ struct via_info { uint16_t codec_caps; uint16_t n_dxs_registered; int play_num, rec_num; - struct mtx *lock; + struct mtx lock; struct callout poll_timer; int poll_ticks, polling; }; @@ -164,9 +164,9 @@ sysctl_via8233_spdif_enable(SYSCTL_HANDLER_ARGS) dev = oidp->oid_arg1; via = pcm_getdevinfo(dev); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); r = pci_read_config(dev, VIA_PCI_SPDIF, 1); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); new_en = (r & VIA_SPDIF_EN) ? 1 : 0; err = sysctl_handle_int(oidp, &new_en, 0, req); @@ -179,9 +179,9 @@ sysctl_via8233_spdif_enable(SYSCTL_HANDLER_ARGS) r |= VIA_SPDIF_EN; else r &= ~VIA_SPDIF_EN; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); pci_write_config(dev, VIA_PCI_SPDIF, r, 1); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return (0); } @@ -195,9 +195,9 @@ sysctl_via8233_dxs_src(SYSCTL_HANDLER_ARGS) dev = oidp->oid_arg1; via = pcm_getdevinfo(dev); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); val = via->dxs_src; - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); err = sysctl_handle_int(oidp, &val, 0, req); if (err || req->newptr == NULL) @@ -205,9 +205,9 @@ sysctl_via8233_dxs_src(SYSCTL_HANDLER_ARGS) if (val < 0 || val > 1) return (EINVAL); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); via->dxs_src = val; - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return (0); } @@ -223,9 +223,9 @@ sysctl_via_polling(SYSCTL_HANDLER_ARGS) via = pcm_getdevinfo(dev); if (via == NULL) return (EINVAL); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); val = via->polling; - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); err = sysctl_handle_int(oidp, &val, 0, req); if (err || req->newptr == NULL) @@ -233,7 +233,7 @@ sysctl_via_polling(SYSCTL_HANDLER_ARGS) if (val < 0 || val > 1) return (EINVAL); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); if (val != via->polling) { if (via_chan_active(via) != 0) err = EBUSY; @@ -242,7 +242,7 @@ sysctl_via_polling(SYSCTL_HANDLER_ARGS) else via->polling = 1; } - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return (err); } @@ -411,9 +411,9 @@ via8233wr_setformat(kobj_t obj, void *data, uint32_t format) f |= WR_FORMAT_STEREO; if (format & AFMT_S16_LE) f |= WR_FORMAT_16BIT; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); via_wr(via, VIA_WR0_FORMAT, f, 4); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return (0); } @@ -426,7 +426,7 @@ via8233dxs_setformat(kobj_t obj, void *data, uint32_t format) uint32_t r, v; r = ch->rbase + VIA8233_RP_DXS_RATEFMT; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); v = via_rd(via, r, 4); v &= ~(VIA8233_DXS_RATEFMT_STEREO | VIA8233_DXS_RATEFMT_16BIT); @@ -435,7 +435,7 @@ via8233dxs_setformat(kobj_t obj, void *data, uint32_t format) if (format & AFMT_16BIT) v |= VIA8233_DXS_RATEFMT_16BIT; via_wr(via, r, v, 4); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return (0); } @@ -457,10 +457,10 @@ via8233msgd_setformat(kobj_t obj, void *data, uint32_t format) s |= SLOT3(1) | SLOT4(1); } - snd_mtxlock(via->lock); + mtx_lock(&via->lock); via_wr(via, VIA_MC_SLOT_SELECT, s, 4); via_wr(via, VIA_MC_SGD_FORMAT, v, 1); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return (0); } @@ -488,14 +488,14 @@ via8233dxs_setspeed(kobj_t obj, void *data, uint32_t speed) uint32_t r, v; r = ch->rbase + VIA8233_RP_DXS_RATEFMT; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); v = via_rd(via, r, 4) & ~VIA8233_DXS_RATEFMT_48K; /* Careful to avoid overflow (divide by 48 per vt8233c docs) */ v |= VIA8233_DXS_RATEFMT_48K * (speed / 48) / (48000 / 48); via_wr(via, r, v, 4); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return (speed); } @@ -616,13 +616,13 @@ via8233chan_getptr(kobj_t obj, void *data) struct via_info *via = ch->parent; uint32_t v, index, count, ptr; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); if (via->polling != 0) { ptr = ch->ptr; - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); } else { v = via_rd(via, ch->rbase + VIA_RP_CURRENT_COUNT, 4); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); index = v >> 24; /* Last completed buffer */ count = v & 0x00ffffff; /* Bytes remaining */ ptr = (index + 1) * ch->blksz - count; @@ -660,7 +660,7 @@ via8233wr_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct via_chinfo *ch; int num; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); num = via->rec_num++; ch = &via->rch[num]; ch->parent = via; @@ -670,15 +670,15 @@ via8233wr_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, ch->blkcnt = via->blkcnt; ch->rbase = VIA_WR_BASE(num); via_wr(via, ch->rbase + VIA_WR_RP_SGD_FORMAT, WR_FIFO_ENABLE, 1); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); if (sndbuf_alloc(ch->buffer, via->parent_dmat, 0, via->bufsz) != 0) return (NULL); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); via8233chan_sgdinit(via, ch, num); via8233chan_reset(via, ch); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return (ch); } @@ -691,7 +691,7 @@ via8233dxs_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct via_chinfo *ch; int num; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); num = via->play_num++; ch = &via->pch[num]; ch->parent = via; @@ -707,15 +707,15 @@ via8233dxs_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, */ ch->rbase = VIA_DXS_BASE(NDXSCHANS - 1 - via->n_dxs_registered); via->n_dxs_registered++; - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); if (sndbuf_alloc(ch->buffer, via->parent_dmat, 0, via->bufsz) != 0) return (NULL); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); via8233chan_sgdinit(via, ch, NWRCHANS + num); via8233chan_reset(via, ch); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return (ch); } @@ -728,7 +728,7 @@ via8233msgd_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct via_chinfo *ch; int num; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); num = via->play_num++; ch = &via->pch[num]; ch->parent = via; @@ -737,15 +737,15 @@ via8233msgd_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, ch->dir = dir; ch->rbase = VIA_MC_SGD_STATUS; ch->blkcnt = via->blkcnt; - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); if (sndbuf_alloc(ch->buffer, via->parent_dmat, 0, via->bufsz) != 0) return (NULL); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); via8233chan_sgdinit(via, ch, NWRCHANS + num); via8233chan_reset(via, ch); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return (ch); } @@ -807,9 +807,9 @@ via_poll_callback(void *arg) if (via == NULL) return; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); if (via->polling == 0 || via_chan_active(via) == 0) { - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return; } @@ -825,7 +825,7 @@ via_poll_callback(void *arg) callout_reset(&via->poll_timer, 1/*via->poll_ticks*/, via_poll_callback, via); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); for (i = 0; i < NDXSCHANS + NMSGDCHANS; i++) { if (ptrigger & (1 << i)) @@ -888,7 +888,7 @@ via8233chan_trigger(kobj_t obj, void* data, int go) if (!PCMTRIG_COMMON(go)) return (0); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); switch(go) { case PCMTRIG_START: via_buildsgdt(ch); @@ -957,7 +957,7 @@ via8233chan_trigger(kobj_t obj, void* data, int go) default: break; } - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return (0); } @@ -1009,9 +1009,9 @@ via_intr(void *p) uint32_t ptrigger = 0, rtrigger = 0; int i, reg, stat; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); if (via->polling != 0) { - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return; } /* Poll playback channels */ @@ -1046,7 +1046,7 @@ via_intr(void *p) rtrigger |= 1 << i; } } - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); for (i = 0; i < NDXSCHANS + NMSGDCHANS; i++) { if (ptrigger & (1 << i)) @@ -1168,8 +1168,8 @@ via_attach(device_t dev) uint32_t revid; via = malloc(sizeof *via, M_DEVBUF, M_WAITOK | M_ZERO); - via->lock = snd_mtxcreate(device_get_nameunit(dev), - "snd_via8233 softc"); + mtx_init(&via->lock, device_get_nameunit(dev), "snd_via8233 softc", + MTX_DEF); via->dev = dev; callout_init(&via->poll_timer, 1); @@ -1384,8 +1384,7 @@ bad: bus_dmamem_free(via->sgd_dmat, via->sgd_table, via->sgd_dmamap); if (via->sgd_dmat) bus_dma_tag_destroy(via->sgd_dmat); - if (via->lock) - snd_mtxfree(via->lock); + mtx_destroy(&via->lock); if (via) free(via, M_DEVBUF); return (ENXIO); @@ -1404,10 +1403,10 @@ via_detach(device_t dev) via = pcm_getdevinfo(dev); if (via != NULL && (via->play_num != 0 || via->rec_num != 0)) { - snd_mtxlock(via->lock); + mtx_lock(&via->lock); via->polling = 0; callout_stop(&via->poll_timer); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); callout_drain(&via->poll_timer); } @@ -1418,7 +1417,7 @@ via_detach(device_t dev) bus_dmamap_unload(via->sgd_dmat, via->sgd_dmamap); bus_dmamem_free(via->sgd_dmat, via->sgd_table, via->sgd_dmamap); bus_dma_tag_destroy(via->sgd_dmat); - snd_mtxfree(via->lock); + mtx_destroy(&via->lock); free(via, M_DEVBUF); return (0); } diff --git a/sys/dev/sound/pci/via82c686.c b/sys/dev/sound/pci/via82c686.c index 34b52d0bdd58..fe34583b1a25 100644 --- a/sys/dev/sound/pci/via82c686.c +++ b/sys/dev/sound/pci/via82c686.c @@ -90,7 +90,7 @@ struct via_info { struct via_chinfo pch, rch; struct via_dma_op *sgd_table; u_int16_t codec_caps; - struct mtx *lock; + struct mtx lock; }; static u_int32_t via_fmt[] = { @@ -245,7 +245,7 @@ viachan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel * struct via_info *via = devinfo; struct via_chinfo *ch; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); if (dir == PCMDIR_PLAY) { ch = &via->pch; ch->base = VIA_PLAY_DMAOPS_BASE; @@ -268,7 +268,7 @@ viachan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel * ch->channel = c; ch->buffer = b; ch->dir = dir; - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); if (sndbuf_alloc(ch->buffer, via->parent_dmat, 0, via->bufsz) != 0) return NULL; @@ -290,12 +290,12 @@ viachan_setformat(kobj_t obj, void *data, u_int32_t format) mode_set |= VIA_RPMODE_16BIT; DEB(printf("set format: dir = %d, format=%x\n", ch->dir, format)); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); mode = via_rd(via, ch->mode, 1); mode &= ~(VIA_RPMODE_16BIT | VIA_RPMODE_STEREO); mode |= mode_set; via_wr(via, ch->mode, mode, 1); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); return 0; } @@ -346,14 +346,14 @@ viachan_trigger(kobj_t obj, void *data, int go) DEB(printf("ado located at va=%p pa=%x\n", ch->sgd_table, sgd_addr)); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); if (go == PCMTRIG_START) { via_buildsgdt(ch); via_wr(via, ch->base, sgd_addr, 4); via_wr(via, ch->ctrl, VIA_RPCTRL_START, 1); } else via_wr(via, ch->ctrl, VIA_RPCTRL_TERMINATE, 1); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); DEB(printf("viachan_trigger: go=%d\n", go)); return 0; @@ -367,13 +367,13 @@ viachan_getptr(kobj_t obj, void *data) bus_addr_t sgd_addr = ch->sgd_addr; u_int32_t ptr, base, base1, len, seg; - snd_mtxlock(via->lock); + mtx_lock(&via->lock); base1 = via_rd(via, ch->base, 4); len = via_rd(via, ch->count, 4); base = via_rd(via, ch->base, 4); if (base != base1) /* Avoid race hazard */ len = via_rd(via, ch->count, 4); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); DEB(printf("viachan_getptr: len / base = %x / %x\n", len, base)); @@ -426,22 +426,22 @@ via_intr(void *p) /* DEB(printf("viachan_intr\n")); */ /* Read channel */ - snd_mtxlock(via->lock); + mtx_lock(&via->lock); if (via_rd(via, VIA_PLAY_STAT, 1) & VIA_RPSTAT_INTR) { via_wr(via, VIA_PLAY_STAT, VIA_RPSTAT_INTR, 1); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); chn_intr(via->pch.channel); - snd_mtxlock(via->lock); + mtx_lock(&via->lock); } /* Write channel */ if (via_rd(via, VIA_RECORD_STAT, 1) & VIA_RPSTAT_INTR) { via_wr(via, VIA_RECORD_STAT, VIA_RPSTAT_INTR, 1); - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); chn_intr(via->rch.channel); return; } - snd_mtxunlock(via->lock); + mtx_unlock(&via->lock); } /* @@ -472,8 +472,8 @@ via_attach(device_t dev) u_int32_t data, cnt; via = malloc(sizeof(*via), M_DEVBUF, M_WAITOK | M_ZERO); - via->lock = snd_mtxcreate(device_get_nameunit(dev), - "snd_via82c686 softc"); + mtx_init(&via->lock, device_get_nameunit(dev), "snd_via82c686 softc", + MTX_DEF); pci_enable_busmaster(dev); @@ -600,7 +600,7 @@ bad: if (via->sgd_addr) bus_dmamap_unload(via->sgd_dmat, via->sgd_dmamap); if (via->sgd_table) bus_dmamem_free(via->sgd_dmat, via->sgd_table, via->sgd_dmamap); if (via->sgd_dmat) bus_dma_tag_destroy(via->sgd_dmat); - if (via->lock) snd_mtxfree(via->lock); + mtx_destroy(&via->lock); if (via) free(via, M_DEVBUF); return ENXIO; } @@ -623,7 +623,7 @@ via_detach(device_t dev) bus_dmamap_unload(via->sgd_dmat, via->sgd_dmamap); bus_dmamem_free(via->sgd_dmat, via->sgd_table, via->sgd_dmamap); bus_dma_tag_destroy(via->sgd_dmat); - snd_mtxfree(via->lock); + mtx_destroy(&via->lock); free(via, M_DEVBUF); return 0; } diff --git a/sys/dev/sound/pcm/ac97.c b/sys/dev/sound/pcm/ac97.c index f5ca06cd3942..14ff2f6a62ab 100644 --- a/sys/dev/sound/pcm/ac97.c +++ b/sys/dev/sound/pcm/ac97.c @@ -65,7 +65,7 @@ struct ac97_info { u_int32_t flags; struct ac97mixtable_entry mix[AC97_MIXER_SIZE]; char name[16]; - struct mtx *lock; + struct mtx lock; }; struct ac97_vendorid { @@ -364,7 +364,7 @@ ac97_setrate(struct ac97_info *codec, int which, int rate) return -1; } - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); if (rate != 0) { v = rate; if (codec->extstat & AC97_EXTCAP_DRA) @@ -374,7 +374,7 @@ ac97_setrate(struct ac97_info *codec, int which, int rate) v = ac97_rdcd(codec, which); if (codec->extstat & AC97_EXTCAP_DRA) v <<= 1; - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); return v; } @@ -387,10 +387,10 @@ ac97_setextmode(struct ac97_info *codec, u_int16_t mode) mode); return -1; } - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); ac97_wrcd(codec, AC97_REGEXT_STAT, mode); codec->extstat = ac97_rdcd(codec, AC97_REGEXT_STAT) & AC97_EXTCAPS; - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); return (mode == codec->extstat)? 0 : -1; } @@ -426,9 +426,9 @@ ac97_setrecsrc(struct ac97_info *codec, int channel) if (e->recidx > 0) { int val = e->recidx - 1; val |= val << 8; - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); ac97_wrcd(codec, AC97_REG_RECSEL, val); - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); return 0; } else return -1; @@ -497,13 +497,13 @@ ac97_setmixer(struct ac97_info *codec, unsigned channel, unsigned left, unsigned /* * If the mask bit is set, do not alter the other bits. */ - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); if (e->mask) { int cur = ac97_rdcd(codec, reg); val |= cur & ~(mask); } ac97_wrcd(codec, reg, val); - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); return left | (right << 8); } else { return -1; @@ -603,11 +603,11 @@ ac97_initmixer(struct ac97_info *codec) u_int32_t id; int reg; - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); codec->count = AC97_INIT(codec->methods, codec->devinfo); if (codec->count == 0) { device_printf(codec->dev, "ac97 codec init failed\n"); - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); return ENODEV; } @@ -633,7 +633,7 @@ ac97_initmixer(struct ac97_info *codec) id = (ac97_rdcd(codec, AC97_REG_ID1) << 16) | ac97_rdcd(codec, AC97_REG_ID2); if (id == 0 || id == 0xffffffff) { device_printf(codec->dev, "ac97 codec invalid or not present (id == %x)\n", id); - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); return ENODEV; } @@ -780,18 +780,18 @@ ac97_initmixer(struct ac97_info *codec) } if (bootverbose) device_printf(codec->dev, "ac97 codec dac ready count: %d\n", i); - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); return 0; } static unsigned ac97_reinitmixer(struct ac97_info *codec) { - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); codec->count = AC97_INIT(codec->methods, codec->devinfo); if (codec->count == 0) { device_printf(codec->dev, "ac97 codec init failed\n"); - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); return ENODEV; } @@ -811,7 +811,7 @@ ac97_reinitmixer(struct ac97_info *codec) if ((ac97_rdcd(codec, AC97_REG_POWER) & 2) == 0) device_printf(codec->dev, "ac97 codec reports dac not ready\n"); - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); return 0; } @@ -824,7 +824,7 @@ ac97_create(device_t dev, void *devinfo, kobj_class_t cls) codec = malloc(sizeof(*codec), M_AC97, M_WAITOK | M_ZERO); snprintf(codec->name, sizeof(codec->name), "%s:ac97", device_get_nameunit(dev)); - codec->lock = snd_mtxcreate(codec->name, "ac97 codec"); + mtx_init(&codec->lock, codec->name, "ac97 codec", MTX_DEF); codec->methods = kobj_create(cls, M_AC97, M_WAITOK | M_ZERO); codec->dev = dev; codec->devinfo = devinfo; @@ -844,10 +844,10 @@ ac97_create(device_t dev, void *devinfo, kobj_class_t cls) void ac97_destroy(struct ac97_info *codec) { - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); if (codec->methods != NULL) kobj_delete(codec->methods, M_AC97); - snd_mtxfree(codec->lock); + mtx_destroy(&codec->lock); free(codec, M_AC97); } @@ -960,21 +960,21 @@ sysctl_hw_snd_ac97_eapd(SYSCTL_HANDLER_ARGS) u_int16_t val; codec = oidp->oid_arg1; - if (codec == NULL || codec->id == 0 || codec->lock == NULL) + if (codec == NULL || codec->id == 0) return EINVAL; - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); val = ac97_rdcd(codec, AC97_REG_POWER); inv = (codec->flags & AC97_F_EAPD_INV) ? 0 : 1; ea = (val >> 15) ^ inv; - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); err = sysctl_handle_int(oidp, &ea, 0, req); if (err == 0 && req->newptr != NULL) { if (ea != 0 && ea != 1) return EINVAL; if (ea != ((val >> 15) ^ inv)) { - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); ac97_wrcd(codec, AC97_REG_POWER, val ^ 0x8000); - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); } } return err; @@ -987,12 +987,12 @@ ac97_init_sysctl(struct ac97_info *codec) if (codec == NULL || codec->dev == NULL) return; - snd_mtxlock(codec->lock); + mtx_lock(&codec->lock); orig = ac97_rdcd(codec, AC97_REG_POWER); ac97_wrcd(codec, AC97_REG_POWER, orig ^ 0x8000); val = ac97_rdcd(codec, AC97_REG_POWER); ac97_wrcd(codec, AC97_REG_POWER, orig); - snd_mtxunlock(codec->lock); + mtx_unlock(&codec->lock); if ((val & 0x8000) == (orig & 0x8000)) return; SYSCTL_ADD_PROC(device_get_sysctl_ctx(codec->dev), diff --git a/sys/dev/sound/pcm/channel.c b/sys/dev/sound/pcm/channel.c index e92181d74e19..011dc1427c2e 100644 --- a/sys/dev/sound/pcm/channel.c +++ b/sys/dev/sound/pcm/channel.c @@ -228,19 +228,21 @@ chn_lockinit(struct pcm_channel *c, int dir) { switch (dir) { case PCMDIR_PLAY: - c->lock = snd_mtxcreate(c->name, "pcm play channel"); + mtx_init(&c->lock, c->name, "pcm play channel", MTX_DEF); cv_init(&c->intr_cv, "pcmwr"); break; case PCMDIR_PLAY_VIRTUAL: - c->lock = snd_mtxcreate(c->name, "pcm virtual play channel"); + mtx_init(&c->lock, c->name, "pcm virtual play channel", + MTX_DEF); cv_init(&c->intr_cv, "pcmwrv"); break; case PCMDIR_REC: - c->lock = snd_mtxcreate(c->name, "pcm record channel"); + mtx_init(&c->lock, c->name, "pcm record channel", MTX_DEF); cv_init(&c->intr_cv, "pcmrd"); break; case PCMDIR_REC_VIRTUAL: - c->lock = snd_mtxcreate(c->name, "pcm virtual record channel"); + mtx_init(&c->lock, c->name, "pcm virtual record channel", + MTX_DEF); cv_init(&c->intr_cv, "pcmrdv"); break; default: @@ -262,7 +264,7 @@ chn_lockdestroy(struct pcm_channel *c) cv_destroy(&c->cv); cv_destroy(&c->intr_cv); - snd_mtxfree(c->lock); + mtx_destroy(&c->lock); } /** @@ -337,7 +339,7 @@ chn_sleep(struct pcm_channel *c, int timeout) return (EINVAL); c->sleeping++; - ret = cv_timedwait_sig(&c->intr_cv, c->lock, timeout); + ret = cv_timedwait_sig(&c->intr_cv, &c->lock, timeout); c->sleeping--; return ((c->flags & CHN_F_DEAD) ? EINVAL : ret); @@ -579,30 +581,14 @@ chn_read(struct pcm_channel *c, struct uio *buf) } void -chn_intr_locked(struct pcm_channel *c) +chn_intr(struct pcm_channel *c) { - - CHN_LOCKASSERT(c); - + CHN_LOCK(c); c->interrupts++; - if (c->direction == PCMDIR_PLAY) chn_wrintr(c); else chn_rdintr(c); -} - -void -chn_intr(struct pcm_channel *c) -{ - - if (CHN_LOCKOWNED(c)) { - chn_intr_locked(c); - return; - } - - CHN_LOCK(c); - chn_intr_locked(c); CHN_UNLOCK(c); } @@ -1251,7 +1237,7 @@ chn_init(struct snddev_info *d, struct pcm_channel *parent, kobj_class_t cls, } c->bufhard = b; c->bufsoft = bs; - knlist_init_mtx(&bs->sel.si_note, c->lock); + knlist_init_mtx(&bs->sel.si_note, &c->lock); c->devinfo = CHANNEL_INIT(c->methods, devinfo, b, c, direction); if (c->devinfo == NULL) { diff --git a/sys/dev/sound/pcm/channel.h b/sys/dev/sound/pcm/channel.h index 15180bc8f0b6..6415f5c88984 100644 --- a/sys/dev/sound/pcm/channel.h +++ b/sys/dev/sound/pcm/channel.h @@ -110,7 +110,7 @@ struct pcm_channel { int type; char name[CHN_NAMELEN]; char comm[MAXCOMLEN + 1]; - struct mtx *lock; + struct mtx lock; int trigger; /** * For interrupt manipulations. @@ -298,7 +298,6 @@ int chn_oss_setorder(struct pcm_channel *, unsigned long long *); int chn_oss_getmask(struct pcm_channel *, uint32_t *); void chn_resetbuf(struct pcm_channel *c); -void chn_intr_locked(struct pcm_channel *c); void chn_intr(struct pcm_channel *c); int chn_abort(struct pcm_channel *c); @@ -320,12 +319,12 @@ int chn_syncdestroy(struct pcm_channel *c); int chn_getpeaks(struct pcm_channel *c, int *lpeak, int *rpeak); #endif -#define CHN_LOCKOWNED(c) mtx_owned((c)->lock) -#define CHN_LOCK(c) mtx_lock((c)->lock) -#define CHN_UNLOCK(c) mtx_unlock((c)->lock) -#define CHN_TRYLOCK(c) mtx_trylock((c)->lock) -#define CHN_LOCKASSERT(c) mtx_assert((c)->lock, MA_OWNED) -#define CHN_UNLOCKASSERT(c) mtx_assert((c)->lock, MA_NOTOWNED) +#define CHN_LOCKOWNED(c) mtx_owned(&(c)->lock) +#define CHN_LOCK(c) mtx_lock(&(c)->lock) +#define CHN_UNLOCK(c) mtx_unlock(&(c)->lock) +#define CHN_TRYLOCK(c) mtx_trylock(&(c)->lock) +#define CHN_LOCKASSERT(c) mtx_assert(&(c)->lock, MA_OWNED) +#define CHN_UNLOCKASSERT(c) mtx_assert(&(c)->lock, MA_NOTOWNED) #define CHN_BROADCAST(x) cv_broadcastpri(x, PRIBIO) diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c index 1ae090f252c2..62db4592f206 100644 --- a/sys/dev/sound/pcm/dsp.c +++ b/sys/dev/sound/pcm/dsp.c @@ -464,8 +464,7 @@ dsp_io_ops(struct dsp_cdevpriv *priv, struct uio *buf) struct snddev_info *d; struct pcm_channel *ch; int (*chn_io)(struct pcm_channel *, struct uio *); - int prio, ret; - pid_t runpid; + int ret; d = priv->sc; if (!DSP_REGISTERED(d)) @@ -475,37 +474,27 @@ dsp_io_ops(struct dsp_cdevpriv *priv, struct uio *buf) switch (buf->uio_rw) { case UIO_READ: - prio = FREAD; ch = priv->rdch; chn_io = chn_read; break; case UIO_WRITE: - prio = FWRITE; ch = priv->wrch; chn_io = chn_write; break; } - - runpid = buf->uio_td->td_proc->p_pid; - - dsp_lock_chans(priv, prio); - - if (ch == NULL || !(ch->flags & CHN_F_BUSY)) { - if (priv->rdch != NULL || priv->wrch != NULL) - dsp_unlock_chans(priv, prio); + if (ch == NULL) { PCM_GIANT_EXIT(d); - return (EBADF); + return (ENXIO); } + CHN_LOCK(ch); - if (ch->flags & (CHN_F_MMAP | CHN_F_DEAD) || - (ch->flags & CHN_F_RUNNING && ch->pid != runpid)) { - dsp_unlock_chans(priv, prio); + if (!(ch->flags & CHN_F_BUSY) || + (ch->flags & (CHN_F_MMAP | CHN_F_DEAD))) { + CHN_UNLOCK(ch); PCM_GIANT_EXIT(d); - return (EINVAL); - } else if (!(ch->flags & CHN_F_RUNNING)) { + return (ENXIO); + } else if (!(ch->flags & CHN_F_RUNNING)) ch->flags |= CHN_F_RUNNING; - ch->pid = runpid; - } /* * chn_read/write must give up channel lock in order to copy bytes @@ -517,8 +506,7 @@ dsp_io_ops(struct dsp_cdevpriv *priv, struct uio *buf) ch->inprog--; CHN_BROADCAST(&ch->cv); - - dsp_unlock_chans(priv, prio); + CHN_UNLOCK(ch); PCM_GIANT_LEAVE(d); @@ -1609,7 +1597,7 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, struct snd_dbuf *bs; CHN_LOCK(wrch); while (wrch->inprog != 0) - cv_wait(&wrch->cv, wrch->lock); + cv_wait(&wrch->cv, &wrch->lock); bs = wrch->bufsoft; if ((bs->shadbuf != NULL) && (sndbuf_getready(bs) > 0)) { bs->sl = sndbuf_getready(bs); @@ -1633,7 +1621,7 @@ dsp_ioctl(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, struct snd_dbuf *bs; CHN_LOCK(wrch); while (wrch->inprog != 0) - cv_wait(&wrch->cv, wrch->lock); + cv_wait(&wrch->cv, &wrch->lock); bs = wrch->bufsoft; if ((bs->shadbuf != NULL) && (bs->sl > 0)) { sndbuf_softreset(bs); diff --git a/sys/dev/sound/pcm/mixer.c b/sys/dev/sound/pcm/mixer.c index adbde195c34c..55ce9596dde9 100644 --- a/sys/dev/sound/pcm/mixer.c +++ b/sys/dev/sound/pcm/mixer.c @@ -63,7 +63,7 @@ struct snd_mixer { u_int32_t child[32]; u_int8_t realdev[32]; char name[MIXER_NAMELEN]; - struct mtx *lock; + struct mtx lock; oss_mixer_enuminfo enuminfo; int modify_counter; }; @@ -126,12 +126,12 @@ mixer_lookup(char *devname) #define MIXER_SET_UNLOCK(x, y) do { \ if ((y) != 0) \ - snd_mtxunlock((x)->lock); \ + mtx_unlock(&(x)->lock); \ } while (0) #define MIXER_SET_LOCK(x, y) do { \ if ((y) != 0) \ - snd_mtxlock((x)->lock); \ + mtx_lock(&(x)->lock); \ } while (0) static int @@ -144,12 +144,12 @@ mixer_set_softpcmvol(struct snd_mixer *m, struct snddev_info *d, if (!PCM_REGISTERED(d)) return (EINVAL); - if (mtx_owned(m->lock)) + if (mtx_owned(&m->lock)) dropmtx = 1; else dropmtx = 0; - if (!(d->flags & SD_F_MPSAFE) || mtx_owned(d->lock) != 0) + if (!(d->flags & SD_F_MPSAFE) || mtx_owned(&d->lock) != 0) acquiremtx = 0; else acquiremtx = 1; @@ -197,12 +197,12 @@ mixer_set_eq(struct snd_mixer *m, struct snddev_info *d, if (!PCM_REGISTERED(d)) return (EINVAL); - if (mtx_owned(m->lock)) + if (mtx_owned(&m->lock)) dropmtx = 1; else dropmtx = 0; - if (!(d->flags & SD_F_MPSAFE) || mtx_owned(d->lock) != 0) + if (!(d->flags & SD_F_MPSAFE) || mtx_owned(&d->lock) != 0) acquiremtx = 0; else acquiremtx = 1; @@ -253,7 +253,7 @@ mixer_set(struct snd_mixer *m, u_int dev, u_int32_t muted, u_int lev) return (-1); /* It is safe to drop this mutex due to Giant. */ - if (!(d->flags & SD_F_MPSAFE) && mtx_owned(m->lock) != 0) + if (!(d->flags & SD_F_MPSAFE) && mtx_owned(&m->lock) != 0) dropmtx = 1; else dropmtx = 0; @@ -367,7 +367,7 @@ mixer_setrecsrc(struct snd_mixer *mixer, u_int32_t src) d = device_get_softc(mixer->dev); if (d == NULL) return -1; - if (!(d->flags & SD_F_MPSAFE) && mtx_owned(mixer->lock) != 0) + if (!(d->flags & SD_F_MPSAFE) && mtx_owned(&mixer->lock) != 0) dropmtx = 1; else dropmtx = 0; @@ -647,8 +647,8 @@ mixer_obj_create(device_t dev, kobj_class_t cls, void *devinfo, strlcat(m->name, ":", sizeof(m->name)); strlcat(m->name, desc, sizeof(m->name)); } - m->lock = snd_mtxcreate(m->name, (type == MIXER_TYPE_PRIMARY) ? - "primary pcm mixer" : "secondary pcm mixer"); + mtx_init(&m->lock, m->name, (type == MIXER_TYPE_PRIMARY) ? + "primary pcm mixer" : "secondary pcm mixer", MTX_DEF); m->type = type; m->devinfo = devinfo; m->busy = 0; @@ -660,8 +660,8 @@ mixer_obj_create(device_t dev, kobj_class_t cls, void *devinfo, } if (MIXER_INIT(m)) { - snd_mtxlock(m->lock); - snd_mtxfree(m->lock); + mtx_lock(&m->lock); + mtx_destroy(&m->lock); kobj_delete((kobj_t)m, M_MIXER); return (NULL); } @@ -680,7 +680,7 @@ mixer_delete(struct snd_mixer *m) MIXER_UNINIT(m); - snd_mtxfree(m->lock); + mtx_destroy(&m->lock); kobj_delete((kobj_t)m, M_MIXER); return (0); @@ -792,20 +792,20 @@ mixer_uninit(device_t dev) pdev->si_drv1 = NULL; destroy_dev(pdev); - snd_mtxlock(m->lock); + mtx_lock(&m->lock); for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) mixer_set(m, i, 0, 0); mixer_setrecsrc(m, SOUND_MASK_MIC); - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); /* mixer uninit can sleep --hps */ MIXER_UNINIT(m); - snd_mtxfree(m->lock); + mtx_destroy(&m->lock); kobj_delete((kobj_t)m, M_MIXER); d->mixer_dev = NULL; @@ -822,11 +822,11 @@ mixer_reinit(device_t dev) pdev = mixer_get_devt(dev); m = pdev->si_drv1; - snd_mtxlock(m->lock); + mtx_lock(&m->lock); i = MIXER_REINIT(m); if (i) { - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return i; } @@ -838,7 +838,7 @@ mixer_reinit(device_t dev) } mixer_setrecsrc(m, m->recsrc); - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return 0; } @@ -851,21 +851,21 @@ sysctl_hw_snd_hwvol_mixer(SYSCTL_HANDLER_ARGS) struct snd_mixer *m; m = oidp->oid_arg1; - snd_mtxlock(m->lock); + mtx_lock(&m->lock); strlcpy(devname, snd_mixernames[m->hwvol_mixer], sizeof(devname)); - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); error = sysctl_handle_string(oidp, &devname[0], sizeof(devname), req); - snd_mtxlock(m->lock); + mtx_lock(&m->lock); if (error == 0 && req->newptr != NULL) { dev = mixer_lookup(devname); if (dev == -1) { - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return EINVAL; } else { m->hwvol_mixer = dev; } } - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return error; } @@ -904,9 +904,9 @@ mixer_hwvol_mute(device_t dev) pdev = mixer_get_devt(dev); m = pdev->si_drv1; - snd_mtxlock(m->lock); + mtx_lock(&m->lock); mixer_hwvol_mute_locked(m); - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); } void @@ -942,9 +942,9 @@ mixer_hwvol_step(device_t dev, int left_step, int right_step) pdev = mixer_get_devt(dev); m = pdev->si_drv1; - snd_mtxlock(m->lock); + mtx_lock(&m->lock); mixer_hwvol_step_locked(m, left_step, right_step); - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); } int @@ -962,9 +962,9 @@ mix_set(struct snd_mixer *m, u_int dev, u_int left, u_int right) KASSERT(m != NULL, ("NULL snd_mixer")); - snd_mtxlock(m->lock); + mtx_lock(&m->lock); ret = mixer_set(m, dev, m->mutedevs, left | (right << 8)); - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return ((ret != 0) ? ENXIO : 0); } @@ -976,9 +976,9 @@ mix_get(struct snd_mixer *m, u_int dev) KASSERT(m != NULL, ("NULL snd_mixer")); - snd_mtxlock(m->lock); + mtx_lock(&m->lock); ret = mixer_get(m, dev); - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return (ret); } @@ -990,9 +990,9 @@ mix_setrecsrc(struct snd_mixer *m, u_int32_t src) KASSERT(m != NULL, ("NULL snd_mixer")); - snd_mtxlock(m->lock); + mtx_lock(&m->lock); ret = mixer_setrecsrc(m, src); - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return ((ret != 0) ? ENXIO : 0); } @@ -1004,9 +1004,9 @@ mix_getrecsrc(struct snd_mixer *m) KASSERT(m != NULL, ("NULL snd_mixer")); - snd_mtxlock(m->lock); + mtx_lock(&m->lock); ret = mixer_getrecsrc(m); - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return (ret); } @@ -1037,9 +1037,9 @@ mixer_open(struct cdev *i_dev, int flags, int mode, struct thread *td) /* XXX Need Giant magic entry ??? */ - snd_mtxlock(m->lock); + mtx_lock(&m->lock); m->busy = 1; - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return (0); } @@ -1061,10 +1061,10 @@ mixer_close(struct cdev *i_dev, int flags, int mode, struct thread *td) /* XXX Need Giant magic entry ??? */ - snd_mtxlock(m->lock); + mtx_lock(&m->lock); ret = (m->busy == 0) ? EBADF : 0; m->busy = 0; - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return (ret); } @@ -1142,9 +1142,9 @@ mixer_ioctl_channel(struct cdev *dev, u_long cmd, caddr_t arg, int mode, if ((j == SOUND_MIXER_DEVMASK || j == SOUND_MIXER_CAPS || j == SOUND_MIXER_STEREODEVS) && (cmd & ~0xff) == MIXER_READ(0)) { - snd_mtxlock(m->lock); + mtx_lock(&m->lock); *(int *)arg = mix_getdevs(m); - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); if (rdch != NULL) *(int *)arg |= SOUND_MASK_RECLEV; if (wrch != NULL) @@ -1261,9 +1261,9 @@ mixer_ioctl_cmd(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, if (m == NULL) return (EBADF); - snd_mtxlock(m->lock); + mtx_lock(&m->lock); if (from == MIXER_CMD_CDEV && !m->busy) { - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return (EBADF); } switch (cmd) { @@ -1299,7 +1299,7 @@ mixer_ioctl_cmd(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, ret = mixer_set(m, j, m->mutedevs, *arg_i); break; } - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return ((ret == 0) ? 0 : ENXIO); } if ((cmd & ~0xff) == MIXER_READ(0)) { @@ -1323,11 +1323,11 @@ mixer_ioctl_cmd(struct cdev *i_dev, u_long cmd, caddr_t arg, int mode, break; } *arg_i = v; - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return ((v != -1) ? 0 : ENXIO); } done: - snd_mtxunlock(m->lock); + mtx_unlock(&m->lock); return (ret); } @@ -1456,7 +1456,7 @@ mixer_oss_mixerinfo(struct cdev *i_dev, oss_mixerinfo *mi) } m = d->mixer_dev->si_drv1; - mtx_lock(m->lock); + mtx_lock(&m->lock); /* * At this point, the following synchronization stuff @@ -1533,7 +1533,7 @@ mixer_oss_mixerinfo(struct cdev *i_dev, oss_mixerinfo *mi) snprintf(mi->devnode, sizeof(mi->devnode), "/dev/mixer%d", i); mi->legacy_device = i; - mtx_unlock(m->lock); + mtx_unlock(&m->lock); PCM_UNLOCK(d); @@ -1552,8 +1552,5 @@ mixer_oss_mixerinfo(struct cdev *i_dev, oss_mixerinfo *mi) struct mtx * mixer_get_lock(struct snd_mixer *m) { - if (m->lock == NULL) { - return (&Giant); - } - return (m->lock); + return (&m->lock); } diff --git a/sys/dev/sound/pcm/sound.c b/sys/dev/sound/pcm/sound.c index cb510d526fa8..29dac6b576ae 100644 --- a/sys/dev/sound/pcm/sound.c +++ b/sys/dev/sound/pcm/sound.c @@ -62,35 +62,6 @@ SYSCTL_NODE(_hw, OID_AUTO, snd, CTLFLAG_RD | CTLFLAG_MPSAFE, 0, */ struct unrhdr *pcmsg_unrhdr = NULL; -void * -snd_mtxcreate(const char *desc, const char *type) -{ - struct mtx *m; - - m = malloc(sizeof(*m), M_DEVBUF, M_WAITOK | M_ZERO); - mtx_init(m, desc, type, MTX_DEF); - return m; -} - -void -snd_mtxfree(void *m) -{ - struct mtx *mtx = m; - - mtx_destroy(mtx); - free(mtx, M_DEVBUF); -} - -void -snd_mtxassert(void *m) -{ -#ifdef INVARIANTS - struct mtx *mtx = m; - - mtx_assert(mtx, MA_OWNED); -#endif -} - int snd_setup_intr(device_t dev, struct resource *res, int flags, driver_intr_t hand, void *param, void **cookiep) { @@ -361,7 +332,7 @@ pcm_init(device_t dev, void *devinfo) d = device_get_softc(dev); d->dev = dev; - d->lock = snd_mtxcreate(device_get_nameunit(dev), "sound cdev"); + mtx_init(&d->lock, device_get_nameunit(dev), "sound cdev", MTX_DEF); cv_init(&d->cv, device_get_nameunit(dev)); i = 0; @@ -467,7 +438,7 @@ pcm_unregister(device_t dev) d = device_get_softc(dev); - if (!PCM_ALIVE(d)) { + if (!PCM_REGISTERED(d)) { device_printf(dev, "unregister: device not configured\n"); return (0); } @@ -498,7 +469,7 @@ pcm_unregister(device_t dev) dsp_destroy_dev(dev); cv_destroy(&d->cv); - snd_mtxfree(d->lock); + mtx_destroy(&d->lock); if (snd_unit == device_get_unit(dev)) { snd_unit = pcm_best_unit(-1); diff --git a/sys/dev/sound/pcm/sound.h b/sys/dev/sound/pcm/sound.h index 8542a96ccb14..3ba6eb3692ee 100644 --- a/sys/dev/sound/pcm/sound.h +++ b/sys/dev/sound/pcm/sound.h @@ -133,8 +133,8 @@ struct snd_mixer; "\015PVCHANS" \ "\016RVCHANS" -#define PCM_ALIVE(x) ((x) != NULL && (x)->lock != NULL) -#define PCM_REGISTERED(x) (PCM_ALIVE(x) && ((x)->flags & SD_F_REGISTERED)) +#define PCM_REGISTERED(x) \ + ((x) != NULL && ((x)->flags & SD_F_REGISTERED)) #define PCM_MAXCHANS 10000 #define PCM_CHANCOUNT(d) \ @@ -167,12 +167,6 @@ void *pcm_getdevinfo(device_t dev); int snd_setup_intr(device_t dev, struct resource *res, int flags, driver_intr_t hand, void *param, void **cookiep); -void *snd_mtxcreate(const char *desc, const char *type); -void snd_mtxfree(void *m); -void snd_mtxassert(void *m); -#define snd_mtxlock(m) mtx_lock(m) -#define snd_mtxunlock(m) mtx_unlock(m) - int sndstat_register(device_t dev, char *str); int sndstat_unregister(device_t dev); @@ -218,7 +212,7 @@ struct snddev_info { void *devinfo; device_t dev; char status[SND_STATUSLEN]; - struct mtx *lock; + struct mtx lock; struct cdev *mixer_dev; struct cdev *dsp_dev; uint32_t pvchanrate, pvchanformat, pvchanmode; @@ -240,12 +234,12 @@ int sound_oss_card_info(oss_card_info *); #define PCM_MODE_PLAY 0x02 #define PCM_MODE_REC 0x04 -#define PCM_LOCKOWNED(d) mtx_owned((d)->lock) -#define PCM_LOCK(d) mtx_lock((d)->lock) -#define PCM_UNLOCK(d) mtx_unlock((d)->lock) -#define PCM_TRYLOCK(d) mtx_trylock((d)->lock) -#define PCM_LOCKASSERT(d) mtx_assert((d)->lock, MA_OWNED) -#define PCM_UNLOCKASSERT(d) mtx_assert((d)->lock, MA_NOTOWNED) +#define PCM_LOCKOWNED(d) mtx_owned(&(d)->lock) +#define PCM_LOCK(d) mtx_lock(&(d)->lock) +#define PCM_UNLOCK(d) mtx_unlock(&(d)->lock) +#define PCM_TRYLOCK(d) mtx_trylock(&(d)->lock) +#define PCM_LOCKASSERT(d) mtx_assert(&(d)->lock, MA_OWNED) +#define PCM_UNLOCKASSERT(d) mtx_assert(&(d)->lock, MA_NOTOWNED) /* * For PCM_[WAIT | ACQUIRE | RELEASE], be sure to surround these @@ -254,7 +248,7 @@ int sound_oss_card_info(oss_card_info *); #define PCM_WAIT(x) do { \ PCM_LOCKASSERT(x); \ while ((x)->flags & SD_F_BUSY) \ - cv_wait(&(x)->cv, (x)->lock); \ + cv_wait(&(x)->cv, &(x)->lock); \ } while (0) #define PCM_ACQUIRE(x) do { \ diff --git a/sys/dev/sound/usb/uaudio.c b/sys/dev/sound/usb/uaudio.c index ff9f59fe42ab..65c1327ee0f2 100644 --- a/sys/dev/sound/usb/uaudio.c +++ b/sys/dev/sound/usb/uaudio.c @@ -2664,7 +2664,7 @@ uaudio_chan_init(struct uaudio_chan *ch, struct snd_dbuf *b, /* store mutex and PCM channel */ ch->pcm_ch = c; - ch->pcm_mtx = c->lock; + ch->pcm_mtx = &c->lock; /* compute worst case buffer */ diff --git a/sys/netinet/ip_ecn.c b/sys/netinet/ip_ecn.c index 30d2c95ddbd7..2f700c43bbfa 100644 --- a/sys/netinet/ip_ecn.c +++ b/sys/netinet/ip_ecn.c @@ -92,7 +92,7 @@ * modify outer ECN (TOS) field on ingress operation (tunnel encapsulation). */ void -ip_ecn_ingress(int mode, u_int8_t *outer, const u_int8_t *inner) +ip_ecn_ingress(int mode, uint8_t *outer, const uint8_t *inner) { if (!outer || !inner) @@ -124,7 +124,7 @@ ip_ecn_ingress(int mode, u_int8_t *outer, const u_int8_t *inner) * the caller should drop the packet if the return value is 0. */ int -ip_ecn_egress(int mode, const u_int8_t *outer, u_int8_t *inner) +ip_ecn_egress(int mode, const uint8_t *outer, uint8_t *inner) { if (!outer || !inner) @@ -158,9 +158,9 @@ ip_ecn_egress(int mode, const u_int8_t *outer, u_int8_t *inner) #ifdef INET6 void -ip6_ecn_ingress(int mode, u_int32_t *outer, const u_int32_t *inner) +ip6_ecn_ingress(int mode, uint32_t *outer, const uint32_t *inner) { - u_int8_t outer8, inner8; + uint8_t outer8, inner8; if (!outer || !inner) panic("NULL pointer passed to ip6_ecn_ingress"); @@ -168,13 +168,13 @@ ip6_ecn_ingress(int mode, u_int32_t *outer, const u_int32_t *inner) inner8 = (ntohl(*inner) >> 20) & 0xff; ip_ecn_ingress(mode, &outer8, &inner8); *outer &= ~htonl(0xff << 20); - *outer |= htonl((u_int32_t)outer8 << 20); + *outer |= htonl((uint32_t)outer8 << 20); } int -ip6_ecn_egress(int mode, const u_int32_t *outer, u_int32_t *inner) +ip6_ecn_egress(int mode, const uint32_t *outer, uint32_t *inner) { - u_int8_t outer8, inner8, oinner8; + uint8_t outer8, inner8, oinner8; if (!outer || !inner) panic("NULL pointer passed to ip6_ecn_egress"); @@ -185,7 +185,7 @@ ip6_ecn_egress(int mode, const u_int32_t *outer, u_int32_t *inner) return (0); if (inner8 != oinner8) { *inner &= ~htonl(0xff << 20); - *inner |= htonl((u_int32_t)inner8 << 20); + *inner |= htonl((uint32_t)inner8 << 20); } return (1); } diff --git a/sys/netinet/ip_ecn.h b/sys/netinet/ip_ecn.h index 7390d812606f..6632418fc9ca 100644 --- a/sys/netinet/ip_ecn.h +++ b/sys/netinet/ip_ecn.h @@ -44,7 +44,7 @@ #define ECN_NOCARE (-1) /* no consideration to ECN */ #ifdef _KERNEL -extern void ip_ecn_ingress(int, u_int8_t *, const u_int8_t *); -extern int ip_ecn_egress(int, const u_int8_t *, u_int8_t *); +extern void ip_ecn_ingress(int, uint8_t *, const uint8_t *); +extern int ip_ecn_egress(int, const uint8_t *, uint8_t *); #endif #endif diff --git a/sys/netinet6/ip6_ecn.h b/sys/netinet6/ip6_ecn.h index 45a28e9f419a..169e027dc265 100644 --- a/sys/netinet6/ip6_ecn.h +++ b/sys/netinet6/ip6_ecn.h @@ -37,6 +37,6 @@ */ #ifdef _KERNEL -extern void ip6_ecn_ingress(int, u_int32_t *, const u_int32_t *); -extern int ip6_ecn_egress(int, const u_int32_t *, u_int32_t *); +extern void ip6_ecn_ingress(int, uint32_t *, const uint32_t *); +extern int ip6_ecn_egress(int, const uint32_t *, uint32_t *); #endif diff --git a/sys/netpfil/pf/pf_lb.c b/sys/netpfil/pf/pf_lb.c index 3227d2906fb5..3510de3c6b3d 100644 --- a/sys/netpfil/pf/pf_lb.c +++ b/sys/netpfil/pf/pf_lb.c @@ -407,10 +407,18 @@ pf_get_sport(struct pf_pdesc *pd, struct pf_krule *r, struct pf_addr *naddr, */ key.port[sidx] = pd->nsport; if (!pf_find_state_all_exists(&key, dir)) { - MPASS(udp_mapping == NULL || - *udp_mapping == NULL); - *nport = pd->nsport; - return (0); + if (udp_mapping && *udp_mapping != NULL) { + (*udp_mapping)->endpoints[1].port = pd->nsport; + if (pf_udp_mapping_insert(*udp_mapping) == 0) { + *nport = pd->nsport; + return (0); + } + } else { + MPASS(udp_mapping == NULL || + *udp_mapping == NULL); + *nport = pd->nsport; + return (0); + } } } else if (low == high) { key.port[sidx] = htons(low); diff --git a/sys/sys/extattr.h b/sys/sys/extattr.h index a16ef238656f..4aabb4af667b 100644 --- a/sys/sys/extattr.h +++ b/sys/sys/extattr.h @@ -71,8 +71,6 @@ int extattr_check_cred(struct vnode *vp, int attrnamespace, #else #include <sys/cdefs.h> -struct iovec; - __BEGIN_DECLS int extattrctl(const char *_path, int _cmd, const char *_filename, int _attrnamespace, const char *_attrname); diff --git a/sys/sys/syscallsubr.h b/sys/sys/syscallsubr.h index 8f106150e193..350e4073604e 100644 --- a/sys/sys/syscallsubr.h +++ b/sys/sys/syscallsubr.h @@ -219,13 +219,13 @@ int kern_kldstat(struct thread *td, int fileid, struct kld_file_stat *stat); int kern_kldunload(struct thread *td, int fileid, int flags); int kern_kmq_notify(struct thread *, int, struct sigevent *); int kern_kmq_open(struct thread *, const char *, int, mode_t, - const struct mq_attr *); + const struct mq_attr *); int kern_kmq_setattr(struct thread *, int, const struct mq_attr *, - struct mq_attr *); + struct mq_attr *); int kern_kmq_timedreceive(struct thread *, int, char *, - size_t, unsigned int *, const struct timespec *); + size_t, unsigned int *, const struct timespec *); int kern_kmq_timedsend(struct thread *td, int, const char *, - size_t, unsigned int, const struct timespec *); + size_t, unsigned int, const struct timespec *); int kern_linkat(struct thread *td, int fd1, int fd2, const char *path1, const char *path2, enum uio_seg segflg, int flag); int kern_listen(struct thread *td, int s, int backlog); @@ -411,7 +411,7 @@ int kern_kexec_load(struct thread *td, u_long entry, struct freebsd11_dirent; -int freebsd11_kern_getdirentries(struct thread *td, int fd, char *ubuf, u_int - count, long *basep, void (*func)(struct freebsd11_dirent *)); +int freebsd11_kern_getdirentries(struct thread *td, int fd, char *ubuf, + u_int count, long *basep, void (*func)(struct freebsd11_dirent *)); #endif /* !_SYS_SYSCALLSUBR_H_ */ diff --git a/sys/vm/vm_extern.h b/sys/vm/vm_extern.h index 1fd6518cf4ed..d0e005088745 100644 --- a/sys/vm/vm_extern.h +++ b/sys/vm/vm_extern.h @@ -164,5 +164,8 @@ vm_addr_ok(vm_paddr_t pa, vm_paddr_t size, u_long alignment, return (vm_addr_align_ok(pa, alignment) && vm_addr_bound_ok(pa, size, boundary)); } + +extern bool vm_check_pg_zero; + #endif /* _KERNEL */ #endif /* !_VM_EXTERN_H_ */ diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 2e150b368d71..3bf16778d987 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -85,6 +85,8 @@ #include <sys/refcount.h> #include <sys/resourcevar.h> #include <sys/rwlock.h> +#include <sys/sched.h> +#include <sys/sf_buf.h> #include <sys/signalvar.h> #include <sys/sysctl.h> #include <sys/sysent.h> @@ -1220,6 +1222,24 @@ vm_fault_zerofill(struct faultstate *fs) if ((fs->m->flags & PG_ZERO) == 0) { pmap_zero_page(fs->m); } else { +#ifdef INVARIANTS + if (vm_check_pg_zero) { + struct sf_buf *sf; + unsigned long *p; + int i; + + sched_pin(); + sf = sf_buf_alloc(fs->m, SFB_CPUPRIVATE); + p = (unsigned long *)sf_buf_kva(sf); + for (i = 0; i < PAGE_SIZE / sizeof(*p); i++, p++) { + KASSERT(*p == 0, + ("zerocheck failed page %p PG_ZERO %d %jx", + fs->m, i, (uintmax_t)*p)); + } + sf_buf_free(sf); + sched_unpin(); + } +#endif VM_CNT_INC(v_ozfod); } VM_CNT_INC(v_zfod); diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 16878604fa11..b39d665f9e0f 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -84,6 +84,7 @@ #include <sys/sleepqueue.h> #include <sys/sbuf.h> #include <sys/sched.h> +#include <sys/sf_buf.h> #include <sys/smp.h> #include <sys/sysctl.h> #include <sys/vmmeter.h> @@ -145,6 +146,13 @@ SYSCTL_ULONG(_vm_stats_page, OID_AUTO, nofreeq_size, CTLFLAG_RD, &nofreeq_size, 0, "Size of the nofree queue"); +#ifdef INVARIANTS +bool vm_check_pg_zero = false; +SYSCTL_BOOL(_debug, OID_AUTO, vm_check_pg_zero, CTLFLAG_RWTUN, + &vm_check_pg_zero, 0, + "verify content of freed zero-filled pages"); +#endif + /* * bogus page -- for I/O to/from partially complete buffers, * or for paging into sparsely invalid regions. @@ -4050,14 +4058,24 @@ vm_page_free_prep(vm_page_t m) */ atomic_thread_fence_acq(); -#if defined(DIAGNOSTIC) && defined(PHYS_TO_DMAP) - if (PMAP_HAS_DMAP && (m->flags & PG_ZERO) != 0) { - uint64_t *p; +#ifdef INVARIANTS + if (vm_check_pg_zero && (m->flags & PG_ZERO) != 0) { + struct sf_buf *sf; + unsigned long *p; int i; - p = (uint64_t *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)); - for (i = 0; i < PAGE_SIZE / sizeof(uint64_t); i++, p++) - KASSERT(*p == 0, ("vm_page_free_prep %p PG_ZERO %d %jx", - m, i, (uintmax_t)*p)); + + sched_pin(); + sf = sf_buf_alloc(m, SFB_CPUPRIVATE | SFB_NOWAIT); + if (sf != NULL) { + p = (unsigned long *)sf_buf_kva(sf); + for (i = 0; i < PAGE_SIZE / sizeof(*p); i++, p++) { + KASSERT(*p == 0, + ("zerocheck failed page %p PG_ZERO %d %jx", + m, i, (uintmax_t)*p)); + } + sf_buf_free(sf); + } + sched_unpin(); } #endif if ((m->oflags & VPO_UNMANAGED) == 0) { diff --git a/tests/sys/netpfil/pf/nat.sh b/tests/sys/netpfil/pf/nat.sh index 788eacdc3369..3d953b495953 100644 --- a/tests/sys/netpfil/pf/nat.sh +++ b/tests/sys/netpfil/pf/nat.sh @@ -289,6 +289,35 @@ endpoint_independent_exhaust_cleanup() rm -f server2.out } +atf_test_case "endpoint_independent_static_port" "cleanup" +endpoint_independent_static_port_head() +{ + atf_set descr 'Test that a client behind NAT gets the same external IP:port for different servers, with static-port' + atf_set require.user root +} + +endpoint_independent_static_port_body() +{ + endpoint_independent_setup # Sets ${epair_…} variables + + endpoint_independent_common \ + "nat on ${epair_nat}a inet from ! (${epair_nat}a) to any -> (${epair_nat}a)" \ + "nat on ${epair_nat}a inet from ! (${epair_nat}a) to any -> (${epair_nat}a) static-port sticky-address endpoint-independent" + + # Exhaust the available nat ports + for i in $(seq 1 10); do + echo "ping" | jexec client nc -u 198.51.100.32 1234 -w 0 + echo "ping" | jexec client nc -u 198.51.100.22 1234 -w 0 + done +} + +endpoint_independent_static_port_cleanup() +{ + pft_cleanup + rm -f server1.out + rm -f server2.out +} + atf_test_case "endpoint_independent_pass" "cleanup" endpoint_independent_pass_head() { @@ -930,6 +959,7 @@ atf_init_test_cases() atf_add_test_case "nested_anchor" atf_add_test_case "endpoint_independent_compat" atf_add_test_case "endpoint_independent_exhaust" + atf_add_test_case "endpoint_independent_static_port" atf_add_test_case "endpoint_independent_pass" atf_add_test_case "nat6_nolinklocal" atf_add_test_case "empty_table_source_hash" diff --git a/tools/test/stress2/misc/all.exclude b/tools/test/stress2/misc/all.exclude index 0658bfdc0c1b..eb84d174cd4e 100644 --- a/tools/test/stress2/misc/all.exclude +++ b/tools/test/stress2/misc/all.exclude @@ -66,19 +66,12 @@ systrace.sh WiP 20200227 systrace2.sh WiP 20200227 syzkaller16.sh zonelimit issue 20210722 syzkaller28.sh panic: About to free ctl:0x... so:0x... and its in 1 20201120 -syzkaller31.sh panic: Bad tailq NEXT(0xfffffe01a0899430->tqh_last) != NULL 20220420 syzkaller55.sh https://people.freebsd.org/~pho/stress/log/log0533.txt 20240702 syzkaller59.sh Page fault 20220625 -syzkaller65.sh panic: in_pcblookup_hash_locked: invalid local address 20230318 -syzkaller66.sh panic: in_pcbconnect: inp is already connected 20230621 -syzkaller67.sh panic: ASan: Invalid access, 8-byte read at ... 20230621 syzkaller80.sh panic 20250711 -syzkaller81.sh panic 20250711 syzkaller82.sh panic: m_apply, length > size of mbuf chain 20250724 -syzkaller84.sh panic: Assertion !(sb->sb_state & SBS_CANTRCVMORE) 20250810 syzkaller85.sh panic: Assertion uio->uio_resid < 0 failed 20250928 -syzkaller86.sh Fatal trap 12: page fault while in kernel mode 20251001 -write2.sh panic: sndbuf_acquire: count 255 > free 0 20251003 +syzkaller87.sh watchdogd fired 20251112 quota3.sh https://people.freebsd.org/~pho/stress/log/log0604.txt 20250728 quota6.sh https://people.freebsd.org/~pho/stress/log/log0456.txt 20240707 truss3.sh WiP 20200915 diff --git a/tools/test/stress2/misc/syzkaller59.sh b/tools/test/stress2/misc/syzkaller59.sh index 1644ce627934..24cfbfd23278 100755 --- a/tools/test/stress2/misc/syzkaller59.sh +++ b/tools/test/stress2/misc/syzkaller59.sh @@ -147,7 +147,14 @@ int main(void) EOF mycc -o /tmp/syzkaller59 -Wall -Wextra -O0 /tmp/syzkaller59.c || exit 1 -(cd /tmp; timeout 3m ./syzkaller59) +(cd /tmp; ./syzkaller59) & +start=`date +%s` +while [ $((`date +%s` - start)) -lt 180 ]; do + sleep 10 + kill -0 $! > /dev/null 2>&1 || break +done +while pkill syzkaller59; do sleep .1; done +wait rm -rf /tmp/syzkaller59 /tmp/syzkaller59.c /tmp/syzkaller59.core \ /tmp/syzkaller.?????? diff --git a/tools/test/stress2/misc/syzkaller82.sh b/tools/test/stress2/misc/syzkaller82.sh index c810942eb060..557d52d269c0 100755 --- a/tools/test/stress2/misc/syzkaller82.sh +++ b/tools/test/stress2/misc/syzkaller82.sh @@ -114,9 +114,9 @@ work=/tmp/$prog.dir rm -rf $work mkdir $work cd /tmp/$prog.dir -kldstat | grep -q sctp || { kldload sctp.ko && loaded=1; } +kldstat | grep -q sctp && loaded=0 || { kldload sctp.ko && loaded=1; } timeout 3m /tmp/$prog > /dev/null 2>&1 rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work -[ $loaded ] && kldunload sctp.ko +[ $loaded -eq 1 ] && kldunload sctp.ko exit 0 diff --git a/tools/test/stress2/misc/syzkaller84.sh b/tools/test/stress2/misc/syzkaller84.sh index a7976be2eeb6..631dd6e2dd6f 100755 --- a/tools/test/stress2/misc/syzkaller84.sh +++ b/tools/test/stress2/misc/syzkaller84.sh @@ -398,5 +398,6 @@ kldstat | grep -q sctp || { kldload sctp.ko && loaded=1; } timeout 3m /tmp/$prog > /dev/null 2>&1 rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core $work +set +u [ $loaded ] && kldunload sctp.ko exit 0 |
