At Thu, 23 Oct 2008 21:17:01 +0100, Jason Harvey wrote: > > Takashi Iwai wrote: > > Just to be sure: is it the driver with my patch or without the patch? > > The patch seems broken anyway, so abandon it, and check only without > > the patch from now on. > > > Have reverted to unpatched version, now logging kernel messages to a file. > The attached is the output for debug=2 from running the mplayer with the > oss proc fix. > WARNING... the gzip expands to 4.5MB, which explains the overflow on the > dmesg ring buffer. > But only the first hundred lines and last ten are different, the rest > are all the same as far as I could see. > > The only things I noticed that does change is that the repeated lines > start like this :- > > Oct 23 20:45:28 sentry kernel: SBXFI: IRQ = > 0x500 > Oct 23 20:45:28 sentry kernel: SBXFI: POINTER = > 0x3e0 > Oct 23 20:45:28 sentry kernel: SBXFI: SET TIMER TICKS = > 16 > Oct 23 20:45:28 sentry kernel: SBXFI: POINTER = > 0x3e0 > Oct 23 20:45:28 sentry kernel: SBXFI: POINTER = 0x3e0 > > And that the pattern changes after a short time dropping one of the > POINTER lines. > Screen output below to show commands used. Thanks. I guess the problem was > Oct 23 20:45:28 sentry kernel: SBXFI: Allocate SRC 0 > Oct 23 20:45:28 sentry kernel: SBXFI: allocated TLB at 0 for 16 pages > Oct 23 20:45:28 sentry kernel: SBXFI: Setting TLB buffer page 0x1304a000 > Oct 23 20:45:28 sentry kernel: SBXFI: release TLB at 0 for 16 pages > Oct 23 20:45:28 sentry kernel: SBXFI: Disabling TLB buffer > Oct 23 20:45:28 sentry kernel: SBXFI: PLAYBACK PREPARE: rate=96000, period_size=1024, buffer_size=16384 So the stream is started at the state where the TLB is cleared. The fix patch is below (and I already committed it). Takashi commit 9fc82bbe4ca9142cf2ae5db64eefaabc10e7f071 Author: Takashi Iwai <tiwai@xxxxxxx> Date: Fri Oct 24 10:35:03 2008 +0200 sbxfi - Fix multiple hw_params calls The last change seems breaking the case of multiple hw_params calls. Although the TLB is cleared unconditionally beforehand, it's not re-asssigned because snd_pcm_lib_malloc_pages() returns 0. Now, call sbxfi_setup_tlb() unconditionally, too. Signed-off-by: Takashi Iwai <tiwai@xxxxxxx> --- diff --git a/sound/pci/sbxfi/sbxfi.c b/sound/pci/sbxfi/sbxfi.c index 458294f..e268413 100644 --- a/sound/pci/sbxfi/sbxfi.c +++ b/sound/pci/sbxfi/sbxfi.c @@ -1383,12 +1383,7 @@ static int sbxfi_pcm_hw_params(struct snd_pcm_substream *substream, err = snd_pcm_lib_malloc_pages(substream, bytes); if (err < 0) return err; - if (!err) - return 0; /* buffer unchanged */ - err = sbxfi_setup_tlb(chip, port, bytes); - if (err < 0) - return err; - return 1; /* buffer changed */ + return sbxfi_setup_tlb(chip, port, bytes); } static int sbxfi_pcm_hw_free(struct snd_pcm_substream *substream) _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel