writing to /dev/dsp causes lockups with SoundBlaster

Trevor Johnson (trevor@jpj.net)
Sat, 3 Jan 1998 17:42:35 -0800 (PST)


I'm having a problem with 2.1.77, 2.1.76, and earlier kernels back to
about 2.1.69. I have a little script which I use to play .wav.gz files.
It looks like:

#!/bin/sh
zcat $1 | strace sox -t wav - -t ossdsp /dev/dsp

The reason for strace is that this script has been causing lockups: sound
will play for a short time (roughly half a second to three seconds), then
the computer stops responding to the keyboard (I can't change number lock
or caps lock, can't change consoles, can't scroll, and ctrl-alt-del has no
effect). While I don't have Ethernet set up with which to ping it, I
doubt it's pining for the fjords.

I downloaded
http://sunsite.unc.edu/pub/Linux/apps/sound/convert/sox-11gamma-cb3.tar.gz
and compiled it with the 2.1.77 kernel headers in place, but am still
getting the lockups. With my old copy of sox, the output of the strace
shows it doing

ioctl(3, SNDCTL_DSP_SYNC, 0) = 0
ioctl(3, SNDCTL_DSP_SETFMT, 0xbffffb38) = 0
ioctl(3, SNDCTL_DSP_STEREO, 0xbffffb38) = 0
ioctl(3, SNDCTL_DSP_SSPEED, 0xbffffb38) = 0

then it repeatedly does

read(0, "<data>", ..., 4096) = 4096
write(3, "<data>", ...., 4096) = 4096

Both the new and old copies of sox crash on the 18th write() call, just
before the "= 4096" would be printed.

I have a PnP SoundBlaster 32 with 8 MB RAM. It's initialized by isapnp,
then I loaded the minimal number of sound modules manually:

# insmod sound
# insmod sound_syms
# insmod uart401
# insmod sb io=0x220 irq=5 dma=1 dma16=5
SB 4.13 detected OK (220)
~# cat /dev/sndstat
OSS/Free:3.8s2++-971130
Load type: Driver loaded as a module
Kernel: Linux ppp9.csudh.edu 2.1.77 #5 Sat Jan 3 15:44:06 PST 1998 i586
Config options: 0

Installed drivers:

Card config:

Audio devices:
0: Sound Blaster 16 (4.13)

Synth devices:

Midi devices:

Timers:
0: System clock

Mixers:
0: Sound Blaster

Here's the configuration for my kernel. It's pretty heavily patched just
now, but I've experienced these lockups with earlier kernels that had
"# SMP = 1" as the only change.

CONFIG_EXPERIMENTAL=y
CONFIG_M586=y
CONFIG_MODULES=y
CONFIG_KERNELD=y
CONFIG_NET=y
CONFIG_PCI=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_OPTIMIZE=y
CONFIG_SYSVIPC=y
CONFIG_SYSCTL=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m
CONFIG_BINFMT_JAVA=m
CONFIG_VIDEO_SELECT=y
CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m
CONFIG_PNP=y
CONFIG_BLK_DEV_FD=m
CONFIG_BLK_DEV_IDE=y
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_BLK_DEV_IDEDMA=y
CONFIG_BLK_DEV_OPTI621=y
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_LOOP_CAST=m
CONFIG_BLK_DEV_LOOP_IDEA=m
CONFIG_BLK_DEV_LOOP_NONE=m
CONFIG_BLK_DEV_LOOP_STEGO=m
CONFIG_BLK_DEV_LOOP_XOR=m
CONFIG_PARIDE_PARPORT=m
CONFIG_PACKET=m
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_NOSR=y
CONFIG_SCSI=m
CONFIG_BLK_DEV_SD=m
CONFIG_CHR_DEV_ST=m
CONFIG_BLK_DEV_SR=m
CONFIG_CHR_DEV_SG=m
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_AHA1542=m
CONFIG_NETDEVICES=y
CONFIG_NET_ETHERNET=y
CONFIG_NET_ISA=y
CONFIG_NE2000=m
CONFIG_PPP=y
CONFIG_CDROM=m
CONFIG_MINIX_FS=m
CONFIG_EXT2_FS=y
CONFIG_EXT2_COMPRESS=y
CONFIG_EXT2_IND_BITMAP=y
CONFIG_EXT2_USE_LZV1=y
CONFIG_EXT2_USE_GZIP=y
CONFIG_GZ_HACK=y
CONFIG_EXT2_DEFAULT_COMPR_METHOD_GZIP3=y
CONFIG_EXT2_DEFAULT_CLUSTER_BITS_2=y
CONFIG_ISO9660_FS=m
CONFIG_JOLIET=y
CONFIG_FAT_FS=y
CONFIG_VFAT_FS=y
CONFIG_PROC_FS=y
CONFIG_NFS_FS=m
CONFIG_NFSD=m
CONFIG_SUNRPC=m
CONFIG_LOCKD=m
CONFIG_CODA_FS=m
CONFIG_SMB_FS=m
CONFIG_SMB_WIN95=y
CONFIG_AUTOFS_FS=m
CONFIG_UFS_FS=m
CONFIG_BSD_DISKLABEL=y
CONFIG_MAC_PARTITION=y
CONFIG_NLS=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_SERIAL=y
CONFIG_PRINTER=m
CONFIG_PRINTER_READBACK=y
CONFIG_SOUND=m
CONFIG_SB=m
CONFIG_ADLIB=m
CONFIG_SOFTOSS=m
CONFIG_YM3812=m
CONFIG_LOWLEVEL_SOUND=y
CONFIG_AWE32_SYNTH=m
CONFIG_VGA_CONSOLE=y
___
Trevor Johnson