- 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
This commit is contained in:
parent
f941586e5f
commit
a799f071ba
@ -1,7 +1,7 @@
|
||||
From 4cc09e9530fb08123594be6c72dfc381df5dcddc Mon Sep 17 00:00:00 2001
|
||||
From: Peter Maydell <peter.maydell@linaro.org>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 0588bc446fd48bdb1965a6773d008c05a4ba16c1 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 67c12998086c44ebef7f92a394154d6aba446178 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 99590488e94b6b7f10ecf9a99398fd24a69a7039 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 059e727a9a4be00de949769105e9e0ea876fc64b Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 7ee3fd47eed19e4dfa26a8d0176ed3550b8d0ccf Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From ddf0d4037b10c07d9e5b168f9f96e60a1601c75b Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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.
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 4bc96d88f91417aa2bb029da2e8343456fe86631 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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 ++++++
|
||||
|
@ -1,7 +1,7 @@
|
||||
From ee5137d38109fdcb55a58be447c2c27be2b16eb0 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 5cfce885dd1b3a229cd2ea7a94dfe2445ec29417 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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.
|
||||
---
|
||||
|
@ -1,7 +1,7 @@
|
||||
From b71ee7a063f7cffdf8a2cf73fcbc1d461fbbb80e Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 146dddbec44c48417f776d54f823093b464e596c Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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 +++++++++++++++++++++++++++++++++++++++-
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 79a59902304b66e9270d11901a554e5b22042d6e Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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 ++++++++-----
|
||||
|
@ -1,7 +1,7 @@
|
||||
From e534a77a0e1f880d0f74514ac50de5de3dd4811a Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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 +-
|
||||
|
@ -1,7 +1,7 @@
|
||||
From edda5e8f49b7857379733d652d6b259488bd7b70 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 3580a90d40df10410b7268f89aae58ce05dd2bed Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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 +
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 91f12fe177833e0112cd7f7cf5781b26377667a5 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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 +-
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 434801ec78b031170eb0762302b52062e6c27d0e Mon Sep 17 00:00:00 2001
|
||||
From: Ulrich Hecht <uli@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From b41a72d0c29f97610dfdd5573b8be383823bc88f Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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)
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 33f065c217c1921759df12467954eb4638f84a72 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 8b67814c8ab4645ddd43664b1092e78ea6a743d8 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From c0ce4deb6c2ac843e337b7252fbefc190d625ca5 Mon Sep 17 00:00:00 2001
|
||||
From: Ulrich Hecht <uli@suse.de>
|
||||
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.
|
||||
---
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 6232258009a4735d7f4f53b5589e7ebd90a9885d Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 926d75fa4b4b5d95d4b0111e3e0af4d983a9d46b Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 90b3180677c5615bafc9a1f8252fbc4af1dc1ae4 Mon Sep 17 00:00:00 2001
|
||||
From: Ulrich Hecht <uli@suse.de>
|
||||
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.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 7e6479e0d45e45e888cb79759fd44d6c14be19f4 Mon Sep 17 00:00:00 2001
|
||||
From: Ulrich Hecht <uli@suse.de>
|
||||
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.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 164cf539481164978d9fa6ad69eb20cda7dc0e12 Mon Sep 17 00:00:00 2001
|
||||
From: Ulrich Hecht <uli@suse.de>
|
||||
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 <uli@suse.de>
|
||||
---
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 15d6a32b38abc6c2f8143ebccfcdd05d204f0fcd Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin <mlspirat42@gmail.com>
|
||||
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:
|
||||
>
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 47ff084e9af71b217e6f842f720d12fe9e12f2fd Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 269d801698bf7640dd325cfb4b195c4a207a07ee Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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.
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 36f403e159ecb5fcaeda5346c2df762cc904a91b Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 4fddaa4befeb3ddb1c14d9b2c882474ba4166940 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From ac233b323ad7e498c665e8c74df7e44de4a542c0 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 96ac7aa8753cb2d79121c5a579a6e93160428a40 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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.
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 872ebeaa24ed1c4b0c1596a7ad37f2bf2275efb0 Mon Sep 17 00:00:00 2001
|
||||
From: Fabio Erculiani <lxnay@sabayon.org>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 7dc45b21c5ef8a9445463f8d3754e502621192a7 Mon Sep 17 00:00:00 2001
|
||||
From: Fabio Erculiani <lxnay@sabayon.org>
|
||||
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.
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 0d04677df6aabf7404c7bbe454d7be973a773bb0 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 9ef61f2a197f9dbae104fc1d18634c29d91b4a4e Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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.
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 2b0fc5def570362c27ce526b8a08529a6ae22362 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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.
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 632e46dfa29a19ba656a5580b610fda0003cf3b0 Mon Sep 17 00:00:00 2001
|
||||
From: David Gibson <david@gibson.dropbear.id.au>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 0ae672e84c7f722aebdcca35f1573e7b6f83fddd Mon Sep 17 00:00:00 2001
|
||||
From: Liu Yu-B13201 <Yu.Liu@freescale.com>
|
||||
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.
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 7fe6b9bf81290f708919ffb6065daa16e5dbe7e3 Mon Sep 17 00:00:00 2001
|
||||
From: David Gibson <david@gibson.dropbear.id.au>
|
||||
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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 2f5760ec14a8f595c347f8a6ad2f8b6adfc20bc2 Mon Sep 17 00:00:00 2001
|
||||
From: David Gibson <david@gibson.dropbear.id.au>
|
||||
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".
|
||||
|
@ -1,7 +1,7 @@
|
||||
From cdec03dc7bb33b4ebf5bd286338e5c50be77a055 Mon Sep 17 00:00:00 2001
|
||||
From: David Gibson <david@gibson.dropbear.id.au>
|
||||
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".
|
||||
|
67
0045-linux-user-fix-segfault-deadlock.patch
Normal file
67
0045-linux-user-fix-segfault-deadlock.patch
Normal file
@ -0,0 +1,67 @@
|
||||
From 8be1f86952a0239c1d9e89e47bc25831b1804570 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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 <lxnay@sabayon.org>
|
||||
Signed-off-by: Alexander Graf <agraf@suse.de>
|
||||
---
|
||||
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 <pthread.h>
|
||||
#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
|
||||
|
380
0046-linux-user-implement-device-mapper-ioctls.patch
Normal file
380
0046-linux-user-implement-device-mapper-ioctls.patch
Normal file
@ -0,0 +1,380 @@
|
||||
From df8bec1f09754015f3b43591e1b8e9de70910c9a Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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 <agraf@suse.de>
|
||||
---
|
||||
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 <linux/fb.h>
|
||||
#include <linux/vt.h>
|
||||
+#include <linux/dm-ioctl.h>
|
||||
#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
|
||||
|
136
0047-linux-user-add-struct-old_dev_t-compat.patch
Normal file
136
0047-linux-user-add-struct-old_dev_t-compat.patch
Normal file
@ -0,0 +1,136 @@
|
||||
From 2cca53754fbaf3902399ab5a96e8790d0bd27040 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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 <agraf@suse.de>
|
||||
---
|
||||
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
|
||||
|
36
0048-linux-user-fix-BLK-ioctl-arguments.patch
Normal file
36
0048-linux-user-fix-BLK-ioctl-arguments.patch
Normal file
@ -0,0 +1,36 @@
|
||||
From 622f0316e3afa7aa8591440f3bde189f5f09b10b Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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 <agraf@suse.de>
|
||||
---
|
||||
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
|
||||
|
27
0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch
Normal file
27
0049-linux-user-add-BLKSSZGET-ioctl-wrapper.patch
Normal file
@ -0,0 +1,27 @@
|
||||
From eb301a32b39d8d7992b2092819740e9313864585 Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Graf <agraf@suse.de>
|
||||
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 <agraf@suse.de>
|
||||
---
|
||||
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
|
||||
|
@ -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
|
||||
|
||||
|
10
qemu.spec
10
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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user