public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Apparent bug in sound/oss/via82cxxx_audio.c GETOPTR ioctl
@ 2005-03-01 17:35 Jeremy White
  0 siblings, 0 replies; only message in thread
From: Jeremy White @ 2005-03-01 17:35 UTC (permalink / raw)
  To: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 772 bytes --]

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

[-- Attachment #2: via82cxxx_audio.diff --]
[-- Type: text/x-patch, Size: 414 bytes --]

--- 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 {

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-03-01 17:35 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-03-01 17:35 Apparent bug in sound/oss/via82cxxx_audio.c GETOPTR ioctl Jeremy White

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox