On 05/09/2012 04:38 PM, Rui Nuno Capela wrote:
On 05/09/2012 02:03 AM, Fernando Lopez-Lezcano wrote:
Hi all (and Rui),
As noted in another thread I found out that the naming of the irq
processes of pci soundcards has changed with kernels >= 3.2 to be
uniform and predictable. That made it possible to change rtirq so that
(at least for pci cards) only the irq process that corresponds to the
soundcard gets an elevated priority - this was not completely reliable
before.
Another nice (very nice I'd say) side effect of this change is that now
udev can be trivially used to change the priorities of soundcards
dynamically. I tested this while running 3.2.16-rt27 on a Fedora 14
system. I removed "snd" and "usb" of the rtirq sysconfig file so that
it
would not touch those and rebooted. My hda_intel got the priority I
wanted, inserting (or removing) a usb or a pci-express card with a
Multiface II worked as well. Right now my simple script does not try to
order priorities, it just sets them to a fixed one. But well, it is a
start... Code attached (the udev rule goes into /etc/udev/rules.d/ in my
system)...
This simple script also returns the priority of the usb irq for the
soundcard to 50 (the default) when the card is unplugged, but it does
not check for multiple cards (ie: even if another soundcard is still
using the same irq process it downgrades its priority), this should be
fixed.
Feedback appreciated.
-- Fernando
PS: Another rtirq script in /etc/pm/sleep.d/ could save the current
priorities before a suspend and restore them after a resume - that does
not happen currently.
what about just `rtirq restart` on the sleep.d script (on thaw|resume) ?
indeed. that works just fine here since over 2 years.
the scripts I use to retain jackd2 & qjackctl during suspend/resume
cycles are available from
http://gareus.org/wiki/jack2contol
for dynamically switching audio-interfaces I settled on dbus (and not
udev, since jackd runs as user):
http://gareus.org/blog/jack2dbus
warning. there's no state salvage being done on
bad old rtirq script. in
fact `rtirq stop` is a plain nop by default, unless RTIRQ_RESET_ALL=1 is
set (cf. /etc/rtirq.conf aka. /etc/sysconfig/rtirq) which makes all
target irq service threads to reset to rtprio=50 but also to "normal"
scheduling class(SCHED_OTHER). might not on par with the times :)
note that `rtirq restart` is actually the same function as `rtirq stop`
immediately followed by `rtirq start`. however, as s the very same irq
service threads are at stake, this whole remark might not be an issue
after all:)
byee