lkml.org 
[lkml]   [2005]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectApparent bug in sound/oss/via82cxxx_audio.c GETOPTR ioctl
Hi,

In trying to fix Wine's dsound implementation which uses mmap and
DSP_SND_GETOPTR to write data out to the driver, I uncovered what
appears to be a bug in the via82cxx_audio.c driver.

Specifically, via_sg_offset appears to return the number of bytes
not yet consumed within the current block; we use it to adjust from blocks
to a precise block count. However, it appears as though it returns 0
to indicate that no bytes have been consumed.

I was seeing results where I would get an OPTR return along the
lines of 0x1c00, 0x1e00, 0x2800, and then 0x2100. Needless to say,
having info.ptr go backwards causes Wine's code to have a serious
hissy fit.

The attached patch fixes the problem for me, but I would appreciate
review by an expert on this.

Cheers,

Jeremy
--- via82cxxx_audio.c 2005-03-01 11:27:07.525265232 -0600
+++ via82cxxx_audio.c.orig 2005-03-01 11:27:24.700654176 -0600
@@ -2831,8 +2831,6 @@
unsigned long extra;
info.ptr = atomic_read (&chan->hw_ptr) * chan->frag_size;
extra = chan->frag_size - via_sg_offset(chan);
- if (extra == chan->frag_size)
- extra = 0;
info.ptr += extra;
info.bytes += extra;
} else {
\
 
 \ /
  Last update: 2005-03-22 14:10    [W:0.037 / U:0.132 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site