summaryrefslogtreecommitdiff
path: root/app-emulation/qemu-kvm/files
diff options
context:
space:
mode:
Diffstat (limited to 'app-emulation/qemu-kvm/files')
-rw-r--r--app-emulation/qemu-kvm/files/qemu-0.11.0-mips64-user-fix.patch11
-rw-r--r--app-emulation/qemu-kvm/files/qemu-kvm2
-rw-r--r--app-emulation/qemu-kvm/files/qemu-kvm-0.12.3-fix-crash-with-sdl.patch145
-rw-r--r--app-emulation/qemu-kvm/files/qemu-kvm-0.12.3-include-madvise-defines.patch12
-rw-r--r--app-emulation/qemu-kvm/files/qemu-kvm-guest-hang-on-usb-add.patch100
-rw-r--r--app-emulation/qemu-kvm/files/qemu.patch99
6 files changed, 369 insertions, 0 deletions
diff --git a/app-emulation/qemu-kvm/files/qemu-0.11.0-mips64-user-fix.patch b/app-emulation/qemu-kvm/files/qemu-0.11.0-mips64-user-fix.patch
new file mode 100644
index 0000000..c069f89
--- /dev/null
+++ b/app-emulation/qemu-kvm/files/qemu-0.11.0-mips64-user-fix.patch
@@ -0,0 +1,11 @@
+--- qemu-0.11.0.orig/linux-user/main.c 2009-10-23 02:19:57.000000000 +0200
++++ qemu-0.11.0/linux-user/main.c 2009-10-23 02:47:09.000000000 +0200
+@@ -1469,6 +1469,8 @@
+
+ #ifdef TARGET_MIPS
+
++#define TARGET_QEMU_ESIGRETURN 255
++
+ #define MIPS_SYS(name, args) args,
+
+ static const uint8_t mips_syscall_args[] = {
diff --git a/app-emulation/qemu-kvm/files/qemu-kvm b/app-emulation/qemu-kvm/files/qemu-kvm
new file mode 100644
index 0000000..844147d
--- /dev/null
+++ b/app-emulation/qemu-kvm/files/qemu-kvm
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec /usr/bin/qemu-system-x86_64 --enable-kvm "$@"
diff --git a/app-emulation/qemu-kvm/files/qemu-kvm-0.12.3-fix-crash-with-sdl.patch b/app-emulation/qemu-kvm/files/qemu-kvm-0.12.3-fix-crash-with-sdl.patch
new file mode 100644
index 0000000..909dead
--- /dev/null
+++ b/app-emulation/qemu-kvm/files/qemu-kvm-0.12.3-fix-crash-with-sdl.patch
@@ -0,0 +1,145 @@
+From ff5414990645653bf43bf64adfc1ca77ffb9edcb Mon Sep 17 00:00:00 2001
+From: malc <av1474@comtv.ru>
+Date: Sun, 17 Jan 2010 00:25:29 +0300
+Subject: [PATCH] Revert "sdlaudio: make it suck less"
+
+This reverts commit 4839abe78fd466a3cf06faa7c362154afd5404f1.
+
+The commit was badly broken, Gentoo has sdl as the default driver,
+consequently 5 gentoo users have hit the breakage and were kind enough
+to report, so thank you:
+
+Claes Gyllenswrd
+vekin
+Chris
+
+But above all thanks to Toralf Foerster who actually provied enough
+information to pinpoint the breakage to sdlaudio.
+
+http://bugs.gentoo.org/show_bug.cgi?id=294269
+---
+ audio/sdlaudio.c | 80 +++++++++++++++++++++++++++++++++--------------------
+ 1 files changed, 50 insertions(+), 30 deletions(-)
+
+diff --git a/audio/sdlaudio.c b/audio/sdlaudio.c
+index aa39c33..8e7e5cb 100644
+--- a/audio/sdlaudio.c
++++ b/audio/sdlaudio.c
+@@ -41,8 +41,8 @@
+ typedef struct SDLVoiceOut {
+ HWVoiceOut hw;
+ int live;
++ int rpos;
+ int decr;
+- int pending;
+ } SDLVoiceOut;
+
+ static struct {
+@@ -225,10 +225,6 @@ static void sdl_callback (void *opaque, Uint8 *buf, int len)
+ HWVoiceOut *hw = &sdl->hw;
+ int samples = len >> hw->info.shift;
+
+- if (sdl_lock (s, "sdl_callback")) {
+- return;
+- }
+-
+ if (s->exit) {
+ return;
+ }
+@@ -236,34 +232,49 @@ static void sdl_callback (void *opaque, Uint8 *buf, int len)
+ while (samples) {
+ int to_mix, decr;
+
+- while (!sdl->pending) {
+- if (sdl_unlock (s, "sdl_callback")) {
+- return;
+- }
+-
+- sdl_wait (s, "sdl_callback");
+- if (s->exit) {
+- return;
+- }
+-
+- if (sdl_lock (s, "sdl_callback")) {
+- return;
+- }
+- sdl->pending += sdl->live;
+- sdl->live = 0;
++ /* dolog ("in callback samples=%d\n", samples); */
++ sdl_wait (s, "sdl_callback");
++ if (s->exit) {
++ return;
++ }
++
++ if (sdl_lock (s, "sdl_callback")) {
++ return;
++ }
++
++ if (audio_bug (AUDIO_FUNC, sdl->live < 0 || sdl->live > hw->samples)) {
++ dolog ("sdl->live=%d hw->samples=%d\n",
++ sdl->live, hw->samples);
++ return;
++ }
++
++ if (!sdl->live) {
++ goto again;
+ }
+
+- to_mix = audio_MIN (samples, sdl->pending);
+- decr = audio_pcm_hw_clip_out (hw, buf, to_mix, 0);
+- buf += decr << hw->info.shift;
++ /* dolog ("in callback live=%d\n", live); */
++ to_mix = audio_MIN (samples, sdl->live);
++ decr = to_mix;
++ while (to_mix) {
++ int chunk = audio_MIN (to_mix, hw->samples - hw->rpos);
++ struct st_sample *src = hw->mix_buf + hw->rpos;
++
++ /* dolog ("in callback to_mix %d, chunk %d\n", to_mix, chunk); */
++ hw->clip (buf, src, chunk);
++ sdl->rpos = (sdl->rpos + chunk) % hw->samples;
++ to_mix -= chunk;
++ buf += chunk << hw->info.shift;
++ }
+ samples -= decr;
++ sdl->live -= decr;
+ sdl->decr += decr;
+- sdl->pending -= decr;
+- }
+
+- if (sdl_unlock (s, "sdl_callback")) {
+- return;
++ again:
++ if (sdl_unlock (s, "sdl_callback")) {
++ return;
++ }
+ }
++ /* dolog ("done len=%d\n", len); */
+ }
+
+ static int sdl_write_out (SWVoiceOut *sw, void *buf, int len)
+@@ -281,9 +292,18 @@ static int sdl_run_out (HWVoiceOut *hw, int live)
+ return 0;
+ }
+
+- sdl->live = live;
+- decr = sdl->decr;
+- sdl->decr = 0;
++ if (sdl->decr > live) {
++ ldebug ("sdl->decr %d live %d sdl->live %d\n",
++ sdl->decr,
++ live,
++ sdl->live);
++ }
++
++ decr = audio_MIN (sdl->decr, live);
++ sdl->decr -= decr;
++
++ sdl->live = live - decr;
++ hw->rpos = sdl->rpos;
+
+ if (sdl->live > 0) {
+ sdl_unlock_and_post (s, "sdl_run_out");
+--
+1.7.0.4
+
diff --git a/app-emulation/qemu-kvm/files/qemu-kvm-0.12.3-include-madvise-defines.patch b/app-emulation/qemu-kvm/files/qemu-kvm-0.12.3-include-madvise-defines.patch
new file mode 100644
index 0000000..c50c717
--- /dev/null
+++ b/app-emulation/qemu-kvm/files/qemu-kvm-0.12.3-include-madvise-defines.patch
@@ -0,0 +1,12 @@
+--- exec.c 2010-02-26 03:34:00.000000000 +0100
++++ exec.c.new 2010-04-03 15:31:53.000000000 +0200
+@@ -22,6 +22,9 @@
+ #else
+ #include <sys/types.h>
+ #include <sys/mman.h>
++#ifndef MADV_MERGEABLE
++#include <asm/mman.h>
++#endif
+ #endif
+ #include <stdlib.h>
+ #include <stdio.h>
diff --git a/app-emulation/qemu-kvm/files/qemu-kvm-guest-hang-on-usb-add.patch b/app-emulation/qemu-kvm/files/qemu-kvm-guest-hang-on-usb-add.patch
new file mode 100644
index 0000000..3f2abef
--- /dev/null
+++ b/app-emulation/qemu-kvm/files/qemu-kvm-guest-hang-on-usb-add.patch
@@ -0,0 +1,100 @@
+From 485b75728884a052b74d5458199ad45f0acbf190 Mon Sep 17 00:00:00 2001
+From: Timothy Jones <one.timothy.jones@gmail.com>
+Date: Mon, 28 Jun 2010 10:38:18 -0400
+Subject: [PATCH v2] Guest OS hangs on usb_add
+
+This is a small patch to sligtly "intelligentify" usb device and
+config descriptor parsing and to handle bug with certain usb
+device (URC MX-950) reporting device desriptor length as 0x18
+instead of 18 with added vendor_id/product_id check
+---
+ hw/usb.h | 5 +++++
+ usb-linux.c | 37 ++++++++++++++++++++++---------------
+ 2 files changed, 27 insertions(+), 15 deletions(-)
+
+diff --git a/hw/usb.h b/hw/usb.h
+index 00d2802..5c3528f 100644
+--- a/hw/usb.h
++++ b/hw/usb.h
+@@ -117,6 +117,11 @@
+ #define USB_DT_INTERFACE 0x04
+ #define USB_DT_ENDPOINT 0x05
+
++#define USB_DT_DEVICE_LEN 18
++#define USB_DT_CONFIG_LEN 9
++#define USB_DT_INTERFACE_LEN 9
++#define USB_DT_ENDPOINT_LEN 7
++
+ #define USB_ENDPOINT_XFER_CONTROL 0
+ #define USB_ENDPOINT_XFER_ISOC 1
+ #define USB_ENDPOINT_XFER_BULK 2
+diff --git a/usb-linux.c b/usb-linux.c
+index 88273ff..2ac6562 100644
+--- a/usb-linux.c
++++ b/usb-linux.c
+@@ -288,7 +288,7 @@ static void async_cancel(USBPacket *unused, void *opaque)
+
+ static int usb_host_claim_interfaces(USBHostDevice *dev, int configuration)
+ {
+- int dev_descr_len, config_descr_len;
++ int dev_descr_len, config_descr_total_len;
+ int interface, nb_interfaces;
+ int ret, i;
+
+@@ -297,32 +297,39 @@ static int usb_host_claim_interfaces(USBHostDevice *dev, int configuration)
+
+ DPRINTF("husb: claiming interfaces. config %d\n", configuration);
+
+- i = 0;
+ dev_descr_len = dev->descr[0];
+- if (dev_descr_len > dev->descr_len) {
++ if (dev_descr_len == 0x18 && dev->descr[ 8] == 0x47 && dev->descr[ 9] == 0x46
++ && dev->descr[10] == 0x00 && dev->descr[11] == 0x30)
++ dev_descr_len = USB_DT_DEVICE_LEN; /* for buggy MX-950 remote reporting len in hex */
++
++ if (dev_descr_len > dev->descr_len || dev_descr_len < USB_DT_DEVICE_LEN || dev->descr[1] != USB_DT_DEVICE) {
++ fprintf(stderr, "husb: invalid device descriptor\n");
+ goto fail;
+ }
+
+- i += dev_descr_len;
+- while (i < dev->descr_len) {
++ for (i = dev_descr_len; i < dev->descr_len; ) {
+ DPRINTF("husb: i is %d, descr_len is %d, dl %d, dt %d\n",
+ i, dev->descr_len,
+ dev->descr[i], dev->descr[i+1]);
+
+- if (dev->descr[i+1] != USB_DT_CONFIG) {
+- i += dev->descr[i];
+- continue;
++ if (dev->descr[i] < 2) {
++ fprintf(stderr, "husb: invalid descriptor\n");
++ goto fail;
+ }
+- config_descr_len = dev->descr[i];
++ if (dev->descr[i+1] == USB_DT_CONFIG) {
++ config_descr_total_len = dev->descr[i+2] + (dev->descr[i+3] << 8);
+
+- printf("husb: config #%d need %d\n", dev->descr[i + 5], configuration);
++ printf("husb: config #%d need %d\n", dev->descr[i + 5], configuration);
+
+- if (configuration < 0 || configuration == dev->descr[i + 5]) {
+- configuration = dev->descr[i + 5];
+- break;
+- }
++ if (configuration < 0 || configuration == dev->descr[i + 5]) {
++ configuration = dev->descr[i + 5];
++ break;
++ }
+
+- i += config_descr_len;
++ i += config_descr_total_len;
++ }
++ else
++ i += dev->descr[i];
+ }
+
+ if (i >= dev->descr_len) {
+--
+1.7.1
+
diff --git a/app-emulation/qemu-kvm/files/qemu.patch b/app-emulation/qemu-kvm/files/qemu.patch
new file mode 100644
index 0000000..3180fa5
--- /dev/null
+++ b/app-emulation/qemu-kvm/files/qemu.patch
@@ -0,0 +1,99 @@
+diff --git a/error.h b/error.h
+index 6361f40..d55e207 100644
+--- a/error.h
++++ b/error.h
+@@ -9,8 +9,8 @@
+ * This work is licensed under the terms of the GNU LGPL, version 2. See
+ * the COPYING.LIB file in the top-level directory.
+ */
+-#ifndef ERROR_H
+-#define ERROR_H
++#ifndef ERROR_QAPI_H
++#define ERROR_QAPI_H
+
+ #include "compiler.h"
+ #include <stdbool.h>
+diff --git a/hw/qxl.c b/hw/qxl.c
+index db7ae7a..c91a398 100644
+--- a/hw/qxl.c
++++ b/hw/qxl.c
+@@ -1189,7 +1189,7 @@ async_common:
+ }
+ d->current_async = orig_io_port;
+ qemu_mutex_unlock(&d->async_lock);
+- dprint(d, 2, "start async %d (%d)\n", io_port, val);
++ dprint(d, 2, "start async %d (%d)\n", (int)io_port, (int)val);
+ break;
+ default:
+ break;
+@@ -1306,7 +1306,7 @@ async_common:
+ }
+ case QXL_IO_FLUSH_SURFACES_ASYNC:
+ dprint(d, 1, "QXL_IO_FLUSH_SURFACES_ASYNC (%d) (%s, s#=%d, res#=%d)\n",
+- val, qxl_mode_to_string(d->mode), d->guest_surfaces.count,
++ (int)val, qxl_mode_to_string(d->mode), d->guest_surfaces.count,
+ d->num_free_res);
+ qxl_spice_flush_surfaces_async(d);
+ break;
+diff --git a/qapi/qapi-types-core.h b/qapi/qapi-types-core.h
+index a79bc2b..64d85fc 100644
+--- a/qapi/qapi-types-core.h
++++ b/qapi/qapi-types-core.h
+@@ -15,6 +15,6 @@
+ #define QAPI_TYPES_CORE_H
+
+ #include "qemu-common.h"
+-#include "error.h"
++#include "../error.h"
+
+ #endif
+diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
+index 5584693..d024120 100644
+--- a/qapi/qmp-dispatch.c
++++ b/qapi/qmp-dispatch.c
+@@ -10,7 +10,7 @@
+ * See the COPYING.LIB file in the top-level directory.
+ *
+ */
+-
++#include "../error.h"
+ #include "qemu-objects.h"
+ #include "qapi/qmp-core.h"
+ #include "json-parser.h"
+diff --git a/qapi/qmp-registry.c b/qapi/qmp-registry.c
+index 3fe8866..2640437 100644
+--- a/qapi/qmp-registry.c
++++ b/qapi/qmp-registry.c
+@@ -11,7 +11,7 @@
+ * See the COPYING.LIB file in the top-level directory.
+ *
+ */
+-
++#include "../error.h"
+ #include "qapi/qmp-core.h"
+
+ static QTAILQ_HEAD(, QmpCommand) qmp_commands =
+diff --git a/qemu-objects.h b/qemu-objects.h
+index c53fbaa..3fbece1 100644
+--- a/qemu-objects.h
++++ b/qemu-objects.h
+@@ -13,6 +13,7 @@
+ #ifndef QEMU_OBJECTS_H
+ #define QEMU_OBJECTS_H
+
++#include "error.h"
+ #include "qobject.h"
+ #include "qint.h"
+ #include "qfloat.h"
+diff --git a/qga/guest-agent-core.h b/qga/guest-agent-core.h
+index e42b91d..b81eaba 100644
+--- a/qga/guest-agent-core.h
++++ b/qga/guest-agent-core.h
+@@ -10,6 +10,7 @@
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
++#include "../error.h"
+ #include "qapi/qmp-core.h"
+ #include "qemu-common.h"
+