bba4862c64
- Rework the entire pcm_channel structure: * Remove rarely used link placeholder, instead, make each pcm_channel as head/link of each own/each other. Unlock - Lock sequence due to sleep malloc has been reduced. * Implement "busy" queue which will contain list of busy/active channels. This greatly reduce locking contention for example while servicing interrupt for hardware with many channels or when virtual channels reach its 256 peak channels. - So I heard you like v chan ... O RLY? Welcome to Virtual **Record** Channels (vrec, rec vchans, vchans for recording, Rec-Chan, you decide), the ultimate solutions for your nagging O_RDWR full-duplex wannabe (note: flash plugins) monopolizing single record channel causing EBUSY. Vrec works exactly like Vchans (or, should I rename it to "Vplay" :) , except that it operates on the opposite direction (recording). Up to 256 vrecs (like vchans) are possible. Notes: * Relocate dev.pcm.%d.{vchans,vchanformat,vchanrate} to each of its respective node/direction: dev.pcm.%d.play.* for "play" (cdev = dsp%d.vp%d) dev.pcm.%d.rec.* for "record" (cdev = dsp%d.vr%d) * Don't expect that it will magically give you ability to split "recording source" (eg: 1 channel for cdrom, 1 channel for mic, etc). Just admit that you only have a *single* recording source / channel. Please bug your hardware vendor instead :) - Bump maxautovchans from 4 to 16. For a full-fledged multimedia desktop/workstation with too many soundservers installed (esound, artsd, jackd, pulse/polypaudio, ding-dong pling plong mudkip fuh fuh, etc), 4 seems inadequate. There will be no memory penalty here, since virtual channels are allocate only by demand. - Nuke/Rework the entire statically created cdev entries. Everything is clonable through snd own clone manager which designed to withstand many kind of abusive devfs droids such as: * while : ; do /bin/test -e /dev/dsp ; done * jot 16777216 0 | while read x ; do ls /dev/dsp0.$x ; done * hundreds (could be thousands) concurrent threads/process opening "/dev/dsp" (previously, this might result EBUSY even with just 3 contesting threads/procs). o Reusable clone objects (instead of creating new one like there's no tomorrow) after certain expiration deadline. The clone allocator will decide whether to reuse, share, or creating new clone. o Automatic garbage collector. - Dynamic unit magic allocator. Maximum attached soundcards can be tuned using tunable "hw.snd.maxunit" (Default to 512). Minimum is 16, and maximum is 2048. - ..other fixes, mostly related to concurrency issues. joel@ will do the manpage updates on sound(4). Have fun. |
||
---|---|---|
.. | ||
3dfx | ||
3dfx_linux | ||
aac | ||
accf_data | ||
accf_http | ||
acpi | ||
agp | ||
aha | ||
ahb | ||
aic | ||
aic7xxx | ||
aio | ||
amd | ||
amr | ||
an | ||
aout | ||
apm | ||
ar | ||
arcmsr | ||
arcnet | ||
arl | ||
asr | ||
ata | ||
ath | ||
ath_hal | ||
ath_rate_amrr | ||
ath_rate_onoe | ||
ath_rate_sample | ||
aue | ||
auxio | ||
awi | ||
axe | ||
bce | ||
bfe | ||
bge | ||
bios | ||
bktr | ||
bridgestp | ||
cam | ||
canbepm | ||
canbus | ||
cardbus | ||
cbb | ||
cd9660 | ||
cd9660_iconv | ||
cdce | ||
ce | ||
ciss | ||
cm | ||
coda | ||
coda5 | ||
coff | ||
cp | ||
cpufreq | ||
crypto | ||
cryptodev | ||
cs | ||
ctau | ||
cue | ||
cx | ||
cxgb | ||
dc | ||
dcons | ||
dcons_crom | ||
de | ||
digi | ||
dpt | ||
drm | ||
dummynet | ||
ed | ||
elink | ||
em | ||
en | ||
ep | ||
esp | ||
ex | ||
exca | ||
ext2fs | ||
fatm | ||
fdc | ||
fdescfs | ||
fe | ||
firewire | ||
firmware | ||
fxp | ||
gem | ||
geom | ||
harp | ||
hatm | ||
hfa | ||
hifn | ||
hme | ||
hpfs | ||
hptiop | ||
hptmv | ||
hwpmc | ||
i2c | ||
ibcs2 | ||
ichwd | ||
ida | ||
idt | ||
ie | ||
if_bridge | ||
if_disc | ||
if_edsc | ||
if_ef | ||
if_faith | ||
if_gif | ||
if_gre | ||
if_lagg | ||
if_ndis | ||
if_ppp | ||
if_sl | ||
if_stf | ||
if_tap | ||
if_tun | ||
if_vlan | ||
iir | ||
io | ||
ip_mroute_mod | ||
ipdivert | ||
ipfilter | ||
ipfw | ||
ipmi | ||
ips | ||
ipw | ||
ipwfw | ||
isp | ||
ispfw | ||
iwi | ||
iwifw | ||
ixgb | ||
joy | ||
kbdmux | ||
kue | ||
le | ||
lge | ||
libalias | ||
libiconv | ||
libmbpool | ||
libmchain | ||
linprocfs | ||
linsysfs | ||
linux | ||
lmc | ||
lpt | ||
mac_biba | ||
mac_bsdextended | ||
mac_ifoff | ||
mac_lomac | ||
mac_mls | ||
mac_none | ||
mac_partition | ||
mac_portacl | ||
mac_seeotheruids | ||
mac_stub | ||
mac_test | ||
mcd | ||
md | ||
mem | ||
mfi | ||
mii | ||
mlx | ||
mly | ||
mmc | ||
mmcsd | ||
mpt | ||
mqueue | ||
msdosfs | ||
msdosfs_iconv | ||
mse | ||
msk | ||
mxge | ||
my | ||
ncp | ||
ncv | ||
ndis | ||
netgraph | ||
nfe | ||
nfs4client | ||
nfsclient | ||
nfsserver | ||
nge | ||
nmdm | ||
nsp | ||
ntfs | ||
ntfs_iconv | ||
nullfs | ||
nve | ||
nwfs | ||
oltr | ||
padlock | ||
patm | ||
pccard | ||
pcfclock | ||
pcn | ||
pecoff | ||
pf | ||
pflog | ||
plip | ||
pmc | ||
portalfs | ||
powermac_nvram | ||
ppbus | ||
ppc | ||
ppi | ||
pps | ||
procfs | ||
pseudofs | ||
pst | ||
puc | ||
ral | ||
random | ||
ray | ||
rc | ||
rc4 | ||
re | ||
reiserfs | ||
rl | ||
rndtest | ||
rp | ||
rr232x | ||
rue | ||
rum | ||
s3 | ||
safe | ||
sbni | ||
sbsh | ||
scc | ||
scd | ||
scsi_low | ||
sem | ||
sf | ||
sio | ||
sis | ||
sk | ||
slhci | ||
smbfs | ||
sn | ||
snc | ||
snp | ||
sound | ||
speaker | ||
splash | ||
sppp | ||
sr | ||
ste | ||
stg | ||
stge | ||
streams | ||
svr4 | ||
sym | ||
syscons | ||
sysvipc | ||
ti | ||
tl | ||
trm | ||
twa | ||
twe | ||
tx | ||
txp | ||
uark | ||
uart | ||
ubsa | ||
ubsec | ||
ubser | ||
ucom | ||
ucycom | ||
udav | ||
udbp | ||
udf | ||
udf_iconv | ||
ufm | ||
ufoma | ||
ufs | ||
uftdi | ||
ugen | ||
uhid | ||
uipaq | ||
ukbd | ||
ulpt | ||
umapfs | ||
umass | ||
umct | ||
umodem | ||
ums | ||
unionfs | ||
uplcom | ||
ural | ||
urio | ||
usb | ||
uscanner | ||
utopia | ||
uvisor | ||
uvscom | ||
vesa | ||
vge | ||
vkbd | ||
vpo | ||
vr | ||
vx | ||
wb | ||
wi | ||
wlan | ||
wlan_acl | ||
wlan_amrr | ||
wlan_ccmp | ||
wlan_tkip | ||
wlan_wep | ||
wlan_xauth | ||
xe | ||
xfs | ||
xl | ||
zfs | ||
zlib | ||
Makefile | ||
Makefile.inc |