aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/sound
diff options
context:
space:
mode:
authorScott Long <scottl@FreeBSD.org>2003-07-01 15:52:06 +0000
committerScott Long <scottl@FreeBSD.org>2003-07-01 15:52:06 +0000
commitf6b1c44d1f70d5f298b911f2c1dcd802b0d11339 (patch)
tree1bbd76935b6d5917753df7328c69bd2f3c75f15a /sys/dev/sound
parentdfebdcdf7ca22f2767534b7df4b828f55b6e754f (diff)
downloadsrc-f6b1c44d1f70d5f298b911f2c1dcd802b0d11339.tar.gz
src-f6b1c44d1f70d5f298b911f2c1dcd802b0d11339.zip
Mega busdma API commit.
Add two new arguments to bus_dma_tag_create(): lockfunc and lockfuncarg. Lockfunc allows a driver to provide a function for managing its locking semantics while using busdma. At the moment, this is used for the asynchronous busdma_swi and callback mechanism. Two lockfunc implementations are provided: busdma_lock_mutex() performs standard mutex operations on the mutex that is specified from lockfuncarg. dftl_lock() is a panic implementation and is defaulted to when NULL, NULL are passed to bus_dma_tag_create(). The only time that NULL, NULL should ever be used is when the driver ensures that bus_dmamap_load() will not be deferred. Drivers that do not provide their own locking can pass busdma_lock_mutex,&Giant args in order to preserve the former behaviour. sparc64 and powerpc do not provide real busdma_swi functions, so this is largely a noop on those platforms. The busdma_swi on is64 is not properly locked yet, so warnings will be emitted on this platform when busdma callback deferrals happen. If anyone gets panics or warnings from dflt_lock() being called, please let me know right away. Reviewed by: tmm, gibbs
Notes
Notes: svn path=/head/; revision=117126
Diffstat (limited to 'sys/dev/sound')
-rw-r--r--sys/dev/sound/isa/ad1816.c3
-rw-r--r--sys/dev/sound/isa/ess.c3
-rw-r--r--sys/dev/sound/isa/mss.c5
-rw-r--r--sys/dev/sound/isa/sb16.c5
-rw-r--r--sys/dev/sound/isa/sb8.c5
-rw-r--r--sys/dev/sound/pci/als4000.c3
-rw-r--r--sys/dev/sound/pci/au88x0.c2
-rw-r--r--sys/dev/sound/pci/aureal.c3
-rw-r--r--sys/dev/sound/pci/cmi.c2
-rw-r--r--sys/dev/sound/pci/cs4281.c3
-rw-r--r--sys/dev/sound/pci/csapcm.c3
-rw-r--r--sys/dev/sound/pci/ds1.c6
-rw-r--r--sys/dev/sound/pci/emu10k1.c3
-rw-r--r--sys/dev/sound/pci/es137x.c3
-rw-r--r--sys/dev/sound/pci/fm801.c3
-rw-r--r--sys/dev/sound/pci/ich.c3
-rw-r--r--sys/dev/sound/pci/maestro.c3
-rw-r--r--sys/dev/sound/pci/maestro3.c3
-rw-r--r--sys/dev/sound/pci/solo.c3
-rw-r--r--sys/dev/sound/pci/t4dwave.c3
-rw-r--r--sys/dev/sound/pci/via8233.c6
-rw-r--r--sys/dev/sound/pci/via82c686.c6
-rw-r--r--sys/dev/sound/pci/vibes.c3
-rw-r--r--sys/dev/sound/usb/uaudio_pcm.c2
24 files changed, 56 insertions, 28 deletions
diff --git a/sys/dev/sound/isa/ad1816.c b/sys/dev/sound/isa/ad1816.c
index 2554af2a8655..c4763bcbce18 100644
--- a/sys/dev/sound/isa/ad1816.c
+++ b/sys/dev/sound/isa/ad1816.c
@@ -611,7 +611,8 @@ ad1816_attach(device_t dev)
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/ad1816->bufsize, /*nsegments*/1,
/*maxsegz*/0x3ffff,
- /*flags*/0, &ad1816->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/ &Giant, &ad1816->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto no;
}
diff --git a/sys/dev/sound/isa/ess.c b/sys/dev/sound/isa/ess.c
index 38e3198e3e62..a0b2c2c0efb0 100644
--- a/sys/dev/sound/isa/ess.c
+++ b/sys/dev/sound/isa/ess.c
@@ -855,7 +855,8 @@ ess_attach(device_t dev)
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sc->bufsize, /*nsegments*/1,
/*maxsegz*/0x3ffff,
- /*flags*/0, &sc->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &sc->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto no;
}
diff --git a/sys/dev/sound/isa/mss.c b/sys/dev/sound/isa/mss.c
index dc0c43e30d35..ff7062d634f1 100644
--- a/sys/dev/sound/isa/mss.c
+++ b/sys/dev/sound/isa/mss.c
@@ -1720,8 +1720,9 @@ mss_doattach(device_t dev, struct mss_info *mss)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/mss->bufsize, /*nsegments*/1,
- /*maxsegz*/0x3ffff,
- /*flags*/0, &mss->parent_dmat) != 0) {
+ /*maxsegz*/0x3ffff, /*flags*/0,
+ /*lockfunc*/busdma_lock_mutex, /*lockarg*/&Giant,
+ &mss->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto no;
}
diff --git a/sys/dev/sound/isa/sb16.c b/sys/dev/sound/isa/sb16.c
index 4851eeb42e02..1f674c168a8c 100644
--- a/sys/dev/sound/isa/sb16.c
+++ b/sys/dev/sound/isa/sb16.c
@@ -812,8 +812,9 @@ sb16_attach(device_t dev)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sb->bufsize, /*nsegments*/1,
- /*maxsegz*/0x3ffff,
- /*flags*/0, &sb->parent_dmat) != 0) {
+ /*maxsegz*/0x3ffff, /*flags*/0,
+ /*lockfunc*/busdma_lock_mutex, /*lockarg*/&Giant,
+ &sb->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto no;
}
diff --git a/sys/dev/sound/isa/sb8.c b/sys/dev/sound/isa/sb8.c
index 095d817b38d2..819f838437c9 100644
--- a/sys/dev/sound/isa/sb8.c
+++ b/sys/dev/sound/isa/sb8.c
@@ -723,8 +723,9 @@ sb_attach(device_t dev)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sb->bufsize, /*nsegments*/1,
- /*maxsegz*/0x3ffff,
- /*flags*/0, &sb->parent_dmat) != 0) {
+ /*maxsegz*/0x3ffff, /*flags*/0,
+ /*lockfunc*/busdma_lock_mutex, /*lockarg*/&Giant,
+ &sb->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto no;
}
diff --git a/sys/dev/sound/pci/als4000.c b/sys/dev/sound/pci/als4000.c
index 3007736d74b1..77b39840fd57 100644
--- a/sys/dev/sound/pci/als4000.c
+++ b/sys/dev/sound/pci/als4000.c
@@ -745,7 +745,8 @@ als_resource_grab(device_t dev, struct sc_info *sc)
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sc->bufsz,
/*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &sc->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &sc->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/au88x0.c b/sys/dev/sound/pci/au88x0.c
index 3bf227b6e786..81416dde2621 100644
--- a/sys/dev/sound/pci/au88x0.c
+++ b/sys/dev/sound/pci/au88x0.c
@@ -545,7 +545,7 @@ au88x0_pci_attach(device_t dev)
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, /* restrict to 4GB */
NULL, NULL, /* no filter */
aui->aui_bufsize, 1, aui->aui_bufsize,
- 0, &aui->aui_dmat);
+ 0, busdma_lock_mutex, &Giant, &aui->aui_dmat);
if (error != 0) {
device_printf(dev, "failed to create DMA tag\n");
goto failed;
diff --git a/sys/dev/sound/pci/aureal.c b/sys/dev/sound/pci/aureal.c
index d301fd818165..3630699e4703 100644
--- a/sys/dev/sound/pci/aureal.c
+++ b/sys/dev/sound/pci/aureal.c
@@ -641,7 +641,8 @@ au_pci_attach(device_t dev)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/AU_BUFFSIZE, /*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &au->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &au->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/cmi.c b/sys/dev/sound/pci/cmi.c
index 14c6c8e97b5c..f46611481b3f 100644
--- a/sys/dev/sound/pci/cmi.c
+++ b/sys/dev/sound/pci/cmi.c
@@ -876,6 +876,8 @@ cmi_attach(device_t dev)
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sc->bufsz, /*nsegments*/1,
/*maxsegz*/0x3ffff, /*flags*/0,
+ /*lockfunc*/busdma_lock_mutex,
+ /*lockfunc*/&Giant,
&sc->parent_dmat) != 0) {
device_printf(dev, "cmi_attach: Unable to create dma tag\n");
goto bad;
diff --git a/sys/dev/sound/pci/cs4281.c b/sys/dev/sound/pci/cs4281.c
index a700394ed02c..d9b91ddd2660 100644
--- a/sys/dev/sound/pci/cs4281.c
+++ b/sys/dev/sound/pci/cs4281.c
@@ -830,7 +830,8 @@ cs4281_pci_attach(device_t dev)
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sc->bufsz, /*nsegments*/1,
/*maxsegz*/0x3ffff,
- /*flags*/0, &sc->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &sc->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/csapcm.c b/sys/dev/sound/pci/csapcm.c
index b445e48d9c23..d379528af170 100644
--- a/sys/dev/sound/pci/csapcm.c
+++ b/sys/dev/sound/pci/csapcm.c
@@ -679,7 +679,8 @@ csa_allocres(struct csa_info *csa, device_t dev)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/CS461x_BUFFSIZE, /*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &csa->parent_dmat) != 0)
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &csa->parent_dmat) != 0)
return (1);
return (0);
diff --git a/sys/dev/sound/pci/ds1.c b/sys/dev/sound/pci/ds1.c
index 1f1a2fe672de..e3a9a6e6c4f7 100644
--- a/sys/dev/sound/pci/ds1.c
+++ b/sys/dev/sound/pci/ds1.c
@@ -828,7 +828,8 @@ ds_init(struct sc_info *sc)
if (sc->regbase == NULL) {
if (bus_dma_tag_create(NULL, 2, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR,
- NULL, NULL, memsz, 1, memsz, 0, &sc->control_dmat))
+ NULL, NULL, memsz, 1, memsz, 0, busdma_lock_mutex,
+ &Giant, &sc->control_dmat))
return -1;
if (bus_dmamem_alloc(sc->control_dmat, &buf, BUS_DMA_NOWAIT, &sc->map))
return -1;
@@ -968,7 +969,8 @@ ds_pci_attach(device_t dev)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &sc->buffer_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &sc->buffer_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/emu10k1.c b/sys/dev/sound/pci/emu10k1.c
index c847016165df..a0a986fbb750 100644
--- a/sys/dev/sound/pci/emu10k1.c
+++ b/sys/dev/sound/pci/emu10k1.c
@@ -1494,7 +1494,8 @@ emu_pci_attach(device_t dev)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &sc->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &sc->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/es137x.c b/sys/dev/sound/pci/es137x.c
index f864b4a27d7f..9ae6606f68d1 100644
--- a/sys/dev/sound/pci/es137x.c
+++ b/sys/dev/sound/pci/es137x.c
@@ -902,7 +902,8 @@ es_pci_attach(device_t dev)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/es->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &es->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &es->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/fm801.c b/sys/dev/sound/pci/fm801.c
index c42da08ccac5..417ed9986c91 100644
--- a/sys/dev/sound/pci/fm801.c
+++ b/sys/dev/sound/pci/fm801.c
@@ -632,7 +632,8 @@ fm801_pci_attach(device_t dev)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/fm801->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &fm801->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &fm801->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto oops;
}
diff --git a/sys/dev/sound/pci/ich.c b/sys/dev/sound/pci/ich.c
index aa5e856c8c8d..7d5faa5068ca 100644
--- a/sys/dev/sound/pci/ich.c
+++ b/sys/dev/sound/pci/ich.c
@@ -708,7 +708,8 @@ ich_pci_attach(device_t dev)
sc->bufsz = pcm_getbuffersize(dev, 4096, ICH_DEFAULT_BUFSZ, ICH_MAX_BUFSZ);
if (bus_dma_tag_create(NULL, 8, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR,
- NULL, NULL, sc->bufsz, 1, 0x3ffff, 0, &sc->dmat) != 0) {
+ NULL, NULL, sc->bufsz, 1, 0x3ffff, 0,
+ busdma_lock_mutex, &Giant, &sc->dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/maestro.c b/sys/dev/sound/pci/maestro.c
index c479171799e5..10613ed311c5 100644
--- a/sys/dev/sound/pci/maestro.c
+++ b/sys/dev/sound/pci/maestro.c
@@ -972,7 +972,8 @@ agg_attach(device_t dev)
/*lowaddr*/MAESTRO_MAXADDR, /*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/ess->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &ess->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &ess->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/maestro3.c b/sys/dev/sound/pci/maestro3.c
index ae679caed35d..2f9f8022d695 100644
--- a/sys/dev/sound/pci/maestro3.c
+++ b/sys/dev/sound/pci/maestro3.c
@@ -1146,7 +1146,8 @@ m3_pci_attach(device_t dev)
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sc->bufsz, /*nsegments*/1,
/*maxsegz*/0x3ffff,
- /*flags*/0, &sc->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &sc->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/solo.c b/sys/dev/sound/pci/solo.c
index a077ccab781e..e13da9f4e039 100644
--- a/sys/dev/sound/pci/solo.c
+++ b/sys/dev/sound/pci/solo.c
@@ -991,7 +991,8 @@ ess_attach(device_t dev)
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sc->bufsz, /*nsegments*/1,
/*maxsegz*/0x3ffff,
- /*flags*/0, &sc->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &sc->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto no;
}
diff --git a/sys/dev/sound/pci/t4dwave.c b/sys/dev/sound/pci/t4dwave.c
index cd7de773a379..19a92dcb471e 100644
--- a/sys/dev/sound/pci/t4dwave.c
+++ b/sys/dev/sound/pci/t4dwave.c
@@ -854,7 +854,8 @@ tr_pci_attach(device_t dev)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/tr->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &tr->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &tr->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/via8233.c b/sys/dev/sound/pci/via8233.c
index f8f136e9ab23..598e88fdb8ee 100644
--- a/sys/dev/sound/pci/via8233.c
+++ b/sys/dev/sound/pci/via8233.c
@@ -792,7 +792,8 @@ via_attach(device_t dev)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/via->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &via->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &via->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
@@ -808,7 +809,8 @@ via_attach(device_t dev)
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/NSEGS * sizeof(struct via_dma_op),
/*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &via->sgd_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &via->sgd_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/via82c686.c b/sys/dev/sound/pci/via82c686.c
index 2e958ac48f59..95c20f1cfbc8 100644
--- a/sys/dev/sound/pci/via82c686.c
+++ b/sys/dev/sound/pci/via82c686.c
@@ -544,7 +544,8 @@ via_attach(device_t dev)
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/via->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &via->parent_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &via->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
@@ -560,7 +561,8 @@ via_attach(device_t dev)
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/NSEGS * sizeof(struct via_dma_op),
/*nsegments*/1, /*maxsegz*/0x3ffff,
- /*flags*/0, &via->sgd_dmat) != 0) {
+ /*flags*/0, /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &via->sgd_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;
}
diff --git a/sys/dev/sound/pci/vibes.c b/sys/dev/sound/pci/vibes.c
index 7eb495562471..589be74576fd 100644
--- a/sys/dev/sound/pci/vibes.c
+++ b/sys/dev/sound/pci/vibes.c
@@ -776,7 +776,8 @@ sv_attach(device_t dev) {
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/sc->bufsz, /*nsegments*/1,
/*maxsegz*/0x3ffff, /*flags*/0,
- &sc->parent_dmat) != 0) {
+ /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant, &sc->parent_dmat) != 0) {
device_printf(dev, "sv_attach: Unable to create dma tag\n");
goto fail;
}
diff --git a/sys/dev/sound/usb/uaudio_pcm.c b/sys/dev/sound/usb/uaudio_pcm.c
index 4ea33f3b707b..b676aa1b2e21 100644
--- a/sys/dev/sound/usb/uaudio_pcm.c
+++ b/sys/dev/sound/usb/uaudio_pcm.c
@@ -307,6 +307,8 @@ ua_attach(device_t dev)
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/bufsz, /*nsegments*/1,
/*maxsegz*/0x3fff, /*flags*/0,
+ /*lockfunc*/busdma_lock_mutex,
+ /*lockarg*/&Giant,
&ua->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto bad;