SHA256
1
0
forked from pool/qemu
qemu/0007-qemu-cvs-alsa_mmap.patch.patch
Alexander Graf 91a548c8b1 - Cherry pick patches from qemu-kvm into the qemu package:
- 0033-Add-support-for-DictZip-enabled-gzi.patch
   - 0034-Add-tar-container-format.patch.patch
   - 0035-Legacy-Patch-kvm-qemu-preXX-dictzip.patch
   - 0036-Legacy-Patch-kvm-qemu-preXX-report-.patch
   - 0037-console-add-question-mark-escape-op.patch
   - 0038-Make-char-muxer-more-robust-wrt-sma.patch

OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=124
2012-12-13 10:49:19 +00:00

46 lines
1.5 KiB
Diff

From 394efaf58c0588b971b0e1841daec08807e16d8a Mon Sep 17 00:00:00 2001
From: Alexander Graf <agraf@suse.de>
Date: Tue, 14 Apr 2009 16:24:15 +0200
Subject: [PATCH] qemu-cvs-alsa_mmap
Hack to prevent ALSA from using mmap() interface to simplify emulation.
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Ulrich Hecht <uli@suse.de>
---
linux-user/mmap.c | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
index b412e3f..46523de 100644
--- a/linux-user/mmap.c
+++ b/linux-user/mmap.c
@@ -377,6 +377,9 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size)
}
}
+#define SNDRV_PCM_MMAP_OFFSET_STATUS 0x80000000
+#define SNDRV_PCM_MMAP_OFFSET_CONTROL 0x81000000
+
/* NOTE: all the constants are the HOST ones */
abi_long target_mmap(abi_ulong start, abi_ulong len, int prot,
int flags, int fd, abi_ulong offset)
@@ -411,6 +414,17 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot,
}
#endif
+ /* Alsa tries to communcate with the kernel via mmap. This usually
+ * is a good idea when user- and kernelspace are running on the
+ * same architecture but does not work out when not. To make alsa
+ * not to use mmap, we can just have it fail on the mmap calls that
+ * would initiate this.
+ */
+ if(offset == SNDRV_PCM_MMAP_OFFSET_STATUS || offset == SNDRV_PCM_MMAP_OFFSET_CONTROL) {
+ errno = EINVAL;
+ return -1;
+ }
+
if (offset & ~TARGET_PAGE_MASK) {
errno = EINVAL;
goto fail;