At Sat, 25 Oct 2008 15:06:52 +0200, Thomas Scheunemann wrote: > > I think I found a bug in the driver, which at least for me was > responsible for the crashes with pulseaudio. > > A little backstory: > > I have a Fedora 8 System with an SB X-Fi installed and of course > no sound. I didn't want to replace the entire ALSA driver, so I > just took the files sbxfi.c and emu20k1-regs.h from the unstable > sources, wrote a small spec-file and am now at a point where I > can just "rpm -i" the driver as a dkms package and just modprobe > the driver. > > After that "speaker-test -D hw -c 2 -r 96000 -t sine" works just > fine, but as soon as pulseaudio is started my System froze. > > The bug I think I found is in the get_xfi_order function. As long > as pages actually is a power of two it works correctly. But if > pages isn't a power of two it should round up, but it rounds down. > As a result I believe this screws up sbxfi_alloc_tlb_pages. > > After a small modification to get_xfi_order: Thanks for the patch. Yeah, I found the very same problem in this morning, but I couldn't update the repo and snapshot until now due to the server crash. My solution is to use roundup_pow_of_two() instead of the own funciton. This should work better in general. Anyway, I updated the repo (and rebased, sorry), updated the snapshot, too. thanks, Takashi > --- /tmp/sbxfi.c 2008-10-25 14:51:55.000000000 +0200 > +++ sbxfi.c 2008-10-25 14:03:48.000000000 +0200 > @@ -851,11 +851,12 @@ > /* get the order of pages (power-of-two) */ > static int get_xfi_order(unsigned int pages) > { > - int order = -1; > - do { > + int order = 0; > + pages--; > + while(pages){ > pages >>= 1; > order++; > - } while (pages); > + } > return order; > } > > the driver started working with pulseaudio, it doesn't crash, and I > even get sound though it still is a bit distorted. > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel