aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/ntp/ntpd/ntp_io.c2
-rw-r--r--crypto/openssh/FREEBSD-upgrade7
-rw-r--r--crypto/openssh/sshconnect.c9
-rw-r--r--libexec/rtld-elf/aarch64/rtld_machdep.h2
-rw-r--r--libexec/rtld-elf/amd64/rtld_machdep.h2
-rw-r--r--libexec/rtld-elf/arm/rtld_machdep.h2
-rw-r--r--libexec/rtld-elf/i386/rtld_machdep.h2
-rw-r--r--libexec/rtld-elf/powerpc/reloc.c26
-rw-r--r--libexec/rtld-elf/powerpc/rtld_machdep.h2
-rw-r--r--libexec/rtld-elf/powerpc64/reloc.c26
-rw-r--r--libexec/rtld-elf/powerpc64/rtld_machdep.h2
-rw-r--r--libexec/rtld-elf/riscv/rtld_machdep.h2
-rw-r--r--libexec/rtld-elf/rtld.c25
-rw-r--r--sbin/dmesg/dmesg.82
-rw-r--r--sbin/pfctl/pfctl.c2
-rw-r--r--share/man/man4/isp.42
-rw-r--r--share/man/man4/snd_dummy.42
-rw-r--r--share/man/man4/vt.49
-rw-r--r--sys/arm/allwinner/a10_codec.c10
-rw-r--r--sys/arm/freescale/imx/imx6_ssi.c20
-rw-r--r--sys/arm/freescale/vybrid/vf_sai.c20
-rw-r--r--sys/dev/e1000/e1000_82571.c3
-rw-r--r--sys/dev/e1000/if_em.c6
-rw-r--r--sys/dev/iwx/if_iwx.c62
-rw-r--r--sys/dev/sound/dummy.c29
-rw-r--r--sys/dev/sound/midi/midi.c23
-rw-r--r--sys/dev/sound/midi/mpu401.c11
-rw-r--r--sys/dev/sound/pci/als4000.c50
-rw-r--r--sys/dev/sound/pci/atiixp.c18
-rw-r--r--sys/dev/sound/pci/cmi.c54
-rw-r--r--sys/dev/sound/pci/emu10k1.c57
-rw-r--r--sys/dev/sound/pci/emu10kx-pcm.c47
-rw-r--r--sys/dev/sound/pci/envy24.c68
-rw-r--r--sys/dev/sound/pci/envy24ht.c69
-rw-r--r--sys/dev/sound/pci/es137x.c16
-rw-r--r--sys/dev/sound/pci/hda/hdaa.c6
-rw-r--r--sys/dev/sound/pci/hda/hdac.c15
-rw-r--r--sys/dev/sound/pci/hda/hdac_private.h2
-rw-r--r--sys/dev/sound/pci/hda/hdacc.c6
-rw-r--r--sys/dev/sound/pci/hdsp-pcm.c28
-rw-r--r--sys/dev/sound/pci/hdsp.c35
-rw-r--r--sys/dev/sound/pci/hdsp.h2
-rw-r--r--sys/dev/sound/pci/hdspe-pcm.c28
-rw-r--r--sys/dev/sound/pci/hdspe.c35
-rw-r--r--sys/dev/sound/pci/hdspe.h2
-rw-r--r--sys/dev/sound/pci/ich.c16
-rw-r--r--sys/dev/sound/pci/maestro3.c17
-rw-r--r--sys/dev/sound/pci/solo.c18
-rw-r--r--sys/dev/sound/pci/spicds.c34
-rw-r--r--sys/dev/sound/pci/t4dwave.c29
-rw-r--r--sys/dev/sound/pci/via8233.c101
-rw-r--r--sys/dev/sound/pci/via82c686.c36
-rw-r--r--sys/dev/sound/pcm/ac97.c52
-rw-r--r--sys/dev/sound/pcm/channel.c36
-rw-r--r--sys/dev/sound/pcm/channel.h15
-rw-r--r--sys/dev/sound/pcm/dsp.c36
-rw-r--r--sys/dev/sound/pcm/mixer.c105
-rw-r--r--sys/dev/sound/pcm/sound.c35
-rw-r--r--sys/dev/sound/pcm/sound.h26
-rw-r--r--sys/dev/sound/usb/uaudio.c2
-rw-r--r--sys/netinet/ip_ecn.c16
-rw-r--r--sys/netinet/ip_ecn.h4
-rw-r--r--sys/netinet6/ip6_ecn.h4
-rw-r--r--sys/netpfil/pf/pf_lb.c16
-rw-r--r--sys/sys/extattr.h2
-rw-r--r--sys/sys/syscallsubr.h12
-rw-r--r--sys/vm/vm_extern.h3
-rw-r--r--sys/vm/vm_fault.c20
-rw-r--r--sys/vm/vm_page.c32
-rw-r--r--tests/sys/netpfil/pf/nat.sh30
-rw-r--r--tools/test/stress2/misc/all.exclude9
-rwxr-xr-xtools/test/stress2/misc/syzkaller59.sh9
-rwxr-xr-xtools/test/stress2/misc/syzkaller82.sh4
-rwxr-xr-xtools/test/stress2/misc/syzkaller84.sh1
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