]> rtime.felk.cvut.cz Git - lisovros/qemu_apohw.git/commitdiff
intel-hda: fix position buffer
authorGerd Hoffmann <kraxel@redhat.com>
Fri, 29 Nov 2013 13:25:33 +0000 (14:25 +0100)
committerGerd Hoffmann <kraxel@redhat.com>
Mon, 9 Dec 2013 08:19:26 +0000 (09:19 +0100)
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>
hw/audio/intel-hda.c

index 43272643946d3533a190e8dfea5ede81999641bc..6ab8c245d3ecaf7044c95f47e47489d0c0ba6d6f 100644 (file)
@@ -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);
     }