33 lines
1.1 KiB
Diff
33 lines
1.1 KiB
Diff
Index: qemu/linux-user/mmap.c
|
|
===================================================================
|
|
--- qemu.orig/linux-user/mmap.c
|
|
+++ qemu/linux-user/mmap.c
|
|
@@ -152,6 +152,9 @@ static int mmap_frag(target_ulong real_s
|
|
return 0;
|
|
}
|
|
|
|
+#define SNDRV_PCM_MMAP_OFFSET_STATUS 0x80000000
|
|
+#define SNDRV_PCM_MMAP_OFFSET_CONTROL 0x81000000
|
|
+
|
|
/* NOTE: all the constants are the HOST ones */
|
|
long target_mmap(target_ulong start, target_ulong len, int prot,
|
|
int flags, int fd, target_ulong offset)
|
|
@@ -192,6 +195,17 @@ long target_mmap(target_ulong start, tar
|
|
}
|
|
#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;
|
|
return -1;
|