[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-stable] [PATCH 34/43] sb16: fix interrupt acknowledgement
From: |
Michael Roth |
Subject: |
[Qemu-stable] [PATCH 34/43] sb16: fix interrupt acknowledgement |
Date: |
Tue, 24 Feb 2015 15:48:09 -0600 |
From: Paolo Bonzini <address@hidden>
SoundBlaster 16 emulation is very broken and consumes a lot of CPU, but a
small fix was suggested offlist and it is enough to fix some games. I
got Epic Pinball to work with the "SoundBlaster Clone" option.
The processing of the interrupt register is wrong due to two missing
"not"s. This causes the interrupt flag to remain set even after the
Acknowledge ports have been read (0x0e and 0x0f).
The line was introduced by commit 85571bc (audio merge (malc), 2004-11-07),
but the code might have been broken before because I did not look closely
at the huge patches from 10 years ago.
Reported-by: Joshua Bair <address@hidden>
Cc: Gerd Hoffmann <address@hidden>
Cc: address@hidden
Signed-off-by: Paolo Bonzini <address@hidden>
Signed-off-by: Gerd Hoffmann <address@hidden>
(cherry picked from commit 9939375c282a0f97afa69dc6799d3c77aaf7d544)
Signed-off-by: Michael Roth <address@hidden>
---
hw/audio/sb16.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/audio/sb16.c b/hw/audio/sb16.c
index bda26d0..444eb9e 100644
--- a/hw/audio/sb16.c
+++ b/hw/audio/sb16.c
@@ -999,7 +999,7 @@ static IO_READ_PROTO (dsp_read)
retval = (!s->out_data_len || s->highspeed) ? 0 : 0x80;
if (s->mixer_regs[0x82] & 1) {
ack = 1;
- s->mixer_regs[0x82] &= 1;
+ s->mixer_regs[0x82] &= ~1;
qemu_irq_lower (s->pic);
}
break;
@@ -1008,7 +1008,7 @@ static IO_READ_PROTO (dsp_read)
retval = 0xff;
if (s->mixer_regs[0x82] & 2) {
ack = 1;
- s->mixer_regs[0x82] &= 2;
+ s->mixer_regs[0x82] &= ~2;
qemu_irq_lower (s->pic);
}
break;
--
1.9.1
- Re: [Qemu-stable] [Qemu-devel] [PATCH 29/43] linux-user: Fix broken m68k signal handling on 64 bit hosts, (continued)
[Qemu-stable] [PATCH 28/43] pckbd: set bits 2-3-6-7 of the output port by default, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 30/43] scsi: fix cancellation when I/O was completed but DMA was not., Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 32/43] vt82c686: avoid out-of-bounds read, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 31/43] target-i386: fix movntsd on big-endian hosts, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 33/43] virtio: fix feature bit checks, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 02/43] block: Omit bdrv_find_format for essential drivers, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 36/43] target-arm/translate-a64: Fix wrong mmu_idx usage for LDT/STT, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 34/43] sb16: fix interrupt acknowledgement,
Michael Roth <=
[Qemu-stable] [PATCH 35/43] hw/input/hid.c Fix capslock hid code, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 39/43] libcacard: stop linking against every single 3rd party library, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 37/43] vfio-pci: Fix missing unparent of dynamically allocated MemoryRegion, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 38/43] qemu-thread: fix qemu_event without futexes, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 40/43] fix mc146818rtc wrong subsection name to avoid vmstate_subsection_load() fail, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 03/43] block/vvfat: qcow driver may not be found, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 43/43] exec: change default exception_index value for migration to -1, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 41/43] block/iscsi: fix uninitialized variable, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 42/43] qtest: Fix deadloop by running main loop AIO context's timers, Michael Roth, 2015/02/24
[Qemu-stable] [PATCH 04/43] block/nfs: Add create_opts, Michael Roth, 2015/02/24