forked from Minki/linux
staging: goldfish: Clear audio read buffer status after each read
The buffer_status field is interrupt updated. After every read request, the buffer_status read field should be reset so that on the next loop iteration we don't read a stale value and read data before the device is ready. Signed-off-by: Joshua Lang <joshualang@google.com> Signed-off-by: Roman Kiryanov <rkir@google.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
06e526f49b
commit
3053339b17
@ -131,6 +131,7 @@ static ssize_t goldfish_audio_read(struct file *fp, char __user *buf,
|
||||
size_t count, loff_t *pos)
|
||||
{
|
||||
struct goldfish_audio *data = fp->private_data;
|
||||
unsigned long irq_flags;
|
||||
int length;
|
||||
int result = 0;
|
||||
|
||||
@ -144,6 +145,10 @@ static ssize_t goldfish_audio_read(struct file *fp, char __user *buf,
|
||||
wait_event_interruptible(data->wait, data->buffer_status &
|
||||
AUDIO_INT_READ_BUFFER_FULL);
|
||||
|
||||
spin_lock_irqsave(&data->lock, irq_flags);
|
||||
data->buffer_status &= ~AUDIO_INT_READ_BUFFER_FULL;
|
||||
spin_unlock_irqrestore(&data->lock, irq_flags);
|
||||
|
||||
length = audio_read(data, AUDIO_READ_BUFFER_AVAILABLE);
|
||||
|
||||
/* copy data to user space */
|
||||
|
Loading…
Reference in New Issue
Block a user