kern/152378: [sound][patch] Update snd_envy24ht to be MPSAFE and
use 32-bit DMA addresses
Jason Harmening
jason.harmening at gmail.com
Thu Nov 18 21:00:19 UTC 2010
>Number: 152378
>Category: kern
>Synopsis: [sound][patch] Update snd_envy24ht to be MPSAFE and use 32-bit DMA addresses
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Thu Nov 18 21:00:18 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator: Jason Harmening
>Release: 8.1-STABLE
>Organization:
>Environment:
FreeBSD riviera.austin.rr.com 8.1-STABLE FreeBSD 8.1-STABLE #0: Sun Nov 14 12:01:19 CST 2010 jason at riviera.austin.rr.com:/usr/obj/usr/src/sys/CUSTOM amd64
>Description:
--Allow DMA addresses anywhere in the lower 4GB--Envy24HT has a 32-bit DMA engine, not 28-bit like Envy24
--Mark interrupt handler as MPSAFE, seems to be correctly synchronized
Testing done:
daily usage of envy24ht-based sound card for ~1yr on machine w/ 6GB RAM
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
--- envy24ht.h.orig 2007-05-27 14:58:39.000000000 -0500
+++ envy24ht.h 2009-05-06 10:49:56.000000000 -0500
@@ -176,8 +176,7 @@
#define ENVY24HT_VOL_MIN 96 /* -144db(negate) */
#define ENVY24HT_VOL_MUTE 127 /* mute */
-#define BUS_SPACE_MAXADDR_ENVY24 0x0fffffff /* Address space beyond 256MB is not
- supported */
+#define BUS_SPACE_MAXADDR_ENVY24 0xffffffff
#define BUS_SPACE_MAXSIZE_ENVY24 0x3fffc /* 64k x 4byte(1dword) */
#define ENVY24HT_CCS_GPIO_HDATA 0x1E
--- envy24ht.c 2009-05-07 09:09:31.000000000 -0500
+++ envy24ht.c 2009-05-07 09:22:38.000000000 -0500
@@ -2421,7 +2421,7 @@
sc->irq = bus_alloc_resource(sc->dev, SYS_RES_IRQ, &sc->irqid,
0, ~0, 1, RF_ACTIVE | RF_SHAREABLE);
if (!sc->irq ||
- snd_setup_intr(sc->dev, sc->irq, 0, envy24ht_intr, sc, &sc->ih)) {
+ snd_setup_intr(sc->dev, sc->irq, INTR_MPSAFE, envy24ht_intr, sc, &sc->ih)) {
device_printf(sc->dev, "unable to map interrupt\n");
return ENXIO;
}
@@ -2431,7 +2431,7 @@
/*alignment*/4,
/*boundary*/0,
/*lowaddr*/BUS_SPACE_MAXADDR_ENVY24,
- /*highaddr*/BUS_SPACE_MAXADDR_ENVY24,
+ /*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
/*maxsize*/BUS_SPACE_MAXSIZE_ENVY24,
/*nsegments*/1, /*maxsegsz*/0x3ffff,
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list