From: Alexander Graf Date: Tue, 14 Apr 2009 14:24:15 +0000 (+0200) Subject: qemu-cvs-alsa_mmap X-Git-Tag: accepted/tizen/common/20141030.230811~40 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b488407662df08ff8a70604a7b722441a7abb052;p=platform%2Fupstream%2Fqemu.git qemu-cvs-alsa_mmap Hack to prevent ALSA from using mmap() interface to simplify emulation. Signed-off-by: Alexander Graf Signed-off-by: Ulrich Hecht --- diff --git a/linux-user/mmap.c b/linux-user/mmap.c index a249f0c..34a5615 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -366,6 +366,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) @@ -400,6 +403,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;