Subject: sys/compat/ossaudio/ossaudio.c seems to need ioctl(AUDIO_GETINFO)
To: tech-kern@netbsd.org, Perry E.Metzger <perry@piermont.com>
From: George Michaelson <ggm@apnic.net>
List: tech-kern
Date: 12/05/2005 16:26:06
--MP_Q=h_nLQ9_5ELO+aEMgN3gqS
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


[I've cc'd Perry because he worked last on the head state, yamt ditto
 for his branch, and Kent for the kent-audio branch, and the pkg
 owner. -ggm]

The ossaudio stuff tries to avoid extra ioctls by using the audio
AUDIO_INITINFO() call to get the current state when writing to the device.
(AUDIO_INITINFO() does a memset of the struct to all-ones from what I
can see. I don't see how that helps.)

However, I've noticed that with kphone, and some other apps, the
mixer/input device is being flipped to 'cd' from 'microphone' under
apps like kphone. It looks like something is not set right in the OSS
compat layer when AUDIO_INITINFO() is used.

I changed the calls to ioctl(AUDIO_GETINFO) into all structs being used
by a subsequent ioctl(AUDIO_SETINFO) (ie, where it called
AUDIO_INITINFO() before) and this no longer happens:

much happyness: I can use kphone to make sip calls, I can use
record->in on audacity. Before, after some unknown amount of I/O the
input mike went dead, had to run /usr/bin/audioctl -w record.port=1
and /usr/bin/audioctl -w record.gain=240 to get it back.

Its possible I've mis-diagnosed things, there is some interaction with
eg other X11 aps snarfing the audio device. However, test-before-set
seems to work better than the newer non-OSS compat 'set the struct'
method for this case. Is the call to AUDIO_GETINFO so much more
expensive than a memset?

YMMV

-George

(diff -bu attached)


--MP_Q=h_nLQ9_5ELO+aEMgN3gqS
Content-Type: application/octet-stream; name=ossaudio.c.diff
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=ossaudio.c.diff

LS0tIHN5cy9jb21wYXQvb3NzYXVkaW8vb3NzYXVkaW8uYy5kaXN0CTIwMDUtMTItMDUgMTM6NTE6
MzIuMDAwMDAwMDAwICsxMDAwCisrKyBzeXMvY29tcGF0L29zc2F1ZGlvL29zc2F1ZGlvLmMJMjAw
NS0xMi0wNSAxNjoxNjo1Mi4wMDAwMDAwMDAgKzEwMDAKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQkv
KiBUaGlzIGNhbGwgaXMgbWVyZWx5IGFkdmlzb3J5LCBhbmQgbWF5IGJlIGEgbm9wLiAqLwogCQli
cmVhazsKIAljYXNlIE9TU19TTkRDVExfRFNQX1NQRUVEOgotCQlBVURJT19JTklUSU5GTygmdG1w
aW5mbyk7CisJCSh2b2lkKSBpb2N0bGYoZnAsIEFVRElPX0dFVElORk8sIChjYWRkcl90KSZ0bXBp
bmZvLCBwKTsKIAkJZXJyb3IgPSBjb3B5aW4oU0NBUkcodWFwLCBkYXRhKSwgJmlkYXQsIHNpemVv
ZiBpZGF0KTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7CkBAIC0xNDksNyArMTQ5LDcgQEAK
IAkJCWdvdG8gb3V0OwogCQlicmVhazsKIAljYXNlIE9TU19TTkRDVExfRFNQX1NURVJFTzoKLQkJ
QVVESU9fSU5JVElORk8oJnRtcGluZm8pOworCQkodm9pZCkgaW9jdGxmKGZwLCBBVURJT19HRVRJ
TkZPLCAoY2FkZHJfdCkmdG1waW5mbywgcCk7CiAJCWVycm9yID0gY29weWluKFNDQVJHKHVhcCwg
ZGF0YSksICZpZGF0LCBzaXplb2YgaWRhdCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwpA
QCAtMTc1LDcgKzE3NSw3IEBACiAJCQlnb3RvIG91dDsKIAkJYnJlYWs7CiAJY2FzZSBPU1NfU05E
Q1RMX0RTUF9TRVRGTVQ6Ci0JCUFVRElPX0lOSVRJTkZPKCZ0bXBpbmZvKTsKKwkJKHZvaWQpIGlv
Y3RsZihmcCwgQVVESU9fR0VUSU5GTywgKGNhZGRyX3QpJnRtcGluZm8sIHApOwogCQllcnJvciA9
IGNvcHlpbihTQ0FSRyh1YXAsIGRhdGEpLCAmaWRhdCwgc2l6ZW9mIGlkYXQpOwogCQlpZiAoZXJy
b3IpCiAJCQlnb3RvIG91dDsKQEAgLTI3OCw3ICsyNzgsNyBAQAogCQkJZ290byBvdXQ7CiAJCWJy
ZWFrOwogCWNhc2UgT1NTX1NORENUTF9EU1BfQ0hBTk5FTFM6Ci0JCUFVRElPX0lOSVRJTkZPKCZ0
bXBpbmZvKTsKKwkJKHZvaWQpIGlvY3RsZihmcCwgQVVESU9fR0VUSU5GTywgKGNhZGRyX3QpJnRt
cGluZm8sIHApOwogCQllcnJvciA9IGNvcHlpbihTQ0FSRyh1YXAsIGRhdGEpLCAmaWRhdCwgc2l6
ZW9mIGlkYXQpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKQEAgLTMxMCw3ICszMTAsNyBA
QAogCQlpZiAoaWRhdCA9PSAwKQogCQkJaWRhdCA9IHRtcGluZm8ucGxheS5idWZmZXJfc2l6ZSAv
IHRtcGluZm8uYmxvY2tzaXplOwogCQlpZGF0ID0gKHRtcGluZm8ucGxheS5idWZmZXJfc2l6ZSAv
IGlkYXQpICYgLTQ7Ci0JCUFVRElPX0lOSVRJTkZPKCZ0bXBpbmZvKTsKKwkJKHZvaWQpIGlvY3Rs
ZihmcCwgQVVESU9fR0VUSU5GTywgKGNhZGRyX3QpJnRtcGluZm8sIHApOwogCQl0bXBpbmZvLmJs
b2Nrc2l6ZSA9IGlkYXQ7CiAJCWVycm9yID0gaW9jdGxmKGZwLCBBVURJT19TRVRJTkZPLCAoY2Fk
ZHJfdCkmdG1waW5mbywgcCk7CiAJCWlmIChlcnJvcikKQEAgLTMyMSw3ICszMjEsNyBAQAogCQkJ
Z290byBvdXQ7CiAJCWJyZWFrOwogCWNhc2UgT1NTX1NORENUTF9EU1BfU0VURlJBR01FTlQ6Ci0J
CUFVRElPX0lOSVRJTkZPKCZ0bXBpbmZvKTsKKwkJKHZvaWQpIGlvY3RsZihmcCwgQVVESU9fU0VU
SU5GTywgKGNhZGRyX3QpJnRtcGluZm8sIHApOwogCQllcnJvciA9IGNvcHlpbihTQ0FSRyh1YXAs
IGRhdGEpLCAmaWRhdCwgc2l6ZW9mIGlkYXQpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsK
QEAgLTQ2Nyw3ICs0NjcsNyBAQAogCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCWNhc2UgT1NTX1NO
RENUTF9EU1BfU0VUVFJJR0dFUjoKLQkJQVVESU9fSU5JVElORk8oJnRtcGluZm8pOworCQkodm9p
ZCkgaW9jdGxmKGZwLCBBVURJT19HRVRJTkZPLCAoY2FkZHJfdCkmdG1waW5mbywgcCk7CiAJCWVy
cm9yID0gY29weWluKFNDQVJHKHVhcCwgZGF0YSksICZpZGF0LCBzaXplb2YgaWRhdCk7CiAJCWlm
IChlcnJvcikKIAkJCWdvdG8gb3V0OwpAQCAtMTE1OSw3ICsxMTU5LDcgQEAKIAlpZiAoaW5mby0+
YmxvY2tzaXplICYgKGluZm8tPmJsb2Nrc2l6ZS0xKSkgewogCQlmb3IocyA9IDMyOyBzIDwgaW5m
by0+YmxvY2tzaXplOyBzIDw8PSAxKQogCQkJOwotCQlBVURJT19JTklUSU5GTygmc2V0KTsKKwkJ
KHZvaWQpIGZwLT5mX29wcy0+Zm9faW9jdGwoZnAsIEFVRElPX0dFVElORk8sIChjYWRkcl90KSZz
ZXQsIHApOwogCQlzZXQuYmxvY2tzaXplID0gczsKIAkJZnAtPmZfb3BzLT5mb19pb2N0bChmcCwg
QVVESU9fU0VUSU5GTywgKGNhZGRyX3QpJnNldCwgcCk7CiAJCWZwLT5mX29wcy0+Zm9faW9jdGwo
ZnAsIEFVRElPX0dFVElORk8sIChjYWRkcl90KWluZm8sIHApOwo=

--MP_Q=h_nLQ9_5ELO+aEMgN3gqS--