>It's true that the Trident IRQ acknowledge is probably broken at some
>level. I found, with small periods, that Trident chip acknowledges
>the IRQ more times, so it could be possible, that some interrupts are
>lost, too. You can look for the spurious word in the Trident interrupt
>handling routine for my hack against the multiple IRQ acknowledge.

those messages don't show up in these cases. i have seen 1 or examples
of them in /var/log/messages, but none during the tests i have been
running. all day yesterday, i got just one.

what's the story with this:

        // outl((ST_TARGET_REACHED | MIXER_OVERFLOW | MIXER_UNDERFLOW), 
TRID_REG(trident, T4D_MISCINT));

the OSS driver says:

        /* manually clear interrupt status, bad hardware design, blame T^2 */
        outl((ST_TARGET_REACHED | MIXER_OVERFLOW | MIXER_UNDERFLOW),
             TRID_REG(card, T4D_MISCINT));

have you determined that this is not necessary?

i see 2 possible explanations here:

  1) broken on this h/w (trident)
  2) a real data race exists

which do you think it is?

looking more broadly, doesn't it seem that the alsa-lib sync call
should cause poll(2) to be usable for both read&write in a single
call?  that is, we wouldn't wake up the sleeper if its in a poll table
corresponding to the other stream, just remove it from the poll table
we're handling right now? this doesn't need low level driver support
as abramo suggested - it can all be done in the midlevel code.  i'm
not totally sure how easy this is - its not clear what happens if the
wait times out - i don't think that ALSA would get any notification of
that. still, it seems likely that this type of functionality can be
implemented (there are hints of it in the old kernel select
implementation in 2.0).

--p



_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to