summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2013-11-29 14:25:33 +0100
committerGerd Hoffmann <kraxel@redhat.com>2013-12-09 09:19:26 +0100
commitd58ce68a454e5ae9cbde0308def379e272f13b10 (patch)
tree7e0230097d384f4a63291ec50befe7bef7c0b822
parent7f0ba7bb4378f22b017e08947219a352d491bac4 (diff)
downloadfocaccia-qemu-d58ce68a454e5ae9cbde0308def379e272f13b10.tar.gz
focaccia-qemu-d58ce68a454e5ae9cbde0308def379e272f13b10.zip
intel-hda: fix position buffer
Fix position buffer updates to use the correct stream offset.

Without this patch both IN (record) and OUT (playback) streams
will update the IN buffer positions.  The linux kernel notices
and complains:
  hda-intel: Invalid position buffer, using LPIB read method instead.

The bug may also lead to glitches when recording and playing
at the same time:
  https://bugzilla.redhat.com/show_bug.cgi?id=947785

Cc: qemu-stable@nongnu.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r--hw/audio/intel-hda.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c
index 4327264394..6ab8c245d3 100644
--- a/hw/audio/intel-hda.c
+++ b/hw/audio/intel-hda.c
@@ -444,6 +444,7 @@ static bool intel_hda_xfer(HDACodecDevice *dev, uint32_t stnr, bool output,
         }
     }
     if (d->dp_lbase & 0x01) {
+        s = st - d->st;
         addr = intel_hda_addr(d->dp_lbase & ~0x01, d->dp_ubase);
         stl_le_pci_dma(&d->pci, addr + 8*s, st->lpib);
     }