From dbcbe663fdca345b2670f8da4e553cc925546f00eeaec696be1af4a00fc945a9 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 14 Dec 2011 01:35:41 +0000 Subject: [PATCH 01/15] - add update_git.sh to simplify maintenance of the tree - use -R automatically in linux-user to gain more address space - drop MAP_32BIT patch (deprecated by the one above) OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=36 --- ...x-user-fake-proc-self-maps-even-more.patch | 4 +- ...ux-user-Fix-32-on-64-mmap-for-x86_64.patch | 124 ------------ ...-SA_RESTART-race-with-boehm-gc-ARM-o.patch | 4 +- ...nary-lower-in-address-space-so-we-ha.patch | 4 +- ...inux-user-map-lower-in-address-space.patch | 8 +- ...proc-self-maps-also-fclose-real-file.patch | 4 +- ...igher-again-so-we-have-space-for-brk.patch | 8 +- ....patch => 0018-qemu-0.9.0.cvs-binfmt.patch | 4 +- ...patch => 0019-qemu-cvs-alsa_bitfield.patch | 4 +- ...tl.patch => 0020-qemu-cvs-alsa_ioctl.patch | 4 +- ...map.patch => 0021-qemu-cvs-alsa_mmap.patch | 10 +- ....patch => 0022-qemu-cvs-gettimeofday.patch | 4 +- ...g.patch => 0023-qemu-cvs-ioctl_debug.patch | 4 +- ...h => 0024-qemu-cvs-ioctl_nodirection.patch | 4 +- ...csi.patch => 0025-qemu-img-vmdk-scsi.patch | 4 +- ...rn.patch => 0026-qemu-nonvoid_return.patch | 4 +- ...> 0027-fix-mipsn32-linux-user-builds.patch | 4 +- ...ynamips-and-GNS3-UDP-tunnels-Patches.patch | 4 +- ...d-binfmt-wrapper-for-argv-0-handling.patch | 4 +- ...nux-user-Ignore-timer_create-syscall.patch | 4 +- ...user-be-silent-about-capget-failures.patch | 4 +- ...-PPC-Fix-linker-scripts-on-ppc-hosts.patch | 4 +- ...ser-reserve-4GB-of-vmem-for-32-on-64.patch | 44 +++++ qemu.changes | 7 + qemu.spec | 149 +++++++-------- qemu.spec.in | 180 ++++++++++++++++++ update_git.sh | 53 ++++++ 27 files changed, 403 insertions(+), 252 deletions(-) rename 0013-XXX-linux-user-fake-proc-self-maps-even-more.patch => 0012-XXX-linux-user-fake-proc-self-maps-even-more.patch (94%) delete mode 100644 0012-linux-user-Fix-32-on-64-mmap-for-x86_64.patch rename 0014-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch => 0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch (98%) rename 0015-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch => 0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch (81%) rename 0016-linux-user-map-lower-in-address-space.patch => 0015-linux-user-map-lower-in-address-space.patch (81%) rename 0017-XXX-fake-proc-self-maps-also-fclose-real-file.patch => 0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch (82%) rename 0018-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch => 0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch (81%) rename 0019-qemu-0.9.0.cvs-binfmt.patch => 0018-qemu-0.9.0.cvs-binfmt.patch (98%) rename 0020-qemu-cvs-alsa_bitfield.patch => 0019-qemu-cvs-alsa_bitfield.patch (95%) rename 0021-qemu-cvs-alsa_ioctl.patch => 0020-qemu-cvs-alsa_ioctl.patch (99%) rename 0022-qemu-cvs-alsa_mmap.patch => 0021-qemu-cvs-alsa_mmap.patch (83%) rename 0023-qemu-cvs-gettimeofday.patch => 0022-qemu-cvs-gettimeofday.patch (86%) rename 0024-qemu-cvs-ioctl_debug.patch => 0023-qemu-cvs-ioctl_debug.patch (92%) rename 0025-qemu-cvs-ioctl_nodirection.patch => 0024-qemu-cvs-ioctl_nodirection.patch (93%) rename 0026-qemu-img-vmdk-scsi.patch => 0025-qemu-img-vmdk-scsi.patch (97%) rename 0027-qemu-nonvoid_return.patch => 0026-qemu-nonvoid_return.patch (90%) rename 0028-fix-mipsn32-linux-user-builds.patch => 0027-fix-mipsn32-linux-user-builds.patch (93%) rename 0029-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch => 0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch (98%) rename 0030-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch => 0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch (98%) rename 0031-linux-user-Ignore-timer_create-syscall.patch => 0030-linux-user-Ignore-timer_create-syscall.patch (87%) rename 0032-linux-user-be-silent-about-capget-failures.patch => 0031-linux-user-be-silent-about-capget-failures.patch (87%) rename 0033-PPC-Fix-linker-scripts-on-ppc-hosts.patch => 0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch (93%) create mode 100644 0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch create mode 100644 qemu.spec.in create mode 100644 update_git.sh diff --git a/0013-XXX-linux-user-fake-proc-self-maps-even-more.patch b/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch similarity index 94% rename from 0013-XXX-linux-user-fake-proc-self-maps-even-more.patch rename to 0012-XXX-linux-user-fake-proc-self-maps-even-more.patch index 103dad97..b1f9d9ba 100644 --- a/0013-XXX-linux-user-fake-proc-self-maps-even-more.patch +++ b/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch @@ -1,7 +1,7 @@ -From 7e9ebc1d459247bd91f39a7489f1627874731533 Mon Sep 17 00:00:00 2001 +From 146dddbec44c48417f776d54f823093b464e596c Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 28 Nov 2011 17:05:24 +0100 -Subject: [PATCH 13/33] XXX linux-user: fake /proc/self/maps even more +Subject: [PATCH 12/33] XXX linux-user: fake /proc/self/maps even more --- linux-user/syscall.c | 40 +++++++++++++++++++++++++++++++++++++++- diff --git a/0012-linux-user-Fix-32-on-64-mmap-for-x86_64.patch b/0012-linux-user-Fix-32-on-64-mmap-for-x86_64.patch deleted file mode 100644 index 2df08617..00000000 --- a/0012-linux-user-Fix-32-on-64-mmap-for-x86_64.patch +++ /dev/null @@ -1,124 +0,0 @@ -From 52a4e3af8ca37d895bcff2ede1073ebb2cb2dd29 Mon Sep 17 00:00:00 2001 -From: Alexander Graf -Date: Sat, 19 Nov 2011 22:57:55 +0100 -Subject: [PATCH 12/33] linux-user: Fix 32-on-64 mmap for x86_64 - -When running a 32 bit guest on a 64 bit host, we can run into trouble while -calling the host's mmap() because it could potentially give us a 64 bit -return value which the guest can't interpret. - -There are 2 ways of dealing with this: - - 1) Only do MAP_FIXED mmap calls and implement our own vm management in QEMU - 2) Tell the kernel that we only want mappings in the lower 32 bits - -Way 1 is very involved and hard to do. It's been advocated forever now but -nobody sat down to actually implement it. - -Way 2 is easy. It's what this patch does. However, it only works on x86_64 -because that's the only platform implementing the MAP_32BIT flag. Since most -people are on x86_64 though, I think it's a good enough compromise for now -though - -Signed-off-by: Alexander Graf ---- - linux-user/mmap.c | 35 ++++++++++++++++++++++++++--------- - 1 files changed, 26 insertions(+), 9 deletions(-) - -diff --git a/linux-user/mmap.c b/linux-user/mmap.c -index 994c02b..7d846f3 100644 ---- a/linux-user/mmap.c -+++ b/linux-user/mmap.c -@@ -33,6 +33,22 @@ - - //#define DEBUG_MMAP - -+/* -+ * On x86_64 we can tell mmap that we only want to map within the first 32 -+ * bits to not get pointers that potentially exceed the return size. Without -+ * this flag set mmap will eventually break for users when running 32-on-64. -+ * -+ * However, Linux doesn't implement this for non-x86_64 systems. So we have -+ * to safeguard the bit with an empty flag which will be ignore on other -+ * architectures. At least we fixed the "common case" this way :). -+ * -+ * - agraf -+ */ -+#if !defined(MAP_32BIT) || !defined(__x86_64__) || (TARGET_LONG_BITS != 32) -+#undef MAP_32BIT -+#define MAP_32BIT 0 -+#endif -+ - #if defined(CONFIG_USE_NPTL) - static pthread_mutex_t mmap_mutex = PTHREAD_MUTEX_INITIALIZER; - static __thread int mmap_lock_count; -@@ -169,7 +185,7 @@ static int mmap_frag(abi_ulong real_start, - if (prot1 == 0) { - /* no page was there, so we allocate one */ - void *p = mmap(host_start, qemu_host_page_size, prot, -- flags | MAP_ANONYMOUS, -1, 0); -+ flags | MAP_ANONYMOUS | MAP_32BIT, -1, 0); - if (p == MAP_FAILED) - return -1; - prot1 = prot; -@@ -292,7 +308,7 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size) - * - shmat() with SHM_REMAP flag - */ - ptr = mmap(g2h(addr), size, PROT_NONE, -- MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0); -+ MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE|MAP_32BIT, -1, 0); - - /* ENOMEM, if host address space has no memory */ - if (ptr == MAP_FAILED) { -@@ -454,14 +470,15 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, - especially important if qemu_host_page_size > - qemu_real_host_page_size */ - p = mmap(g2h(mmap_start), -- host_len, prot, flags | MAP_FIXED | MAP_ANONYMOUS, -1, 0); -+ host_len, prot, flags | MAP_FIXED | MAP_ANONYMOUS | MAP_32BIT, -+ -1, 0); - if (p == MAP_FAILED) - goto fail; - /* update start so that it points to the file position at 'offset' */ - host_start = (unsigned long)p; - if (!(flags & MAP_ANONYMOUS)) { - p = mmap(g2h(mmap_start), len, prot, -- flags | MAP_FIXED, fd, host_offset); -+ flags | MAP_FIXED | MAP_32BIT, fd, host_offset); - host_start += offset - host_offset; - } - start = h2g(host_start); -@@ -495,8 +512,8 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, - goto fail; - } - retaddr = target_mmap(start, len, prot | PROT_WRITE, -- MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -- -1, 0); -+ MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS | -+ MAP_32BIT, -1, 0); - if (retaddr == -1) - goto fail; - if (pread(fd, g2h(start), len, offset) == -1) -@@ -547,7 +564,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, - else - offset1 = offset + real_start - start; - p = mmap(g2h(real_start), real_end - real_start, -- prot, flags, fd, offset1); -+ prot, flags | MAP_32BIT, fd, offset1); - if (p == MAP_FAILED) - goto fail; - } -@@ -603,8 +620,8 @@ static void mmap_reserve(abi_ulong start, abi_ulong size) - } - if (real_start != real_end) { - mmap(g2h(real_start), real_end - real_start, PROT_NONE, -- MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE, -- -1, 0); -+ MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE | -+ MAP_32BIT, -1, 0); - } - } - --- -1.6.0.2 - diff --git a/0014-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch b/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch similarity index 98% rename from 0014-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch rename to 0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch index 19f3e575..60faa3e6 100644 --- a/0014-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch +++ b/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch @@ -1,7 +1,7 @@ -From e45be60a8f2e6148b40f358922a4f472fa0b2f8b Mon Sep 17 00:00:00 2001 +From 79a59902304b66e9270d11901a554e5b22042d6e Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 1 Dec 2011 19:00:01 +0100 -Subject: [PATCH 14/33] XXX work around SA_RESTART race with boehm-gc (ARM only) +Subject: [PATCH 13/33] XXX work around SA_RESTART race with boehm-gc (ARM only) --- linux-user/main.c | 25 ++++++++----- diff --git a/0015-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch b/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch similarity index 81% rename from 0015-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch rename to 0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch index d40d0f0d..147f4120 100644 --- a/0015-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch +++ b/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch @@ -1,7 +1,7 @@ -From bf5ca70551e87671e84a81d103db32ed6918a109 Mon Sep 17 00:00:00 2001 +From e534a77a0e1f880d0f74514ac50de5de3dd4811a Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 5 Dec 2011 23:37:52 +0100 -Subject: [PATCH 15/33] XXX move qemu binary lower in address space so we have space for guest stuff +Subject: [PATCH 14/33] XXX move qemu binary lower in address space so we have space for guest stuff --- x86_64.ld | 2 +- diff --git a/0016-linux-user-map-lower-in-address-space.patch b/0015-linux-user-map-lower-in-address-space.patch similarity index 81% rename from 0016-linux-user-map-lower-in-address-space.patch rename to 0015-linux-user-map-lower-in-address-space.patch index e01bd34b..c6f1f82d 100644 --- a/0016-linux-user-map-lower-in-address-space.patch +++ b/0015-linux-user-map-lower-in-address-space.patch @@ -1,7 +1,7 @@ -From a8631179ca4a90670923fd9acce05b0e109eae01 Mon Sep 17 00:00:00 2001 +From edda5e8f49b7857379733d652d6b259488bd7b70 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 6 Dec 2011 00:39:50 +0100 -Subject: [PATCH 16/33] linux-user: map lower in address space +Subject: [PATCH 15/33] linux-user: map lower in address space While trying to compile Java I can into situations where there was simply no virtual address space left for a 32-bit guest to take. For example when @@ -17,10 +17,10 @@ Signed-off-by: Alexander Graf 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/linux-user/mmap.c b/linux-user/mmap.c -index 7d846f3..8453c0d 100644 +index 994c02b..505254f 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c -@@ -226,7 +226,7 @@ static int mmap_frag(abi_ulong real_start, +@@ -210,7 +210,7 @@ static int mmap_frag(abi_ulong real_start, /* Cygwin doesn't have a whole lot of address space. */ # define TASK_UNMAPPED_BASE 0x18000000 #else diff --git a/0017-XXX-fake-proc-self-maps-also-fclose-real-file.patch b/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch similarity index 82% rename from 0017-XXX-fake-proc-self-maps-also-fclose-real-file.patch rename to 0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch index 8b2706ce..058435f6 100644 --- a/0017-XXX-fake-proc-self-maps-also-fclose-real-file.patch +++ b/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch @@ -1,7 +1,7 @@ -From f2bd85fd0ebe444677f22e28ab12b966937207e2 Mon Sep 17 00:00:00 2001 +From 3580a90d40df10410b7268f89aae58ce05dd2bed Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 8 Dec 2011 23:19:32 +0100 -Subject: [PATCH 17/33] XXX fake /proc/self/maps: also fclose real file +Subject: [PATCH 16/33] XXX fake /proc/self/maps: also fclose real file --- linux-user/syscall.c | 1 + diff --git a/0018-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch b/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch similarity index 81% rename from 0018-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch rename to 0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch index 5cd7d684..3d793dca 100644 --- a/0018-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch +++ b/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch @@ -1,7 +1,7 @@ -From f8d469421d92e3abe854e565bdf4ee62b86846b6 Mon Sep 17 00:00:00 2001 +From 91f12fe177833e0112cd7f7cf5781b26377667a5 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sat, 10 Dec 2011 00:03:56 +0100 -Subject: [PATCH 18/33] XXX map qemu higher again so we have space for brk +Subject: [PATCH 17/33] XXX map qemu higher again so we have space for brk --- linux-user/mmap.c | 2 +- @@ -9,10 +9,10 @@ Subject: [PATCH 18/33] XXX map qemu higher again so we have space for brk 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/linux-user/mmap.c b/linux-user/mmap.c -index 8453c0d..1e8cc38 100644 +index 505254f..46e8bf8 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c -@@ -226,7 +226,7 @@ static int mmap_frag(abi_ulong real_start, +@@ -210,7 +210,7 @@ static int mmap_frag(abi_ulong real_start, /* Cygwin doesn't have a whole lot of address space. */ # define TASK_UNMAPPED_BASE 0x18000000 #else diff --git a/0019-qemu-0.9.0.cvs-binfmt.patch b/0018-qemu-0.9.0.cvs-binfmt.patch similarity index 98% rename from 0019-qemu-0.9.0.cvs-binfmt.patch rename to 0018-qemu-0.9.0.cvs-binfmt.patch index 85a596e9..f1ca065c 100644 --- a/0019-qemu-0.9.0.cvs-binfmt.patch +++ b/0018-qemu-0.9.0.cvs-binfmt.patch @@ -1,7 +1,7 @@ -From 4d016e72b0d6b81115100217614aba990fcb505e Mon Sep 17 00:00:00 2001 +From 434801ec78b031170eb0762302b52062e6c27d0e Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:18:44 +0200 -Subject: [PATCH 19/33] qemu-0.9.0.cvs-binfmt +Subject: [PATCH 18/33] qemu-0.9.0.cvs-binfmt Fixes binfmt_misc setup script: - x86_64 is i386-compatible diff --git a/0020-qemu-cvs-alsa_bitfield.patch b/0019-qemu-cvs-alsa_bitfield.patch similarity index 95% rename from 0020-qemu-cvs-alsa_bitfield.patch rename to 0019-qemu-cvs-alsa_bitfield.patch index 0e860180..2d7e8aa0 100644 --- a/0020-qemu-cvs-alsa_bitfield.patch +++ b/0019-qemu-cvs-alsa_bitfield.patch @@ -1,7 +1,7 @@ -From 923b1531de681940198e2c1d28c735da1efe29e2 Mon Sep 17 00:00:00 2001 +From b41a72d0c29f97610dfdd5573b8be383823bc88f Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:20:50 +0200 -Subject: [PATCH 20/33] qemu-cvs-alsa_bitfield +Subject: [PATCH 19/33] qemu-cvs-alsa_bitfield Implements TYPE_INTBITFIELD partially. (required for ALSA support) diff --git a/0021-qemu-cvs-alsa_ioctl.patch b/0020-qemu-cvs-alsa_ioctl.patch similarity index 99% rename from 0021-qemu-cvs-alsa_ioctl.patch rename to 0020-qemu-cvs-alsa_ioctl.patch index 624fecc0..08a27c11 100644 --- a/0021-qemu-cvs-alsa_ioctl.patch +++ b/0020-qemu-cvs-alsa_ioctl.patch @@ -1,7 +1,7 @@ -From b732ecf6a05f837368ab6c2413b206e0e2715e73 Mon Sep 17 00:00:00 2001 +From 33f065c217c1921759df12467954eb4638f84a72 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:23:27 +0200 -Subject: [PATCH 21/33] qemu-cvs-alsa_ioctl +Subject: [PATCH 20/33] qemu-cvs-alsa_ioctl Implements ALSA ioctls on PPC hosts. diff --git a/0022-qemu-cvs-alsa_mmap.patch b/0021-qemu-cvs-alsa_mmap.patch similarity index 83% rename from 0022-qemu-cvs-alsa_mmap.patch rename to 0021-qemu-cvs-alsa_mmap.patch index cbb67177..c0b70889 100644 --- a/0022-qemu-cvs-alsa_mmap.patch +++ b/0021-qemu-cvs-alsa_mmap.patch @@ -1,7 +1,7 @@ -From 3ea2fa480d730990c427d4a2924168f2b6f42dba Mon Sep 17 00:00:00 2001 +From 8b67814c8ab4645ddd43664b1092e78ea6a743d8 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:24:15 +0200 -Subject: [PATCH 22/33] qemu-cvs-alsa_mmap +Subject: [PATCH 21/33] qemu-cvs-alsa_mmap Hack to prevent ALSA from using mmap() interface to simplify emulation. @@ -12,10 +12,10 @@ Signed-off-by: Ulrich Hecht 1 files changed, 14 insertions(+), 0 deletions(-) diff --git a/linux-user/mmap.c b/linux-user/mmap.c -index 1e8cc38..1e5ba51 100644 +index 46e8bf8..e4db455 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c -@@ -380,6 +380,9 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size) +@@ -364,6 +364,9 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size) } } @@ -25,7 +25,7 @@ index 1e8cc38..1e5ba51 100644 /* 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) -@@ -415,6 +418,17 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, +@@ -399,6 +402,17 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, } #endif diff --git a/0023-qemu-cvs-gettimeofday.patch b/0022-qemu-cvs-gettimeofday.patch similarity index 86% rename from 0023-qemu-cvs-gettimeofday.patch rename to 0022-qemu-cvs-gettimeofday.patch index cb6c6d2a..240520df 100644 --- a/0023-qemu-cvs-gettimeofday.patch +++ b/0022-qemu-cvs-gettimeofday.patch @@ -1,7 +1,7 @@ -From 2c1ea2bd2c59d70ca63c1d42230588b4bdeed6fd Mon Sep 17 00:00:00 2001 +From c0ce4deb6c2ac843e337b7252fbefc190d625ca5 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:25:41 +0200 -Subject: [PATCH 23/33] qemu-cvs-gettimeofday +Subject: [PATCH 22/33] qemu-cvs-gettimeofday No clue what this is for. --- diff --git a/0024-qemu-cvs-ioctl_debug.patch b/0023-qemu-cvs-ioctl_debug.patch similarity index 92% rename from 0024-qemu-cvs-ioctl_debug.patch rename to 0023-qemu-cvs-ioctl_debug.patch index 63fdfc04..2b7c036f 100644 --- a/0024-qemu-cvs-ioctl_debug.patch +++ b/0023-qemu-cvs-ioctl_debug.patch @@ -1,7 +1,7 @@ -From 6d6663f77131b1546e55b5b6548d63f7496d6988 Mon Sep 17 00:00:00 2001 +From 6232258009a4735d7f4f53b5589e7ebd90a9885d Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:26:33 +0200 -Subject: [PATCH 24/33] qemu-cvs-ioctl_debug +Subject: [PATCH 23/33] qemu-cvs-ioctl_debug Extends unsupported ioctl debug output. diff --git a/0025-qemu-cvs-ioctl_nodirection.patch b/0024-qemu-cvs-ioctl_nodirection.patch similarity index 93% rename from 0025-qemu-cvs-ioctl_nodirection.patch rename to 0024-qemu-cvs-ioctl_nodirection.patch index a9616093..93a2dc5b 100644 --- a/0025-qemu-cvs-ioctl_nodirection.patch +++ b/0024-qemu-cvs-ioctl_nodirection.patch @@ -1,7 +1,7 @@ -From 07d1e1618bb9632bad8d4b6928067711781df1d9 Mon Sep 17 00:00:00 2001 +From 926d75fa4b4b5d95d4b0111e3e0af4d983a9d46b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:27:36 +0200 -Subject: [PATCH 25/33] qemu-cvs-ioctl_nodirection +Subject: [PATCH 24/33] qemu-cvs-ioctl_nodirection the direction given in the ioctl should be correct so we can assume the communication is uni-directional. The alsa developers did not like this diff --git a/0026-qemu-img-vmdk-scsi.patch b/0025-qemu-img-vmdk-scsi.patch similarity index 97% rename from 0026-qemu-img-vmdk-scsi.patch rename to 0025-qemu-img-vmdk-scsi.patch index f7962e4b..caf6b773 100644 --- a/0026-qemu-img-vmdk-scsi.patch +++ b/0025-qemu-img-vmdk-scsi.patch @@ -1,7 +1,7 @@ -From a4eebec448c7cd69fcc589912779fc7df6fca4ea Mon Sep 17 00:00:00 2001 +From 90b3180677c5615bafc9a1f8252fbc4af1dc1ae4 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:37:42 +0200 -Subject: [PATCH 26/33] qemu-img-vmdk-scsi +Subject: [PATCH 25/33] qemu-img-vmdk-scsi Support creation of SCSI VMDK images in qemu-img. diff --git a/0027-qemu-nonvoid_return.patch b/0026-qemu-nonvoid_return.patch similarity index 90% rename from 0027-qemu-nonvoid_return.patch rename to 0026-qemu-nonvoid_return.patch index 044785a7..7c91b7f9 100644 --- a/0027-qemu-nonvoid_return.patch +++ b/0026-qemu-nonvoid_return.patch @@ -1,7 +1,7 @@ -From 9b3ae5bebe9635991156b6e87f61ca204b204345 Mon Sep 17 00:00:00 2001 +From 7e6479e0d45e45e888cb79759fd44d6c14be19f4 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:38:20 +0200 -Subject: [PATCH 27/33] qemu-nonvoid_return +Subject: [PATCH 26/33] qemu-nonvoid_return Squelches GCC warnings about undefined return values. diff --git a/0028-fix-mipsn32-linux-user-builds.patch b/0027-fix-mipsn32-linux-user-builds.patch similarity index 93% rename from 0028-fix-mipsn32-linux-user-builds.patch rename to 0027-fix-mipsn32-linux-user-builds.patch index 423141c0..9c23db87 100644 --- a/0028-fix-mipsn32-linux-user-builds.patch +++ b/0027-fix-mipsn32-linux-user-builds.patch @@ -1,7 +1,7 @@ -From 18b54324078105bd5d23241026bdbc92f1fe22b6 Mon Sep 17 00:00:00 2001 +From 164cf539481164978d9fa6ad69eb20cda7dc0e12 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Wed, 25 Aug 2010 14:23:43 +0200 -Subject: [PATCH 28/33] fix mipsn32*-linux-user builds +Subject: [PATCH 27/33] fix mipsn32*-linux-user builds Signed-off-by: Ulrich Hecht --- diff --git a/0029-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch b/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch similarity index 98% rename from 0029-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch rename to 0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch index 7ecb9221..fb400cea 100644 --- a/0029-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch +++ b/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch @@ -1,7 +1,7 @@ -From b3f9ab3168e50f1dec4835c0df01869ecf848267 Mon Sep 17 00:00:00 2001 +From 15d6a32b38abc6c2f8143ebccfcdd05d204f0fcd Mon Sep 17 00:00:00 2001 From: Benjamin Date: Sat, 8 Oct 2011 07:31:33 +0000 -Subject: [PATCH 29/33] Integrating Dynamips and GNS3 UDP tunnels (Patches) +Subject: [PATCH 28/33] Integrating Dynamips and GNS3 UDP tunnels (Patches) On 10/07/11 10:35, Jan Kiszka wrote: > diff --git a/0030-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch b/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch similarity index 98% rename from 0030-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch rename to 0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch index d0d06b63..9d7c715a 100644 --- a/0030-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch +++ b/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch @@ -1,7 +1,7 @@ -From 42ca714385588477429c8ac77c810b310854494b Mon Sep 17 00:00:00 2001 +From 47ff084e9af71b217e6f842f720d12fe9e12f2fd Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 30 Sep 2011 19:40:36 +0200 -Subject: [PATCH 30/33] linux-user: add binfmt wrapper for argv[0] handling +Subject: [PATCH 29/33] linux-user: add binfmt wrapper for argv[0] handling When using qemu's linux-user binaries through binfmt, argv[0] gets lost along the execution because qemu only gets passed in the full file name diff --git a/0031-linux-user-Ignore-timer_create-syscall.patch b/0030-linux-user-Ignore-timer_create-syscall.patch similarity index 87% rename from 0031-linux-user-Ignore-timer_create-syscall.patch rename to 0030-linux-user-Ignore-timer_create-syscall.patch index a175e545..80cb1726 100644 --- a/0031-linux-user-Ignore-timer_create-syscall.patch +++ b/0030-linux-user-Ignore-timer_create-syscall.patch @@ -1,7 +1,7 @@ -From a9d80d519385d7c659173a7b12461a2099738c02 Mon Sep 17 00:00:00 2001 +From 269d801698bf7640dd325cfb4b195c4a207a07ee Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 11 Dec 2011 01:19:24 +0100 -Subject: [PATCH 31/33] linux-user: Ignore timer_create syscall +Subject: [PATCH 30/33] linux-user: Ignore timer_create syscall We don't implement the timer_create syscall, but shouting out loud about it breaks some %check tests in OBS, so better ignore it silently. diff --git a/0032-linux-user-be-silent-about-capget-failures.patch b/0031-linux-user-be-silent-about-capget-failures.patch similarity index 87% rename from 0032-linux-user-be-silent-about-capget-failures.patch rename to 0031-linux-user-be-silent-about-capget-failures.patch index 80ef4af8..96fb902c 100644 --- a/0032-linux-user-be-silent-about-capget-failures.patch +++ b/0031-linux-user-be-silent-about-capget-failures.patch @@ -1,7 +1,7 @@ -From 0006edd6319648e5a5eac86b6c7c82d67c4b5cb1 Mon Sep 17 00:00:00 2001 +From 36f403e159ecb5fcaeda5346c2df762cc904a91b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 11 Dec 2011 01:21:51 +0100 -Subject: [PATCH 32/33] linux-user: be silent about capget failures +Subject: [PATCH 31/33] linux-user: be silent about capget failures Complaining about capget doesn't buy us anything, but makes %check fail in certain builds. So better not complain about its missing diff --git a/0033-PPC-Fix-linker-scripts-on-ppc-hosts.patch b/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch similarity index 93% rename from 0033-PPC-Fix-linker-scripts-on-ppc-hosts.patch rename to 0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch index 22ddcc62..8ede39f0 100644 --- a/0033-PPC-Fix-linker-scripts-on-ppc-hosts.patch +++ b/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch @@ -1,7 +1,7 @@ -From 1dd66fa6bb6c616b91626a51d2dff02692e83fe5 Mon Sep 17 00:00:00 2001 +From 4fddaa4befeb3ddb1c14d9b2c882474ba4166940 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 12 Dec 2011 23:16:43 +0100 -Subject: [PATCH 33/33] PPC: Fix linker scripts on ppc hosts +Subject: [PATCH 32/33] PPC: Fix linker scripts on ppc hosts When compiling qemu statically with multilib on PPC, we hit the same issue that commit 845f2c2812d9ed24b36c02a3d06ee83aeafe8b49 diff --git a/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch b/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch new file mode 100644 index 00000000..19ffd3c7 --- /dev/null +++ b/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch @@ -0,0 +1,44 @@ +From ac233b323ad7e498c665e8c74df7e44de4a542c0 Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Wed, 14 Dec 2011 00:33:28 +0100 +Subject: [PATCH 33/33] linux-user: reserve 4GB of vmem for 32-on-64 + +When running 32-on-64 bit guests, we should always reserve as much +virtual memory as we possibly can for the guest process, so it can +never overlap with QEMU address space. + +Fortunately we already have the infrastructure for that. All that's +missing is some sane default value to also make use of it! + +Signed-off-by: Alexander Graf +--- + linux-user/main.c | 11 +++++++++++ + 1 files changed, 11 insertions(+), 0 deletions(-) + +diff --git a/linux-user/main.c b/linux-user/main.c +index 788ff98..3ffee40 100644 +--- a/linux-user/main.c ++++ b/linux-user/main.c +@@ -48,8 +48,19 @@ unsigned long mmap_min_addr; + #if defined(CONFIG_USE_GUEST_BASE) + unsigned long guest_base; + int have_guest_base; ++#if (TARGET_LONG_BITS == 32) && (HOST_LONG_BITS == 64) ++/* ++ * When running 32-on-64 we should make sure we can fit all of the possible ++ * guest address space into a contiguous chunk of virtual host memory. ++ * ++ * This way we will never overlap with our own libraries or binaries or stack ++ * or anything else that QEMU maps. ++ */ ++unsigned long reserved_va = 0xf7000000; ++#else + unsigned long reserved_va; + #endif ++#endif + + static void usage(void); + extern int use_stopflag; +-- +1.6.0.2 + diff --git a/qemu.changes b/qemu.changes index c4d82dcd..830c0d4b 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Wed Dec 14 00:16:28 UTC 2011 - agraf@suse.com + +- add update_git.sh to simplify maintenance of the tree +- use -R automatically in linux-user to gain more address space +- drop MAP_32BIT patch (deprecated by the one above) + ------------------------------------------------------------------- Mon Dec 12 22:05:24 CET 2011 - agraf@suse.com diff --git a/qemu.spec b/qemu.spec index 06dd56c1..14e2842f 100644 --- a/qemu.spec +++ b/qemu.spec @@ -26,39 +26,39 @@ Summary: Universal CPU emulator Version: 1.0 Release: 0 Source: %name-%version.tar.bz2 -Patch1: 0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch -Patch2: 0002-linux-user-fix-QEMU_STRACE-1-segfault.patch -Patch3: 0003-linux-user-save-auxv-length.patch -Patch4: 0004-linux-user-add-open-hijack-infrastructure.patch -Patch5: 0005-linux-user-fake-proc-self-maps.patch -Patch6: 0006-linux-user-fake-proc-self-stat.patch -Patch7: 0007-linux-user-fake-proc-self-auxv.patch -Patch8: 0008-XXX-dont-dump-core-on-sigabort.patch -Patch9: 0009-linux-user-fix-wait-syscall-status-returns.patch -Patch10: 0010-Revert-linux-user-fix-wait-syscall-status-returns.patch -Patch11: 0011-linux-user-fix-wait-syscall-status-returns.patch -Patch12: 0012-linux-user-Fix-32-on-64-mmap-for-x86_64.patch -Patch13: 0013-XXX-linux-user-fake-proc-self-maps-even-more.patch -Patch14: 0014-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch -Patch15: 0015-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch -Patch16: 0016-linux-user-map-lower-in-address-space.patch -Patch17: 0017-XXX-fake-proc-self-maps-also-fclose-real-file.patch -Patch18: 0018-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch -Patch19: 0019-qemu-0.9.0.cvs-binfmt.patch -Patch20: 0020-qemu-cvs-alsa_bitfield.patch -Patch21: 0021-qemu-cvs-alsa_ioctl.patch -Patch22: 0022-qemu-cvs-alsa_mmap.patch -Patch23: 0023-qemu-cvs-gettimeofday.patch -Patch24: 0024-qemu-cvs-ioctl_debug.patch -Patch25: 0025-qemu-cvs-ioctl_nodirection.patch -Patch26: 0026-qemu-img-vmdk-scsi.patch -Patch27: 0027-qemu-nonvoid_return.patch -Patch28: 0028-fix-mipsn32-linux-user-builds.patch -Patch29: 0029-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch -Patch30: 0030-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch -Patch31: 0031-linux-user-Ignore-timer_create-syscall.patch -Patch32: 0032-linux-user-be-silent-about-capget-failures.patch -Patch33: 0033-PPC-Fix-linker-scripts-on-ppc-hosts.patch +Patch0001: 0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch +Patch0002: 0002-linux-user-fix-QEMU_STRACE-1-segfault.patch +Patch0003: 0003-linux-user-save-auxv-length.patch +Patch0004: 0004-linux-user-add-open-hijack-infrastructure.patch +Patch0005: 0005-linux-user-fake-proc-self-maps.patch +Patch0006: 0006-linux-user-fake-proc-self-stat.patch +Patch0007: 0007-linux-user-fake-proc-self-auxv.patch +Patch0008: 0008-XXX-dont-dump-core-on-sigabort.patch +Patch0009: 0009-linux-user-fix-wait-syscall-status-returns.patch +Patch0010: 0010-Revert-linux-user-fix-wait-syscall-status-returns.patch +Patch0011: 0011-linux-user-fix-wait-syscall-status-returns.patch +Patch0012: 0012-XXX-linux-user-fake-proc-self-maps-even-more.patch +Patch0013: 0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch +Patch0014: 0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch +Patch0015: 0015-linux-user-map-lower-in-address-space.patch +Patch0016: 0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch +Patch0017: 0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch +Patch0018: 0018-qemu-0.9.0.cvs-binfmt.patch +Patch0019: 0019-qemu-cvs-alsa_bitfield.patch +Patch0020: 0020-qemu-cvs-alsa_ioctl.patch +Patch0021: 0021-qemu-cvs-alsa_mmap.patch +Patch0022: 0022-qemu-cvs-gettimeofday.patch +Patch0023: 0023-qemu-cvs-ioctl_debug.patch +Patch0024: 0024-qemu-cvs-ioctl_nodirection.patch +Patch0025: 0025-qemu-img-vmdk-scsi.patch +Patch0026: 0026-qemu-nonvoid_return.patch +Patch0027: 0027-fix-mipsn32-linux-user-builds.patch +Patch0028: 0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch +Patch0029: 0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch +Patch0030: 0030-linux-user-Ignore-timer_create-syscall.patch +Patch0031: 0031-linux-user-be-silent-about-capget-failures.patch +Patch0032: 0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch +Patch0033: 0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch # this is to make lint happy Source300: rpmlintrc BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -113,54 +113,50 @@ system. It currently emulates x86, ARM, PowerPC and SPARC CPUs as well as PC and PowerMac systems. This sub package contains static linked binaries for runnign linux-user -emulations. This can be used together with the OBS build script to +emulations. This can be used together with the OBS build script to run cross architectures builds %prep -%setup -q -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 -%patch19 -p1 -%patch20 -p1 -%patch21 -p1 -%patch22 -p1 -%patch23 -p1 -%patch24 -p1 -%patch25 -p1 -%patch26 -p1 -%patch27 -p1 -%patch28 -p1 -%patch29 -p1 -%patch30 -p1 -%patch31 -p1 -%patch32 -p1 -%patch33 -p1 +%setup -q +%patch0001 -p1 +%patch0002 -p1 +%patch0003 -p1 +%patch0004 -p1 +%patch0005 -p1 +%patch0006 -p1 +%patch0007 -p1 +%patch0008 -p1 +%patch0009 -p1 +%patch0010 -p1 +%patch0011 -p1 +%patch0012 -p1 +%patch0013 -p1 +%patch0014 -p1 +%patch0015 -p1 +%patch0016 -p1 +%patch0017 -p1 +%patch0018 -p1 +%patch0019 -p1 +%patch0020 -p1 +%patch0021 -p1 +%patch0022 -p1 +%patch0023 -p1 +%patch0024 -p1 +%patch0025 -p1 +%patch0026 -p1 +%patch0027 -p1 +%patch0028 -p1 +%patch0029 -p1 +%patch0030 -p1 +%patch0031 -p1 +%patch0032 -p1 +%patch0033 -p1 %build # build QEMU mkdir -p dynamic # build qemu-system -./configure --prefix=%_prefix --sysconfdir=%_sysconfdir \ - --interp-prefix=%_datadir/%name/qemu-i386 \ - --audio-card-list="ac97 es1370 sb16 cs4231a adlib gus" \ - --audio-drv-list="alsa sdl" --enable-mixemu --enable-vde \ - --extra-cflags="$QEMU_OPT_FLAGS" --enable-system --disable-linux-user +./configure --prefix=%_prefix --sysconfdir=%_sysconfdir --interp-prefix=%_datadir/%name/qemu-i386 --audio-card-list="ac97 es1370 sb16 cs4231a adlib gus" --audio-drv-list="alsa sdl" --enable-mixemu --enable-vde --extra-cflags="$QEMU_OPT_FLAGS" --enable-system --disable-linux-user # curl test fails for no reason in build system echo "CONFIG_CURL=y" >> config-host.mak echo "CURL_LIBS=-lcurl" >> config-host.mak @@ -170,12 +166,7 @@ make qemu-img V=1 mv */qemu */qemu-* qemu-io dynamic || true make clean # build userland emus -./configure --prefix=%_prefix --sysconfdir=%_sysconfdir \ - --interp-prefix=%_datadir/%name/qemu-i386 \ - --enable-linux-user \ - --disable-system \ - --static --disable-linux-aio \ - --extra-cflags="$QEMU_OPT_FLAGS" +./configure --prefix=%_prefix --sysconfdir=%_sysconfdir --interp-prefix=%_datadir/%name/qemu-i386 --enable-linux-user --disable-system --static --disable-linux-aio --extra-cflags="$QEMU_OPT_FLAGS" make %{?jobs:-j%jobs} V=1 %install diff --git a/qemu.spec.in b/qemu.spec.in new file mode 100644 index 00000000..00c42798 --- /dev/null +++ b/qemu.spec.in @@ -0,0 +1,180 @@ +# +# spec file for package qemu +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qemu +Url: http://fabrice.bellard.free.fr/qemu/ +License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ ; MIT License (or similar) +Group: System/Emulators/PC +Summary: Universal CPU emulator +Version: 1.0 +Release: 0 +Source: %name-%version.tar.bz2 +PATCH_FILES +# this is to make lint happy +Source300: rpmlintrc +BuildRoot: %{_tmppath}/%{name}-%{version}-build +BuildRequires: SDL-devel +BuildRequires: bison +BuildRequires: bluez-devel +BuildRequires: curl-devel +BuildRequires: cyrus-sasl-devel +BuildRequires: e2fsprogs-devel +BuildRequires: libaio +BuildRequires: libaio-devel +BuildRequires: libattr-devel +BuildRequires: libgnutls-devel +BuildRequires: libpcap-devel +BuildRequires: ncurses-devel +%if 0%{?suse_version} >= 1120 +BuildRequires: zlib-devel-static +%else +BuildRequires: zlib-devel +%endif +%if 0%{?suse_version} >= 1210 +BuildRequires: libattr-devel-static +BuildRequires: glibc-devel-static +BuildRequires: libfdt1-devel +%endif +%if 0%{?suse_version} >= 1140 +BuildRequires: glib2-devel-static +%endif +BuildRequires: libvdeplug3-devel +BuildRequires: glib2-devel +BuildRequires: python +BuildRequires: fdupes +Requires: timezone virt-utils + +%description +QEMU is an extremely well-performing CPU emulator that allows you to +choose between simulating an entire system and running userspace +binaries for different architectures under your native operating +system. It currently emulates x86, ARM, PowerPC and SPARC CPUs as well +as PC and PowerMac systems. + +%package linux-user +Group: System/Emulators/PC +Summary: Universal CPU emulator -- Linux User binaries +Provides: qemu:%_bindir/qemu-arm + +%description linux-user +QEMU is an extremely well-performing CPU emulator that allows you to +choose between simulating an entire system and running userspace +binaries for different architectures under your native operating +system. It currently emulates x86, ARM, PowerPC and SPARC CPUs as well +as PC and PowerMac systems. + +This sub package contains static linked binaries for runnign linux-user +emulations. This can be used together with the OBS build script to +run cross architectures builds + +%prep +%setup -q +PATCH_EXEC + +%build +# build QEMU +mkdir -p dynamic +# build qemu-system +./configure --prefix=%_prefix --sysconfdir=%_sysconfdir \ + --interp-prefix=%_datadir/%name/qemu-i386 \ + --audio-card-list="ac97 es1370 sb16 cs4231a adlib gus" \ + --audio-drv-list="alsa sdl" --enable-mixemu --enable-vde \ + --extra-cflags="$QEMU_OPT_FLAGS" --enable-system --disable-linux-user +# curl test fails for no reason in build system +echo "CONFIG_CURL=y" >> config-host.mak +echo "CURL_LIBS=-lcurl" >> config-host.mak +echo "#define CONFIG_CURL 1" >> config-host.h +make %{?jobs:-j%jobs} V=1 +make qemu-img V=1 +mv */qemu */qemu-* qemu-io dynamic || true +make clean +# build userland emus +./configure --prefix=%_prefix --sysconfdir=%_sysconfdir \ + --interp-prefix=%_datadir/%name/qemu-i386 \ + --enable-linux-user \ + --disable-system \ + --static --disable-linux-aio \ + --extra-cflags="$QEMU_OPT_FLAGS" +make %{?jobs:-j%jobs} V=1 + +%install +make install DESTDIR=$RPM_BUILD_ROOT +rm -f $RPM_BUILD_ROOT/%_mandir/man1/qemu-img.1 +rm -f $RPM_BUILD_ROOT/%_mandir/man8/qemu-nbd.8 +rm -fr $RPM_BUILD_ROOT/%_datadir/doc +# otherwise we get: install: omitting directory `dynamic/qemu-palcode' +rm -fr dynamic/qemu-palcode +install -m 755 */qemu-*[^.]? $RPM_BUILD_ROOT/%_bindir +install -d -m 755 $RPM_BUILD_ROOT/%_sbindir +install -m 755 dynamic/qemu-binfmt-conf.sh $RPM_BUILD_ROOT/%_sbindir +%ifnarch %ix86 x86_64 +ln -sf ../../../emul/ia32-linux $RPM_BUILD_ROOT/usr/share/qemu/qemu-i386 +%endif +%ifnarch ia64 +mkdir -p $RPM_BUILD_ROOT/emul/ia32-linux +%endif +%fdupes -s $RPM_BUILD_ROOT + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-, root, root) +%doc COPYING COPYING.LIB Changelog README TODO VERSION qemu-doc.html qemu-tech.html +%_bindir/qemu-io +%_bindir/qemu-system-* +%doc %_mandir/man[18]/qemu*.[18].gz +%_datadir/%name +%ifnarch %ix86 x86_64 ia64 +%dir /emul/ia32-linux +%endif +%dir %_sysconfdir/%name +%config %_sysconfdir/%name/target-x86_64.conf + +%files linux-user +%defattr(-, root, root) +%_bindir/qemu-alpha +%_bindir/qemu-arm +%_bindir/qemu-armeb +%_bindir/qemu-cris +%_bindir/qemu-i386 +%_bindir/qemu-m68k +%_bindir/qemu-microblaze +%_bindir/qemu-microblazeel +%_bindir/qemu-mips +%_bindir/qemu-mipsel +%_bindir/qemu-mipsn32 +%_bindir/qemu-mipsn32el +%_bindir/qemu-ppc64abi32 +%_bindir/qemu-ppc64 +%_bindir/qemu-ppc +%_bindir/qemu-s390x +%_bindir/qemu-sh4 +%_bindir/qemu-sh4eb +%_bindir/qemu-sparc32plus +%_bindir/qemu-sparc64 +%_bindir/qemu-sparc +%_bindir/qemu-unicore32 +%_bindir/qemu-x86_64 +%_bindir/qemu-*-binfmt +%_bindir/qemu-binfmt-conf.sh +%_sbindir/qemu-binfmt-conf.sh + +%changelog diff --git a/update_git.sh b/update_git.sh new file mode 100644 index 00000000..e674b7a1 --- /dev/null +++ b/update_git.sh @@ -0,0 +1,53 @@ +#!/bin/bash -e +# +# While updating versions of QEMU to 1.0 I got fed up with the +# quilt workflow and just put up a git tree that contains all +# the commits on top of a stable tarball. +# +# When updating this package, just either update the git tree +# below (use rebase!) or change the tree path and use your own +# +# That way we can easily rebase against the next stable release +# when it comes. + +GIT_TREE=git://repo.or.cz/qemu/agraf.git +GIT_LOCAL_TREE=/suse/agraf/git/qemu +GIT_BRANCH=suse-1.0 +GIT_UPSTREAM_TAG=v1.0 + +# clean up +if [ -e 0001-* ]; then + osc rm --force 0* +fi +rm -f qemu.spec + +# fetch all patches +if [ -d "$GIT_LOCAL_TREE" ]; then + git clone -ls $GIT_LOCAL_TREE qemu-tmp +else + git clone $GIT_TREE qemu-tmp +fi +cd qemu-tmp +git checkout $GIT_BRANCH +git format-patch -n $GIT_UPSTREAM_TAG -o .. +cd .. +rm -rf qemu-tmp + +# we have all patches as files now - generate the spec file! +while read line; do + if [ "$line" = "PATCH_FILES" ]; then + for i in 0*; do + NUM=${i%%-*} + echo "Patch$NUM: $i" + done + elif [ "$line" = "PATCH_EXEC" ]; then + for i in 0*; do + NUM=${i%%-*} + echo "%patch$NUM -p1" + done + else + echo "$line" + fi +done < qemu.spec.in > qemu.spec +osc add 0* + From 982b65b42adbe6fb30fc96859ffb1d1751119d841abcabab3fe57ac16d14b13d Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 6 Jan 2012 00:19:18 +0000 Subject: [PATCH 02/15] - add workaround for KVM on PPC to support hugetlbfs - add upstream patches to fake $0 in /proc/self/maps (fixes ps) OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=37 --- ...errupts-by-inline-checking-of-a-flag.patch | 2 +- ...inux-user-fix-QEMU_STRACE-1-segfault.patch | 2 +- 0003-linux-user-save-auxv-length.patch | 2 +- ...-user-add-open-hijack-infrastructure.patch | 2 +- 0005-linux-user-fake-proc-self-maps.patch | 2 +- 0006-linux-user-fake-proc-self-stat.patch | 2 +- 0007-linux-user-fake-proc-self-auxv.patch | 2 +- 0008-XXX-dont-dump-core-on-sigabort.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...x-user-fake-proc-self-maps-even-more.patch | 2 +- ...-SA_RESTART-race-with-boehm-gc-ARM-o.patch | 2 +- ...nary-lower-in-address-space-so-we-ha.patch | 2 +- ...inux-user-map-lower-in-address-space.patch | 2 +- ...proc-self-maps-also-fclose-real-file.patch | 2 +- ...igher-again-so-we-have-space-for-brk.patch | 2 +- 0018-qemu-0.9.0.cvs-binfmt.patch | 2 +- 0019-qemu-cvs-alsa_bitfield.patch | 2 +- 0020-qemu-cvs-alsa_ioctl.patch | 2 +- 0021-qemu-cvs-alsa_mmap.patch | 2 +- 0022-qemu-cvs-gettimeofday.patch | 2 +- 0023-qemu-cvs-ioctl_debug.patch | 2 +- 0024-qemu-cvs-ioctl_nodirection.patch | 2 +- 0025-qemu-img-vmdk-scsi.patch | 2 +- 0026-qemu-nonvoid_return.patch | 2 +- 0027-fix-mipsn32-linux-user-builds.patch | 2 +- ...ynamips-and-GNS3-UDP-tunnels-Patches.patch | 2 +- ...d-binfmt-wrapper-for-argv-0-handling.patch | 2 +- ...nux-user-Ignore-timer_create-syscall.patch | 2 +- ...user-be-silent-about-capget-failures.patch | 2 +- ...-PPC-Fix-linker-scripts-on-ppc-hosts.patch | 2 +- ...ser-reserve-4GB-of-vmem-for-32-on-64.patch | 2 +- 0034-PPC-KVM-Disable-mmu-notifier-check.patch | 34 ++++++++++++ ...mprove-fake-proc-self-stat-making-ps.patch | 54 +++++++++++++++++++ ...arget_argv-is-placed-on-ts-bprm-argv.patch | 37 +++++++++++++ qemu.changes | 6 +++ qemu.spec | 8 ++- 38 files changed, 171 insertions(+), 34 deletions(-) create mode 100644 0034-PPC-KVM-Disable-mmu-notifier-check.patch create mode 100644 0035-linux-user-improve-fake-proc-self-stat-making-ps.patch create mode 100644 0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch diff --git a/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch b/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch index 4a29bd39..5019fd30 100644 --- a/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch +++ b/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch @@ -1,7 +1,7 @@ From 4cc09e9530fb08123594be6c72dfc381df5dcddc Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Wed, 5 Oct 2011 10:04:02 +0100 -Subject: [PATCH 01/33] Handle CPU interrupts by inline checking of a flag +Subject: [PATCH 01/36] Handle CPU interrupts by inline checking of a flag Fix the nasty TCG race conditions and crashes by implementing cpu_exit as setting a flag which is checked at the start of each TB. This is diff --git a/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch b/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch index d2602c58..515f6376 100644 --- a/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch +++ b/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch @@ -1,7 +1,7 @@ From 0588bc446fd48bdb1965a6773d008c05a4ba16c1 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 20 Nov 2011 13:02:54 +0100 -Subject: [PATCH 02/33] linux-user: fix QEMU_STRACE=1 segfault +Subject: [PATCH 02/36] linux-user: fix QEMU_STRACE=1 segfault While debugging some issues with QEMU_STRACE I stumbled over segmentation faults that were pretty reproducible. Turns out we tried to treat a diff --git a/0003-linux-user-save-auxv-length.patch b/0003-linux-user-save-auxv-length.patch index 53c6fc4f..f675a57a 100644 --- a/0003-linux-user-save-auxv-length.patch +++ b/0003-linux-user-save-auxv-length.patch @@ -1,7 +1,7 @@ From 67c12998086c44ebef7f92a394154d6aba446178 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:22 +0000 -Subject: [PATCH 03/33] linux-user: save auxv length +Subject: [PATCH 03/36] linux-user: save auxv length We create our own AUXV segment on stack and save a pointer to it. However we don't save the length of it, so any code that wants to diff --git a/0004-linux-user-add-open-hijack-infrastructure.patch b/0004-linux-user-add-open-hijack-infrastructure.patch index bd291a4f..2911778a 100644 --- a/0004-linux-user-add-open-hijack-infrastructure.patch +++ b/0004-linux-user-add-open-hijack-infrastructure.patch @@ -1,7 +1,7 @@ From 99590488e94b6b7f10ecf9a99398fd24a69a7039 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:23 +0000 -Subject: [PATCH 04/33] linux-user: add open() hijack infrastructure +Subject: [PATCH 04/36] linux-user: add open() hijack infrastructure There are a number of files in /proc that expose host information to the guest program. This patch adds infrastructure to override diff --git a/0005-linux-user-fake-proc-self-maps.patch b/0005-linux-user-fake-proc-self-maps.patch index f800cfbd..702b0f70 100644 --- a/0005-linux-user-fake-proc-self-maps.patch +++ b/0005-linux-user-fake-proc-self-maps.patch @@ -1,7 +1,7 @@ From 059e727a9a4be00de949769105e9e0ea876fc64b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:24 +0000 -Subject: [PATCH 05/33] linux-user: fake /proc/self/maps +Subject: [PATCH 05/36] linux-user: fake /proc/self/maps glibc's pthread_attr_getstack tries to find the stack range from /proc/self/maps. Unfortunately, /proc is usually the host's /proc diff --git a/0006-linux-user-fake-proc-self-stat.patch b/0006-linux-user-fake-proc-self-stat.patch index 827e254c..4647f883 100644 --- a/0006-linux-user-fake-proc-self-stat.patch +++ b/0006-linux-user-fake-proc-self-stat.patch @@ -1,7 +1,7 @@ From 7ee3fd47eed19e4dfa26a8d0176ed3550b8d0ccf Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:25 +0000 -Subject: [PATCH 06/33] linux-user: fake /proc/self/stat +Subject: [PATCH 06/36] linux-user: fake /proc/self/stat The boehm gc finds the program's stack starting pointer by checking /proc/self/stat. Unfortunately, so far it reads diff --git a/0007-linux-user-fake-proc-self-auxv.patch b/0007-linux-user-fake-proc-self-auxv.patch index a35104ce..7cbe2c67 100644 --- a/0007-linux-user-fake-proc-self-auxv.patch +++ b/0007-linux-user-fake-proc-self-auxv.patch @@ -1,7 +1,7 @@ From ddf0d4037b10c07d9e5b168f9f96e60a1601c75b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:26 +0000 -Subject: [PATCH 07/33] linux-user: fake /proc/self/auxv +Subject: [PATCH 07/36] linux-user: fake /proc/self/auxv Gtk tries to read /proc/self/auxv to find its auxv table instead of taking it from its own program memory space. diff --git a/0008-XXX-dont-dump-core-on-sigabort.patch b/0008-XXX-dont-dump-core-on-sigabort.patch index 5e2c6499..c4d6e1d7 100644 --- a/0008-XXX-dont-dump-core-on-sigabort.patch +++ b/0008-XXX-dont-dump-core-on-sigabort.patch @@ -1,7 +1,7 @@ From 4bc96d88f91417aa2bb029da2e8343456fe86631 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 21 Nov 2011 23:50:36 +0100 -Subject: [PATCH 08/33] XXX dont dump core on sigabort +Subject: [PATCH 08/36] XXX dont dump core on sigabort --- linux-user/signal.c | 6 ++++++ diff --git a/0009-linux-user-fix-wait-syscall-status-returns.patch b/0009-linux-user-fix-wait-syscall-status-returns.patch index 3630f81d..0886f583 100644 --- a/0009-linux-user-fix-wait-syscall-status-returns.patch +++ b/0009-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From ee5137d38109fdcb55a58be447c2c27be2b16eb0 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 22 Nov 2011 17:53:40 +0100 -Subject: [PATCH 09/33] linux-user: fix wait* syscall status returns +Subject: [PATCH 09/36] linux-user: fix wait* syscall status returns When calling wait4 or waitpid with a status pointer and WNOHANG, the syscall can potentially not modify the status pointer input. Now if we diff --git a/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch b/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch index ad5c3c9c..1f067ff2 100644 --- a/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch +++ b/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From 5cfce885dd1b3a229cd2ea7a94dfe2445ec29417 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 24 Nov 2011 00:38:22 +0100 -Subject: [PATCH 10/33] Revert "linux-user: fix wait* syscall status returns" +Subject: [PATCH 10/36] Revert "linux-user: fix wait* syscall status returns" This reverts commit 93092792064d880eb91679004b4761639d754081. --- diff --git a/0011-linux-user-fix-wait-syscall-status-returns.patch b/0011-linux-user-fix-wait-syscall-status-returns.patch index c8ac93a7..a8dd8db5 100644 --- a/0011-linux-user-fix-wait-syscall-status-returns.patch +++ b/0011-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From b71ee7a063f7cffdf8a2cf73fcbc1d461fbbb80e Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 24 Nov 2011 00:39:35 +0100 -Subject: [PATCH 11/33] linux-user: fix wait* syscall status returns +Subject: [PATCH 11/36] linux-user: fix wait* syscall status returns When calling wait4 or waitpid with a status pointer and WNOHANG, the syscall can potentially not modify the status pointer input. Now if we diff --git a/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch b/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch index b1f9d9ba..1000b558 100644 --- a/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch +++ b/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch @@ -1,7 +1,7 @@ From 146dddbec44c48417f776d54f823093b464e596c Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 28 Nov 2011 17:05:24 +0100 -Subject: [PATCH 12/33] XXX linux-user: fake /proc/self/maps even more +Subject: [PATCH 12/36] XXX linux-user: fake /proc/self/maps even more --- linux-user/syscall.c | 40 +++++++++++++++++++++++++++++++++++++++- diff --git a/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch b/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch index 60faa3e6..cc818d4d 100644 --- a/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch +++ b/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch @@ -1,7 +1,7 @@ From 79a59902304b66e9270d11901a554e5b22042d6e Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 1 Dec 2011 19:00:01 +0100 -Subject: [PATCH 13/33] XXX work around SA_RESTART race with boehm-gc (ARM only) +Subject: [PATCH 13/36] XXX work around SA_RESTART race with boehm-gc (ARM only) --- linux-user/main.c | 25 ++++++++----- diff --git a/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch b/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch index 147f4120..047ef288 100644 --- a/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch +++ b/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch @@ -1,7 +1,7 @@ From e534a77a0e1f880d0f74514ac50de5de3dd4811a Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 5 Dec 2011 23:37:52 +0100 -Subject: [PATCH 14/33] XXX move qemu binary lower in address space so we have space for guest stuff +Subject: [PATCH 14/36] XXX move qemu binary lower in address space so we have space for guest stuff --- x86_64.ld | 2 +- diff --git a/0015-linux-user-map-lower-in-address-space.patch b/0015-linux-user-map-lower-in-address-space.patch index c6f1f82d..a31a02bf 100644 --- a/0015-linux-user-map-lower-in-address-space.patch +++ b/0015-linux-user-map-lower-in-address-space.patch @@ -1,7 +1,7 @@ From edda5e8f49b7857379733d652d6b259488bd7b70 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 6 Dec 2011 00:39:50 +0100 -Subject: [PATCH 15/33] linux-user: map lower in address space +Subject: [PATCH 15/36] linux-user: map lower in address space While trying to compile Java I can into situations where there was simply no virtual address space left for a 32-bit guest to take. For example when diff --git a/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch b/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch index 058435f6..abbaf076 100644 --- a/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch +++ b/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch @@ -1,7 +1,7 @@ From 3580a90d40df10410b7268f89aae58ce05dd2bed Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 8 Dec 2011 23:19:32 +0100 -Subject: [PATCH 16/33] XXX fake /proc/self/maps: also fclose real file +Subject: [PATCH 16/36] XXX fake /proc/self/maps: also fclose real file --- linux-user/syscall.c | 1 + diff --git a/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch b/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch index 3d793dca..c9ea2daa 100644 --- a/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch +++ b/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch @@ -1,7 +1,7 @@ From 91f12fe177833e0112cd7f7cf5781b26377667a5 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sat, 10 Dec 2011 00:03:56 +0100 -Subject: [PATCH 17/33] XXX map qemu higher again so we have space for brk +Subject: [PATCH 17/36] XXX map qemu higher again so we have space for brk --- linux-user/mmap.c | 2 +- diff --git a/0018-qemu-0.9.0.cvs-binfmt.patch b/0018-qemu-0.9.0.cvs-binfmt.patch index f1ca065c..57ee668a 100644 --- a/0018-qemu-0.9.0.cvs-binfmt.patch +++ b/0018-qemu-0.9.0.cvs-binfmt.patch @@ -1,7 +1,7 @@ From 434801ec78b031170eb0762302b52062e6c27d0e Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:18:44 +0200 -Subject: [PATCH 18/33] qemu-0.9.0.cvs-binfmt +Subject: [PATCH 18/36] qemu-0.9.0.cvs-binfmt Fixes binfmt_misc setup script: - x86_64 is i386-compatible diff --git a/0019-qemu-cvs-alsa_bitfield.patch b/0019-qemu-cvs-alsa_bitfield.patch index 2d7e8aa0..e81a27ab 100644 --- a/0019-qemu-cvs-alsa_bitfield.patch +++ b/0019-qemu-cvs-alsa_bitfield.patch @@ -1,7 +1,7 @@ From b41a72d0c29f97610dfdd5573b8be383823bc88f Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:20:50 +0200 -Subject: [PATCH 19/33] qemu-cvs-alsa_bitfield +Subject: [PATCH 19/36] qemu-cvs-alsa_bitfield Implements TYPE_INTBITFIELD partially. (required for ALSA support) diff --git a/0020-qemu-cvs-alsa_ioctl.patch b/0020-qemu-cvs-alsa_ioctl.patch index 08a27c11..5c98860e 100644 --- a/0020-qemu-cvs-alsa_ioctl.patch +++ b/0020-qemu-cvs-alsa_ioctl.patch @@ -1,7 +1,7 @@ From 33f065c217c1921759df12467954eb4638f84a72 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:23:27 +0200 -Subject: [PATCH 20/33] qemu-cvs-alsa_ioctl +Subject: [PATCH 20/36] qemu-cvs-alsa_ioctl Implements ALSA ioctls on PPC hosts. diff --git a/0021-qemu-cvs-alsa_mmap.patch b/0021-qemu-cvs-alsa_mmap.patch index c0b70889..45b7cbc6 100644 --- a/0021-qemu-cvs-alsa_mmap.patch +++ b/0021-qemu-cvs-alsa_mmap.patch @@ -1,7 +1,7 @@ From 8b67814c8ab4645ddd43664b1092e78ea6a743d8 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:24:15 +0200 -Subject: [PATCH 21/33] qemu-cvs-alsa_mmap +Subject: [PATCH 21/36] qemu-cvs-alsa_mmap Hack to prevent ALSA from using mmap() interface to simplify emulation. diff --git a/0022-qemu-cvs-gettimeofday.patch b/0022-qemu-cvs-gettimeofday.patch index 240520df..bea826d3 100644 --- a/0022-qemu-cvs-gettimeofday.patch +++ b/0022-qemu-cvs-gettimeofday.patch @@ -1,7 +1,7 @@ From c0ce4deb6c2ac843e337b7252fbefc190d625ca5 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:25:41 +0200 -Subject: [PATCH 22/33] qemu-cvs-gettimeofday +Subject: [PATCH 22/36] qemu-cvs-gettimeofday No clue what this is for. --- diff --git a/0023-qemu-cvs-ioctl_debug.patch b/0023-qemu-cvs-ioctl_debug.patch index 2b7c036f..bb6c4fab 100644 --- a/0023-qemu-cvs-ioctl_debug.patch +++ b/0023-qemu-cvs-ioctl_debug.patch @@ -1,7 +1,7 @@ From 6232258009a4735d7f4f53b5589e7ebd90a9885d Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:26:33 +0200 -Subject: [PATCH 23/33] qemu-cvs-ioctl_debug +Subject: [PATCH 23/36] qemu-cvs-ioctl_debug Extends unsupported ioctl debug output. diff --git a/0024-qemu-cvs-ioctl_nodirection.patch b/0024-qemu-cvs-ioctl_nodirection.patch index 93a2dc5b..bee1e8e2 100644 --- a/0024-qemu-cvs-ioctl_nodirection.patch +++ b/0024-qemu-cvs-ioctl_nodirection.patch @@ -1,7 +1,7 @@ From 926d75fa4b4b5d95d4b0111e3e0af4d983a9d46b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:27:36 +0200 -Subject: [PATCH 24/33] qemu-cvs-ioctl_nodirection +Subject: [PATCH 24/36] qemu-cvs-ioctl_nodirection the direction given in the ioctl should be correct so we can assume the communication is uni-directional. The alsa developers did not like this diff --git a/0025-qemu-img-vmdk-scsi.patch b/0025-qemu-img-vmdk-scsi.patch index caf6b773..465fb5dd 100644 --- a/0025-qemu-img-vmdk-scsi.patch +++ b/0025-qemu-img-vmdk-scsi.patch @@ -1,7 +1,7 @@ From 90b3180677c5615bafc9a1f8252fbc4af1dc1ae4 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:37:42 +0200 -Subject: [PATCH 25/33] qemu-img-vmdk-scsi +Subject: [PATCH 25/36] qemu-img-vmdk-scsi Support creation of SCSI VMDK images in qemu-img. diff --git a/0026-qemu-nonvoid_return.patch b/0026-qemu-nonvoid_return.patch index 7c91b7f9..d24b3b42 100644 --- a/0026-qemu-nonvoid_return.patch +++ b/0026-qemu-nonvoid_return.patch @@ -1,7 +1,7 @@ From 7e6479e0d45e45e888cb79759fd44d6c14be19f4 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:38:20 +0200 -Subject: [PATCH 26/33] qemu-nonvoid_return +Subject: [PATCH 26/36] qemu-nonvoid_return Squelches GCC warnings about undefined return values. diff --git a/0027-fix-mipsn32-linux-user-builds.patch b/0027-fix-mipsn32-linux-user-builds.patch index 9c23db87..23d3ac58 100644 --- a/0027-fix-mipsn32-linux-user-builds.patch +++ b/0027-fix-mipsn32-linux-user-builds.patch @@ -1,7 +1,7 @@ From 164cf539481164978d9fa6ad69eb20cda7dc0e12 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Wed, 25 Aug 2010 14:23:43 +0200 -Subject: [PATCH 27/33] fix mipsn32*-linux-user builds +Subject: [PATCH 27/36] fix mipsn32*-linux-user builds Signed-off-by: Ulrich Hecht --- diff --git a/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch b/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch index fb400cea..97abf8f7 100644 --- a/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch +++ b/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch @@ -1,7 +1,7 @@ From 15d6a32b38abc6c2f8143ebccfcdd05d204f0fcd Mon Sep 17 00:00:00 2001 From: Benjamin Date: Sat, 8 Oct 2011 07:31:33 +0000 -Subject: [PATCH 28/33] Integrating Dynamips and GNS3 UDP tunnels (Patches) +Subject: [PATCH 28/36] Integrating Dynamips and GNS3 UDP tunnels (Patches) On 10/07/11 10:35, Jan Kiszka wrote: > diff --git a/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch b/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch index 9d7c715a..1053248f 100644 --- a/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch +++ b/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch @@ -1,7 +1,7 @@ From 47ff084e9af71b217e6f842f720d12fe9e12f2fd Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 30 Sep 2011 19:40:36 +0200 -Subject: [PATCH 29/33] linux-user: add binfmt wrapper for argv[0] handling +Subject: [PATCH 29/36] linux-user: add binfmt wrapper for argv[0] handling When using qemu's linux-user binaries through binfmt, argv[0] gets lost along the execution because qemu only gets passed in the full file name diff --git a/0030-linux-user-Ignore-timer_create-syscall.patch b/0030-linux-user-Ignore-timer_create-syscall.patch index 80cb1726..298f564b 100644 --- a/0030-linux-user-Ignore-timer_create-syscall.patch +++ b/0030-linux-user-Ignore-timer_create-syscall.patch @@ -1,7 +1,7 @@ From 269d801698bf7640dd325cfb4b195c4a207a07ee Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 11 Dec 2011 01:19:24 +0100 -Subject: [PATCH 30/33] linux-user: Ignore timer_create syscall +Subject: [PATCH 30/36] linux-user: Ignore timer_create syscall We don't implement the timer_create syscall, but shouting out loud about it breaks some %check tests in OBS, so better ignore it silently. diff --git a/0031-linux-user-be-silent-about-capget-failures.patch b/0031-linux-user-be-silent-about-capget-failures.patch index 96fb902c..b249f137 100644 --- a/0031-linux-user-be-silent-about-capget-failures.patch +++ b/0031-linux-user-be-silent-about-capget-failures.patch @@ -1,7 +1,7 @@ From 36f403e159ecb5fcaeda5346c2df762cc904a91b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 11 Dec 2011 01:21:51 +0100 -Subject: [PATCH 31/33] linux-user: be silent about capget failures +Subject: [PATCH 31/36] linux-user: be silent about capget failures Complaining about capget doesn't buy us anything, but makes %check fail in certain builds. So better not complain about its missing diff --git a/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch b/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch index 8ede39f0..bc32fb9f 100644 --- a/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch +++ b/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch @@ -1,7 +1,7 @@ From 4fddaa4befeb3ddb1c14d9b2c882474ba4166940 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 12 Dec 2011 23:16:43 +0100 -Subject: [PATCH 32/33] PPC: Fix linker scripts on ppc hosts +Subject: [PATCH 32/36] PPC: Fix linker scripts on ppc hosts When compiling qemu statically with multilib on PPC, we hit the same issue that commit 845f2c2812d9ed24b36c02a3d06ee83aeafe8b49 diff --git a/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch b/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch index 19ffd3c7..865c1137 100644 --- a/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch +++ b/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch @@ -1,7 +1,7 @@ From ac233b323ad7e498c665e8c74df7e44de4a542c0 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 14 Dec 2011 00:33:28 +0100 -Subject: [PATCH 33/33] linux-user: reserve 4GB of vmem for 32-on-64 +Subject: [PATCH 33/36] linux-user: reserve 4GB of vmem for 32-on-64 When running 32-on-64 bit guests, we should always reserve as much virtual memory as we possibly can for the guest process, so it can diff --git a/0034-PPC-KVM-Disable-mmu-notifier-check.patch b/0034-PPC-KVM-Disable-mmu-notifier-check.patch new file mode 100644 index 00000000..d7fb8738 --- /dev/null +++ b/0034-PPC-KVM-Disable-mmu-notifier-check.patch @@ -0,0 +1,34 @@ +From 96ac7aa8753cb2d79121c5a579a6e93160428a40 Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Fri, 6 Jan 2012 01:05:55 +0100 +Subject: [PATCH 34/36] PPC: KVM: Disable mmu notifier check + +When using hugetlbfs (which is required for HV mode KVM on 970), we +check for MMU notifiers that on 970 can not be implemented properly. + +So disable the check for mmu notifiers on PowerPC guests, making +KVM guests work there, even if possibly racy in some odd circumstances. +--- + exec.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/exec.c b/exec.c +index 6c923f2..9f10868 100644 +--- a/exec.c ++++ b/exec.c +@@ -2831,10 +2831,12 @@ static void *file_ram_alloc(RAMBlock *block, + return NULL; + } + ++#ifndef TARGET_PPC + if (kvm_enabled() && !kvm_has_sync_mmu()) { + fprintf(stderr, "host lacks kvm mmu notifiers, -mem-path unsupported\n"); + return NULL; + } ++#endif + + if (asprintf(&filename, "%s/qemu_back_mem.XXXXXX", path) == -1) { + return NULL; +-- +1.6.0.2 + diff --git a/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch b/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch new file mode 100644 index 00000000..83e0f802 --- /dev/null +++ b/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch @@ -0,0 +1,54 @@ +From 872ebeaa24ed1c4b0c1596a7ad37f2bf2275efb0 Mon Sep 17 00:00:00 2001 +From: Fabio Erculiani +Date: Tue, 3 Jan 2012 09:38:34 +0000 +Subject: [PATCH 35/36] linux-user: improve fake /proc/self/stat making `ps` not segfault. + +With the current fake /proc/self/stat implementation `ps` is +segfaulting because it expects to read PID and argv[0] as first and +second field respectively, with the latter being enclosed between +backets. + +Reproducing is as easy as running: `ps` inside qemu-user chroot +with /proc mounted. + +Signed-off-by: Fabio Erculiani +Acked-by: Alexander Graf +Signed-off-by: Alexander Graf +--- + linux-user/syscall.c | 19 +++++++++++++++---- + 1 files changed, 15 insertions(+), 4 deletions(-) + +diff --git a/linux-user/syscall.c b/linux-user/syscall.c +index 9ba51bf..3e8e3dd 100644 +--- a/linux-user/syscall.c ++++ b/linux-user/syscall.c +@@ -4678,11 +4678,22 @@ static int open_self_stat(void *cpu_env, int fd) + int len; + uint64_t val = 0; + +- if (i == 27) { +- /* stack bottom */ +- val = start_stack; ++ if (i == 0) { ++ /* pid */ ++ val = getpid(); ++ snprintf(buf, sizeof(buf), "%"PRId64 " ", val); ++ } else if (i == 1) { ++ /* app name */ ++ snprintf(buf, sizeof(buf), "(%s) ", ts->bprm->argv[0]); ++ } else if (i == 27) { ++ /* stack bottom */ ++ val = start_stack; ++ snprintf(buf, sizeof(buf), "%"PRId64 " ", val); ++ } else { ++ /* for the rest, there is MasterCard */ ++ snprintf(buf, sizeof(buf), "0%c", i == 43 ? '\n' : ' '); + } +- snprintf(buf, sizeof(buf), "%"PRId64 "%c", val, i == 43 ? '\n' : ' '); ++ + len = strlen(buf); + if (write(fd, buf, len) != len) { + return -1; +-- +1.6.0.2 + diff --git a/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch b/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch new file mode 100644 index 00000000..b533b5d2 --- /dev/null +++ b/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch @@ -0,0 +1,37 @@ +From 7dc45b21c5ef8a9445463f8d3754e502621192a7 Mon Sep 17 00:00:00 2001 +From: Fabio Erculiani +Date: Tue, 3 Jan 2012 09:38:35 +0000 +Subject: [PATCH 36/36] linux-user: target_argv is placed on ts->bprm->argv and can't be freed() + +TaskState contains linux_bprm struct which encapsulates argv among +other things. +argv might be used around the code and is expected to contain valid +data. Before this patch, ts->bprm->argv was NULL due to it being +freed right after loader_exec(). + +Signed-off-by: Fabio Erculiani +Acked-by: Alexander Graf +Signed-off-by: Alexander Graf +--- + linux-user/main.c | 5 ----- + 1 files changed, 0 insertions(+), 5 deletions(-) + +diff --git a/linux-user/main.c b/linux-user/main.c +index 3ffee40..6a5dfde 100644 +--- a/linux-user/main.c ++++ b/linux-user/main.c +@@ -3503,11 +3503,6 @@ int main(int argc, char **argv, char **envp) + _exit(1); + } + +- for (i = 0; i < target_argc; i++) { +- free(target_argv[i]); +- } +- free(target_argv); +- + for (wrk = target_environ; *wrk; wrk++) { + free(*wrk); + } +-- +1.6.0.2 + diff --git a/qemu.changes b/qemu.changes index 830c0d4b..0f4b4999 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Jan 6 01:18:00 UTC 2012 - agraf@suse.de + +- add workaround for KVM on PPC to support hugetlbfs +- add upstream patches to fake $0 in /proc/self/maps (fixes ps) + ------------------------------------------------------------------- Wed Dec 14 00:16:28 UTC 2011 - agraf@suse.com diff --git a/qemu.spec b/qemu.spec index 14e2842f..80338997 100644 --- a/qemu.spec +++ b/qemu.spec @@ -1,7 +1,7 @@ # # spec file for package qemu # -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -59,6 +59,9 @@ Patch0030: 0030-linux-user-Ignore-timer_create-syscall.patch Patch0031: 0031-linux-user-be-silent-about-capget-failures.patch Patch0032: 0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch Patch0033: 0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch +Patch0034: 0034-PPC-KVM-Disable-mmu-notifier-check.patch +Patch0035: 0035-linux-user-improve-fake-proc-self-stat-making-ps.patch +Patch0036: 0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch # this is to make lint happy Source300: rpmlintrc BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -151,6 +154,9 @@ run cross architectures builds %patch0031 -p1 %patch0032 -p1 %patch0033 -p1 +%patch0034 -p1 +%patch0035 -p1 +%patch0036 -p1 %build # build QEMU From eb35a566ca84f9ad3a6b66f16e9341ab371c04455eb3a4b6162c431af3c71fdd Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 10 Jan 2012 15:43:02 +0000 Subject: [PATCH 03/15] - add fix for PPC in HV KVM mode OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=38 --- ...errupts-by-inline-checking-of-a-flag.patch | 2 +- ...inux-user-fix-QEMU_STRACE-1-segfault.patch | 2 +- 0003-linux-user-save-auxv-length.patch | 2 +- ...-user-add-open-hijack-infrastructure.patch | 2 +- 0005-linux-user-fake-proc-self-maps.patch | 2 +- 0006-linux-user-fake-proc-self-stat.patch | 2 +- 0007-linux-user-fake-proc-self-auxv.patch | 2 +- 0008-XXX-dont-dump-core-on-sigabort.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...x-user-fake-proc-self-maps-even-more.patch | 2 +- ...-SA_RESTART-race-with-boehm-gc-ARM-o.patch | 2 +- ...nary-lower-in-address-space-so-we-ha.patch | 2 +- ...inux-user-map-lower-in-address-space.patch | 2 +- ...proc-self-maps-also-fclose-real-file.patch | 2 +- ...igher-again-so-we-have-space-for-brk.patch | 2 +- 0018-qemu-0.9.0.cvs-binfmt.patch | 2 +- 0019-qemu-cvs-alsa_bitfield.patch | 2 +- 0020-qemu-cvs-alsa_ioctl.patch | 2 +- 0021-qemu-cvs-alsa_mmap.patch | 2 +- 0022-qemu-cvs-gettimeofday.patch | 2 +- 0023-qemu-cvs-ioctl_debug.patch | 2 +- 0024-qemu-cvs-ioctl_nodirection.patch | 2 +- 0025-qemu-img-vmdk-scsi.patch | 2 +- 0026-qemu-nonvoid_return.patch | 2 +- 0027-fix-mipsn32-linux-user-builds.patch | 2 +- ...ynamips-and-GNS3-UDP-tunnels-Patches.patch | 2 +- ...d-binfmt-wrapper-for-argv-0-handling.patch | 2 +- ...nux-user-Ignore-timer_create-syscall.patch | 2 +- ...user-be-silent-about-capget-failures.patch | 2 +- ...-PPC-Fix-linker-scripts-on-ppc-hosts.patch | 2 +- ...ser-reserve-4GB-of-vmem-for-32-on-64.patch | 2 +- 0034-PPC-KVM-Disable-mmu-notifier-check.patch | 2 +- ...mprove-fake-proc-self-stat-making-ps.patch | 2 +- ...arget_argv-is-placed-on-ts-bprm-argv.patch | 2 +- ...-PPC-KVM-Ignore-SET_ONE_REG-failures.patch | 33 +++++++++++++++++++ qemu.changes | 5 +++ qemu.spec | 2 ++ 39 files changed, 76 insertions(+), 36 deletions(-) create mode 100644 0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch diff --git a/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch b/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch index 5019fd30..5adf9689 100644 --- a/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch +++ b/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch @@ -1,7 +1,7 @@ From 4cc09e9530fb08123594be6c72dfc381df5dcddc Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Wed, 5 Oct 2011 10:04:02 +0100 -Subject: [PATCH 01/36] Handle CPU interrupts by inline checking of a flag +Subject: [PATCH 01/37] Handle CPU interrupts by inline checking of a flag Fix the nasty TCG race conditions and crashes by implementing cpu_exit as setting a flag which is checked at the start of each TB. This is diff --git a/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch b/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch index 515f6376..0f9ed54e 100644 --- a/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch +++ b/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch @@ -1,7 +1,7 @@ From 0588bc446fd48bdb1965a6773d008c05a4ba16c1 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 20 Nov 2011 13:02:54 +0100 -Subject: [PATCH 02/36] linux-user: fix QEMU_STRACE=1 segfault +Subject: [PATCH 02/37] linux-user: fix QEMU_STRACE=1 segfault While debugging some issues with QEMU_STRACE I stumbled over segmentation faults that were pretty reproducible. Turns out we tried to treat a diff --git a/0003-linux-user-save-auxv-length.patch b/0003-linux-user-save-auxv-length.patch index f675a57a..d00d9063 100644 --- a/0003-linux-user-save-auxv-length.patch +++ b/0003-linux-user-save-auxv-length.patch @@ -1,7 +1,7 @@ From 67c12998086c44ebef7f92a394154d6aba446178 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:22 +0000 -Subject: [PATCH 03/36] linux-user: save auxv length +Subject: [PATCH 03/37] linux-user: save auxv length We create our own AUXV segment on stack and save a pointer to it. However we don't save the length of it, so any code that wants to diff --git a/0004-linux-user-add-open-hijack-infrastructure.patch b/0004-linux-user-add-open-hijack-infrastructure.patch index 2911778a..97d663de 100644 --- a/0004-linux-user-add-open-hijack-infrastructure.patch +++ b/0004-linux-user-add-open-hijack-infrastructure.patch @@ -1,7 +1,7 @@ From 99590488e94b6b7f10ecf9a99398fd24a69a7039 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:23 +0000 -Subject: [PATCH 04/36] linux-user: add open() hijack infrastructure +Subject: [PATCH 04/37] linux-user: add open() hijack infrastructure There are a number of files in /proc that expose host information to the guest program. This patch adds infrastructure to override diff --git a/0005-linux-user-fake-proc-self-maps.patch b/0005-linux-user-fake-proc-self-maps.patch index 702b0f70..7c320854 100644 --- a/0005-linux-user-fake-proc-self-maps.patch +++ b/0005-linux-user-fake-proc-self-maps.patch @@ -1,7 +1,7 @@ From 059e727a9a4be00de949769105e9e0ea876fc64b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:24 +0000 -Subject: [PATCH 05/36] linux-user: fake /proc/self/maps +Subject: [PATCH 05/37] linux-user: fake /proc/self/maps glibc's pthread_attr_getstack tries to find the stack range from /proc/self/maps. Unfortunately, /proc is usually the host's /proc diff --git a/0006-linux-user-fake-proc-self-stat.patch b/0006-linux-user-fake-proc-self-stat.patch index 4647f883..ef20ad40 100644 --- a/0006-linux-user-fake-proc-self-stat.patch +++ b/0006-linux-user-fake-proc-self-stat.patch @@ -1,7 +1,7 @@ From 7ee3fd47eed19e4dfa26a8d0176ed3550b8d0ccf Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:25 +0000 -Subject: [PATCH 06/36] linux-user: fake /proc/self/stat +Subject: [PATCH 06/37] linux-user: fake /proc/self/stat The boehm gc finds the program's stack starting pointer by checking /proc/self/stat. Unfortunately, so far it reads diff --git a/0007-linux-user-fake-proc-self-auxv.patch b/0007-linux-user-fake-proc-self-auxv.patch index 7cbe2c67..ea52ab35 100644 --- a/0007-linux-user-fake-proc-self-auxv.patch +++ b/0007-linux-user-fake-proc-self-auxv.patch @@ -1,7 +1,7 @@ From ddf0d4037b10c07d9e5b168f9f96e60a1601c75b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:26 +0000 -Subject: [PATCH 07/36] linux-user: fake /proc/self/auxv +Subject: [PATCH 07/37] linux-user: fake /proc/self/auxv Gtk tries to read /proc/self/auxv to find its auxv table instead of taking it from its own program memory space. diff --git a/0008-XXX-dont-dump-core-on-sigabort.patch b/0008-XXX-dont-dump-core-on-sigabort.patch index c4d6e1d7..f9db3f5b 100644 --- a/0008-XXX-dont-dump-core-on-sigabort.patch +++ b/0008-XXX-dont-dump-core-on-sigabort.patch @@ -1,7 +1,7 @@ From 4bc96d88f91417aa2bb029da2e8343456fe86631 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 21 Nov 2011 23:50:36 +0100 -Subject: [PATCH 08/36] XXX dont dump core on sigabort +Subject: [PATCH 08/37] XXX dont dump core on sigabort --- linux-user/signal.c | 6 ++++++ diff --git a/0009-linux-user-fix-wait-syscall-status-returns.patch b/0009-linux-user-fix-wait-syscall-status-returns.patch index 0886f583..aa25563d 100644 --- a/0009-linux-user-fix-wait-syscall-status-returns.patch +++ b/0009-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From ee5137d38109fdcb55a58be447c2c27be2b16eb0 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 22 Nov 2011 17:53:40 +0100 -Subject: [PATCH 09/36] linux-user: fix wait* syscall status returns +Subject: [PATCH 09/37] linux-user: fix wait* syscall status returns When calling wait4 or waitpid with a status pointer and WNOHANG, the syscall can potentially not modify the status pointer input. Now if we diff --git a/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch b/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch index 1f067ff2..283e56a8 100644 --- a/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch +++ b/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From 5cfce885dd1b3a229cd2ea7a94dfe2445ec29417 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 24 Nov 2011 00:38:22 +0100 -Subject: [PATCH 10/36] Revert "linux-user: fix wait* syscall status returns" +Subject: [PATCH 10/37] Revert "linux-user: fix wait* syscall status returns" This reverts commit 93092792064d880eb91679004b4761639d754081. --- diff --git a/0011-linux-user-fix-wait-syscall-status-returns.patch b/0011-linux-user-fix-wait-syscall-status-returns.patch index a8dd8db5..b8e4e4c0 100644 --- a/0011-linux-user-fix-wait-syscall-status-returns.patch +++ b/0011-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From b71ee7a063f7cffdf8a2cf73fcbc1d461fbbb80e Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 24 Nov 2011 00:39:35 +0100 -Subject: [PATCH 11/36] linux-user: fix wait* syscall status returns +Subject: [PATCH 11/37] linux-user: fix wait* syscall status returns When calling wait4 or waitpid with a status pointer and WNOHANG, the syscall can potentially not modify the status pointer input. Now if we diff --git a/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch b/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch index 1000b558..4e0898dc 100644 --- a/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch +++ b/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch @@ -1,7 +1,7 @@ From 146dddbec44c48417f776d54f823093b464e596c Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 28 Nov 2011 17:05:24 +0100 -Subject: [PATCH 12/36] XXX linux-user: fake /proc/self/maps even more +Subject: [PATCH 12/37] XXX linux-user: fake /proc/self/maps even more --- linux-user/syscall.c | 40 +++++++++++++++++++++++++++++++++++++++- diff --git a/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch b/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch index cc818d4d..78b38d5d 100644 --- a/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch +++ b/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch @@ -1,7 +1,7 @@ From 79a59902304b66e9270d11901a554e5b22042d6e Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 1 Dec 2011 19:00:01 +0100 -Subject: [PATCH 13/36] XXX work around SA_RESTART race with boehm-gc (ARM only) +Subject: [PATCH 13/37] XXX work around SA_RESTART race with boehm-gc (ARM only) --- linux-user/main.c | 25 ++++++++----- diff --git a/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch b/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch index 047ef288..b7a2588f 100644 --- a/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch +++ b/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch @@ -1,7 +1,7 @@ From e534a77a0e1f880d0f74514ac50de5de3dd4811a Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 5 Dec 2011 23:37:52 +0100 -Subject: [PATCH 14/36] XXX move qemu binary lower in address space so we have space for guest stuff +Subject: [PATCH 14/37] XXX move qemu binary lower in address space so we have space for guest stuff --- x86_64.ld | 2 +- diff --git a/0015-linux-user-map-lower-in-address-space.patch b/0015-linux-user-map-lower-in-address-space.patch index a31a02bf..4d550e09 100644 --- a/0015-linux-user-map-lower-in-address-space.patch +++ b/0015-linux-user-map-lower-in-address-space.patch @@ -1,7 +1,7 @@ From edda5e8f49b7857379733d652d6b259488bd7b70 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 6 Dec 2011 00:39:50 +0100 -Subject: [PATCH 15/36] linux-user: map lower in address space +Subject: [PATCH 15/37] linux-user: map lower in address space While trying to compile Java I can into situations where there was simply no virtual address space left for a 32-bit guest to take. For example when diff --git a/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch b/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch index abbaf076..4c9b4753 100644 --- a/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch +++ b/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch @@ -1,7 +1,7 @@ From 3580a90d40df10410b7268f89aae58ce05dd2bed Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 8 Dec 2011 23:19:32 +0100 -Subject: [PATCH 16/36] XXX fake /proc/self/maps: also fclose real file +Subject: [PATCH 16/37] XXX fake /proc/self/maps: also fclose real file --- linux-user/syscall.c | 1 + diff --git a/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch b/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch index c9ea2daa..a622e5d2 100644 --- a/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch +++ b/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch @@ -1,7 +1,7 @@ From 91f12fe177833e0112cd7f7cf5781b26377667a5 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sat, 10 Dec 2011 00:03:56 +0100 -Subject: [PATCH 17/36] XXX map qemu higher again so we have space for brk +Subject: [PATCH 17/37] XXX map qemu higher again so we have space for brk --- linux-user/mmap.c | 2 +- diff --git a/0018-qemu-0.9.0.cvs-binfmt.patch b/0018-qemu-0.9.0.cvs-binfmt.patch index 57ee668a..75734e7d 100644 --- a/0018-qemu-0.9.0.cvs-binfmt.patch +++ b/0018-qemu-0.9.0.cvs-binfmt.patch @@ -1,7 +1,7 @@ From 434801ec78b031170eb0762302b52062e6c27d0e Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:18:44 +0200 -Subject: [PATCH 18/36] qemu-0.9.0.cvs-binfmt +Subject: [PATCH 18/37] qemu-0.9.0.cvs-binfmt Fixes binfmt_misc setup script: - x86_64 is i386-compatible diff --git a/0019-qemu-cvs-alsa_bitfield.patch b/0019-qemu-cvs-alsa_bitfield.patch index e81a27ab..497c6d87 100644 --- a/0019-qemu-cvs-alsa_bitfield.patch +++ b/0019-qemu-cvs-alsa_bitfield.patch @@ -1,7 +1,7 @@ From b41a72d0c29f97610dfdd5573b8be383823bc88f Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:20:50 +0200 -Subject: [PATCH 19/36] qemu-cvs-alsa_bitfield +Subject: [PATCH 19/37] qemu-cvs-alsa_bitfield Implements TYPE_INTBITFIELD partially. (required for ALSA support) diff --git a/0020-qemu-cvs-alsa_ioctl.patch b/0020-qemu-cvs-alsa_ioctl.patch index 5c98860e..aa267489 100644 --- a/0020-qemu-cvs-alsa_ioctl.patch +++ b/0020-qemu-cvs-alsa_ioctl.patch @@ -1,7 +1,7 @@ From 33f065c217c1921759df12467954eb4638f84a72 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:23:27 +0200 -Subject: [PATCH 20/36] qemu-cvs-alsa_ioctl +Subject: [PATCH 20/37] qemu-cvs-alsa_ioctl Implements ALSA ioctls on PPC hosts. diff --git a/0021-qemu-cvs-alsa_mmap.patch b/0021-qemu-cvs-alsa_mmap.patch index 45b7cbc6..0e84ecc8 100644 --- a/0021-qemu-cvs-alsa_mmap.patch +++ b/0021-qemu-cvs-alsa_mmap.patch @@ -1,7 +1,7 @@ From 8b67814c8ab4645ddd43664b1092e78ea6a743d8 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:24:15 +0200 -Subject: [PATCH 21/36] qemu-cvs-alsa_mmap +Subject: [PATCH 21/37] qemu-cvs-alsa_mmap Hack to prevent ALSA from using mmap() interface to simplify emulation. diff --git a/0022-qemu-cvs-gettimeofday.patch b/0022-qemu-cvs-gettimeofday.patch index bea826d3..49042de7 100644 --- a/0022-qemu-cvs-gettimeofday.patch +++ b/0022-qemu-cvs-gettimeofday.patch @@ -1,7 +1,7 @@ From c0ce4deb6c2ac843e337b7252fbefc190d625ca5 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:25:41 +0200 -Subject: [PATCH 22/36] qemu-cvs-gettimeofday +Subject: [PATCH 22/37] qemu-cvs-gettimeofday No clue what this is for. --- diff --git a/0023-qemu-cvs-ioctl_debug.patch b/0023-qemu-cvs-ioctl_debug.patch index bb6c4fab..edf47a2d 100644 --- a/0023-qemu-cvs-ioctl_debug.patch +++ b/0023-qemu-cvs-ioctl_debug.patch @@ -1,7 +1,7 @@ From 6232258009a4735d7f4f53b5589e7ebd90a9885d Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:26:33 +0200 -Subject: [PATCH 23/36] qemu-cvs-ioctl_debug +Subject: [PATCH 23/37] qemu-cvs-ioctl_debug Extends unsupported ioctl debug output. diff --git a/0024-qemu-cvs-ioctl_nodirection.patch b/0024-qemu-cvs-ioctl_nodirection.patch index bee1e8e2..f2ee3e54 100644 --- a/0024-qemu-cvs-ioctl_nodirection.patch +++ b/0024-qemu-cvs-ioctl_nodirection.patch @@ -1,7 +1,7 @@ From 926d75fa4b4b5d95d4b0111e3e0af4d983a9d46b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:27:36 +0200 -Subject: [PATCH 24/36] qemu-cvs-ioctl_nodirection +Subject: [PATCH 24/37] qemu-cvs-ioctl_nodirection the direction given in the ioctl should be correct so we can assume the communication is uni-directional. The alsa developers did not like this diff --git a/0025-qemu-img-vmdk-scsi.patch b/0025-qemu-img-vmdk-scsi.patch index 465fb5dd..9cd89fd1 100644 --- a/0025-qemu-img-vmdk-scsi.patch +++ b/0025-qemu-img-vmdk-scsi.patch @@ -1,7 +1,7 @@ From 90b3180677c5615bafc9a1f8252fbc4af1dc1ae4 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:37:42 +0200 -Subject: [PATCH 25/36] qemu-img-vmdk-scsi +Subject: [PATCH 25/37] qemu-img-vmdk-scsi Support creation of SCSI VMDK images in qemu-img. diff --git a/0026-qemu-nonvoid_return.patch b/0026-qemu-nonvoid_return.patch index d24b3b42..0061ea4c 100644 --- a/0026-qemu-nonvoid_return.patch +++ b/0026-qemu-nonvoid_return.patch @@ -1,7 +1,7 @@ From 7e6479e0d45e45e888cb79759fd44d6c14be19f4 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:38:20 +0200 -Subject: [PATCH 26/36] qemu-nonvoid_return +Subject: [PATCH 26/37] qemu-nonvoid_return Squelches GCC warnings about undefined return values. diff --git a/0027-fix-mipsn32-linux-user-builds.patch b/0027-fix-mipsn32-linux-user-builds.patch index 23d3ac58..33ca6f59 100644 --- a/0027-fix-mipsn32-linux-user-builds.patch +++ b/0027-fix-mipsn32-linux-user-builds.patch @@ -1,7 +1,7 @@ From 164cf539481164978d9fa6ad69eb20cda7dc0e12 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Wed, 25 Aug 2010 14:23:43 +0200 -Subject: [PATCH 27/36] fix mipsn32*-linux-user builds +Subject: [PATCH 27/37] fix mipsn32*-linux-user builds Signed-off-by: Ulrich Hecht --- diff --git a/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch b/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch index 97abf8f7..d69b39f1 100644 --- a/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch +++ b/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch @@ -1,7 +1,7 @@ From 15d6a32b38abc6c2f8143ebccfcdd05d204f0fcd Mon Sep 17 00:00:00 2001 From: Benjamin Date: Sat, 8 Oct 2011 07:31:33 +0000 -Subject: [PATCH 28/36] Integrating Dynamips and GNS3 UDP tunnels (Patches) +Subject: [PATCH 28/37] Integrating Dynamips and GNS3 UDP tunnels (Patches) On 10/07/11 10:35, Jan Kiszka wrote: > diff --git a/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch b/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch index 1053248f..525a18b1 100644 --- a/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch +++ b/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch @@ -1,7 +1,7 @@ From 47ff084e9af71b217e6f842f720d12fe9e12f2fd Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 30 Sep 2011 19:40:36 +0200 -Subject: [PATCH 29/36] linux-user: add binfmt wrapper for argv[0] handling +Subject: [PATCH 29/37] linux-user: add binfmt wrapper for argv[0] handling When using qemu's linux-user binaries through binfmt, argv[0] gets lost along the execution because qemu only gets passed in the full file name diff --git a/0030-linux-user-Ignore-timer_create-syscall.patch b/0030-linux-user-Ignore-timer_create-syscall.patch index 298f564b..2aa13526 100644 --- a/0030-linux-user-Ignore-timer_create-syscall.patch +++ b/0030-linux-user-Ignore-timer_create-syscall.patch @@ -1,7 +1,7 @@ From 269d801698bf7640dd325cfb4b195c4a207a07ee Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 11 Dec 2011 01:19:24 +0100 -Subject: [PATCH 30/36] linux-user: Ignore timer_create syscall +Subject: [PATCH 30/37] linux-user: Ignore timer_create syscall We don't implement the timer_create syscall, but shouting out loud about it breaks some %check tests in OBS, so better ignore it silently. diff --git a/0031-linux-user-be-silent-about-capget-failures.patch b/0031-linux-user-be-silent-about-capget-failures.patch index b249f137..a357e649 100644 --- a/0031-linux-user-be-silent-about-capget-failures.patch +++ b/0031-linux-user-be-silent-about-capget-failures.patch @@ -1,7 +1,7 @@ From 36f403e159ecb5fcaeda5346c2df762cc904a91b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 11 Dec 2011 01:21:51 +0100 -Subject: [PATCH 31/36] linux-user: be silent about capget failures +Subject: [PATCH 31/37] linux-user: be silent about capget failures Complaining about capget doesn't buy us anything, but makes %check fail in certain builds. So better not complain about its missing diff --git a/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch b/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch index bc32fb9f..a6d84f35 100644 --- a/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch +++ b/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch @@ -1,7 +1,7 @@ From 4fddaa4befeb3ddb1c14d9b2c882474ba4166940 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 12 Dec 2011 23:16:43 +0100 -Subject: [PATCH 32/36] PPC: Fix linker scripts on ppc hosts +Subject: [PATCH 32/37] PPC: Fix linker scripts on ppc hosts When compiling qemu statically with multilib on PPC, we hit the same issue that commit 845f2c2812d9ed24b36c02a3d06ee83aeafe8b49 diff --git a/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch b/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch index 865c1137..ce69360d 100644 --- a/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch +++ b/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch @@ -1,7 +1,7 @@ From ac233b323ad7e498c665e8c74df7e44de4a542c0 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 14 Dec 2011 00:33:28 +0100 -Subject: [PATCH 33/36] linux-user: reserve 4GB of vmem for 32-on-64 +Subject: [PATCH 33/37] linux-user: reserve 4GB of vmem for 32-on-64 When running 32-on-64 bit guests, we should always reserve as much virtual memory as we possibly can for the guest process, so it can diff --git a/0034-PPC-KVM-Disable-mmu-notifier-check.patch b/0034-PPC-KVM-Disable-mmu-notifier-check.patch index d7fb8738..6fa98b77 100644 --- a/0034-PPC-KVM-Disable-mmu-notifier-check.patch +++ b/0034-PPC-KVM-Disable-mmu-notifier-check.patch @@ -1,7 +1,7 @@ From 96ac7aa8753cb2d79121c5a579a6e93160428a40 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 6 Jan 2012 01:05:55 +0100 -Subject: [PATCH 34/36] PPC: KVM: Disable mmu notifier check +Subject: [PATCH 34/37] PPC: KVM: Disable mmu notifier check When using hugetlbfs (which is required for HV mode KVM on 970), we check for MMU notifiers that on 970 can not be implemented properly. diff --git a/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch b/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch index 83e0f802..a4ea4dac 100644 --- a/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch +++ b/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch @@ -1,7 +1,7 @@ From 872ebeaa24ed1c4b0c1596a7ad37f2bf2275efb0 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Tue, 3 Jan 2012 09:38:34 +0000 -Subject: [PATCH 35/36] linux-user: improve fake /proc/self/stat making `ps` not segfault. +Subject: [PATCH 35/37] linux-user: improve fake /proc/self/stat making `ps` not segfault. With the current fake /proc/self/stat implementation `ps` is segfaulting because it expects to read PID and argv[0] as first and diff --git a/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch b/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch index b533b5d2..79a19059 100644 --- a/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch +++ b/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch @@ -1,7 +1,7 @@ From 7dc45b21c5ef8a9445463f8d3754e502621192a7 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Tue, 3 Jan 2012 09:38:35 +0000 -Subject: [PATCH 36/36] linux-user: target_argv is placed on ts->bprm->argv and can't be freed() +Subject: [PATCH 36/37] linux-user: target_argv is placed on ts->bprm->argv and can't be freed() TaskState contains linux_bprm struct which encapsulates argv among other things. diff --git a/0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch b/0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch new file mode 100644 index 00000000..2b66055a --- /dev/null +++ b/0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch @@ -0,0 +1,33 @@ +From 0d04677df6aabf7404c7bbe454d7be973a773bb0 Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Tue, 10 Jan 2012 16:25:27 +0100 +Subject: [PATCH 37/37] PPC: KVM: Ignore SET_ONE_REG failures + +The SET_ONE_REG interface didn't make it upstream in the form that is used +in qemu-1.0, so the code won't work. Make the error a warning, so we can +at least use the HV target. + +Signed-off-by: Alexander Graf +--- + target-ppc/kvm.c | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c +index 429349f..a03e99c 100644 +--- a/target-ppc/kvm.c ++++ b/target-ppc/kvm.c +@@ -759,7 +759,10 @@ void kvmppc_set_papr(CPUState *env) + reg.u.reg64 = env->spr[SPR_HIOR]; + ret = kvm_vcpu_ioctl(env, KVM_SET_ONE_REG, ®); + if (ret) { +- goto fail; ++ fprintf(stderr, "Couldn't set HIOR. Maybe you're running an old \n" ++ "kernel with support for HV KVM but no PAPR PR \n" ++ "KVM in which case things will work. If they don't \n" ++ "please update your host kernel!\n"); + } + + /* Set SDR1 so kernel space finds the HTAB */ +-- +1.6.0.2 + diff --git a/qemu.changes b/qemu.changes index 0f4b4999..5515dd5a 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Tue Jan 10 15:26:21 UTC 2012 - agraf@suse.de + +- add fix for PPC in HV KVM mode + ------------------------------------------------------------------- Thu Jan 6 01:18:00 UTC 2012 - agraf@suse.de diff --git a/qemu.spec b/qemu.spec index 80338997..02683a50 100644 --- a/qemu.spec +++ b/qemu.spec @@ -62,6 +62,7 @@ Patch0033: 0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch Patch0034: 0034-PPC-KVM-Disable-mmu-notifier-check.patch Patch0035: 0035-linux-user-improve-fake-proc-self-stat-making-ps.patch Patch0036: 0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch +Patch0037: 0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch # this is to make lint happy Source300: rpmlintrc BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -157,6 +158,7 @@ run cross architectures builds %patch0034 -p1 %patch0035 -p1 %patch0036 -p1 +%patch0037 -p1 %build # build QEMU From 7b04700c5685c5ef863c5204005b54245eed0b6b168ad99746966f51024bda32 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 10 Jan 2012 16:25:36 +0000 Subject: [PATCH 04/15] - backport all ppc-1.0 stable patches to our package - add fix for PPC HV KVM on 3.1 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=39 --- ...errupts-by-inline-checking-of-a-flag.patch | 2 +- ...inux-user-fix-QEMU_STRACE-1-segfault.patch | 2 +- 0003-linux-user-save-auxv-length.patch | 2 +- ...-user-add-open-hijack-infrastructure.patch | 2 +- 0005-linux-user-fake-proc-self-maps.patch | 2 +- 0006-linux-user-fake-proc-self-stat.patch | 2 +- 0007-linux-user-fake-proc-self-auxv.patch | 2 +- 0008-XXX-dont-dump-core-on-sigabort.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...x-user-fake-proc-self-maps-even-more.patch | 2 +- ...-SA_RESTART-race-with-boehm-gc-ARM-o.patch | 2 +- ...nary-lower-in-address-space-so-we-ha.patch | 2 +- ...inux-user-map-lower-in-address-space.patch | 2 +- ...proc-self-maps-also-fclose-real-file.patch | 2 +- ...igher-again-so-we-have-space-for-brk.patch | 2 +- 0018-qemu-0.9.0.cvs-binfmt.patch | 2 +- 0019-qemu-cvs-alsa_bitfield.patch | 2 +- 0020-qemu-cvs-alsa_ioctl.patch | 2 +- 0021-qemu-cvs-alsa_mmap.patch | 2 +- 0022-qemu-cvs-gettimeofday.patch | 2 +- 0023-qemu-cvs-ioctl_debug.patch | 2 +- 0024-qemu-cvs-ioctl_nodirection.patch | 2 +- 0025-qemu-img-vmdk-scsi.patch | 2 +- 0026-qemu-nonvoid_return.patch | 2 +- 0027-fix-mipsn32-linux-user-builds.patch | 2 +- ...ynamips-and-GNS3-UDP-tunnels-Patches.patch | 2 +- ...d-binfmt-wrapper-for-argv-0-handling.patch | 2 +- ...nux-user-Ignore-timer_create-syscall.patch | 2 +- ...user-be-silent-about-capget-failures.patch | 2 +- ...-PPC-Fix-linker-scripts-on-ppc-hosts.patch | 2 +- ...ser-reserve-4GB-of-vmem-for-32-on-64.patch | 2 +- 0034-PPC-KVM-Disable-mmu-notifier-check.patch | 2 +- ...mprove-fake-proc-self-stat-making-ps.patch | 2 +- ...arget_argv-is-placed-on-ts-bprm-argv.patch | 2 +- ...-PPC-KVM-Ignore-SET_ONE_REG-failures.patch | 2 +- ...e-ENABLE_PAPR-to-support-very-old-HV.patch | 29 +++++ ...fault-on-screendump-without-VGA-adap.patch | 39 ++++++ ...es-Fix-array-overrun-bug-in-PCI-code.patch | 33 +++++ ...halt-secondary-cpus-when-guest-reset.patch | 45 +++++++ ...-Emit-device-tree-nodes-in-reg-order.patch | 101 +++++++++++++++ ...-routine-to-find-a-stable-default-vt.patch | 97 ++++++++++++++ ...late-chosen-linux-stdout-path-in-the.patch | 119 ++++++++++++++++++ qemu.changes | 6 + qemu.spec | 14 +++ 46 files changed, 520 insertions(+), 37 deletions(-) create mode 100644 0038-PPC-KVM-Ignore-ENABLE_PAPR-to-support-very-old-HV.patch create mode 100644 0039-console-Fix-segfault-on-screendump-without-VGA-adap.patch create mode 100644 0040-pseries-Fix-array-overrun-bug-in-PCI-code.patch create mode 100644 0041-kvm-ppc-halt-secondary-cpus-when-guest-reset.patch create mode 100644 0042-pseries-Emit-device-tree-nodes-in-reg-order.patch create mode 100644 0043-pseries-Add-a-routine-to-find-a-stable-default-vt.patch create mode 100644 0044-pseries-Populate-chosen-linux-stdout-path-in-the.patch diff --git a/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch b/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch index 5adf9689..6cecf42c 100644 --- a/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch +++ b/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch @@ -1,7 +1,7 @@ From 4cc09e9530fb08123594be6c72dfc381df5dcddc Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Wed, 5 Oct 2011 10:04:02 +0100 -Subject: [PATCH 01/37] Handle CPU interrupts by inline checking of a flag +Subject: [PATCH 01/44] Handle CPU interrupts by inline checking of a flag Fix the nasty TCG race conditions and crashes by implementing cpu_exit as setting a flag which is checked at the start of each TB. This is diff --git a/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch b/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch index 0f9ed54e..9191413f 100644 --- a/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch +++ b/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch @@ -1,7 +1,7 @@ From 0588bc446fd48bdb1965a6773d008c05a4ba16c1 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 20 Nov 2011 13:02:54 +0100 -Subject: [PATCH 02/37] linux-user: fix QEMU_STRACE=1 segfault +Subject: [PATCH 02/44] linux-user: fix QEMU_STRACE=1 segfault While debugging some issues with QEMU_STRACE I stumbled over segmentation faults that were pretty reproducible. Turns out we tried to treat a diff --git a/0003-linux-user-save-auxv-length.patch b/0003-linux-user-save-auxv-length.patch index d00d9063..1f80a753 100644 --- a/0003-linux-user-save-auxv-length.patch +++ b/0003-linux-user-save-auxv-length.patch @@ -1,7 +1,7 @@ From 67c12998086c44ebef7f92a394154d6aba446178 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:22 +0000 -Subject: [PATCH 03/37] linux-user: save auxv length +Subject: [PATCH 03/44] linux-user: save auxv length We create our own AUXV segment on stack and save a pointer to it. However we don't save the length of it, so any code that wants to diff --git a/0004-linux-user-add-open-hijack-infrastructure.patch b/0004-linux-user-add-open-hijack-infrastructure.patch index 97d663de..6dd005a1 100644 --- a/0004-linux-user-add-open-hijack-infrastructure.patch +++ b/0004-linux-user-add-open-hijack-infrastructure.patch @@ -1,7 +1,7 @@ From 99590488e94b6b7f10ecf9a99398fd24a69a7039 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:23 +0000 -Subject: [PATCH 04/37] linux-user: add open() hijack infrastructure +Subject: [PATCH 04/44] linux-user: add open() hijack infrastructure There are a number of files in /proc that expose host information to the guest program. This patch adds infrastructure to override diff --git a/0005-linux-user-fake-proc-self-maps.patch b/0005-linux-user-fake-proc-self-maps.patch index 7c320854..280895a6 100644 --- a/0005-linux-user-fake-proc-self-maps.patch +++ b/0005-linux-user-fake-proc-self-maps.patch @@ -1,7 +1,7 @@ From 059e727a9a4be00de949769105e9e0ea876fc64b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:24 +0000 -Subject: [PATCH 05/37] linux-user: fake /proc/self/maps +Subject: [PATCH 05/44] linux-user: fake /proc/self/maps glibc's pthread_attr_getstack tries to find the stack range from /proc/self/maps. Unfortunately, /proc is usually the host's /proc diff --git a/0006-linux-user-fake-proc-self-stat.patch b/0006-linux-user-fake-proc-self-stat.patch index ef20ad40..14c8943c 100644 --- a/0006-linux-user-fake-proc-self-stat.patch +++ b/0006-linux-user-fake-proc-self-stat.patch @@ -1,7 +1,7 @@ From 7ee3fd47eed19e4dfa26a8d0176ed3550b8d0ccf Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:25 +0000 -Subject: [PATCH 06/37] linux-user: fake /proc/self/stat +Subject: [PATCH 06/44] linux-user: fake /proc/self/stat The boehm gc finds the program's stack starting pointer by checking /proc/self/stat. Unfortunately, so far it reads diff --git a/0007-linux-user-fake-proc-self-auxv.patch b/0007-linux-user-fake-proc-self-auxv.patch index ea52ab35..781b9a33 100644 --- a/0007-linux-user-fake-proc-self-auxv.patch +++ b/0007-linux-user-fake-proc-self-auxv.patch @@ -1,7 +1,7 @@ From ddf0d4037b10c07d9e5b168f9f96e60a1601c75b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:26 +0000 -Subject: [PATCH 07/37] linux-user: fake /proc/self/auxv +Subject: [PATCH 07/44] linux-user: fake /proc/self/auxv Gtk tries to read /proc/self/auxv to find its auxv table instead of taking it from its own program memory space. diff --git a/0008-XXX-dont-dump-core-on-sigabort.patch b/0008-XXX-dont-dump-core-on-sigabort.patch index f9db3f5b..0e94354d 100644 --- a/0008-XXX-dont-dump-core-on-sigabort.patch +++ b/0008-XXX-dont-dump-core-on-sigabort.patch @@ -1,7 +1,7 @@ From 4bc96d88f91417aa2bb029da2e8343456fe86631 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 21 Nov 2011 23:50:36 +0100 -Subject: [PATCH 08/37] XXX dont dump core on sigabort +Subject: [PATCH 08/44] XXX dont dump core on sigabort --- linux-user/signal.c | 6 ++++++ diff --git a/0009-linux-user-fix-wait-syscall-status-returns.patch b/0009-linux-user-fix-wait-syscall-status-returns.patch index aa25563d..8ef89512 100644 --- a/0009-linux-user-fix-wait-syscall-status-returns.patch +++ b/0009-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From ee5137d38109fdcb55a58be447c2c27be2b16eb0 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 22 Nov 2011 17:53:40 +0100 -Subject: [PATCH 09/37] linux-user: fix wait* syscall status returns +Subject: [PATCH 09/44] linux-user: fix wait* syscall status returns When calling wait4 or waitpid with a status pointer and WNOHANG, the syscall can potentially not modify the status pointer input. Now if we diff --git a/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch b/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch index 283e56a8..088faab6 100644 --- a/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch +++ b/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From 5cfce885dd1b3a229cd2ea7a94dfe2445ec29417 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 24 Nov 2011 00:38:22 +0100 -Subject: [PATCH 10/37] Revert "linux-user: fix wait* syscall status returns" +Subject: [PATCH 10/44] Revert "linux-user: fix wait* syscall status returns" This reverts commit 93092792064d880eb91679004b4761639d754081. --- diff --git a/0011-linux-user-fix-wait-syscall-status-returns.patch b/0011-linux-user-fix-wait-syscall-status-returns.patch index b8e4e4c0..28bb8081 100644 --- a/0011-linux-user-fix-wait-syscall-status-returns.patch +++ b/0011-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From b71ee7a063f7cffdf8a2cf73fcbc1d461fbbb80e Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 24 Nov 2011 00:39:35 +0100 -Subject: [PATCH 11/37] linux-user: fix wait* syscall status returns +Subject: [PATCH 11/44] linux-user: fix wait* syscall status returns When calling wait4 or waitpid with a status pointer and WNOHANG, the syscall can potentially not modify the status pointer input. Now if we diff --git a/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch b/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch index 4e0898dc..5f06fc7f 100644 --- a/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch +++ b/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch @@ -1,7 +1,7 @@ From 146dddbec44c48417f776d54f823093b464e596c Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 28 Nov 2011 17:05:24 +0100 -Subject: [PATCH 12/37] XXX linux-user: fake /proc/self/maps even more +Subject: [PATCH 12/44] XXX linux-user: fake /proc/self/maps even more --- linux-user/syscall.c | 40 +++++++++++++++++++++++++++++++++++++++- diff --git a/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch b/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch index 78b38d5d..725636cf 100644 --- a/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch +++ b/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch @@ -1,7 +1,7 @@ From 79a59902304b66e9270d11901a554e5b22042d6e Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 1 Dec 2011 19:00:01 +0100 -Subject: [PATCH 13/37] XXX work around SA_RESTART race with boehm-gc (ARM only) +Subject: [PATCH 13/44] XXX work around SA_RESTART race with boehm-gc (ARM only) --- linux-user/main.c | 25 ++++++++----- diff --git a/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch b/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch index b7a2588f..243a8ef2 100644 --- a/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch +++ b/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch @@ -1,7 +1,7 @@ From e534a77a0e1f880d0f74514ac50de5de3dd4811a Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 5 Dec 2011 23:37:52 +0100 -Subject: [PATCH 14/37] XXX move qemu binary lower in address space so we have space for guest stuff +Subject: [PATCH 14/44] XXX move qemu binary lower in address space so we have space for guest stuff --- x86_64.ld | 2 +- diff --git a/0015-linux-user-map-lower-in-address-space.patch b/0015-linux-user-map-lower-in-address-space.patch index 4d550e09..e4afbba7 100644 --- a/0015-linux-user-map-lower-in-address-space.patch +++ b/0015-linux-user-map-lower-in-address-space.patch @@ -1,7 +1,7 @@ From edda5e8f49b7857379733d652d6b259488bd7b70 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 6 Dec 2011 00:39:50 +0100 -Subject: [PATCH 15/37] linux-user: map lower in address space +Subject: [PATCH 15/44] linux-user: map lower in address space While trying to compile Java I can into situations where there was simply no virtual address space left for a 32-bit guest to take. For example when diff --git a/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch b/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch index 4c9b4753..9bb358d7 100644 --- a/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch +++ b/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch @@ -1,7 +1,7 @@ From 3580a90d40df10410b7268f89aae58ce05dd2bed Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 8 Dec 2011 23:19:32 +0100 -Subject: [PATCH 16/37] XXX fake /proc/self/maps: also fclose real file +Subject: [PATCH 16/44] XXX fake /proc/self/maps: also fclose real file --- linux-user/syscall.c | 1 + diff --git a/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch b/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch index a622e5d2..69b220c5 100644 --- a/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch +++ b/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch @@ -1,7 +1,7 @@ From 91f12fe177833e0112cd7f7cf5781b26377667a5 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sat, 10 Dec 2011 00:03:56 +0100 -Subject: [PATCH 17/37] XXX map qemu higher again so we have space for brk +Subject: [PATCH 17/44] XXX map qemu higher again so we have space for brk --- linux-user/mmap.c | 2 +- diff --git a/0018-qemu-0.9.0.cvs-binfmt.patch b/0018-qemu-0.9.0.cvs-binfmt.patch index 75734e7d..57f6ba6f 100644 --- a/0018-qemu-0.9.0.cvs-binfmt.patch +++ b/0018-qemu-0.9.0.cvs-binfmt.patch @@ -1,7 +1,7 @@ From 434801ec78b031170eb0762302b52062e6c27d0e Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:18:44 +0200 -Subject: [PATCH 18/37] qemu-0.9.0.cvs-binfmt +Subject: [PATCH 18/44] qemu-0.9.0.cvs-binfmt Fixes binfmt_misc setup script: - x86_64 is i386-compatible diff --git a/0019-qemu-cvs-alsa_bitfield.patch b/0019-qemu-cvs-alsa_bitfield.patch index 497c6d87..0fa39bc7 100644 --- a/0019-qemu-cvs-alsa_bitfield.patch +++ b/0019-qemu-cvs-alsa_bitfield.patch @@ -1,7 +1,7 @@ From b41a72d0c29f97610dfdd5573b8be383823bc88f Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:20:50 +0200 -Subject: [PATCH 19/37] qemu-cvs-alsa_bitfield +Subject: [PATCH 19/44] qemu-cvs-alsa_bitfield Implements TYPE_INTBITFIELD partially. (required for ALSA support) diff --git a/0020-qemu-cvs-alsa_ioctl.patch b/0020-qemu-cvs-alsa_ioctl.patch index aa267489..a9bf878b 100644 --- a/0020-qemu-cvs-alsa_ioctl.patch +++ b/0020-qemu-cvs-alsa_ioctl.patch @@ -1,7 +1,7 @@ From 33f065c217c1921759df12467954eb4638f84a72 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:23:27 +0200 -Subject: [PATCH 20/37] qemu-cvs-alsa_ioctl +Subject: [PATCH 20/44] qemu-cvs-alsa_ioctl Implements ALSA ioctls on PPC hosts. diff --git a/0021-qemu-cvs-alsa_mmap.patch b/0021-qemu-cvs-alsa_mmap.patch index 0e84ecc8..930e39c5 100644 --- a/0021-qemu-cvs-alsa_mmap.patch +++ b/0021-qemu-cvs-alsa_mmap.patch @@ -1,7 +1,7 @@ From 8b67814c8ab4645ddd43664b1092e78ea6a743d8 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:24:15 +0200 -Subject: [PATCH 21/37] qemu-cvs-alsa_mmap +Subject: [PATCH 21/44] qemu-cvs-alsa_mmap Hack to prevent ALSA from using mmap() interface to simplify emulation. diff --git a/0022-qemu-cvs-gettimeofday.patch b/0022-qemu-cvs-gettimeofday.patch index 49042de7..6d128e74 100644 --- a/0022-qemu-cvs-gettimeofday.patch +++ b/0022-qemu-cvs-gettimeofday.patch @@ -1,7 +1,7 @@ From c0ce4deb6c2ac843e337b7252fbefc190d625ca5 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:25:41 +0200 -Subject: [PATCH 22/37] qemu-cvs-gettimeofday +Subject: [PATCH 22/44] qemu-cvs-gettimeofday No clue what this is for. --- diff --git a/0023-qemu-cvs-ioctl_debug.patch b/0023-qemu-cvs-ioctl_debug.patch index edf47a2d..47eec797 100644 --- a/0023-qemu-cvs-ioctl_debug.patch +++ b/0023-qemu-cvs-ioctl_debug.patch @@ -1,7 +1,7 @@ From 6232258009a4735d7f4f53b5589e7ebd90a9885d Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:26:33 +0200 -Subject: [PATCH 23/37] qemu-cvs-ioctl_debug +Subject: [PATCH 23/44] qemu-cvs-ioctl_debug Extends unsupported ioctl debug output. diff --git a/0024-qemu-cvs-ioctl_nodirection.patch b/0024-qemu-cvs-ioctl_nodirection.patch index f2ee3e54..855b1127 100644 --- a/0024-qemu-cvs-ioctl_nodirection.patch +++ b/0024-qemu-cvs-ioctl_nodirection.patch @@ -1,7 +1,7 @@ From 926d75fa4b4b5d95d4b0111e3e0af4d983a9d46b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:27:36 +0200 -Subject: [PATCH 24/37] qemu-cvs-ioctl_nodirection +Subject: [PATCH 24/44] qemu-cvs-ioctl_nodirection the direction given in the ioctl should be correct so we can assume the communication is uni-directional. The alsa developers did not like this diff --git a/0025-qemu-img-vmdk-scsi.patch b/0025-qemu-img-vmdk-scsi.patch index 9cd89fd1..6ce257b2 100644 --- a/0025-qemu-img-vmdk-scsi.patch +++ b/0025-qemu-img-vmdk-scsi.patch @@ -1,7 +1,7 @@ From 90b3180677c5615bafc9a1f8252fbc4af1dc1ae4 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:37:42 +0200 -Subject: [PATCH 25/37] qemu-img-vmdk-scsi +Subject: [PATCH 25/44] qemu-img-vmdk-scsi Support creation of SCSI VMDK images in qemu-img. diff --git a/0026-qemu-nonvoid_return.patch b/0026-qemu-nonvoid_return.patch index 0061ea4c..19acf463 100644 --- a/0026-qemu-nonvoid_return.patch +++ b/0026-qemu-nonvoid_return.patch @@ -1,7 +1,7 @@ From 7e6479e0d45e45e888cb79759fd44d6c14be19f4 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:38:20 +0200 -Subject: [PATCH 26/37] qemu-nonvoid_return +Subject: [PATCH 26/44] qemu-nonvoid_return Squelches GCC warnings about undefined return values. diff --git a/0027-fix-mipsn32-linux-user-builds.patch b/0027-fix-mipsn32-linux-user-builds.patch index 33ca6f59..8b6f1696 100644 --- a/0027-fix-mipsn32-linux-user-builds.patch +++ b/0027-fix-mipsn32-linux-user-builds.patch @@ -1,7 +1,7 @@ From 164cf539481164978d9fa6ad69eb20cda7dc0e12 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Wed, 25 Aug 2010 14:23:43 +0200 -Subject: [PATCH 27/37] fix mipsn32*-linux-user builds +Subject: [PATCH 27/44] fix mipsn32*-linux-user builds Signed-off-by: Ulrich Hecht --- diff --git a/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch b/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch index d69b39f1..0a30937a 100644 --- a/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch +++ b/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch @@ -1,7 +1,7 @@ From 15d6a32b38abc6c2f8143ebccfcdd05d204f0fcd Mon Sep 17 00:00:00 2001 From: Benjamin Date: Sat, 8 Oct 2011 07:31:33 +0000 -Subject: [PATCH 28/37] Integrating Dynamips and GNS3 UDP tunnels (Patches) +Subject: [PATCH 28/44] Integrating Dynamips and GNS3 UDP tunnels (Patches) On 10/07/11 10:35, Jan Kiszka wrote: > diff --git a/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch b/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch index 525a18b1..3b0b07f5 100644 --- a/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch +++ b/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch @@ -1,7 +1,7 @@ From 47ff084e9af71b217e6f842f720d12fe9e12f2fd Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 30 Sep 2011 19:40:36 +0200 -Subject: [PATCH 29/37] linux-user: add binfmt wrapper for argv[0] handling +Subject: [PATCH 29/44] linux-user: add binfmt wrapper for argv[0] handling When using qemu's linux-user binaries through binfmt, argv[0] gets lost along the execution because qemu only gets passed in the full file name diff --git a/0030-linux-user-Ignore-timer_create-syscall.patch b/0030-linux-user-Ignore-timer_create-syscall.patch index 2aa13526..b977520b 100644 --- a/0030-linux-user-Ignore-timer_create-syscall.patch +++ b/0030-linux-user-Ignore-timer_create-syscall.patch @@ -1,7 +1,7 @@ From 269d801698bf7640dd325cfb4b195c4a207a07ee Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 11 Dec 2011 01:19:24 +0100 -Subject: [PATCH 30/37] linux-user: Ignore timer_create syscall +Subject: [PATCH 30/44] linux-user: Ignore timer_create syscall We don't implement the timer_create syscall, but shouting out loud about it breaks some %check tests in OBS, so better ignore it silently. diff --git a/0031-linux-user-be-silent-about-capget-failures.patch b/0031-linux-user-be-silent-about-capget-failures.patch index a357e649..4b11fc90 100644 --- a/0031-linux-user-be-silent-about-capget-failures.patch +++ b/0031-linux-user-be-silent-about-capget-failures.patch @@ -1,7 +1,7 @@ From 36f403e159ecb5fcaeda5346c2df762cc904a91b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 11 Dec 2011 01:21:51 +0100 -Subject: [PATCH 31/37] linux-user: be silent about capget failures +Subject: [PATCH 31/44] linux-user: be silent about capget failures Complaining about capget doesn't buy us anything, but makes %check fail in certain builds. So better not complain about its missing diff --git a/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch b/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch index a6d84f35..91eea497 100644 --- a/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch +++ b/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch @@ -1,7 +1,7 @@ From 4fddaa4befeb3ddb1c14d9b2c882474ba4166940 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 12 Dec 2011 23:16:43 +0100 -Subject: [PATCH 32/37] PPC: Fix linker scripts on ppc hosts +Subject: [PATCH 32/44] PPC: Fix linker scripts on ppc hosts When compiling qemu statically with multilib on PPC, we hit the same issue that commit 845f2c2812d9ed24b36c02a3d06ee83aeafe8b49 diff --git a/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch b/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch index ce69360d..ce1e3c59 100644 --- a/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch +++ b/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch @@ -1,7 +1,7 @@ From ac233b323ad7e498c665e8c74df7e44de4a542c0 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 14 Dec 2011 00:33:28 +0100 -Subject: [PATCH 33/37] linux-user: reserve 4GB of vmem for 32-on-64 +Subject: [PATCH 33/44] linux-user: reserve 4GB of vmem for 32-on-64 When running 32-on-64 bit guests, we should always reserve as much virtual memory as we possibly can for the guest process, so it can diff --git a/0034-PPC-KVM-Disable-mmu-notifier-check.patch b/0034-PPC-KVM-Disable-mmu-notifier-check.patch index 6fa98b77..41a5ac57 100644 --- a/0034-PPC-KVM-Disable-mmu-notifier-check.patch +++ b/0034-PPC-KVM-Disable-mmu-notifier-check.patch @@ -1,7 +1,7 @@ From 96ac7aa8753cb2d79121c5a579a6e93160428a40 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 6 Jan 2012 01:05:55 +0100 -Subject: [PATCH 34/37] PPC: KVM: Disable mmu notifier check +Subject: [PATCH 34/44] PPC: KVM: Disable mmu notifier check When using hugetlbfs (which is required for HV mode KVM on 970), we check for MMU notifiers that on 970 can not be implemented properly. diff --git a/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch b/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch index a4ea4dac..d787ded7 100644 --- a/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch +++ b/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch @@ -1,7 +1,7 @@ From 872ebeaa24ed1c4b0c1596a7ad37f2bf2275efb0 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Tue, 3 Jan 2012 09:38:34 +0000 -Subject: [PATCH 35/37] linux-user: improve fake /proc/self/stat making `ps` not segfault. +Subject: [PATCH 35/44] linux-user: improve fake /proc/self/stat making `ps` not segfault. With the current fake /proc/self/stat implementation `ps` is segfaulting because it expects to read PID and argv[0] as first and diff --git a/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch b/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch index 79a19059..b0ca2eaa 100644 --- a/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch +++ b/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch @@ -1,7 +1,7 @@ From 7dc45b21c5ef8a9445463f8d3754e502621192a7 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Tue, 3 Jan 2012 09:38:35 +0000 -Subject: [PATCH 36/37] linux-user: target_argv is placed on ts->bprm->argv and can't be freed() +Subject: [PATCH 36/44] linux-user: target_argv is placed on ts->bprm->argv and can't be freed() TaskState contains linux_bprm struct which encapsulates argv among other things. diff --git a/0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch b/0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch index 2b66055a..ea6404df 100644 --- a/0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch +++ b/0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch @@ -1,7 +1,7 @@ From 0d04677df6aabf7404c7bbe454d7be973a773bb0 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 10 Jan 2012 16:25:27 +0100 -Subject: [PATCH 37/37] PPC: KVM: Ignore SET_ONE_REG failures +Subject: [PATCH 37/44] PPC: KVM: Ignore SET_ONE_REG failures The SET_ONE_REG interface didn't make it upstream in the form that is used in qemu-1.0, so the code won't work. Make the error a warning, so we can diff --git a/0038-PPC-KVM-Ignore-ENABLE_PAPR-to-support-very-old-HV.patch b/0038-PPC-KVM-Ignore-ENABLE_PAPR-to-support-very-old-HV.patch new file mode 100644 index 00000000..f2c4c653 --- /dev/null +++ b/0038-PPC-KVM-Ignore-ENABLE_PAPR-to-support-very-old-HV.patch @@ -0,0 +1,29 @@ +From 9ef61f2a197f9dbae104fc1d18634c29d91b4a4e Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Tue, 10 Jan 2012 17:03:02 +0100 +Subject: [PATCH 38/44] PPC: KVM: Ignore ENABLE_PAPR to support very old HV KVM kernels + +Very old kernels (3.1) didn't expose the PAPR capability yet, but still +did work with HV KVM. Make the error a warning so we can work on them. + +Signed-off-by: Alexander Graf +--- + target-ppc/kvm.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c +index a03e99c..923677c 100644 +--- a/target-ppc/kvm.c ++++ b/target-ppc/kvm.c +@@ -745,7 +745,7 @@ void kvmppc_set_papr(CPUState *env) + ret = kvm_vcpu_ioctl(env, KVM_ENABLE_CAP, &cap); + + if (ret) { +- goto fail; ++ fprintf(stderr, "You're running a very old kernel. Expect breakage!\n"); + } + + /* +-- +1.6.0.2 + diff --git a/0039-console-Fix-segfault-on-screendump-without-VGA-adap.patch b/0039-console-Fix-segfault-on-screendump-without-VGA-adap.patch new file mode 100644 index 00000000..04674fbc --- /dev/null +++ b/0039-console-Fix-segfault-on-screendump-without-VGA-adap.patch @@ -0,0 +1,39 @@ +From 2b0fc5def570362c27ce526b8a08529a6ae22362 Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Fri, 18 Nov 2011 16:41:59 +0100 +Subject: [PATCH 39/44] console: Fix segfault on screendump without VGA adapter + +When trying to create a screen dump without having any VGA adapter +inside the guest, QEMU segfaults. + +This is because it's trying to switch back to the "previous" screen +it was on before dumping the VGA screen. Unfortunately, in my case +there simply is no previous screen so it accesses a NULL pointer. + +Fix it by checking if previous_active_console is actually available. + +This is 1.0 material. + +Signed-off-by: Alexander Graf +--- + console.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/console.c b/console.c +index f6fe441..ed6a653 100644 +--- a/console.c ++++ b/console.c +@@ -186,7 +186,9 @@ void vga_hw_screen_dump(const char *filename) + consoles[0]->hw_screen_dump(consoles[0]->hw, filename); + } + +- console_select(previous_active_console->index); ++ if (previous_active_console) { ++ console_select(previous_active_console->index); ++ } + } + + void vga_hw_text_update(console_ch_t *chardata) +-- +1.6.0.2 + diff --git a/0040-pseries-Fix-array-overrun-bug-in-PCI-code.patch b/0040-pseries-Fix-array-overrun-bug-in-PCI-code.patch new file mode 100644 index 00000000..8a98d2c4 --- /dev/null +++ b/0040-pseries-Fix-array-overrun-bug-in-PCI-code.patch @@ -0,0 +1,33 @@ +From 632e46dfa29a19ba656a5580b610fda0003cf3b0 Mon Sep 17 00:00:00 2001 +From: David Gibson +Date: Mon, 28 Nov 2011 20:21:39 +0000 +Subject: [PATCH 40/44] pseries: Fix array overrun bug in PCI code + +spapr_populate_pci_devices() containd a loop with PCI_NUM_REGIONS (7) +iterations. However this overruns the 'bars' global array, which only has +6 elements. In fact we only want to run this loop for things listed in the +bars array, so this patch corrects the loop bounds to reflect that. + +Signed-off-by: David Gibson +Signed-off-by: Alexander Graf +(cherry picked from commit 135712de61dfa22368e98914d65b8b0860ec8505) +--- + hw/spapr_pci.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/hw/spapr_pci.c b/hw/spapr_pci.c +index 7162588..9b6a032 100644 +--- a/hw/spapr_pci.c ++++ b/hw/spapr_pci.c +@@ -454,7 +454,7 @@ int spapr_populate_pci_devices(sPAPRPHBState *phb, + reg[0].size = 0; + + n = 0; +- for (i = 0; i < PCI_NUM_REGIONS; ++i) { ++ for (i = 0; i < ARRAY_SIZE(bars); ++i) { + if (0 == dev->io_regions[i].size) { + continue; + } +-- +1.6.0.2 + diff --git a/0041-kvm-ppc-halt-secondary-cpus-when-guest-reset.patch b/0041-kvm-ppc-halt-secondary-cpus-when-guest-reset.patch new file mode 100644 index 00000000..e276a23d --- /dev/null +++ b/0041-kvm-ppc-halt-secondary-cpus-when-guest-reset.patch @@ -0,0 +1,45 @@ +From 0ae672e84c7f722aebdcca35f1573e7b6f83fddd Mon Sep 17 00:00:00 2001 +From: Liu Yu-B13201 +Date: Mon, 28 Nov 2011 20:41:18 +0000 +Subject: [PATCH 41/44] kvm-ppc: halt secondary cpus when guest reset + +When guest reset, we need to halt secondary cpus until guest kick them. +This already works for tcg. The patch add the support for kvm. + +Signed-off-by: Liu Yu +Signed-off-by: Alexander Graf +[agraf: remove in-kernel irqchip code] +(cherry picked from commit 157feeadbaec09fe4dca539a24f6f6d327d6eeb6) +--- + hw/ppce500_spin.c | 1 + + target-ppc/kvm.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/hw/ppce500_spin.c b/hw/ppce500_spin.c +index cccd940..2b52728 100644 +--- a/hw/ppce500_spin.c ++++ b/hw/ppce500_spin.c +@@ -112,6 +112,7 @@ static void spin_kick(void *data) + + env->halted = 0; + env->exception_index = -1; ++ env->stopped = 0; + qemu_cpu_kick(env); + } + +diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c +index 923677c..9541626 100644 +--- a/target-ppc/kvm.c ++++ b/target-ppc/kvm.c +@@ -504,7 +504,7 @@ void kvm_arch_post_run(CPUState *env, struct kvm_run *run) + + int kvm_arch_process_async_events(CPUState *env) + { +- return 0; ++ return env->halted; + } + + static int kvmppc_handle_halt(CPUState *env) +-- +1.6.0.2 + diff --git a/0042-pseries-Emit-device-tree-nodes-in-reg-order.patch b/0042-pseries-Emit-device-tree-nodes-in-reg-order.patch new file mode 100644 index 00000000..1bdae985 --- /dev/null +++ b/0042-pseries-Emit-device-tree-nodes-in-reg-order.patch @@ -0,0 +1,101 @@ +From 7fe6b9bf81290f708919ffb6065daa16e5dbe7e3 Mon Sep 17 00:00:00 2001 +From: David Gibson +Date: Mon, 12 Dec 2011 18:24:32 +0000 +Subject: [PATCH 42/44] pseries: Emit device tree nodes in reg order + +Although in theory the device tree has no inherent ordering, in practice +the order of nodes in the device tree does effect the order that devices +are detected by software. + +Currently the ordering is determined by the order the devices appear on +the QEMU command line. Although that does give the user control over the +ordering, it is fragile, especially when the user does not generate the +command line manually - eg. when using libvirt etc. + +So order the device tree based on the reg value, ie. the address of on +the VIO bus of the devices. This gives us a sane and stable ordering. + +Signed-off-by: Michael Ellerman +Signed-off-by: David Gibson +Signed-off-by: Alexander Graf + +[agraf] add braces +(cherry picked from commit 05c194384f836240ea4c2da5fa3be43a54bff021) +--- + hw/spapr_vio.c | 50 +++++++++++++++++++++++++++++++++++++++++++++----- + 1 files changed, 45 insertions(+), 5 deletions(-) + +diff --git a/hw/spapr_vio.c b/hw/spapr_vio.c +index 2dcc036..8bd00ca 100644 +--- a/hw/spapr_vio.c ++++ b/hw/spapr_vio.c +@@ -749,21 +749,61 @@ static void spapr_vio_register_devices(void) + device_init(spapr_vio_register_devices) + + #ifdef CONFIG_FDT ++static int compare_reg(const void *p1, const void *p2) ++{ ++ VIOsPAPRDevice const *dev1, *dev2; ++ ++ dev1 = (VIOsPAPRDevice *)*(DeviceState **)p1; ++ dev2 = (VIOsPAPRDevice *)*(DeviceState **)p2; ++ ++ if (dev1->reg < dev2->reg) { ++ return -1; ++ } ++ if (dev1->reg == dev2->reg) { ++ return 0; ++ } ++ ++ /* dev1->reg > dev2->reg */ ++ return 1; ++} ++ + int spapr_populate_vdevice(VIOsPAPRBus *bus, void *fdt) + { +- DeviceState *qdev; +- int ret = 0; ++ DeviceState *qdev, **qdevs; ++ int i, num, ret = 0; + ++ /* Count qdevs on the bus list */ ++ num = 0; + QTAILQ_FOREACH(qdev, &bus->bus.children, sibling) { +- VIOsPAPRDevice *dev = (VIOsPAPRDevice *)qdev; ++ num++; ++ } ++ ++ /* Copy out into an array of pointers */ ++ qdevs = g_malloc(sizeof(qdev) * num); ++ num = 0; ++ QTAILQ_FOREACH(qdev, &bus->bus.children, sibling) { ++ qdevs[num++] = qdev; ++ } ++ ++ /* Sort the array */ ++ qsort(qdevs, num, sizeof(qdev), compare_reg); ++ ++ /* Hack alert. Give the devices to libfdt in reverse order, we happen ++ * to know that will mean they are in forward order in the tree. */ ++ for (i = num - 1; i >= 0; i--) { ++ VIOsPAPRDevice *dev = (VIOsPAPRDevice *)(qdevs[i]); + + ret = vio_make_devnode(dev, fdt); + + if (ret < 0) { +- return ret; ++ goto out; + } + } + +- return 0; ++ ret = 0; ++out: ++ free(qdevs); ++ ++ return ret; + } + #endif /* CONFIG_FDT */ +-- +1.6.0.2 + diff --git a/0043-pseries-Add-a-routine-to-find-a-stable-default-vt.patch b/0043-pseries-Add-a-routine-to-find-a-stable-default-vt.patch new file mode 100644 index 00000000..41c714b5 --- /dev/null +++ b/0043-pseries-Add-a-routine-to-find-a-stable-default-vt.patch @@ -0,0 +1,97 @@ +From 2f5760ec14a8f595c347f8a6ad2f8b6adfc20bc2 Mon Sep 17 00:00:00 2001 +From: David Gibson +Date: Mon, 12 Dec 2011 18:24:33 +0000 +Subject: [PATCH 43/44] pseries: Add a routine to find a stable "default" vty and use it + +In vty_lookup() we have a special case for supporting early debug in +the kernel. This accepts reg == 0 as a special case to mean "any vty". + +We implement this by searching the vtys on the bus and returning the +first we find. This means that the vty we chose depends on the order +the vtys are specified on the QEMU command line - because that determines +the order of the vtys on the bus. + +We'd rather the command line order was irrelevant, so instead return +the vty with the lowest reg value. This is still a guess as to what the +user really means, but it is at least stable WRT command line ordering. + +Signed-off-by: Michael Ellerman +Signed-off-by: David Gibson +Signed-off-by: Alexander Graf + +[agraf] fix braces +(cherry picked from commit 98331f8ad6a3e2cfbb402d72e6be47eac7706251) +--- + hw/spapr_vty.c | 47 ++++++++++++++++++++++++++++++++++++++--------- + 1 files changed, 38 insertions(+), 9 deletions(-) + +diff --git a/hw/spapr_vty.c b/hw/spapr_vty.c +index f23cc36..e2fec58 100644 +--- a/hw/spapr_vty.c ++++ b/hw/spapr_vty.c +@@ -156,24 +156,53 @@ static VIOsPAPRDeviceInfo spapr_vty = { + }, + }; + ++static VIOsPAPRDevice *spapr_vty_get_default(VIOsPAPRBus *bus) ++{ ++ VIOsPAPRDevice *sdev, *selected; ++ DeviceState *iter; ++ ++ /* ++ * To avoid the console bouncing around we want one VTY to be ++ * the "default". We haven't really got anything to go on, so ++ * arbitrarily choose the one with the lowest reg value. ++ */ ++ ++ selected = NULL; ++ QTAILQ_FOREACH(iter, &bus->bus.children, sibling) { ++ /* Only look at VTY devices */ ++ if (iter->info != &spapr_vty.qdev) { ++ continue; ++ } ++ ++ sdev = DO_UPCAST(VIOsPAPRDevice, qdev, iter); ++ ++ /* First VTY we've found, so it is selected for now */ ++ if (!selected) { ++ selected = sdev; ++ continue; ++ } ++ ++ /* Choose VTY with lowest reg value */ ++ if (sdev->reg < selected->reg) { ++ selected = sdev; ++ } ++ } ++ ++ return selected; ++} ++ + static VIOsPAPRDevice *vty_lookup(sPAPREnvironment *spapr, target_ulong reg) + { + VIOsPAPRDevice *sdev; + + sdev = spapr_vio_find_by_reg(spapr->vio_bus, reg); + if (!sdev && reg == 0) { +- DeviceState *qdev; +- + /* Hack for kernel early debug, which always specifies reg==0. +- * We search all VIO devices, and grab the first available vty +- * device. This attempts to mimic existing PowerVM behaviour ++ * We search all VIO devices, and grab the vty with the lowest ++ * reg. This attempts to mimic existing PowerVM behaviour + * (early debug does work there, despite having no vty with + * reg==0. */ +- QTAILQ_FOREACH(qdev, &spapr->vio_bus->bus.children, sibling) { +- if (qdev->info == &spapr_vty.qdev) { +- return DO_UPCAST(VIOsPAPRDevice, qdev, qdev); +- } +- } ++ return spapr_vty_get_default(spapr->vio_bus); + } + + return sdev; +-- +1.6.0.2 + diff --git a/0044-pseries-Populate-chosen-linux-stdout-path-in-the.patch b/0044-pseries-Populate-chosen-linux-stdout-path-in-the.patch new file mode 100644 index 00000000..cc5ba372 --- /dev/null +++ b/0044-pseries-Populate-chosen-linux-stdout-path-in-the.patch @@ -0,0 +1,119 @@ +From cdec03dc7bb33b4ebf5bd286338e5c50be77a055 Mon Sep 17 00:00:00 2001 +From: David Gibson +Date: Tue, 13 Dec 2011 15:24:34 +1100 +Subject: [PATCH 44/44] pseries: Populate "/chosen/linux,stdout-path" in the FDT + +There is a device tree property "/chosen/linux,stdout-path" which indicates +which device should be used as stdout - ie. "the console". + +Currently we don't specify anything, which means both firmware and Linux +choose something arbitrarily. Use the routine we added in the last patch +to pick a default vty and specify it as stdout. + +Currently SLOF doesn't use the property, but we are hoping to update it +to do so. + +Signed-off-by: Michael Ellerman +Signed-off-by: David Gibson +Signed-off-by: Alexander Graf +(cherry picked from commit 68f3a94c64bbaaf8c7f2daa70de1b5d87a432f86) +--- + hw/spapr.c | 2 ++ + hw/spapr_vio.c | 34 ++++++++++++++++++++++++++++++++++ + hw/spapr_vio.h | 3 +++ + hw/spapr_vty.c | 2 +- + 4 files changed, 40 insertions(+), 1 deletions(-) + +diff --git a/hw/spapr.c b/hw/spapr.c +index 2b901f1..5a98d86 100644 +--- a/hw/spapr.c ++++ b/hw/spapr.c +@@ -351,6 +351,8 @@ static void spapr_finalize_fdt(sPAPREnvironment *spapr, + fprintf(stderr, "Couldn't set up RTAS device tree properties\n"); + } + ++ spapr_populate_chosen_stdout(fdt, spapr->vio_bus); ++ + _FDT((fdt_pack(fdt))); + + cpu_physical_memory_write(fdt_addr, fdt, fdt_totalsize(fdt)); +diff --git a/hw/spapr_vio.c b/hw/spapr_vio.c +index 8bd00ca..464fe87 100644 +--- a/hw/spapr_vio.c ++++ b/hw/spapr_vio.c +@@ -806,4 +806,38 @@ out: + + return ret; + } ++ ++int spapr_populate_chosen_stdout(void *fdt, VIOsPAPRBus *bus) ++{ ++ VIOsPAPRDevice *dev; ++ char *name, *path; ++ int ret, offset; ++ ++ dev = spapr_vty_get_default(bus); ++ if (!dev) ++ return 0; ++ ++ offset = fdt_path_offset(fdt, "/chosen"); ++ if (offset < 0) { ++ return offset; ++ } ++ ++ name = vio_format_dev_name(dev); ++ if (!name) { ++ return -ENOMEM; ++ } ++ ++ if (asprintf(&path, "/vdevice/%s", name) < 0) { ++ path = NULL; ++ ret = -ENOMEM; ++ goto out; ++ } ++ ++ ret = fdt_setprop_string(fdt, offset, "linux,stdout-path", path); ++out: ++ free(name); ++ free(path); ++ ++ return ret; ++} + #endif /* CONFIG_FDT */ +diff --git a/hw/spapr_vio.h b/hw/spapr_vio.h +index a325a5f..9fcd304 100644 +--- a/hw/spapr_vio.h ++++ b/hw/spapr_vio.h +@@ -83,6 +83,7 @@ extern VIOsPAPRBus *spapr_vio_bus_init(void); + extern VIOsPAPRDevice *spapr_vio_find_by_reg(VIOsPAPRBus *bus, uint32_t reg); + extern void spapr_vio_bus_register_withprop(VIOsPAPRDeviceInfo *info); + extern int spapr_populate_vdevice(VIOsPAPRBus *bus, void *fdt); ++extern int spapr_populate_chosen_stdout(void *fdt, VIOsPAPRBus *bus); + + extern int spapr_vio_signal(VIOsPAPRDevice *dev, target_ulong mode); + +@@ -108,6 +109,8 @@ void spapr_vty_create(VIOsPAPRBus *bus, uint32_t reg, CharDriverState *chardev); + void spapr_vlan_create(VIOsPAPRBus *bus, uint32_t reg, NICInfo *nd); + void spapr_vscsi_create(VIOsPAPRBus *bus, uint32_t reg); + ++VIOsPAPRDevice *spapr_vty_get_default(VIOsPAPRBus *bus); ++ + int spapr_tce_set_bypass(uint32_t unit, uint32_t enable); + void spapr_vio_quiesce(void); + +diff --git a/hw/spapr_vty.c b/hw/spapr_vty.c +index e2fec58..386ccf7 100644 +--- a/hw/spapr_vty.c ++++ b/hw/spapr_vty.c +@@ -156,7 +156,7 @@ static VIOsPAPRDeviceInfo spapr_vty = { + }, + }; + +-static VIOsPAPRDevice *spapr_vty_get_default(VIOsPAPRBus *bus) ++VIOsPAPRDevice *spapr_vty_get_default(VIOsPAPRBus *bus) + { + VIOsPAPRDevice *sdev, *selected; + DeviceState *iter; +-- +1.6.0.2 + diff --git a/qemu.changes b/qemu.changes index 5515dd5a..94f74f99 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Jan 10 16:08:35 UTC 2012 - agraf@suse.de + +- backport all ppc-1.0 stable patches to our package +- add fix for PPC HV KVM on 3.1 + ------------------------------------------------------------------- Tue Jan 10 15:26:21 UTC 2012 - agraf@suse.de diff --git a/qemu.spec b/qemu.spec index 02683a50..b98b9cfb 100644 --- a/qemu.spec +++ b/qemu.spec @@ -63,6 +63,13 @@ Patch0034: 0034-PPC-KVM-Disable-mmu-notifier-check.patch Patch0035: 0035-linux-user-improve-fake-proc-self-stat-making-ps.patch Patch0036: 0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch Patch0037: 0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch +Patch0038: 0038-PPC-KVM-Ignore-ENABLE_PAPR-to-support-very-old-HV.patch +Patch0039: 0039-console-Fix-segfault-on-screendump-without-VGA-adap.patch +Patch0040: 0040-pseries-Fix-array-overrun-bug-in-PCI-code.patch +Patch0041: 0041-kvm-ppc-halt-secondary-cpus-when-guest-reset.patch +Patch0042: 0042-pseries-Emit-device-tree-nodes-in-reg-order.patch +Patch0043: 0043-pseries-Add-a-routine-to-find-a-stable-default-vt.patch +Patch0044: 0044-pseries-Populate-chosen-linux-stdout-path-in-the.patch # this is to make lint happy Source300: rpmlintrc BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -159,6 +166,13 @@ run cross architectures builds %patch0035 -p1 %patch0036 -p1 %patch0037 -p1 +%patch0038 -p1 +%patch0039 -p1 +%patch0040 -p1 +%patch0041 -p1 +%patch0042 -p1 +%patch0043 -p1 +%patch0044 -p1 %build # build QEMU From f0bf933e69585af266b109981d9f4d86408050d2abc5c4a425260a4d8dfd3660 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 31 Jan 2012 23:10:40 +0000 Subject: [PATCH 05/15] - qemu-user: add fix for deadloop with ulimit constraints - qemu-user: add device mapper and loopback ioctls, enabling kpatkx OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=40 --- ...errupts-by-inline-checking-of-a-flag.patch | 2 +- ...inux-user-fix-QEMU_STRACE-1-segfault.patch | 2 +- 0003-linux-user-save-auxv-length.patch | 2 +- ...-user-add-open-hijack-infrastructure.patch | 2 +- 0005-linux-user-fake-proc-self-maps.patch | 2 +- 0006-linux-user-fake-proc-self-stat.patch | 2 +- 0007-linux-user-fake-proc-self-auxv.patch | 2 +- 0008-XXX-dont-dump-core-on-sigabort.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...user-fix-wait-syscall-status-returns.patch | 2 +- ...x-user-fake-proc-self-maps-even-more.patch | 2 +- ...-SA_RESTART-race-with-boehm-gc-ARM-o.patch | 2 +- ...nary-lower-in-address-space-so-we-ha.patch | 2 +- ...inux-user-map-lower-in-address-space.patch | 2 +- ...proc-self-maps-also-fclose-real-file.patch | 2 +- ...igher-again-so-we-have-space-for-brk.patch | 2 +- 0018-qemu-0.9.0.cvs-binfmt.patch | 2 +- 0019-qemu-cvs-alsa_bitfield.patch | 2 +- 0020-qemu-cvs-alsa_ioctl.patch | 2 +- 0021-qemu-cvs-alsa_mmap.patch | 2 +- 0022-qemu-cvs-gettimeofday.patch | 2 +- 0023-qemu-cvs-ioctl_debug.patch | 2 +- 0024-qemu-cvs-ioctl_nodirection.patch | 2 +- 0025-qemu-img-vmdk-scsi.patch | 2 +- 0026-qemu-nonvoid_return.patch | 2 +- 0027-fix-mipsn32-linux-user-builds.patch | 2 +- ...ynamips-and-GNS3-UDP-tunnels-Patches.patch | 2 +- ...d-binfmt-wrapper-for-argv-0-handling.patch | 2 +- ...nux-user-Ignore-timer_create-syscall.patch | 2 +- ...user-be-silent-about-capget-failures.patch | 2 +- ...-PPC-Fix-linker-scripts-on-ppc-hosts.patch | 2 +- ...ser-reserve-4GB-of-vmem-for-32-on-64.patch | 2 +- 0034-PPC-KVM-Disable-mmu-notifier-check.patch | 2 +- ...mprove-fake-proc-self-stat-making-ps.patch | 2 +- ...arget_argv-is-placed-on-ts-bprm-argv.patch | 2 +- ...-PPC-KVM-Ignore-SET_ONE_REG-failures.patch | 2 +- ...e-ENABLE_PAPR-to-support-very-old-HV.patch | 2 +- ...fault-on-screendump-without-VGA-adap.patch | 2 +- ...es-Fix-array-overrun-bug-in-PCI-code.patch | 2 +- ...halt-secondary-cpus-when-guest-reset.patch | 2 +- ...-Emit-device-tree-nodes-in-reg-order.patch | 2 +- ...-routine-to-find-a-stable-default-vt.patch | 2 +- ...late-chosen-linux-stdout-path-in-the.patch | 2 +- 0045-linux-user-fix-segfault-deadlock.patch | 67 +++ ...-user-implement-device-mapper-ioctls.patch | 380 ++++++++++++++++++ ...nux-user-add-struct-old_dev_t-compat.patch | 136 +++++++ 0048-linux-user-fix-BLK-ioctl-arguments.patch | 36 ++ ...nux-user-add-BLKSSZGET-ioctl-wrapper.patch | 27 ++ qemu.changes | 6 + qemu.spec | 10 + update_git.sh | 2 +- 52 files changed, 707 insertions(+), 45 deletions(-) create mode 100644 0045-linux-user-fix-segfault-deadlock.patch create mode 100644 0046-linux-user-implement-device-mapper-ioctls.patch create mode 100644 0047-linux-user-add-struct-old_dev_t-compat.patch create mode 100644 0048-linux-user-fix-BLK-ioctl-arguments.patch create mode 100644 0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch diff --git a/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch b/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch index 6cecf42c..2ddbfde7 100644 --- a/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch +++ b/0001-Handle-CPU-interrupts-by-inline-checking-of-a-flag.patch @@ -1,7 +1,7 @@ From 4cc09e9530fb08123594be6c72dfc381df5dcddc Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Wed, 5 Oct 2011 10:04:02 +0100 -Subject: [PATCH 01/44] Handle CPU interrupts by inline checking of a flag +Subject: [PATCH] Handle CPU interrupts by inline checking of a flag Fix the nasty TCG race conditions and crashes by implementing cpu_exit as setting a flag which is checked at the start of each TB. This is diff --git a/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch b/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch index 9191413f..57548a01 100644 --- a/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch +++ b/0002-linux-user-fix-QEMU_STRACE-1-segfault.patch @@ -1,7 +1,7 @@ From 0588bc446fd48bdb1965a6773d008c05a4ba16c1 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 20 Nov 2011 13:02:54 +0100 -Subject: [PATCH 02/44] linux-user: fix QEMU_STRACE=1 segfault +Subject: [PATCH] linux-user: fix QEMU_STRACE=1 segfault While debugging some issues with QEMU_STRACE I stumbled over segmentation faults that were pretty reproducible. Turns out we tried to treat a diff --git a/0003-linux-user-save-auxv-length.patch b/0003-linux-user-save-auxv-length.patch index 1f80a753..1e083a74 100644 --- a/0003-linux-user-save-auxv-length.patch +++ b/0003-linux-user-save-auxv-length.patch @@ -1,7 +1,7 @@ From 67c12998086c44ebef7f92a394154d6aba446178 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:22 +0000 -Subject: [PATCH 03/44] linux-user: save auxv length +Subject: [PATCH] linux-user: save auxv length We create our own AUXV segment on stack and save a pointer to it. However we don't save the length of it, so any code that wants to diff --git a/0004-linux-user-add-open-hijack-infrastructure.patch b/0004-linux-user-add-open-hijack-infrastructure.patch index 6dd005a1..f9621ce8 100644 --- a/0004-linux-user-add-open-hijack-infrastructure.patch +++ b/0004-linux-user-add-open-hijack-infrastructure.patch @@ -1,7 +1,7 @@ From 99590488e94b6b7f10ecf9a99398fd24a69a7039 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:23 +0000 -Subject: [PATCH 04/44] linux-user: add open() hijack infrastructure +Subject: [PATCH] linux-user: add open() hijack infrastructure There are a number of files in /proc that expose host information to the guest program. This patch adds infrastructure to override diff --git a/0005-linux-user-fake-proc-self-maps.patch b/0005-linux-user-fake-proc-self-maps.patch index 280895a6..aff0fa08 100644 --- a/0005-linux-user-fake-proc-self-maps.patch +++ b/0005-linux-user-fake-proc-self-maps.patch @@ -1,7 +1,7 @@ From 059e727a9a4be00de949769105e9e0ea876fc64b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:24 +0000 -Subject: [PATCH 05/44] linux-user: fake /proc/self/maps +Subject: [PATCH] linux-user: fake /proc/self/maps glibc's pthread_attr_getstack tries to find the stack range from /proc/self/maps. Unfortunately, /proc is usually the host's /proc diff --git a/0006-linux-user-fake-proc-self-stat.patch b/0006-linux-user-fake-proc-self-stat.patch index 14c8943c..9949cba9 100644 --- a/0006-linux-user-fake-proc-self-stat.patch +++ b/0006-linux-user-fake-proc-self-stat.patch @@ -1,7 +1,7 @@ From 7ee3fd47eed19e4dfa26a8d0176ed3550b8d0ccf Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:25 +0000 -Subject: [PATCH 06/44] linux-user: fake /proc/self/stat +Subject: [PATCH] linux-user: fake /proc/self/stat The boehm gc finds the program's stack starting pointer by checking /proc/self/stat. Unfortunately, so far it reads diff --git a/0007-linux-user-fake-proc-self-auxv.patch b/0007-linux-user-fake-proc-self-auxv.patch index 781b9a33..12b9fabc 100644 --- a/0007-linux-user-fake-proc-self-auxv.patch +++ b/0007-linux-user-fake-proc-self-auxv.patch @@ -1,7 +1,7 @@ From ddf0d4037b10c07d9e5b168f9f96e60a1601c75b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 2 Nov 2011 09:23:26 +0000 -Subject: [PATCH 07/44] linux-user: fake /proc/self/auxv +Subject: [PATCH] linux-user: fake /proc/self/auxv Gtk tries to read /proc/self/auxv to find its auxv table instead of taking it from its own program memory space. diff --git a/0008-XXX-dont-dump-core-on-sigabort.patch b/0008-XXX-dont-dump-core-on-sigabort.patch index 0e94354d..2960e652 100644 --- a/0008-XXX-dont-dump-core-on-sigabort.patch +++ b/0008-XXX-dont-dump-core-on-sigabort.patch @@ -1,7 +1,7 @@ From 4bc96d88f91417aa2bb029da2e8343456fe86631 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 21 Nov 2011 23:50:36 +0100 -Subject: [PATCH 08/44] XXX dont dump core on sigabort +Subject: [PATCH] XXX dont dump core on sigabort --- linux-user/signal.c | 6 ++++++ diff --git a/0009-linux-user-fix-wait-syscall-status-returns.patch b/0009-linux-user-fix-wait-syscall-status-returns.patch index 8ef89512..3579b60f 100644 --- a/0009-linux-user-fix-wait-syscall-status-returns.patch +++ b/0009-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From ee5137d38109fdcb55a58be447c2c27be2b16eb0 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 22 Nov 2011 17:53:40 +0100 -Subject: [PATCH 09/44] linux-user: fix wait* syscall status returns +Subject: [PATCH] linux-user: fix wait* syscall status returns When calling wait4 or waitpid with a status pointer and WNOHANG, the syscall can potentially not modify the status pointer input. Now if we diff --git a/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch b/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch index 088faab6..34e2ef86 100644 --- a/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch +++ b/0010-Revert-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From 5cfce885dd1b3a229cd2ea7a94dfe2445ec29417 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 24 Nov 2011 00:38:22 +0100 -Subject: [PATCH 10/44] Revert "linux-user: fix wait* syscall status returns" +Subject: [PATCH] Revert "linux-user: fix wait* syscall status returns" This reverts commit 93092792064d880eb91679004b4761639d754081. --- diff --git a/0011-linux-user-fix-wait-syscall-status-returns.patch b/0011-linux-user-fix-wait-syscall-status-returns.patch index 28bb8081..2e627fbf 100644 --- a/0011-linux-user-fix-wait-syscall-status-returns.patch +++ b/0011-linux-user-fix-wait-syscall-status-returns.patch @@ -1,7 +1,7 @@ From b71ee7a063f7cffdf8a2cf73fcbc1d461fbbb80e Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 24 Nov 2011 00:39:35 +0100 -Subject: [PATCH 11/44] linux-user: fix wait* syscall status returns +Subject: [PATCH] linux-user: fix wait* syscall status returns When calling wait4 or waitpid with a status pointer and WNOHANG, the syscall can potentially not modify the status pointer input. Now if we diff --git a/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch b/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch index 5f06fc7f..8250bb13 100644 --- a/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch +++ b/0012-XXX-linux-user-fake-proc-self-maps-even-more.patch @@ -1,7 +1,7 @@ From 146dddbec44c48417f776d54f823093b464e596c Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 28 Nov 2011 17:05:24 +0100 -Subject: [PATCH 12/44] XXX linux-user: fake /proc/self/maps even more +Subject: [PATCH] XXX linux-user: fake /proc/self/maps even more --- linux-user/syscall.c | 40 +++++++++++++++++++++++++++++++++++++++- diff --git a/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch b/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch index 725636cf..d872b87a 100644 --- a/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch +++ b/0013-XXX-work-around-SA_RESTART-race-with-boehm-gc-ARM-o.patch @@ -1,7 +1,7 @@ From 79a59902304b66e9270d11901a554e5b22042d6e Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 1 Dec 2011 19:00:01 +0100 -Subject: [PATCH 13/44] XXX work around SA_RESTART race with boehm-gc (ARM only) +Subject: [PATCH] XXX work around SA_RESTART race with boehm-gc (ARM only) --- linux-user/main.c | 25 ++++++++----- diff --git a/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch b/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch index 243a8ef2..b0a62d82 100644 --- a/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch +++ b/0014-XXX-move-qemu-binary-lower-in-address-space-so-we-ha.patch @@ -1,7 +1,7 @@ From e534a77a0e1f880d0f74514ac50de5de3dd4811a Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 5 Dec 2011 23:37:52 +0100 -Subject: [PATCH 14/44] XXX move qemu binary lower in address space so we have space for guest stuff +Subject: [PATCH] XXX move qemu binary lower in address space so we have space for guest stuff --- x86_64.ld | 2 +- diff --git a/0015-linux-user-map-lower-in-address-space.patch b/0015-linux-user-map-lower-in-address-space.patch index e4afbba7..32813fa6 100644 --- a/0015-linux-user-map-lower-in-address-space.patch +++ b/0015-linux-user-map-lower-in-address-space.patch @@ -1,7 +1,7 @@ From edda5e8f49b7857379733d652d6b259488bd7b70 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 6 Dec 2011 00:39:50 +0100 -Subject: [PATCH 15/44] linux-user: map lower in address space +Subject: [PATCH] linux-user: map lower in address space While trying to compile Java I can into situations where there was simply no virtual address space left for a 32-bit guest to take. For example when diff --git a/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch b/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch index 9bb358d7..3f312b68 100644 --- a/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch +++ b/0016-XXX-fake-proc-self-maps-also-fclose-real-file.patch @@ -1,7 +1,7 @@ From 3580a90d40df10410b7268f89aae58ce05dd2bed Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 8 Dec 2011 23:19:32 +0100 -Subject: [PATCH 16/44] XXX fake /proc/self/maps: also fclose real file +Subject: [PATCH] XXX fake /proc/self/maps: also fclose real file --- linux-user/syscall.c | 1 + diff --git a/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch b/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch index 69b220c5..796cdfb0 100644 --- a/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch +++ b/0017-XXX-map-qemu-higher-again-so-we-have-space-for-brk.patch @@ -1,7 +1,7 @@ From 91f12fe177833e0112cd7f7cf5781b26377667a5 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sat, 10 Dec 2011 00:03:56 +0100 -Subject: [PATCH 17/44] XXX map qemu higher again so we have space for brk +Subject: [PATCH] XXX map qemu higher again so we have space for brk --- linux-user/mmap.c | 2 +- diff --git a/0018-qemu-0.9.0.cvs-binfmt.patch b/0018-qemu-0.9.0.cvs-binfmt.patch index 57f6ba6f..1d700b06 100644 --- a/0018-qemu-0.9.0.cvs-binfmt.patch +++ b/0018-qemu-0.9.0.cvs-binfmt.patch @@ -1,7 +1,7 @@ From 434801ec78b031170eb0762302b52062e6c27d0e Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:18:44 +0200 -Subject: [PATCH 18/44] qemu-0.9.0.cvs-binfmt +Subject: [PATCH] qemu-0.9.0.cvs-binfmt Fixes binfmt_misc setup script: - x86_64 is i386-compatible diff --git a/0019-qemu-cvs-alsa_bitfield.patch b/0019-qemu-cvs-alsa_bitfield.patch index 0fa39bc7..516defb9 100644 --- a/0019-qemu-cvs-alsa_bitfield.patch +++ b/0019-qemu-cvs-alsa_bitfield.patch @@ -1,7 +1,7 @@ From b41a72d0c29f97610dfdd5573b8be383823bc88f Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:20:50 +0200 -Subject: [PATCH 19/44] qemu-cvs-alsa_bitfield +Subject: [PATCH] qemu-cvs-alsa_bitfield Implements TYPE_INTBITFIELD partially. (required for ALSA support) diff --git a/0020-qemu-cvs-alsa_ioctl.patch b/0020-qemu-cvs-alsa_ioctl.patch index a9bf878b..a9bc2a21 100644 --- a/0020-qemu-cvs-alsa_ioctl.patch +++ b/0020-qemu-cvs-alsa_ioctl.patch @@ -1,7 +1,7 @@ From 33f065c217c1921759df12467954eb4638f84a72 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:23:27 +0200 -Subject: [PATCH 20/44] qemu-cvs-alsa_ioctl +Subject: [PATCH] qemu-cvs-alsa_ioctl Implements ALSA ioctls on PPC hosts. diff --git a/0021-qemu-cvs-alsa_mmap.patch b/0021-qemu-cvs-alsa_mmap.patch index 930e39c5..978193d5 100644 --- a/0021-qemu-cvs-alsa_mmap.patch +++ b/0021-qemu-cvs-alsa_mmap.patch @@ -1,7 +1,7 @@ From 8b67814c8ab4645ddd43664b1092e78ea6a743d8 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:24:15 +0200 -Subject: [PATCH 21/44] qemu-cvs-alsa_mmap +Subject: [PATCH] qemu-cvs-alsa_mmap Hack to prevent ALSA from using mmap() interface to simplify emulation. diff --git a/0022-qemu-cvs-gettimeofday.patch b/0022-qemu-cvs-gettimeofday.patch index 6d128e74..c96fc6f0 100644 --- a/0022-qemu-cvs-gettimeofday.patch +++ b/0022-qemu-cvs-gettimeofday.patch @@ -1,7 +1,7 @@ From c0ce4deb6c2ac843e337b7252fbefc190d625ca5 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:25:41 +0200 -Subject: [PATCH 22/44] qemu-cvs-gettimeofday +Subject: [PATCH] qemu-cvs-gettimeofday No clue what this is for. --- diff --git a/0023-qemu-cvs-ioctl_debug.patch b/0023-qemu-cvs-ioctl_debug.patch index 47eec797..83b86119 100644 --- a/0023-qemu-cvs-ioctl_debug.patch +++ b/0023-qemu-cvs-ioctl_debug.patch @@ -1,7 +1,7 @@ From 6232258009a4735d7f4f53b5589e7ebd90a9885d Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:26:33 +0200 -Subject: [PATCH 23/44] qemu-cvs-ioctl_debug +Subject: [PATCH] qemu-cvs-ioctl_debug Extends unsupported ioctl debug output. diff --git a/0024-qemu-cvs-ioctl_nodirection.patch b/0024-qemu-cvs-ioctl_nodirection.patch index 855b1127..50798f2e 100644 --- a/0024-qemu-cvs-ioctl_nodirection.patch +++ b/0024-qemu-cvs-ioctl_nodirection.patch @@ -1,7 +1,7 @@ From 926d75fa4b4b5d95d4b0111e3e0af4d983a9d46b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 14 Apr 2009 16:27:36 +0200 -Subject: [PATCH 24/44] qemu-cvs-ioctl_nodirection +Subject: [PATCH] qemu-cvs-ioctl_nodirection the direction given in the ioctl should be correct so we can assume the communication is uni-directional. The alsa developers did not like this diff --git a/0025-qemu-img-vmdk-scsi.patch b/0025-qemu-img-vmdk-scsi.patch index 6ce257b2..1a72e4cb 100644 --- a/0025-qemu-img-vmdk-scsi.patch +++ b/0025-qemu-img-vmdk-scsi.patch @@ -1,7 +1,7 @@ From 90b3180677c5615bafc9a1f8252fbc4af1dc1ae4 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:37:42 +0200 -Subject: [PATCH 25/44] qemu-img-vmdk-scsi +Subject: [PATCH] qemu-img-vmdk-scsi Support creation of SCSI VMDK images in qemu-img. diff --git a/0026-qemu-nonvoid_return.patch b/0026-qemu-nonvoid_return.patch index 19acf463..0c44fc3f 100644 --- a/0026-qemu-nonvoid_return.patch +++ b/0026-qemu-nonvoid_return.patch @@ -1,7 +1,7 @@ From 7e6479e0d45e45e888cb79759fd44d6c14be19f4 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Tue, 14 Apr 2009 16:38:20 +0200 -Subject: [PATCH 26/44] qemu-nonvoid_return +Subject: [PATCH] qemu-nonvoid_return Squelches GCC warnings about undefined return values. diff --git a/0027-fix-mipsn32-linux-user-builds.patch b/0027-fix-mipsn32-linux-user-builds.patch index 8b6f1696..3979bd98 100644 --- a/0027-fix-mipsn32-linux-user-builds.patch +++ b/0027-fix-mipsn32-linux-user-builds.patch @@ -1,7 +1,7 @@ From 164cf539481164978d9fa6ad69eb20cda7dc0e12 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Wed, 25 Aug 2010 14:23:43 +0200 -Subject: [PATCH 27/44] fix mipsn32*-linux-user builds +Subject: [PATCH] fix mipsn32*-linux-user builds Signed-off-by: Ulrich Hecht --- diff --git a/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch b/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch index 0a30937a..87846404 100644 --- a/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch +++ b/0028-Integrating-Dynamips-and-GNS3-UDP-tunnels-Patches.patch @@ -1,7 +1,7 @@ From 15d6a32b38abc6c2f8143ebccfcdd05d204f0fcd Mon Sep 17 00:00:00 2001 From: Benjamin Date: Sat, 8 Oct 2011 07:31:33 +0000 -Subject: [PATCH 28/44] Integrating Dynamips and GNS3 UDP tunnels (Patches) +Subject: [PATCH] Integrating Dynamips and GNS3 UDP tunnels (Patches) On 10/07/11 10:35, Jan Kiszka wrote: > diff --git a/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch b/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch index 3b0b07f5..d51ad074 100644 --- a/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch +++ b/0029-linux-user-add-binfmt-wrapper-for-argv-0-handling.patch @@ -1,7 +1,7 @@ From 47ff084e9af71b217e6f842f720d12fe9e12f2fd Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 30 Sep 2011 19:40:36 +0200 -Subject: [PATCH 29/44] linux-user: add binfmt wrapper for argv[0] handling +Subject: [PATCH] linux-user: add binfmt wrapper for argv[0] handling When using qemu's linux-user binaries through binfmt, argv[0] gets lost along the execution because qemu only gets passed in the full file name diff --git a/0030-linux-user-Ignore-timer_create-syscall.patch b/0030-linux-user-Ignore-timer_create-syscall.patch index b977520b..985ef7e2 100644 --- a/0030-linux-user-Ignore-timer_create-syscall.patch +++ b/0030-linux-user-Ignore-timer_create-syscall.patch @@ -1,7 +1,7 @@ From 269d801698bf7640dd325cfb4b195c4a207a07ee Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 11 Dec 2011 01:19:24 +0100 -Subject: [PATCH 30/44] linux-user: Ignore timer_create syscall +Subject: [PATCH] linux-user: Ignore timer_create syscall We don't implement the timer_create syscall, but shouting out loud about it breaks some %check tests in OBS, so better ignore it silently. diff --git a/0031-linux-user-be-silent-about-capget-failures.patch b/0031-linux-user-be-silent-about-capget-failures.patch index 4b11fc90..7a5a1917 100644 --- a/0031-linux-user-be-silent-about-capget-failures.patch +++ b/0031-linux-user-be-silent-about-capget-failures.patch @@ -1,7 +1,7 @@ From 36f403e159ecb5fcaeda5346c2df762cc904a91b Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 11 Dec 2011 01:21:51 +0100 -Subject: [PATCH 31/44] linux-user: be silent about capget failures +Subject: [PATCH] linux-user: be silent about capget failures Complaining about capget doesn't buy us anything, but makes %check fail in certain builds. So better not complain about its missing diff --git a/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch b/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch index 91eea497..11ff61a1 100644 --- a/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch +++ b/0032-PPC-Fix-linker-scripts-on-ppc-hosts.patch @@ -1,7 +1,7 @@ From 4fddaa4befeb3ddb1c14d9b2c882474ba4166940 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 12 Dec 2011 23:16:43 +0100 -Subject: [PATCH 32/44] PPC: Fix linker scripts on ppc hosts +Subject: [PATCH] PPC: Fix linker scripts on ppc hosts When compiling qemu statically with multilib on PPC, we hit the same issue that commit 845f2c2812d9ed24b36c02a3d06ee83aeafe8b49 diff --git a/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch b/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch index ce1e3c59..42a31657 100644 --- a/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch +++ b/0033-linux-user-reserve-4GB-of-vmem-for-32-on-64.patch @@ -1,7 +1,7 @@ From ac233b323ad7e498c665e8c74df7e44de4a542c0 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 14 Dec 2011 00:33:28 +0100 -Subject: [PATCH 33/44] linux-user: reserve 4GB of vmem for 32-on-64 +Subject: [PATCH] linux-user: reserve 4GB of vmem for 32-on-64 When running 32-on-64 bit guests, we should always reserve as much virtual memory as we possibly can for the guest process, so it can diff --git a/0034-PPC-KVM-Disable-mmu-notifier-check.patch b/0034-PPC-KVM-Disable-mmu-notifier-check.patch index 41a5ac57..e88c3baf 100644 --- a/0034-PPC-KVM-Disable-mmu-notifier-check.patch +++ b/0034-PPC-KVM-Disable-mmu-notifier-check.patch @@ -1,7 +1,7 @@ From 96ac7aa8753cb2d79121c5a579a6e93160428a40 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 6 Jan 2012 01:05:55 +0100 -Subject: [PATCH 34/44] PPC: KVM: Disable mmu notifier check +Subject: [PATCH] PPC: KVM: Disable mmu notifier check When using hugetlbfs (which is required for HV mode KVM on 970), we check for MMU notifiers that on 970 can not be implemented properly. diff --git a/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch b/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch index d787ded7..31f68f44 100644 --- a/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch +++ b/0035-linux-user-improve-fake-proc-self-stat-making-ps.patch @@ -1,7 +1,7 @@ From 872ebeaa24ed1c4b0c1596a7ad37f2bf2275efb0 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Tue, 3 Jan 2012 09:38:34 +0000 -Subject: [PATCH 35/44] linux-user: improve fake /proc/self/stat making `ps` not segfault. +Subject: [PATCH] linux-user: improve fake /proc/self/stat making `ps` not segfault. With the current fake /proc/self/stat implementation `ps` is segfaulting because it expects to read PID and argv[0] as first and diff --git a/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch b/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch index b0ca2eaa..28ddb40e 100644 --- a/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch +++ b/0036-linux-user-target_argv-is-placed-on-ts-bprm-argv.patch @@ -1,7 +1,7 @@ From 7dc45b21c5ef8a9445463f8d3754e502621192a7 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Tue, 3 Jan 2012 09:38:35 +0000 -Subject: [PATCH 36/44] linux-user: target_argv is placed on ts->bprm->argv and can't be freed() +Subject: [PATCH] linux-user: target_argv is placed on ts->bprm->argv and can't be freed() TaskState contains linux_bprm struct which encapsulates argv among other things. diff --git a/0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch b/0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch index ea6404df..77d08e2d 100644 --- a/0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch +++ b/0037-PPC-KVM-Ignore-SET_ONE_REG-failures.patch @@ -1,7 +1,7 @@ From 0d04677df6aabf7404c7bbe454d7be973a773bb0 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 10 Jan 2012 16:25:27 +0100 -Subject: [PATCH 37/44] PPC: KVM: Ignore SET_ONE_REG failures +Subject: [PATCH] PPC: KVM: Ignore SET_ONE_REG failures The SET_ONE_REG interface didn't make it upstream in the form that is used in qemu-1.0, so the code won't work. Make the error a warning, so we can diff --git a/0038-PPC-KVM-Ignore-ENABLE_PAPR-to-support-very-old-HV.patch b/0038-PPC-KVM-Ignore-ENABLE_PAPR-to-support-very-old-HV.patch index f2c4c653..f65d5863 100644 --- a/0038-PPC-KVM-Ignore-ENABLE_PAPR-to-support-very-old-HV.patch +++ b/0038-PPC-KVM-Ignore-ENABLE_PAPR-to-support-very-old-HV.patch @@ -1,7 +1,7 @@ From 9ef61f2a197f9dbae104fc1d18634c29d91b4a4e Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 10 Jan 2012 17:03:02 +0100 -Subject: [PATCH 38/44] PPC: KVM: Ignore ENABLE_PAPR to support very old HV KVM kernels +Subject: [PATCH] PPC: KVM: Ignore ENABLE_PAPR to support very old HV KVM kernels Very old kernels (3.1) didn't expose the PAPR capability yet, but still did work with HV KVM. Make the error a warning so we can work on them. diff --git a/0039-console-Fix-segfault-on-screendump-without-VGA-adap.patch b/0039-console-Fix-segfault-on-screendump-without-VGA-adap.patch index 04674fbc..bb965ada 100644 --- a/0039-console-Fix-segfault-on-screendump-without-VGA-adap.patch +++ b/0039-console-Fix-segfault-on-screendump-without-VGA-adap.patch @@ -1,7 +1,7 @@ From 2b0fc5def570362c27ce526b8a08529a6ae22362 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 18 Nov 2011 16:41:59 +0100 -Subject: [PATCH 39/44] console: Fix segfault on screendump without VGA adapter +Subject: [PATCH] console: Fix segfault on screendump without VGA adapter When trying to create a screen dump without having any VGA adapter inside the guest, QEMU segfaults. diff --git a/0040-pseries-Fix-array-overrun-bug-in-PCI-code.patch b/0040-pseries-Fix-array-overrun-bug-in-PCI-code.patch index 8a98d2c4..1fce9b56 100644 --- a/0040-pseries-Fix-array-overrun-bug-in-PCI-code.patch +++ b/0040-pseries-Fix-array-overrun-bug-in-PCI-code.patch @@ -1,7 +1,7 @@ From 632e46dfa29a19ba656a5580b610fda0003cf3b0 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 28 Nov 2011 20:21:39 +0000 -Subject: [PATCH 40/44] pseries: Fix array overrun bug in PCI code +Subject: [PATCH] pseries: Fix array overrun bug in PCI code spapr_populate_pci_devices() containd a loop with PCI_NUM_REGIONS (7) iterations. However this overruns the 'bars' global array, which only has diff --git a/0041-kvm-ppc-halt-secondary-cpus-when-guest-reset.patch b/0041-kvm-ppc-halt-secondary-cpus-when-guest-reset.patch index e276a23d..b02a0176 100644 --- a/0041-kvm-ppc-halt-secondary-cpus-when-guest-reset.patch +++ b/0041-kvm-ppc-halt-secondary-cpus-when-guest-reset.patch @@ -1,7 +1,7 @@ From 0ae672e84c7f722aebdcca35f1573e7b6f83fddd Mon Sep 17 00:00:00 2001 From: Liu Yu-B13201 Date: Mon, 28 Nov 2011 20:41:18 +0000 -Subject: [PATCH 41/44] kvm-ppc: halt secondary cpus when guest reset +Subject: [PATCH] kvm-ppc: halt secondary cpus when guest reset When guest reset, we need to halt secondary cpus until guest kick them. This already works for tcg. The patch add the support for kvm. diff --git a/0042-pseries-Emit-device-tree-nodes-in-reg-order.patch b/0042-pseries-Emit-device-tree-nodes-in-reg-order.patch index 1bdae985..5eb82ae4 100644 --- a/0042-pseries-Emit-device-tree-nodes-in-reg-order.patch +++ b/0042-pseries-Emit-device-tree-nodes-in-reg-order.patch @@ -1,7 +1,7 @@ From 7fe6b9bf81290f708919ffb6065daa16e5dbe7e3 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 12 Dec 2011 18:24:32 +0000 -Subject: [PATCH 42/44] pseries: Emit device tree nodes in reg order +Subject: [PATCH] pseries: Emit device tree nodes in reg order Although in theory the device tree has no inherent ordering, in practice the order of nodes in the device tree does effect the order that devices diff --git a/0043-pseries-Add-a-routine-to-find-a-stable-default-vt.patch b/0043-pseries-Add-a-routine-to-find-a-stable-default-vt.patch index 41c714b5..df932362 100644 --- a/0043-pseries-Add-a-routine-to-find-a-stable-default-vt.patch +++ b/0043-pseries-Add-a-routine-to-find-a-stable-default-vt.patch @@ -1,7 +1,7 @@ From 2f5760ec14a8f595c347f8a6ad2f8b6adfc20bc2 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 12 Dec 2011 18:24:33 +0000 -Subject: [PATCH 43/44] pseries: Add a routine to find a stable "default" vty and use it +Subject: [PATCH] pseries: Add a routine to find a stable "default" vty and use it In vty_lookup() we have a special case for supporting early debug in the kernel. This accepts reg == 0 as a special case to mean "any vty". diff --git a/0044-pseries-Populate-chosen-linux-stdout-path-in-the.patch b/0044-pseries-Populate-chosen-linux-stdout-path-in-the.patch index cc5ba372..922ecab0 100644 --- a/0044-pseries-Populate-chosen-linux-stdout-path-in-the.patch +++ b/0044-pseries-Populate-chosen-linux-stdout-path-in-the.patch @@ -1,7 +1,7 @@ From cdec03dc7bb33b4ebf5bd286338e5c50be77a055 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Tue, 13 Dec 2011 15:24:34 +1100 -Subject: [PATCH 44/44] pseries: Populate "/chosen/linux,stdout-path" in the FDT +Subject: [PATCH] pseries: Populate "/chosen/linux,stdout-path" in the FDT There is a device tree property "/chosen/linux,stdout-path" which indicates which device should be used as stdout - ie. "the console". diff --git a/0045-linux-user-fix-segfault-deadlock.patch b/0045-linux-user-fix-segfault-deadlock.patch new file mode 100644 index 00000000..29c1d9b8 --- /dev/null +++ b/0045-linux-user-fix-segfault-deadlock.patch @@ -0,0 +1,67 @@ +From 8be1f86952a0239c1d9e89e47bc25831b1804570 Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Fri, 13 Jan 2012 17:05:41 +0100 +Subject: [PATCH] linux-user: fix segfault deadlock + +When entering the guest we take a lock to ensure that nobody else messes +with our TB chaining while we're doing it. If we get a segfault inside that +code, we manage to work on, but will not unlock the lock. + +This patch forces unlocking of that lock in the segv handler. I'm not sure +this is the right approach though. Maybe we should rather make sure we don't +segfault in the code? I would greatly appreciate someone more intelligible +than me to look at this :). + +Example code to trigger this is at: http://csgraf.de/tmp/conftest.c + +Reported-by: Fabio Erculiani +Signed-off-by: Alexander Graf +--- + qemu-lock.h | 10 ++++++++++ + user-exec.c | 4 ++++ + 2 files changed, 14 insertions(+), 0 deletions(-) + +diff --git a/qemu-lock.h b/qemu-lock.h +index a72edda..e460e12 100644 +--- a/qemu-lock.h ++++ b/qemu-lock.h +@@ -24,6 +24,12 @@ + #include + #define spin_lock pthread_mutex_lock + #define spin_unlock pthread_mutex_unlock ++static inline void spin_unlock_safe(pthread_mutex_t *lock) ++{ ++ /* unlocking an unlocked mutex results in undefined behavior */ ++ pthread_mutex_trylock(lock); ++ pthread_mutex_unlock(lock); ++} + #define spinlock_t pthread_mutex_t + #define SPIN_LOCK_UNLOCKED PTHREAD_MUTEX_INITIALIZER + +@@ -46,4 +52,8 @@ static inline void spin_unlock(spinlock_t *lock) + { + } + ++static inline void spin_unlock_safe(spinlock_t *lock) ++{ ++} ++ + #endif +diff --git a/user-exec.c b/user-exec.c +index abf6885..2826bd1 100644 +--- a/user-exec.c ++++ b/user-exec.c +@@ -96,6 +96,10 @@ static inline int handle_cpu_signal(unsigned long pc, unsigned long address, + qemu_printf("qemu: SIGSEGV pc=0x%08lx address=%08lx w=%d oldset=0x%08lx\n", + pc, address, is_write, *(unsigned long *)old_set); + #endif ++ ++ /* Maybe we're still holding the TB fiddling lock? */ ++ spin_unlock_safe(&tb_lock); ++ + /* XXX: locking issue */ + if (is_write && page_unprotect(h2g(address), pc, puc)) { + return 1; +-- +1.6.0.2 + diff --git a/0046-linux-user-implement-device-mapper-ioctls.patch b/0046-linux-user-implement-device-mapper-ioctls.patch new file mode 100644 index 00000000..af9de8bd --- /dev/null +++ b/0046-linux-user-implement-device-mapper-ioctls.patch @@ -0,0 +1,380 @@ +From df8bec1f09754015f3b43591e1b8e9de70910c9a Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Tue, 31 Jan 2012 18:42:06 +0100 +Subject: [PATCH] linux-user: implement device mapper ioctls + +This patch implements all ioctls currently implemented by device mapper, +enabling us to run dmsetup and kpartx inside of linux-user. + +Signed-off-by: Alexander Graf +--- + linux-user/ioctls.h | 33 +++++++ + linux-user/syscall.c | 226 ++++++++++++++++++++++++++++++++++++++++++++ + linux-user/syscall_defs.h | 18 ++++ + linux-user/syscall_types.h | 36 +++++++ + 4 files changed, 313 insertions(+), 0 deletions(-) + +diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h +index 224dbc6..05b7290 100644 +--- a/linux-user/ioctls.h ++++ b/linux-user/ioctls.h +@@ -350,3 +350,36 @@ + IOCTL(VT_SETMODE, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_vt_mode))) + IOCTL(VT_RELDISP, 0, TYPE_INT) + IOCTL(VT_DISALLOCATE, 0, TYPE_INT) ++ ++ IOCTL(DM_VERSION, IOC_RW, MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_REMOVE_ALL, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_LIST_DEVICES, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_DEV_CREATE, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_DEV_REMOVE, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_DEV_RENAME, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_DEV_SUSPEND, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_DEV_STATUS, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_DEV_WAIT, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_TABLE_LOAD, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_TABLE_CLEAR, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_TABLE_DEPS, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_TABLE_STATUS, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_LIST_VERSIONS,IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_TARGET_MSG, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ IOCTL_SPECIAL(DM_DEV_SET_GEOMETRY, IOC_RW, do_ioctl_dm, ++ MK_PTR(MK_STRUCT(STRUCT_dm_ioctl))) ++ +diff --git a/linux-user/syscall.c b/linux-user/syscall.c +index 3e8e3dd..7a20af4 100644 +--- a/linux-user/syscall.c ++++ b/linux-user/syscall.c +@@ -95,6 +95,7 @@ int __clone2(int (*fn)(void *), void *child_stack_base, + #endif + #include + #include ++#include + #include "linux_loop.h" + #include "cpu-uname.h" + +@@ -3320,6 +3321,231 @@ static abi_long do_ioctl_ifconf(const IOCTLEntry *ie, uint8_t *buf_temp, + return ret; + } + ++static abi_long do_ioctl_dm(const IOCTLEntry *ie, uint8_t *buf_temp, int fd, ++ abi_long cmd, abi_long arg) ++{ ++ void *argptr; ++ struct dm_ioctl *host_dm; ++ abi_long guest_data; ++ uint32_t guest_data_size; ++ int target_size; ++ const argtype *arg_type = ie->arg_type; ++ abi_long ret; ++ void *big_buf = NULL; ++ char *host_data; ++ ++ arg_type++; ++ target_size = thunk_type_size(arg_type, 0); ++ argptr = lock_user(VERIFY_READ, arg, target_size, 1); ++ if (!argptr) { ++ ret = -TARGET_EFAULT; ++ goto out; ++ } ++ thunk_convert(buf_temp, argptr, arg_type, THUNK_HOST); ++ unlock_user(argptr, arg, 0); ++ ++ /* buf_temp is too small, so fetch things into a bigger buffer */ ++ big_buf = g_malloc0(((struct dm_ioctl*)buf_temp)->data_size * 2); ++ memcpy(big_buf, buf_temp, target_size); ++ buf_temp = big_buf; ++ host_dm = big_buf; ++ ++ guest_data = arg + host_dm->data_start; ++ if ((guest_data - arg) < 0) { ++ ret = -EINVAL; ++ goto out; ++ } ++ guest_data_size = host_dm->data_size - host_dm->data_start; ++ host_data = (char*)host_dm + host_dm->data_start; ++ ++ argptr = lock_user(VERIFY_READ, guest_data, guest_data_size, 1); ++ switch (ie->host_cmd) { ++ case DM_REMOVE_ALL: ++ case DM_LIST_DEVICES: ++ case DM_DEV_CREATE: ++ case DM_DEV_REMOVE: ++ case DM_DEV_SUSPEND: ++ case DM_DEV_STATUS: ++ case DM_DEV_WAIT: ++ case DM_TABLE_STATUS: ++ case DM_TABLE_CLEAR: ++ case DM_TABLE_DEPS: ++ case DM_LIST_VERSIONS: ++ /* no input data */ ++ break; ++ case DM_DEV_RENAME: ++ case DM_DEV_SET_GEOMETRY: ++ /* data contains only strings */ ++ memcpy(host_data, argptr, guest_data_size); ++ break; ++ case DM_TARGET_MSG: ++ memcpy(host_data, argptr, guest_data_size); ++ *(uint64_t*)host_data = tswap64(*(uint64_t*)argptr); ++ break; ++ case DM_TABLE_LOAD: ++ { ++ void *gspec = argptr; ++ void *cur_data = host_data; ++ const argtype arg_type[] = { MK_STRUCT(STRUCT_dm_target_spec) }; ++ int spec_size = thunk_type_size(arg_type, 0); ++ int i; ++ ++ for (i = 0; i < host_dm->target_count; i++) { ++ struct dm_target_spec *spec = cur_data; ++ uint32_t next; ++ int slen; ++ ++ thunk_convert(spec, gspec, arg_type, THUNK_HOST); ++ slen = strlen((char*)gspec + spec_size) + 1; ++ next = spec->next; ++ spec->next = sizeof(*spec) + slen; ++ strcpy((char*)&spec[1], gspec + spec_size); ++ gspec += next; ++ cur_data += spec->next; ++ } ++ break; ++ } ++ default: ++ ret = -TARGET_EINVAL; ++ goto out; ++ } ++ unlock_user(argptr, guest_data, 0); ++ ++ ret = get_errno(ioctl(fd, ie->host_cmd, buf_temp)); ++ if (!is_error(ret)) { ++ guest_data = arg + host_dm->data_start; ++ guest_data_size = host_dm->data_size - host_dm->data_start; ++ argptr = lock_user(VERIFY_WRITE, guest_data, guest_data_size, 0); ++ switch (ie->host_cmd) { ++ case DM_REMOVE_ALL: ++ case DM_DEV_CREATE: ++ case DM_DEV_REMOVE: ++ case DM_DEV_RENAME: ++ case DM_DEV_SUSPEND: ++ case DM_DEV_STATUS: ++ case DM_TABLE_LOAD: ++ case DM_TABLE_CLEAR: ++ case DM_TARGET_MSG: ++ case DM_DEV_SET_GEOMETRY: ++ /* no return data */ ++ break; ++ case DM_LIST_DEVICES: ++ { ++ struct dm_name_list *nl = (void*)host_dm + host_dm->data_start; ++ uint32_t remaining_data = guest_data_size; ++ void *cur_data = argptr; ++ const argtype arg_type[] = { MK_STRUCT(STRUCT_dm_name_list) }; ++ int nl_size = 12; /* can't use thunk_size due to alignment */ ++ ++ while (1) { ++ uint32_t next = nl->next; ++ if (next) { ++ nl->next = nl_size + (strlen(nl->name) + 1); ++ } ++ if (remaining_data < nl->next) { ++ host_dm->flags |= DM_BUFFER_FULL_FLAG; ++ break; ++ } ++ thunk_convert(cur_data, nl, arg_type, THUNK_TARGET); ++ strcpy(cur_data + nl_size, nl->name); ++ cur_data += nl->next; ++ remaining_data -= nl->next; ++ if (!next) { ++ break; ++ } ++ nl = (void*)nl + next; ++ } ++ break; ++ } ++ case DM_DEV_WAIT: ++ case DM_TABLE_STATUS: ++ { ++ struct dm_target_spec *spec = (void*)host_dm + host_dm->data_start; ++ void *cur_data = argptr; ++ const argtype arg_type[] = { MK_STRUCT(STRUCT_dm_target_spec) }; ++ int spec_size = thunk_type_size(arg_type, 0); ++ int i; ++ ++ for (i = 0; i < host_dm->target_count; i++) { ++ uint32_t next = spec->next; ++ int slen = strlen((char*)&spec[1]) + 1; ++ spec->next = (cur_data - argptr) + spec_size + slen; ++ if (guest_data_size < spec->next) { ++ host_dm->flags |= DM_BUFFER_FULL_FLAG; ++ break; ++ } ++ thunk_convert(cur_data, spec, arg_type, THUNK_TARGET); ++ strcpy(cur_data + spec_size, (char*)&spec[1]); ++ cur_data = argptr + spec->next; ++ spec = (void*)host_dm + host_dm->data_start + next; ++ } ++ break; ++ } ++ case DM_TABLE_DEPS: ++ { ++ void *hdata = (void*)host_dm + host_dm->data_start; ++ int count = *(uint32_t*)hdata; ++ uint64_t *hdev = hdata + 8; ++ uint64_t *gdev = argptr + 8; ++ int i; ++ ++ *(uint32_t*)argptr = tswap32(count); ++ for (i = 0; i < count; i++) { ++ *gdev = tswap64(*hdev); ++ gdev++; ++ hdev++; ++ } ++ break; ++ } ++ case DM_LIST_VERSIONS: ++ { ++ struct dm_target_versions *vers = (void*)host_dm + host_dm->data_start; ++ uint32_t remaining_data = guest_data_size; ++ void *cur_data = argptr; ++ const argtype arg_type[] = { MK_STRUCT(STRUCT_dm_target_versions) }; ++ int vers_size = thunk_type_size(arg_type, 0); ++ ++ while (1) { ++ uint32_t next = vers->next; ++ if (next) { ++ vers->next = vers_size + (strlen(vers->name) + 1); ++ } ++ if (remaining_data < vers->next) { ++ host_dm->flags |= DM_BUFFER_FULL_FLAG; ++ break; ++ } ++ thunk_convert(cur_data, vers, arg_type, THUNK_TARGET); ++ strcpy(cur_data + vers_size, vers->name); ++ cur_data += vers->next; ++ remaining_data -= vers->next; ++ if (!next) { ++ break; ++ } ++ vers = (void*)vers + next; ++ } ++ break; ++ } ++ default: ++ ret = -TARGET_EINVAL; ++ goto out; ++ } ++ unlock_user(argptr, guest_data, guest_data_size); ++ ++ argptr = lock_user(VERIFY_WRITE, arg, target_size, 0); ++ if (!argptr) { ++ ret = -TARGET_EFAULT; ++ goto out; ++ } ++ thunk_convert(argptr, buf_temp, arg_type, THUNK_TARGET); ++ unlock_user(argptr, arg, target_size); ++ } ++out: ++ if (big_buf) { ++ free(big_buf); ++ } ++ return ret; ++} ++ + static IOCTLEntry ioctl_entries[] = { + #define IOCTL(cmd, access, ...) \ + { TARGET_ ## cmd, cmd, #cmd, access, 0, { __VA_ARGS__ } }, +diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h +index f0acc72..c8b57c9 100644 +--- a/linux-user/syscall_defs.h ++++ b/linux-user/syscall_defs.h +@@ -989,6 +989,24 @@ struct target_pollfd { + #define TARGET_VT_RELDISP 0x5605 + #define TARGET_VT_DISALLOCATE 0x5608 + ++/* device mapper */ ++#define TARGET_DM_VERSION TARGET_IOWRU(0xfd, 0x00) ++#define TARGET_DM_REMOVE_ALL TARGET_IOWRU(0xfd, 0x01) ++#define TARGET_DM_LIST_DEVICES TARGET_IOWRU(0xfd, 0x02) ++#define TARGET_DM_DEV_CREATE TARGET_IOWRU(0xfd, 0x03) ++#define TARGET_DM_DEV_REMOVE TARGET_IOWRU(0xfd, 0x04) ++#define TARGET_DM_DEV_RENAME TARGET_IOWRU(0xfd, 0x05) ++#define TARGET_DM_DEV_SUSPEND TARGET_IOWRU(0xfd, 0x06) ++#define TARGET_DM_DEV_STATUS TARGET_IOWRU(0xfd, 0x07) ++#define TARGET_DM_DEV_WAIT TARGET_IOWRU(0xfd, 0x08) ++#define TARGET_DM_TABLE_LOAD TARGET_IOWRU(0xfd, 0x09) ++#define TARGET_DM_TABLE_CLEAR TARGET_IOWRU(0xfd, 0x0a) ++#define TARGET_DM_TABLE_DEPS TARGET_IOWRU(0xfd, 0x0b) ++#define TARGET_DM_TABLE_STATUS TARGET_IOWRU(0xfd, 0x0c) ++#define TARGET_DM_LIST_VERSIONS TARGET_IOWRU(0xfd, 0x0d) ++#define TARGET_DM_TARGET_MSG TARGET_IOWRU(0xfd, 0x0e) ++#define TARGET_DM_DEV_SET_GEOMETRY TARGET_IOWRU(0xfd, 0x0f) ++ + /* from asm/termbits.h */ + + #define TARGET_NCC 8 +diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h +index 8fde25c..dea520e 100644 +--- a/linux-user/syscall_types.h ++++ b/linux-user/syscall_types.h +@@ -191,6 +191,42 @@ STRUCT(vt_mode, + TYPE_SHORT, /* acqsig */ + TYPE_SHORT) /* frsig */ + ++STRUCT(dm_ioctl, ++ MK_ARRAY(TYPE_INT, 3), /* version */ ++ TYPE_INT, /* data_size */ ++ TYPE_INT, /* data_start */ ++ TYPE_INT, /* target_count*/ ++ TYPE_INT, /* open_count */ ++ TYPE_INT, /* flags */ ++ TYPE_INT, /* event_nr */ ++ TYPE_INT, /* padding */ ++ TYPE_ULONGLONG, /* dev */ ++ MK_ARRAY(TYPE_CHAR, 128), /* name */ ++ MK_ARRAY(TYPE_CHAR, 129), /* uuid */ ++ MK_ARRAY(TYPE_CHAR, 7)) /* data */ ++ ++STRUCT(dm_target_spec, ++ TYPE_ULONGLONG, /* sector_start */ ++ TYPE_ULONGLONG, /* length */ ++ TYPE_INT, /* status */ ++ TYPE_INT, /* next */ ++ MK_ARRAY(TYPE_CHAR, 16)) /* target_type */ ++ ++STRUCT(dm_target_deps, ++ TYPE_INT, /* count */ ++ TYPE_INT) /* padding */ ++ ++STRUCT(dm_name_list, ++ TYPE_ULONGLONG, /* dev */ ++ TYPE_INT) /* next */ ++ ++STRUCT(dm_target_versions, ++ TYPE_INT, /* next */ ++ MK_ARRAY(TYPE_INT, 3)) /* version*/ ++ ++STRUCT(dm_target_msg, ++ TYPE_ULONGLONG) /* sector */ ++ + STRUCT(fiemap_extent, + TYPE_ULONGLONG, /* fe_logical */ + TYPE_ULONGLONG, /* fe_physical */ +-- +1.6.0.2 + diff --git a/0047-linux-user-add-struct-old_dev_t-compat.patch b/0047-linux-user-add-struct-old_dev_t-compat.patch new file mode 100644 index 00000000..e965736a --- /dev/null +++ b/0047-linux-user-add-struct-old_dev_t-compat.patch @@ -0,0 +1,136 @@ +From 2cca53754fbaf3902399ab5a96e8790d0bd27040 Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Tue, 31 Jan 2012 19:44:41 +0100 +Subject: [PATCH] linux-user: add struct old_dev_t compat + +The compat LOOP_SET_STATUS ioctl uses struct old_dev_t in its passed +struct. That variable type is vastly different between different +architectures. Implement wrapping around it so we can use it. + +This fixes running arm kpartx on an x86_64 host for me. + +Signed-off-by: Alexander Graf +--- + linux-user/syscall_types.h | 4 ++-- + thunk.c | 28 ++++++++++++++++++++++++++++ + thunk.h | 28 ++++++++++++++++++++++++++++ + 3 files changed, 58 insertions(+), 2 deletions(-) + +diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h +index dea520e..ad2ee7e 100644 +--- a/linux-user/syscall_types.h ++++ b/linux-user/syscall_types.h +@@ -88,9 +88,9 @@ STRUCT(mixer_info, + /* loop device ioctls */ + STRUCT(loop_info, + TYPE_INT, /* lo_number */ +- TYPE_SHORT, /* lo_device */ ++ TYPE_OLDDEVT, /* lo_device */ + TYPE_ULONG, /* lo_inode */ +- TYPE_SHORT, /* lo_rdevice */ ++ TYPE_OLDDEVT, /* lo_rdevice */ + TYPE_INT, /* lo_offset */ + TYPE_INT, /* lo_encrypt_type */ + TYPE_INT, /* lo_encrypt_key_size */ +diff --git a/thunk.c b/thunk.c +index 34bc7d1..bf43985 100644 +--- a/thunk.c ++++ b/thunk.c +@@ -47,6 +47,7 @@ static inline const argtype *thunk_type_next(const argtype *type_ptr) + case TYPE_LONG: + case TYPE_ULONG: + case TYPE_PTRVOID: ++ case TYPE_OLDDEVT: + return type_ptr; + case TYPE_PTR: + return thunk_type_next_ptr(type_ptr); +@@ -209,6 +210,33 @@ const argtype *thunk_convert(void *dst, const void *src, + #else + #warning unsupported conversion + #endif ++ case TYPE_OLDDEVT: ++ { ++ uint64_t val = 0; ++ switch (thunk_type_size(type_ptr - 1, !to_host)) { ++ case 2: ++ val = *(uint16_t *)src; ++ break; ++ case 4: ++ val = *(uint32_t *)src; ++ break; ++ case 8: ++ val = *(uint64_t *)src; ++ break; ++ } ++ switch (thunk_type_size(type_ptr - 1, to_host)) { ++ case 2: ++ *(uint16_t *)dst = tswap16(val); ++ break; ++ case 4: ++ *(uint32_t *)dst = tswap32(val); ++ break; ++ case 8: ++ *(uint64_t *)dst = tswap64(val); ++ break; ++ } ++ break; ++ } + case TYPE_ARRAY: + { + int array_length, i, dst_size, src_size; +diff --git a/thunk.h b/thunk.h +index 55890f3..a49552b 100644 +--- a/thunk.h ++++ b/thunk.h +@@ -38,6 +38,7 @@ typedef enum argtype { + TYPE_ARRAY, + TYPE_STRUCT, + TYPE_INTBITFIELD, ++ TYPE_OLDDEVT, + } argtype; + + #define MK_PTR(type) TYPE_PTR, type +@@ -106,6 +107,31 @@ static inline int thunk_type_size(const argtype *type_ptr, int is_host) + return TARGET_ABI_BITS / 8; + } + break; ++ case TYPE_OLDDEVT: ++ if (is_host) { ++#if defined(HOST_X86_64) ++ return 8; ++#elif defined(HOST_ALPHA) || defined(HOST_IA64) || defined(HOST_MIPS) || \ ++ defined(HOST_PARISC) || defined(HOST_SPARC64) ++ return 4; ++#elif defined(HOST_PPC) ++ return HOST_LONG_SIZE; ++#else ++ return 2; ++#endif ++ } else { ++#if defined(TARGET_X86_64) ++ return 8; ++#elif defined(TARGET_ALPHA) || defined(TARGET_IA64) || defined(TARGET_MIPS) || \ ++ defined(TARGET_PARISC) || defined(TARGET_SPARC64) ++ return 4; ++#elif defined(TARGET_PPC) ++ return TARGET_ABI_BITS / 8; ++#else ++ return 2; ++#endif ++ } ++ break; + case TYPE_ARRAY: + size = type_ptr[1]; + return size * thunk_type_size_array(type_ptr + 2, is_host); +@@ -144,6 +170,8 @@ static inline int thunk_type_align(const argtype *type_ptr, int is_host) + return TARGET_ABI_BITS / 8; + } + break; ++ case TYPE_OLDDEVT: ++ return thunk_type_size(type_ptr, is_host); + case TYPE_ARRAY: + return thunk_type_align_array(type_ptr + 2, is_host); + case TYPE_STRUCT: +-- +1.6.0.2 + diff --git a/0048-linux-user-fix-BLK-ioctl-arguments.patch b/0048-linux-user-fix-BLK-ioctl-arguments.patch new file mode 100644 index 00000000..f2117aeb --- /dev/null +++ b/0048-linux-user-fix-BLK-ioctl-arguments.patch @@ -0,0 +1,36 @@ +From 622f0316e3afa7aa8591440f3bde189f5f09b10b Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Tue, 31 Jan 2012 20:10:20 +0100 +Subject: [PATCH] linux-user: fix BLK ioctl arguments + +Some BLK ioctls passed sizeof(x) into a macro that already did sizeof() on +the passed in argument, rendering the size information inside the ioctl be +the size of the host default integer type. + +Signed-off-by: Alexander Graf +--- + linux-user/syscall_defs.h | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h +index c8b57c9..21b054c 100644 +--- a/linux-user/syscall_defs.h ++++ b/linux-user/syscall_defs.h +@@ -832,9 +832,11 @@ struct target_pollfd { + #define TARGET_BLKSECTGET TARGET_IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */ + #define TARGET_BLKSSZGET TARGET_IO(0x12,104)/* get block device sector size */ + /* A jump here: 108-111 have been used for various private purposes. */ +-#define TARGET_BLKBSZGET TARGET_IOR(0x12,112,sizeof(int)) +-#define TARGET_BLKBSZSET TARGET_IOW(0x12,113,sizeof(int)) +-#define TARGET_BLKGETSIZE64 TARGET_IOR(0x12,114,sizeof(uint64_t)) /* return device size in bytes (u64 *arg) */ ++#define TARGET_BLKBSZGET TARGET_IOR(0x12,112,int) ++#define TARGET_BLKBSZSET TARGET_IOW(0x12,113,int) ++#define TARGET_BLKGETSIZE64 TARGET_IOR(0x12,114,abi_ulong) ++ /* return device size in bytes ++ (u64 *arg) */ + #define TARGET_FIBMAP TARGET_IO(0x00,1) /* bmap access */ + #define TARGET_FIGETBSZ TARGET_IO(0x00,2) /* get the block size used for bmap */ + #define TARGET_FS_IOC_FIEMAP TARGET_IOWR('f',11,struct fiemap) +-- +1.6.0.2 + diff --git a/0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch b/0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch new file mode 100644 index 00000000..0b291fcf --- /dev/null +++ b/0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch @@ -0,0 +1,27 @@ +From eb301a32b39d8d7992b2092819740e9313864585 Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Tue, 31 Jan 2012 20:11:37 +0100 +Subject: [PATCH] linux-user: add BLKSSZGET ioctl wrapper + +This patch adds an ioctl definition for BLKSSZGET. + +Signed-off-by: Alexander Graf +--- + linux-user/ioctls.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h +index 05b7290..f938050 100644 +--- a/linux-user/ioctls.h ++++ b/linux-user/ioctls.h +@@ -74,6 +74,7 @@ + IOCTL(BLKFLSBUF, 0, TYPE_NULL) + IOCTL(BLKRASET, 0, TYPE_INT) + IOCTL(BLKRAGET, IOC_R, MK_PTR(TYPE_LONG)) ++ IOCTL(BLKSSZGET, IOC_R, MK_PTR(TYPE_LONG)) + #ifdef FIBMAP + IOCTL(FIBMAP, IOC_W | IOC_R, MK_PTR(TYPE_LONG)) + #endif +-- +1.6.0.2 + diff --git a/qemu.changes b/qemu.changes index 94f74f99..0d053d2b 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Jan 31 21:36:02 UTC 2012 - agraf@suse.de + +- qemu-user: add fix for deadloop with ulimit constraints +- qemu-user: add device mapper and loopback ioctls, enabling kpatkx + ------------------------------------------------------------------- Tue Jan 10 16:08:35 UTC 2012 - agraf@suse.de diff --git a/qemu.spec b/qemu.spec index b98b9cfb..648b3708 100644 --- a/qemu.spec +++ b/qemu.spec @@ -70,6 +70,11 @@ Patch0041: 0041-kvm-ppc-halt-secondary-cpus-when-guest-reset.patch Patch0042: 0042-pseries-Emit-device-tree-nodes-in-reg-order.patch Patch0043: 0043-pseries-Add-a-routine-to-find-a-stable-default-vt.patch Patch0044: 0044-pseries-Populate-chosen-linux-stdout-path-in-the.patch +Patch0045: 0045-linux-user-fix-segfault-deadlock.patch +Patch0046: 0046-linux-user-implement-device-mapper-ioctls.patch +Patch0047: 0047-linux-user-add-struct-old_dev_t-compat.patch +Patch0048: 0048-linux-user-fix-BLK-ioctl-arguments.patch +Patch0049: 0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch # this is to make lint happy Source300: rpmlintrc BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -173,6 +178,11 @@ run cross architectures builds %patch0042 -p1 %patch0043 -p1 %patch0044 -p1 +%patch0045 -p1 +%patch0046 -p1 +%patch0047 -p1 +%patch0048 -p1 +%patch0049 -p1 %build # build QEMU diff --git a/update_git.sh b/update_git.sh index e674b7a1..dca697c9 100644 --- a/update_git.sh +++ b/update_git.sh @@ -29,7 +29,7 @@ else fi cd qemu-tmp git checkout $GIT_BRANCH -git format-patch -n $GIT_UPSTREAM_TAG -o .. +git format-patch $GIT_UPSTREAM_TAG -o .. cd .. rm -rf qemu-tmp From c656b432ba980f72a6195b8730487fd58d34d8f5579e96eeba6de0b6cd73737a Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 31 Jan 2012 23:51:53 +0000 Subject: [PATCH 06/15] fix invalid characters in patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=41 --- 0047-linux-user-add-struct-old_dev_t-compat.patch | 8 ++++---- 0048-linux-user-fix-BLK-ioctl-arguments.patch | 2 +- 0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/0047-linux-user-add-struct-old_dev_t-compat.patch b/0047-linux-user-add-struct-old_dev_t-compat.patch index e965736a..a7c8bf67 100644 --- a/0047-linux-user-add-struct-old_dev_t-compat.patch +++ b/0047-linux-user-add-struct-old_dev_t-compat.patch @@ -1,4 +1,4 @@ -From 2cca53754fbaf3902399ab5a96e8790d0bd27040 Mon Sep 17 00:00:00 2001 +From 79df307311156580da72aff94e73ad54c73bc4e7 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 31 Jan 2012 19:44:41 +0100 Subject: [PATCH] linux-user: add struct old_dev_t compat @@ -79,7 +79,7 @@ index 34bc7d1..bf43985 100644 { int array_length, i, dst_size, src_size; diff --git a/thunk.h b/thunk.h -index 55890f3..a49552b 100644 +index 55890f3..ed65121 100644 --- a/thunk.h +++ b/thunk.h @@ -38,6 +38,7 @@ typedef enum argtype { @@ -98,8 +98,8 @@ index 55890f3..a49552b 100644 + if (is_host) { +#if defined(HOST_X86_64) + return 8; -+#elif defined(HOST_ALPHA) || defined(HOST_IA64) || defined(HOST_MIPS) || \ -+ defined(HOST_PARISC) || defined(HOST_SPARC64) ++#elif defined(HOST_ALPHA) || defined(HOST_IA64) || defined(HOST_MIPS) || \ ++ defined(HOST_PARISC) || defined(HOST_SPARC64) + return 4; +#elif defined(HOST_PPC) + return HOST_LONG_SIZE; diff --git a/0048-linux-user-fix-BLK-ioctl-arguments.patch b/0048-linux-user-fix-BLK-ioctl-arguments.patch index f2117aeb..f10c6d0f 100644 --- a/0048-linux-user-fix-BLK-ioctl-arguments.patch +++ b/0048-linux-user-fix-BLK-ioctl-arguments.patch @@ -1,4 +1,4 @@ -From 622f0316e3afa7aa8591440f3bde189f5f09b10b Mon Sep 17 00:00:00 2001 +From 8563ceced36263dbc91af9d6941e18626bd9f488 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 31 Jan 2012 20:10:20 +0100 Subject: [PATCH] linux-user: fix BLK ioctl arguments diff --git a/0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch b/0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch index 0b291fcf..9bb161cf 100644 --- a/0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch +++ b/0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch @@ -1,4 +1,4 @@ -From eb301a32b39d8d7992b2092819740e9313864585 Mon Sep 17 00:00:00 2001 +From 3977eaddfd8aad7fcab30dab3c9bab52bd79bdeb Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Tue, 31 Jan 2012 20:11:37 +0100 Subject: [PATCH] linux-user: add BLKSSZGET ioctl wrapper From c5a1e8c9fff52d052ce25f48422c0c40340c8414b391ad7b1b9453773a0b74b1 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 2 Feb 2012 01:24:59 +0000 Subject: [PATCH 07/15] - qemu-user: add wrapper for BLKBSZGET OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=42 --- 0050-linux-user-Add-ioctl-for-BLKBSZGET.patch | 27 +++++++++++++++++++ qemu.changes | 5 ++++ qemu.spec | 2 ++ 3 files changed, 34 insertions(+) create mode 100644 0050-linux-user-Add-ioctl-for-BLKBSZGET.patch diff --git a/0050-linux-user-Add-ioctl-for-BLKBSZGET.patch b/0050-linux-user-Add-ioctl-for-BLKBSZGET.patch new file mode 100644 index 00000000..2527f747 --- /dev/null +++ b/0050-linux-user-Add-ioctl-for-BLKBSZGET.patch @@ -0,0 +1,27 @@ +From 3f2fdae967bb91a2c02020369c0af53c9cafd8b5 Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Thu, 2 Feb 2012 02:22:34 +0100 +Subject: [PATCH] linux-user: Add ioctl for BLKBSZGET + +This patch adds the ioctl wrapper definition for BLKBSZGET. + +Signed-off-by: Alexander Graf +--- + linux-user/ioctls.h | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h +index f938050..c261063 100644 +--- a/linux-user/ioctls.h ++++ b/linux-user/ioctls.h +@@ -75,6 +75,7 @@ + IOCTL(BLKRASET, 0, TYPE_INT) + IOCTL(BLKRAGET, IOC_R, MK_PTR(TYPE_LONG)) + IOCTL(BLKSSZGET, IOC_R, MK_PTR(TYPE_LONG)) ++ IOCTL(BLKBSZGET, IOC_R, MK_PTR(TYPE_INT)) + #ifdef FIBMAP + IOCTL(FIBMAP, IOC_W | IOC_R, MK_PTR(TYPE_LONG)) + #endif +-- +1.6.0.2 + diff --git a/qemu.changes b/qemu.changes index 0d053d2b..47dafa1a 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Wed Feb 1 23:48:53 UTC 2012 - agraf@suse.de + +- qemu-user: add wrapper for BLKBSZGET + ------------------------------------------------------------------- Tue Jan 31 21:36:02 UTC 2012 - agraf@suse.de diff --git a/qemu.spec b/qemu.spec index 648b3708..647eaa9d 100644 --- a/qemu.spec +++ b/qemu.spec @@ -75,6 +75,7 @@ Patch0046: 0046-linux-user-implement-device-mapper-ioctls.patch Patch0047: 0047-linux-user-add-struct-old_dev_t-compat.patch Patch0048: 0048-linux-user-fix-BLK-ioctl-arguments.patch Patch0049: 0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch +Patch0050: 0050-linux-user-Add-ioctl-for-BLKBSZGET.patch # this is to make lint happy Source300: rpmlintrc BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -183,6 +184,7 @@ run cross architectures builds %patch0047 -p1 %patch0048 -p1 %patch0049 -p1 +%patch0050 -p1 %build # build QEMU From 4688a1eeb24283f645a6c11b4b63ecf2250b6ad26d345df39c2b5a98843149fa Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 2 Feb 2012 02:18:00 +0000 Subject: [PATCH 08/15] - qemu-user: add fix for /proc/self/maps to only show mappable regions OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=43 --- ...-RESERVED_VA-into-account-for-g2h_va.patch | 34 +++++++++++++++++++ qemu.changes | 5 +++ qemu.spec | 2 ++ 3 files changed, 41 insertions(+) create mode 100644 0051-linux-user-take-RESERVED_VA-into-account-for-g2h_va.patch diff --git a/0051-linux-user-take-RESERVED_VA-into-account-for-g2h_va.patch b/0051-linux-user-take-RESERVED_VA-into-account-for-g2h_va.patch new file mode 100644 index 00000000..080e24d1 --- /dev/null +++ b/0051-linux-user-take-RESERVED_VA-into-account-for-g2h_va.patch @@ -0,0 +1,34 @@ +From 63ad8e6ca106981bc18f2d49cf0bed79a7b2cbfe Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Thu, 2 Feb 2012 03:14:18 +0100 +Subject: [PATCH] linux-user: take RESERVED_VA into account for g2h_valid() + +When running with -R (RESERVED_VA > 0) all guest virtual addresses +are within the [0..RESERVED_VA] range. Reflect this with g2h_valid() +too so we can safely check for boundaries of our guest address space. + +This is required to have the /proc/self/maps code not show maps that +aren't accessible from the guest process's point of view. + +Signed-off-by: Alexander Graf +--- + cpu-all.h | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/cpu-all.h b/cpu-all.h +index 5f47ab8..ce3e78f 100644 +--- a/cpu-all.h ++++ b/cpu-all.h +@@ -204,7 +204,8 @@ extern unsigned long reserved_va; + #else + #define h2g_valid(x) ({ \ + unsigned long __guest = (unsigned long)(x) - GUEST_BASE; \ +- __guest < (1ul << TARGET_VIRT_ADDR_SPACE_BITS); \ ++ (__guest < (1ul << TARGET_VIRT_ADDR_SPACE_BITS)) && \ ++ (!RESERVED_VA || (__guest < RESERVED_VA)); \ + }) + #endif + +-- +1.6.0.2 + diff --git a/qemu.changes b/qemu.changes index 47dafa1a..c04583ef 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Thu Feb 2 00:41:21 UTC 2012 - agraf@suse.de + +- qemu-user: add fix for /proc/self/maps to only show mappable regions + ------------------------------------------------------------------- Wed Feb 1 23:48:53 UTC 2012 - agraf@suse.de diff --git a/qemu.spec b/qemu.spec index 647eaa9d..92991686 100644 --- a/qemu.spec +++ b/qemu.spec @@ -76,6 +76,7 @@ Patch0047: 0047-linux-user-add-struct-old_dev_t-compat.patch Patch0048: 0048-linux-user-fix-BLK-ioctl-arguments.patch Patch0049: 0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch Patch0050: 0050-linux-user-Add-ioctl-for-BLKBSZGET.patch +Patch0051: 0051-linux-user-take-RESERVED_VA-into-account-for-g2h_va.patch # this is to make lint happy Source300: rpmlintrc BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -185,6 +186,7 @@ run cross architectures builds %patch0048 -p1 %patch0049 -p1 %patch0050 -p1 +%patch0051 -p1 %build # build QEMU From b293dfeca073730887c9f3e821ba79ac259ca81df00a38092662d5e3d91fba42 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 2 Feb 2012 17:07:17 +0000 Subject: [PATCH 09/15] - qemu-user: add host binary support for binfmt OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=44 --- ...ux-user-binfmt-support-host-binaries.patch | 53 +++++++++++++++++++ qemu.changes | 5 ++ qemu.spec | 2 + 3 files changed, 60 insertions(+) create mode 100644 0052-linux-user-binfmt-support-host-binaries.patch diff --git a/0052-linux-user-binfmt-support-host-binaries.patch b/0052-linux-user-binfmt-support-host-binaries.patch new file mode 100644 index 00000000..0d9c606f --- /dev/null +++ b/0052-linux-user-binfmt-support-host-binaries.patch @@ -0,0 +1,53 @@ +From 8bee58e4c32a1962ae0107fc3db6bafb4ba3f20a Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Thu, 2 Feb 2012 18:02:33 +0100 +Subject: [PATCH] linux-user: binfmt: support host binaries + +When we have a working host binary equivalent for the guest binary we're +trying to run, let's just use that instead as it will be a lot faster. + +Signed-off-by: Alexander Graf +--- + linux-user/binfmt.c | 19 +++++++++++++++++++ + 1 files changed, 19 insertions(+), 0 deletions(-) + +diff --git a/linux-user/binfmt.c b/linux-user/binfmt.c +index cd1f513..8c294da 100644 +--- a/linux-user/binfmt.c ++++ b/linux-user/binfmt.c +@@ -5,6 +5,10 @@ + #include + #include + ++#define GNEMUL_PATH "/usr/bin/gnemul/qemu-" ++#ifdef __x86_64__ ++#define ARCH_NAME "x86_64" ++#endif + + int main(int argc, char **argv, char **envp) + { +@@ -25,6 +29,21 @@ int main(int argc, char **argv, char **envp) + exit(1); + } + ++#ifdef ARCH_NAME ++ { ++ char *hostbin; ++ hostbin = malloc(strlen(argv[1] + strlen(GNEMUL_PATH) + 1)); ++ sprintf(hostbin, GNEMUL_PATH ARCH_NAME "%s", argv[1]); ++ if (!access(hostbin, X_OK)) { ++ /* ++ * We found a host binary replacement for the non-host binary. Let's ++ * use that instead! ++ */ ++ return execve(hostbin, &argv[2], envp); ++ } ++ } ++#endif ++ + binfmt[0] = '\0'; + /* Now argv[0] is the real qemu binary name */ + +-- +1.6.0.2 + diff --git a/qemu.changes b/qemu.changes index c04583ef..88442562 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Thu Feb 2 15:28:42 UTC 2012 - agraf@suse.de + +- qemu-user: add host binary support for binfmt + ------------------------------------------------------------------- Thu Feb 2 00:41:21 UTC 2012 - agraf@suse.de diff --git a/qemu.spec b/qemu.spec index 92991686..315f3a40 100644 --- a/qemu.spec +++ b/qemu.spec @@ -77,6 +77,7 @@ Patch0048: 0048-linux-user-fix-BLK-ioctl-arguments.patch Patch0049: 0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch Patch0050: 0050-linux-user-Add-ioctl-for-BLKBSZGET.patch Patch0051: 0051-linux-user-take-RESERVED_VA-into-account-for-g2h_va.patch +Patch0052: 0052-linux-user-binfmt-support-host-binaries.patch # this is to make lint happy Source300: rpmlintrc BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -187,6 +188,7 @@ run cross architectures builds %patch0049 -p1 %patch0050 -p1 %patch0051 -p1 +%patch0052 -p1 %build # build QEMU From 04e51158a3fbaac6a30280ee54ae1aeab37017c49cc9c40772526698d62755c5 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 3 Feb 2012 13:30:55 +0000 Subject: [PATCH 10/15] - qemu-user: fix previous patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=45 --- ...ux-user-binfmt-support-host-binaries.patch | 35 +++++++++++-------- qemu.changes | 5 +++ 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/0052-linux-user-binfmt-support-host-binaries.patch b/0052-linux-user-binfmt-support-host-binaries.patch index 0d9c606f..67a72967 100644 --- a/0052-linux-user-binfmt-support-host-binaries.patch +++ b/0052-linux-user-binfmt-support-host-binaries.patch @@ -1,4 +1,4 @@ -From 8bee58e4c32a1962ae0107fc3db6bafb4ba3f20a Mon Sep 17 00:00:00 2001 +From e2e0df8cf7c45e148e96d3d7c5aeb6d70fd0c966 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 2 Feb 2012 18:02:33 +0100 Subject: [PATCH] linux-user: binfmt: support host binaries @@ -8,33 +8,39 @@ trying to run, let's just use that instead as it will be a lot faster. Signed-off-by: Alexander Graf --- - linux-user/binfmt.c | 19 +++++++++++++++++++ - 1 files changed, 19 insertions(+), 0 deletions(-) + linux-user/binfmt.c | 26 ++++++++++++++++++++++++++ + 1 files changed, 26 insertions(+), 0 deletions(-) diff --git a/linux-user/binfmt.c b/linux-user/binfmt.c -index cd1f513..8c294da 100644 +index cd1f513..b9e225f 100644 --- a/linux-user/binfmt.c +++ b/linux-user/binfmt.c -@@ -5,6 +5,10 @@ +@@ -5,6 +5,9 @@ #include #include -+#define GNEMUL_PATH "/usr/bin/gnemul/qemu-" +#ifdef __x86_64__ +#define ARCH_NAME "x86_64" +#endif int main(int argc, char **argv, char **envp) { -@@ -25,6 +29,21 @@ int main(int argc, char **argv, char **envp) - exit(1); - } +@@ -28,6 +31,29 @@ int main(int argc, char **argv, char **envp) + binfmt[0] = '\0'; + /* Now argv[0] is the real qemu binary name */ +#ifdef ARCH_NAME + { + char *hostbin; -+ hostbin = malloc(strlen(argv[1] + strlen(GNEMUL_PATH) + 1)); -+ sprintf(hostbin, GNEMUL_PATH ARCH_NAME "%s", argv[1]); ++ char *guestarch; ++ ++ guestarch = strrchr(argv[0], '-') ; ++ if (!guestarch) { ++ goto skip; ++ } ++ guestarch++; ++ hostbin = malloc(strlen(argv[1] + strlen("/emul/-for-/" ARCH_NAME) + 1)); ++ sprintf(hostbin, "/emul/" ARCH_NAME "-for-%s/%s", guestarch, argv[1]); + if (!access(hostbin, X_OK)) { + /* + * We found a host binary replacement for the non-host binary. Let's @@ -43,11 +49,12 @@ index cd1f513..8c294da 100644 + return execve(hostbin, &argv[2], envp); + } + } ++skip: +#endif + - binfmt[0] = '\0'; - /* Now argv[0] is the real qemu binary name */ - + new_argv = (char **)malloc((argc + 2) * sizeof(*new_argv)); + if (argc > 3) { + memcpy(&new_argv[4], &argv[3], (argc - 3) * sizeof(*new_argv)); -- 1.6.0.2 diff --git a/qemu.changes b/qemu.changes index 88442562..24aab276 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Fri Feb 3 11:49:24 UTC 2012 - agraf@suse.de + +- qemu-user: fix previous patch + ------------------------------------------------------------------- Thu Feb 2 15:28:42 UTC 2012 - agraf@suse.de From a791f802604cd048058b0fe40eb878c361d88193d959a07ac9f787f41fe8cb7c Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 3 Feb 2012 13:34:20 +0000 Subject: [PATCH 11/15] fix OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=46 --- 0052-linux-user-binfmt-support-host-binaries.patch | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/0052-linux-user-binfmt-support-host-binaries.patch b/0052-linux-user-binfmt-support-host-binaries.patch index 67a72967..fb0d04d8 100644 --- a/0052-linux-user-binfmt-support-host-binaries.patch +++ b/0052-linux-user-binfmt-support-host-binaries.patch @@ -1,4 +1,4 @@ -From e2e0df8cf7c45e148e96d3d7c5aeb6d70fd0c966 Mon Sep 17 00:00:00 2001 +From 3ee42b48dd69ca6f4cf35a065628088bbdf7fa4f Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 2 Feb 2012 18:02:33 +0100 Subject: [PATCH] linux-user: binfmt: support host binaries @@ -8,11 +8,11 @@ trying to run, let's just use that instead as it will be a lot faster. Signed-off-by: Alexander Graf --- - linux-user/binfmt.c | 26 ++++++++++++++++++++++++++ - 1 files changed, 26 insertions(+), 0 deletions(-) + linux-user/binfmt.c | 27 +++++++++++++++++++++++++++ + 1 files changed, 27 insertions(+), 0 deletions(-) diff --git a/linux-user/binfmt.c b/linux-user/binfmt.c -index cd1f513..b9e225f 100644 +index cd1f513..74f5741 100644 --- a/linux-user/binfmt.c +++ b/linux-user/binfmt.c @@ -5,6 +5,9 @@ @@ -25,7 +25,7 @@ index cd1f513..b9e225f 100644 int main(int argc, char **argv, char **envp) { -@@ -28,6 +31,29 @@ int main(int argc, char **argv, char **envp) +@@ -28,6 +31,30 @@ int main(int argc, char **argv, char **envp) binfmt[0] = '\0'; /* Now argv[0] is the real qemu binary name */ @@ -39,7 +39,8 @@ index cd1f513..b9e225f 100644 + goto skip; + } + guestarch++; -+ hostbin = malloc(strlen(argv[1] + strlen("/emul/-for-/" ARCH_NAME) + 1)); ++ hostbin = malloc(strlen(argv[1] + strlen("/emul/-for-/" ARCH_NAME) + ++ strlen(guestarch) + 1)); + sprintf(hostbin, "/emul/" ARCH_NAME "-for-%s/%s", guestarch, argv[1]); + if (!access(hostbin, X_OK)) { + /* From 63ae614b53b3a0d128470877ffe7832ba8c172d3d37a77c1a0da78f411b93ab3 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 3 Feb 2012 13:37:47 +0000 Subject: [PATCH 12/15] simplify OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=47 --- 0052-linux-user-binfmt-support-host-binaries.patch | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/0052-linux-user-binfmt-support-host-binaries.patch b/0052-linux-user-binfmt-support-host-binaries.patch index fb0d04d8..f3b63b1f 100644 --- a/0052-linux-user-binfmt-support-host-binaries.patch +++ b/0052-linux-user-binfmt-support-host-binaries.patch @@ -1,4 +1,4 @@ -From 3ee42b48dd69ca6f4cf35a065628088bbdf7fa4f Mon Sep 17 00:00:00 2001 +From 20d9c73417a401a79a3c5ae9aa07d635a06e9519 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 2 Feb 2012 18:02:33 +0100 Subject: [PATCH] linux-user: binfmt: support host binaries @@ -8,11 +8,11 @@ trying to run, let's just use that instead as it will be a lot faster. Signed-off-by: Alexander Graf --- - linux-user/binfmt.c | 27 +++++++++++++++++++++++++++ - 1 files changed, 27 insertions(+), 0 deletions(-) + linux-user/binfmt.c | 25 +++++++++++++++++++++++++ + 1 files changed, 25 insertions(+), 0 deletions(-) diff --git a/linux-user/binfmt.c b/linux-user/binfmt.c -index cd1f513..74f5741 100644 +index cd1f513..87dc4c6 100644 --- a/linux-user/binfmt.c +++ b/linux-user/binfmt.c @@ -5,6 +5,9 @@ @@ -25,7 +25,7 @@ index cd1f513..74f5741 100644 int main(int argc, char **argv, char **envp) { -@@ -28,6 +31,30 @@ int main(int argc, char **argv, char **envp) +@@ -28,6 +31,28 @@ int main(int argc, char **argv, char **envp) binfmt[0] = '\0'; /* Now argv[0] is the real qemu binary name */ @@ -39,9 +39,7 @@ index cd1f513..74f5741 100644 + goto skip; + } + guestarch++; -+ hostbin = malloc(strlen(argv[1] + strlen("/emul/-for-/" ARCH_NAME) + -+ strlen(guestarch) + 1)); -+ sprintf(hostbin, "/emul/" ARCH_NAME "-for-%s/%s", guestarch, argv[1]); ++ asprintf(&hostbin, "/emul/" ARCH_NAME "-for-%s/%s", guestarch, argv[1]); + if (!access(hostbin, X_OK)) { + /* + * We found a host binary replacement for the non-host binary. Let's From 37ef84ed38fdbfb742bba51029233980bdd25f0ab899e6b032a0244b757cf2b4 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Mon, 6 Feb 2012 21:23:05 +0000 Subject: [PATCH 13/15] - qemu-user: fix fallocate OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=48 --- 0053-linux-user-fix-fallocate.patch | 39 +++++++++++++++++++++++++++++ qemu.changes | 5 ++++ qemu.spec | 2 ++ 3 files changed, 46 insertions(+) create mode 100644 0053-linux-user-fix-fallocate.patch diff --git a/0053-linux-user-fix-fallocate.patch b/0053-linux-user-fix-fallocate.patch new file mode 100644 index 00000000..33d9449b --- /dev/null +++ b/0053-linux-user-fix-fallocate.patch @@ -0,0 +1,39 @@ +From 3ed04f86397af1b58f67e449df558370d5125e27 Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Mon, 6 Feb 2012 21:37:07 +0100 +Subject: [PATCH] linux-user: fix fallocate + +Fallocate gets off_t parameters passed in, so we should also read them out +accordingly. + +Signed-off-by: Alexander Graf + +--- + +v1 -> v2: + + - unbreak 64-bit guests +--- + linux-user/syscall.c | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +diff --git a/linux-user/syscall.c b/linux-user/syscall.c +index 7a20af4..cbd37f6 100644 +--- a/linux-user/syscall.c ++++ b/linux-user/syscall.c +@@ -8479,7 +8479,12 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, + #endif /* CONFIG_EVENTFD */ + #if defined(CONFIG_FALLOCATE) && defined(TARGET_NR_fallocate) + case TARGET_NR_fallocate: ++#if TARGET_ABI_BITS == 32 ++ ret = get_errno(fallocate(arg1, arg2, target_offset64(arg3, arg4), ++ target_offset64(arg5, arg6))); ++#else + ret = get_errno(fallocate(arg1, arg2, arg3, arg4)); ++#endif + break; + #endif + #if defined(CONFIG_SYNC_FILE_RANGE) +-- +1.6.0.2 + diff --git a/qemu.changes b/qemu.changes index 24aab276..5d91ca19 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Mon Feb 6 19:29:33 UTC 2012 - agraf@suse.de + +- qemu-user: fix fallocate + ------------------------------------------------------------------- Fri Feb 3 11:49:24 UTC 2012 - agraf@suse.de diff --git a/qemu.spec b/qemu.spec index 315f3a40..7bcfd2eb 100644 --- a/qemu.spec +++ b/qemu.spec @@ -78,6 +78,7 @@ Patch0049: 0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch Patch0050: 0050-linux-user-Add-ioctl-for-BLKBSZGET.patch Patch0051: 0051-linux-user-take-RESERVED_VA-into-account-for-g2h_va.patch Patch0052: 0052-linux-user-binfmt-support-host-binaries.patch +Patch0053: 0053-linux-user-fix-fallocate.patch # this is to make lint happy Source300: rpmlintrc BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -189,6 +190,7 @@ run cross architectures builds %patch0050 -p1 %patch0051 -p1 %patch0052 -p1 +%patch0053 -p1 %build # build QEMU From 70f5c6846da561966cdf293d835ae6f031620b2a5cc61dd321b5644b43ba3067 Mon Sep 17 00:00:00 2001 From: Bruce Rogers Date: Mon, 6 Feb 2012 22:52:19 +0000 Subject: [PATCH 14/15] - avoid buffer overflow in e1000 device emulation (bnc#740165) OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=49 --- ...unds-packet-size-against-buffer-size.patch | 37 +++++++++++++++++++ qemu.changes | 5 +++ qemu.spec | 11 +++--- 3 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 0054-e1000-bounds-packet-size-against-buffer-size.patch diff --git a/0054-e1000-bounds-packet-size-against-buffer-size.patch b/0054-e1000-bounds-packet-size-against-buffer-size.patch new file mode 100644 index 00000000..c5ad40c8 --- /dev/null +++ b/0054-e1000-bounds-packet-size-against-buffer-size.patch @@ -0,0 +1,37 @@ +From 2335c9428ecb8066cf354bd6f2b21998941e8518 Mon Sep 17 00:00:00 2001 +From: Anthony Liguori +Date: Mon, 23 Jan 2012 07:30:43 -0600 +Subject: [PATCH 53/53] e1000: bounds packet size against buffer size + +Otherwise we can write beyond the buffer and corrupt memory. This is tracked +as CVE-2012-0029. + +Signed-off-by: Anthony Liguori +--- + hw/e1000.c | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/hw/e1000.c b/hw/e1000.c +index 19ca5bf..22a601a 100644 +--- a/hw/e1000.c ++++ b/hw/e1000.c +@@ -466,6 +466,8 @@ process_tx_desc(E1000State *s, struct e1000_tx_desc *dp) + bytes = split_size; + if (tp->size + bytes > msh) + bytes = msh - tp->size; ++ ++ bytes = MIN(sizeof(tp->data) - tp->size, bytes); + pci_dma_read(&s->dev, addr, tp->data + tp->size, bytes); + if ((sz = tp->size + bytes) >= hdr && tp->size < hdr) + memmove(tp->header, tp->data, hdr); +@@ -481,6 +483,7 @@ process_tx_desc(E1000State *s, struct e1000_tx_desc *dp) + // context descriptor TSE is not set, while data descriptor TSE is set + DBGOUT(TXERR, "TCP segmentaion Error\n"); + } else { ++ split_size = MIN(sizeof(tp->data) - tp->size, split_size); + pci_dma_read(&s->dev, addr, tp->data + tp->size, split_size); + tp->size += split_size; + } +-- +1.7.7 + diff --git a/qemu.changes b/qemu.changes index 5d91ca19..955761aa 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Mon Feb 6 22:24:27 UTC 2012 - brogers@suse.com + +- avoid buffer overflow in e1000 device emulation (bnc#740165) + ------------------------------------------------------------------- Mon Feb 6 19:29:33 UTC 2012 - agraf@suse.de diff --git a/qemu.spec b/qemu.spec index 7bcfd2eb..43bbc4b7 100644 --- a/qemu.spec +++ b/qemu.spec @@ -15,14 +15,11 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # -# norootforbuild - - Name: qemu Url: http://fabrice.bellard.free.fr/qemu/ -License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ ; MIT License (or similar) -Group: System/Emulators/PC Summary: Universal CPU emulator +License: BSD-3-Clause ; GPL-2.0+ ; LGPL-2.1+ ; MIT +Group: System/Emulators/PC Version: 1.0 Release: 0 Source: %name-%version.tar.bz2 @@ -79,6 +76,7 @@ Patch0050: 0050-linux-user-Add-ioctl-for-BLKBSZGET.patch Patch0051: 0051-linux-user-take-RESERVED_VA-into-account-for-g2h_va.patch Patch0052: 0052-linux-user-binfmt-support-host-binaries.patch Patch0053: 0053-linux-user-fix-fallocate.patch +Patch0054: 0054-e1000-bounds-packet-size-against-buffer-size.patch # this is to make lint happy Source300: rpmlintrc BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -121,8 +119,8 @@ system. It currently emulates x86, ARM, PowerPC and SPARC CPUs as well as PC and PowerMac systems. %package linux-user -Group: System/Emulators/PC Summary: Universal CPU emulator -- Linux User binaries +Group: System/Emulators/PC Provides: qemu:%_bindir/qemu-arm %description linux-user @@ -191,6 +189,7 @@ run cross architectures builds %patch0051 -p1 %patch0052 -p1 %patch0053 -p1 +%patch0054 -p1 %build # build QEMU From 214b22079ebacbcafbeff41f3ea585baf7f2bc6f1a30ade8d8edd8902809e436 Mon Sep 17 00:00:00 2001 From: Bruce Rogers Date: Tue, 7 Feb 2012 02:31:32 +0000 Subject: [PATCH 15/15] OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=50 --- qemu.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/qemu.spec b/qemu.spec index 43bbc4b7..6efea4ff 100644 --- a/qemu.spec +++ b/qemu.spec @@ -79,6 +79,7 @@ Patch0053: 0053-linux-user-fix-fallocate.patch Patch0054: 0054-e1000-bounds-packet-size-against-buffer-size.patch # this is to make lint happy Source300: rpmlintrc +Source400: update_git.sh BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: SDL-devel BuildRequires: bison