Date: Tue, 4 Mar 2003 19:02:28 +0100 (CET) From: Ulrich Spoerlein <q@uni.de> To: FreeBSD-gnats-submit@FreeBSD.org Subject: kern/48927: pcm: setting samplerate below 3400 or above 48700 will result in infinte loop in channel.c:chn_tryspeed() Message-ID: <200303041802.h24I2SM1050281@coyote.dnsalias.net>
next in thread | raw e-mail | index | archive | help
>Number: 48927 >Category: kern >Synopsis: pcm: setting samplerate below 3400 or above 48700 will result in infinte loop in channel.c:chn_tryspeed() >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Mar 04 10:10:02 PST 2003 >Closed-Date: >Last-Modified: >Originator: Ulrich Spoerlein >Release: FreeBSD 4.7-STABLE i386 >Organization: >Environment: System: FreeBSD coyote.dnsalias.net 4.7-STABLE FreeBSD 4.7-STABLE #0: Thu Jan 23 14:05:57 CET 2003 root@roadrunner:/usr/obj/usr/src/sys/COYOTE i386 Copyright (c) 1992-2003 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 4.8-RC #3: Tue Mar 4 18:19:11 CET 2003 root@roadrunner:/usr/obj/usr/src/sys/ROADRUNNER Timecounter "i8254" frequency 1193182 Hz CPU: Intel Celeron (902.05-MHz 686-class CPU) Origin = "GenuineIntel" Id = 0x686 Stepping = 6 Features=0x383f9ff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE> real memory = 402640896 (393204K bytes) avail memory = 386125824 (377076K bytes) Preloaded elf kernel "kernel" at 0xc04ee000. Preloaded elf module "nvidia.ko" at 0xc04ee09c. link_elf: symbol linux_ioctl_register_handler undefined VESA: v3.0, 16384k memory, flags:0x1, mode table:0xc0332302 (1000022) VESA: NVidia netsmb_dev: loaded Pentium Pro MTRR support enabled md0: Malloc disk Using $PIR table, 6 entries at 0xc00f0d10 apm0: <APM BIOS> on motherboard apm0: found APM BIOS v1.2, connected at v1.2 npx0: <math processor> on motherboard npx0: INT 16 interface pcib0: <Intel 82443BX (440 BX) host to PCI bridge> on motherboard pci0: <PCI bus> on pcib0 agp0: <Intel 82443BX (440 BX) host to PCI bridge> mem 0xe4000000-0xe7ffffff at device 0.0 on pci0 pcib1: <Intel 82443BX (440 BX) PCI-PCI (AGP) bridge> at device 1.0 on pci0 pci1: <PCI bus> on pcib1 pci1: <NVidia model 0110 graphics accelerator> at 0.0 irq 11 isab0: <Intel 82371AB PCI to ISA bridge> at device 4.0 on pci0 isa0: <ISA bus> on isab0 atapci0: <Intel PIIX4 ATA33 controller> port 0xd800-0xd80f at device 4.1 on pci0 ata0: at 0x1f0 irq 14 on atapci0 ata1: at 0x170 irq 15 on atapci0 pci0: <Intel 82371AB/EB (PIIX4) USB controller> at 4.2 irq 5 intpm0: <Intel 82371AB Power management controller> port 0xe800-0xe80f irq 9 at device 4.3 on pci0 intpm0: I/O mapped e800 intpm0: intr IRQ 9 enabled revision 0 smbus0: <System Management Bus> on intsmb0 smb0: <SMBus general purpose I/O> on smbus0 intpm0: PM I/O mapped e400 pcm0: <Creative EMU10K1> port 0xd000-0xd01f irq 5 at device 9.0 on pci0 pcm0: <SigmaTel STAC9721/9723 ac97 codec> bktr0: <BrookTree 878> mem 0xd7000000-0xd7000fff irq 7 at device 11.0 on pci0 iicbb0: <I2C bit-banging driver> on bti2c0 iicbus0: <Philips I2C bus> on iicbb0 master-only iicsmb0: <I2C to SMB bridge> on iicbus0 smbus1: <System Management Bus> on iicsmb0 smb1: <SMBus general purpose I/O> on smbus1 iicbus1: <Philips I2C bus> on iicbb0 master-only iicsmb1: <I2C to SMB bridge> on iicbus1 smbus2: <System Management Bus> on iicsmb1 smb2: <SMBus general purpose I/O> on smbus2 smbus3: <System Management Bus> on bti2c0 smb3: <SMBus general purpose I/O> on smbus3 bktr0: Hauppauge Model 44354 C221 bktr0: Detected a MSP3415D-B3 at 0x80 bktr0: Hauppauge WinCast/TV, Philips FR1216 PAL FM tuner, msp3400c stereo, remote control. pci0: <unknown card> (vendor=0x109e, dev=0x0878) at 11.1 irq 7 xl0: <3Com 3c905B-TX Fast Etherlink XL> port 0xb400-0xb47f mem 0xd4800000-0xd480007f irq 11 at device 12.0 on pci0 xl0: Ethernet address: 00:10:5a:d9:e7:4c miibus0: <MII bus> on xl0 xlphy0: <3Com internal media interface> on miibus0 xlphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0 fdc0: FIFO enabled, 8 bytes threshold fd0: <1440-KB 3.5" drive> on fdc0 drive 0 atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0 atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0 kbd0 at atkbd0 psm0: <PS/2 Mouse> flags 0x8 irq 12 on atkbdc0 psm0: model IntelliMouse, device ID 3 vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0 sc0: <System console> at flags 0x100 on isa0 sc0: VGA <16 virtual consoles, flags=0x300> sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0 sio0: type 16550A sio1 at port 0x2f8-0x2ff irq 3 on isa0 sio1: type 16550A ppc0: <Parallel port> at port 0x378-0x37f flags 0x8 on isa0 ppc0: SMC-like chipset (ECP-only) in ECP mode ppc0: FIFO with 16/16/9 bytes threshold ppbus0: IEEE1284 device found Probing for PnP devices on ppbus0: lpt0: <Printer> on ppbus0 lpt0: Polled port ppi0: <Parallel I/O> on ppbus0 ad0: 76351MB <SAMSUNG SV8004H> [155127/16/63] at ata0-master UDMA33 acd0: CD-RW <ASUS CRW-4012A> at ata1-master UDMA33 Mounting root from ufs:/dev/ad0s2a cd0 at ata1 bus 0 target 0 lun 0 cd0: <ASUS CRW-4012A 1.0> Removable CD-ROM SCSI-0 device cd0: 33.000MB/s transfers cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed cd9660: Joliet Extension (Level 1) nvidia0: <GeForce2 MX/MX 400> mem 0xd8000000-0xdfffffff,0xd5000000-0xd5ffffff irq 11 at device 0.0 on pci1 pciconf -vl pcm0@pci0:9:0: class=0x040100 card=0x00201102 chip=0x00021102 rev=0x05 hdr=0x00 vendor = 'Creative Labs' device = 'EMU10K1 Audio Chipset (SB Live!)' class = multimedia subclass = audio emujoy0@pci0:9:1: class=0x098000 card=0x00201102 chip=0x70021102 rev=0x05 hdr=0x00 vendor = 'Creative Labs' device = 'PCI Gameport Joystick' class = input device >Description: While debugging WINE on FreeBSD I noticed that it was unable to _try_ setting /dev/dsp to 96kHz. It wants to try 96000, 48000, 44100, .. etc, Hz and takes the first one that got set correctly. Sadly it will enter an infinite loop while doing this ioctl: rc = 96000; ioctl(fd, SNDCTL_DSP_SPEED, &rc) I then tried which rates would cleanly exit the ioctl(), and which ones would cause infinite loops. Looks like anything below 3400 and above 48700 will cause this behaviour. A ktrace/kdump will look like this: 1982 oss-test CALL write(0x1,0x804b000,0x1f) 1982 oss-test GIO fd 1 wrote 31 bytes "setting sampling rate to 48000 " 1982 oss-test RET write 31/0x1f 1982 oss-test CALL ioctl(0x3,SNDCTL_DSP_SPEED,0xbfbff558) 1982 oss-test RET ioctl 0 1982 oss-test CALL write(0x1,0x804b000,0x1f) 1982 oss-test GIO fd 1 wrote 31 bytes "setting sampling rate to 96000 " 1982 oss-test RET write 31/0x1f 1982 oss-test CALL ioctl(0x3,SNDCTL_DSP_SPEED,0xbfbff558) 1982 oss-test RET ioctl RESTART 1982 oss-test CALL ioctl(0x3,SNDCTL_DSP_SPEED,0xbfbff558) 1982 oss-test RET ioctl RESTART 1982 oss-test CALL ioctl(0x3,SNDCTL_DSP_SPEED,0xbfbff558) 1982 oss-test RET ioctl RESTART 1982 oss-test CALL ioctl(0x3,SNDCTL_DSP_SPEED,0xbfbff558) 1982 oss-test RET ioctl RESTART 1982 oss-test CALL ioctl(0x3,SNDCTL_DSP_SPEED,0xbfbff558) 1982 oss-test RET ioctl RESTART 1982 oss-test CALL ioctl(0x3,SNDCTL_DSP_SPEED,0xbfbff558) 1982 oss-test RET ioctl RESTART 1982 oss-test CALL ioctl(0x3,SNDCTL_DSP_SPEED,0xbfbff558) 1982 oss-test RET ioctl RESTART [....] (I included the call with 48000 to make the normal behaviuor clear) truss looks similiar: setting sampling rate to 48000 write(1,0x804b000,31) = 31 (0x1f) ioctl(3,SNDCTL_DSP_SPEED,0xbfbff524) = 0 (0x0) setting sampling rate to 96000 write(1,0x804b000,31) = 31 (0x1f) ioctl(3,SNDCTL_DSP_SPEED,0xbfbff524) ERR#54 'Connection reset by peer' ioctl(3,SNDCTL_DSP_SPEED,0xbfbff524) ERR#54 'Connection reset by peer' ioctl(3,SNDCTL_DSP_SPEED,0xbfbff524) ERR#54 'Connection reset by peer' ioctl(3,SNDCTL_DSP_SPEED,0xbfbff524) ERR#54 'Connection reset by peer' ioctl(3,SNDCTL_DSP_SPEED,0xbfbff524) ERR#54 'Connection reset by peer' [...] I then turned on debugging printf() in the pcm-driver. Here is the output with rates between 8000 - 48000Hz /kernel: pcm0: <Creative EMU10K1> port 0xd000-0xd01f irq 5 at device 9.0 on pci0 /kernel: pcm0: <SigmaTel STAC9721/9723 ac97 codec> /kernel: want format 8 /kernel: not mapped, feederflags 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 8000, try speed 8000, got speed 8000 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: defaulting to (1024, 128) /kernel: chn_setblocksize: soft bps 1, spd 8000, irqhz == 62 /kernel: chn_setblocksize: hard blksz requested 128 (maxsize 4096), got 128, irqhz == 62 /kernel: setspeed done, r = 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 8000, try speed 8000, got speed 8000 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: defaulting to (1024, 128) /kernel: chn_setblocksize: soft bps 1, spd 8000, irqhz == 62 /kernel: chn_setblocksize: hard blksz requested 128 (maxsize 4096), got 128, irqhz == 62 /kernel: setspeed done, r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: defaulting to (1024, 128) /kernel: chn_setblocksize: soft bps 1, spd 8000, irqhz == 62 /kernel: chn_setblocksize: hard blksz requested 128 (maxsize 4096), got 128, irqhz == 62 /kernel: SNDCTL_DSP_SETFRAGMENT 0x0020000b /kernel: SNDCTL_DSP_SETFRAGMENT 32 frags, 2048 sz /kernel: chn_setblocksize(32, 2048) /kernel: chn_setblocksize: soft bps 1, spd 8000, irqhz == 3 /kernel: chn_setblocksize: hard blksz requested 256 (maxsize 4096), got 256, irqhz == 31 /kernel: want format 16 /kernel: not mapped, feederflags 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 8000, try speed 8000, got speed 8000 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 2, spd 8000, irqhz == 7 /kernel: chn_setblocksize: hard blksz requested 512 (maxsize 4096), got 512, irqhz == 31 /kernel: setspeed done, r = 0 /kernel: want format 268435472 /kernel: not mapped, feederflags 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 8000, try speed 8000, got speed 8000 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 8000, irqhz == 15 /kernel: chn_setblocksize: hard blksz requested 1024 (maxsize 4096), got 1024, irqhz == 31 /kernel: setspeed done, r = 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 8000, try speed 8000, got speed 8000 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 8000, irqhz == 15 /kernel: chn_setblocksize: hard blksz requested 1024 (maxsize 4096), got 1024, irqhz == 31 /kernel: setspeed done, r = 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 11025, try speed 11025, got speed 11025 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 11025, irqhz == 21 /kernel: chn_setblocksize: hard blksz requested 2048 (maxsize 4096), got 2048, irqhz == 21 /kernel: setspeed done, r = 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 16000, try speed 16000, got speed 16000 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 16000, irqhz == 31 /kernel: chn_setblocksize: hard blksz requested 2048 (maxsize 4096), got 2048, irqhz == 31 /kernel: setspeed done, r = 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 22050, try speed 22050, got speed 22050 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 22050, irqhz == 43 /kernel: chn_setblocksize: hard blksz requested 2048 (maxsize 4096), got 2048, irqhz == 43 /kernel: setspeed done, r = 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 24000, try speed 24000, got speed 24000 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 24000, irqhz == 46 /kernel: chn_setblocksize: hard blksz requested 2048 (maxsize 4096), got 2048, irqhz == 46 /kernel: setspeed done, r = 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 32000, try speed 32000, got speed 32000 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 32000, irqhz == 62 /kernel: chn_setblocksize: hard blksz requested 2048 (maxsize 4096), got 2048, irqhz == 62 /kernel: setspeed done, r = 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 44100, try speed 44100, got speed 44100 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 44100, irqhz == 86 /kernel: chn_setblocksize: hard blksz requested 2048 (maxsize 4096), got 2048, irqhz == 86 /kernel: setspeed done, r = 0 /kernel: chn_flush c->flags 0x00013000 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: defaulting to (32, 4096) /kernel: chn_setblocksize: soft bps 4, spd 44100, irqhz == 43 /kernel: chn_setblocksize: hard blksz requested 2048 (maxsize 4096), got 2048, irqhz == 86 And here comes the interessting part: /kernel: pcm0: <Creative EMU10K1> port 0xd000-0xd01f irq 5 at device 9.0 on pci0 /kernel: pcm0: <SigmaTel STAC9721/9723 ac97 codec> /kernel: , feederflags 10 ^^^^^ stack corruption? /kernel: find feeder type 4, got 0xc25a60e0 /kernel: added feeder 0xc25a60e0, output 10000010 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 96000, irqhz == 187 /kernel: chn_setblocksize: hard blksz requested 1024 (maxsize 4096), got 1024, irqhz == 187 /kernel: feedrate = 0xc268b400 /kernel: feeder_set(FEEDRATE_SRC, 96000) = -1 /kernel: setspeed done, r = -1 /kernel: Failed to set speed 96000 falling back to 8000 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 8000, try speed 8000, got speed 8000 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 8000, irqhz == 15 /kernel: chn_setblocksize: hard blksz requested 1024 (maxsize 4096), got 1024, irqhz == 31 /kernel: setspeed done, r = 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 96000, try speed 48000, got speed 48000 /kernel: not mapped, feederflags 10 /kernel: find feeder type 4, got 0xc25a60e0 /kernel: added feeder 0xc25a60e0, output 10000010 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: sof, feederflags 10 /kernel: find feeder type 4, got 0xc25a60e0 /kernel: added feeder 0xc25a60e0, output 10000010 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 96000, irqhz == 187 /kernel: chn_setblocksize: hard blksz requested 1024 (maxsize 4096), got 1024, irqhz == 187 /kernel: feedrate = 0xc268b400 /kernel: feeder_set(FEEDRATE_SRC, 96000) = -1 /kernel: setspeed done, r = -1 /kernel: Failed to set speed 96000 falling back to 8000 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 8000, try speed 8000, got speed 8000 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 8000, irqhz == 15 /kernel: chn_setblocksize: hard blksz requested 1024 (maxsize 4096), got 1024, irqhz == 31 /kernel: setspeed done, r = 0 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 96000, try speed 48000, got speed 48000 /kernel: not mapped, feederflags 10 /kernel: find feeder type 4, got 0xc25a60e0 /kernel: added feeder 0xc25a60e0, output 10000010 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: ze: hard blksz requested 1024 (maxsize 4096), got 1024, irqhz == 187 ^^^^ stack corruption? /kernel: feedrate = 0xc268b400 /kernel: feeder_set(FEEDRATE_SRC, 96000) = -1 /kernel: setspeed done, r = -1 /kernel: Failed to set speed 96000 falling back to 8000 /kernel: setspeed, channel pcm0:play:0 /kernel: want speed 8000, try speed 8000, got speed 8000 /kernel: not mapped, feederflags 0 /kernel: r = 0 /kernel: chn_setblocksize(0, 0) /kernel: chn_setblocksize: updating (32, 2048) /kernel: chn_setblocksize: soft bps 4, spd 8000, irqhz == 15 /kernel: chn_setblocksize: hard blksz requested 1024 (maxsize 4096), got 1024, irqhz == 31 /kernel: setspeed done, r = 0 [endless loop] The obvious difference to the working example is feederflags=10 (and not 0) and it will enter the code in sys/dev/sound/pcm/channel.c at around line 830. There are several if (r) goto out; but I'm not sure which one the working example takes and which one causes the endless loop (I guess it has to do something with the return value in r. Any help is greatly appreciated, because I can't stop people from probing my hardware for 96kHz capability. >How-To-Repeat: Compile oss-test.c and see if it can set 96000 correctly. If it runs without problems, try the commented for/rc lines (these work for me, but setting i to anyhting below 3400 or above 48600 will lock /dev/dsp and eat up 100% CPU. >Fix: -CURRENT doesn't have the problem. A friend of mine, running 4.7-STABLE SMP with a SB PCI 512 doesn't have this problem too. --- oss-test.c begins here --- #include <sys/types.h> #include <sys/mman.h> #include <sys/soundcard.h> #include <err.h> #include <fcntl.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> int main() { int fd, rc, i, bytesok = 0; audio_buf_info info; int frags; int rates[] = {96000, 48000, 44100, 32000, 24000, 22050, 16000, 11025, 8000}; void *p; fd = open("/dev/dsp", O_WRONLY | O_DIRECT); if (fd == -1) err(1, "can't open audio device"); frags = 0x0020000B; /* 64K buffer (32 * 2^11) */ if (ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &frags) == -1) err(1, "can't set fragments"); if (ioctl(fd, SNDCTL_DSP_GETOSPACE, &info) == -1) err(1, "can't get info about i/o space"); rc = AFMT_S16_LE; if (ioctl(fd, SNDCTL_DSP_SAMPLESIZE, &rc) == -1) err(1, "can't set 16bit sample size"); rc = 1; if (ioctl(fd, SNDCTL_DSP_STEREO, &rc) == -1) err(1, "can't set stereo mode"); for (i=8; i > -1; i--) { rc = rates[i]; // for (i=3500; i < 48600; i += 100) { // rc = i; printf("setting sampling rate to %d\n", rc); if (ioctl(fd, SNDCTL_DSP_SPEED, &rc) == -1) err(1, "can't set sample rate to %d", rc); } printf("done\n"); exit (0); } --- oss-test.c ends here --- >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200303041802.h24I2SM1050281>