[PATCH 4/4] staging: goldfish: Clear audio read buffer status after each read
rkir at google.com
rkir at google.com
Fri Jun 1 20:25:41 UTC 2018
From: Joshua Lang <joshualang at google.com>
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 at google.com>
Signed-off-by: Roman Kiryanov <rkir at google.com>
---
drivers/staging/goldfish/goldfish_audio.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/staging/goldfish/goldfish_audio.c b/drivers/staging/goldfish/goldfish_audio.c
index 87ebeb770e87..80ccf7ab68ea 100644
--- a/drivers/staging/goldfish/goldfish_audio.c
+++ b/drivers/staging/goldfish/goldfish_audio.c
@@ -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 */
--
2.17.0.921.gf22659ad46-goog
More information about the devel
mailing list