aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/core/oss/pcm_oss.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
index 131522ea4b93..468fca8894d9 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
@@ -129,7 +129,16 @@ static long snd_pcm_oss_bytes(snd_pcm_substream_t *substream, long frames)
129 long bytes = frames_to_bytes(runtime, frames); 129 long bytes = frames_to_bytes(runtime, frames);
130 if (buffer_size == runtime->oss.buffer_bytes) 130 if (buffer_size == runtime->oss.buffer_bytes)
131 return bytes; 131 return bytes;
132 return (long)(((int64_t)runtime->oss.buffer_bytes * (int64_t)bytes) / (int64_t)buffer_size); 132#if BITS_PER_LONG >= 64
133 return runtime->oss.buffer_bytes * bytes / buffer_size;
134#else
135 {
136 u64 bsize = (u64)runtime->oss.buffer_bytes * (u64)bytes;
137 u32 rem;
138 div64_32(&bsize, buffer_size, &rem);
139 return (long)bsize;
140 }
141#endif
133} 142}
134 143
135static long snd_pcm_alsa_frames(snd_pcm_substream_t *substream, long bytes) 144static long snd_pcm_alsa_frames(snd_pcm_substream_t *substream, long bytes)