Compare commits

...

No commits in common. "factory" and "factory" have entirely different histories.

94 changed files with 5506 additions and 11562 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

View File

@ -1,35 +0,0 @@
{
"description": "SeaBIOS",
"interface-types": [
"bios"
],
"mapping": {
"device": "memory",
"filename": "/usr/share/qemu/bios-256k.bin"
},
"targets": [
{
"architecture": "i386",
"machines": [
"pc-i440fx-*",
"pc-q35-*"
]
},
{
"architecture": "x86_64",
"machines": [
"pc-i440fx-*",
"pc-q35-*"
]
}
],
"features": [
"acpi-s3",
"acpi-s4"
],
"tags": [
"CONFIG_QEMU=y",
"CONFIG_ROM_SIZE=256",
"CONFIG_ATA_DMA=n"
]
}

View File

@ -1,47 +0,0 @@
{
"description": "SeaBIOS",
"interface-types": [
"bios"
],
"mapping": {
"device": "memory",
"filename": "/usr/share/qemu/bios.bin"
},
"targets": [
{
"architecture": "i386",
"machines": [
"pc-i440fx-*",
"pc-q35-*"
]
},
{
"architecture": "x86_64",
"machines": [
"pc-i440fx-*",
"pc-q35-*"
]
}
],
"features": [
"acpi-s3",
"acpi-s4"
],
"tags": [
"CONFIG_QEMU=y",
"CONFIG_ROM_SIZE=128",
"CONFIG_ATA_DMA=n",
"CONFIG_BOOTSPLASH=n",
"CONFIG_XEN=n",
"CONFIG_USB_OHCI=n",
"CONFIG_USB_XHCI=n",
"CONFIG_USB_UAS=n",
"CONFIG_SDCARD=n",
"CONFIG_TCGBIOS=n",
"CONFIG_MPT_SCSI=n",
"CONFIG_PVSCSI=n",
"CONFIG_NVME=n",
"CONFIG_USE_SMM=n",
"CONFIG_VGAHOOKS=n"
]
}

View File

@ -1 +0,0 @@
KERNEL=="kvm", MODE="0666", GROUP="kvm"

View File

@ -1 +0,0 @@
SUBSYSTEM=="virtio-ports", ATTR{name}=="org.qemu.guest_agent.0", TAG+="systemd", ENV{SYSTEMD_WANTS}+="qemu-ga@virtio\\x2dports-org.qemu.guest_agent.0.service"

View File

@ -1,39 +0,0 @@
From: Alexander Graf <agraf@suse.de>
Date: Wed, 14 Jan 2015 01:32:11 +0100
Subject: AIO: Reduce number of threads for 32bit hosts
On hosts with limited virtual address space (32bit pointers), we can very
easily run out of virtual memory with big thread pools.
Instead, we should limit ourselves to small pools to keep memory footprint
low on those systems.
This patch fixes random VM stalls like
(process:25114): GLib-ERROR **: gmem.c:103: failed to allocate 1048576 bytes
on 32bit ARM systems for me.
Signed-off-by: Alexander Graf <agraf@suse.de>
---
util/thread-pool.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/util/thread-pool.c b/util/thread-pool.c
index d763cea505b68575af8e1b39cd95..785487b8767d96ca76c643f1851f 100644
--- a/util/thread-pool.c
+++ b/util/thread-pool.c
@@ -306,7 +306,12 @@ static void thread_pool_init_one(ThreadPool *pool, AioContext *ctx)
qemu_mutex_init(&pool->lock);
qemu_cond_init(&pool->worker_stopped);
qemu_sem_init(&pool->sem, 0);
- pool->max_threads = 64;
+ if (sizeof(pool) == 4) {
+ /* 32bit systems run out of virtual memory quickly */
+ pool->max_threads = 4;
+ } else {
+ pool->max_threads = 64;
+ }
pool->new_thread_bh = aio_bh_new(ctx, spawn_thread_bh_fn, pool);
QLIST_INIT(&pool->head);

View File

@ -1,29 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Wed, 23 Jan 2019 20:23:01 -0700
Subject: Conditionalize ui bitmap installation better
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
Makefile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Makefile b/Makefile
index e7116289550f169a65f8aecfeccf..3da7feaf0d9e9b3f1222efb8823b 100644
--- a/Makefile
+++ b/Makefile
@@ -970,6 +970,7 @@ ifneq ($(DESCS),)
"$(DESTDIR)$(qemu_datadir)/firmware/$$x"; \
done
endif
+ifneq ($(or $(CONFIG_GTK),$(CONFIG_SDL)),)
for s in $(ICON_SIZES); do \
mkdir -p "$(DESTDIR)$(qemu_icondir)/hicolor/$${s}/apps"; \
$(INSTALL_DATA) $(SRC_PATH)/ui/icons/qemu_$${s}.png \
@@ -984,6 +985,7 @@ endif
mkdir -p "$(DESTDIR)$(qemu_desktopdir)"
$(INSTALL_DATA) $(SRC_PATH)/ui/qemu.desktop \
"$(DESTDIR)$(qemu_desktopdir)/qemu.desktop"
+endif
ifdef CONFIG_GTK
$(MAKE) -C po $@
endif

View File

@ -1,67 +0,0 @@
From: Michael Brown <mcb30@ipxe.org>
Date: Mon, 22 Jul 2019 14:51:28 +0100
Subject: Do not apply WORKAROUND_CFLAGS for host compiler
Git-commit: a4f8c6e31f6c62522cfc633bbbffa81b22f9d6f3
Include-If: %ifarch aarch64
The WORKAROUND_CFLAGS list is constructed based on running tests on
the target compiler, and the results may not be valid for the host
compiler.
The only relevant workaround required for the host compiler is
-Wno-stringop-truncation, which is needed to avoid a spurious compiler
warning for a totally correct usage of strncpy() in util/elf2efi.c.
Duplicating the workaround tests for the host compiler is messy, as is
conditionally applying __attribute__((nonstring)). Fix instead by
disapplying WORKAROUND_CFLAGS for the host compiler, and using
memcpy() with an explicitly calculated length instead of strncpy() in
util/elf2efi.c.
Reported-by: Ignat Korchagin <ignat@cloudflare.com>
Reported-by: Christopher Clark <christopher.w.clark@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
src/Makefile.housekeeping | 2 +-
src/util/elf2efi.c | 6 +++++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/roms/ipxe/src/Makefile.housekeeping b/roms/ipxe/src/Makefile.housekeeping
index d94eb1454c9168545c933ec6e900..9c33cc08c4db1bbd0f9966924fce 100644
--- a/roms/ipxe/src/Makefile.housekeeping
+++ b/roms/ipxe/src/Makefile.housekeeping
@@ -455,7 +455,7 @@ endif
CFLAGS += $(WORKAROUND_CFLAGS) $(EXTRA_CFLAGS)
ASFLAGS += $(WORKAROUND_ASFLAGS) $(EXTRA_ASFLAGS)
LDFLAGS += $(WORKAROUND_LDFLAGS) $(EXTRA_LDFLAGS)
-HOST_CFLAGS += $(WORKAROUND_CFLAGS) -O2 -g
+HOST_CFLAGS += -O2 -g
# Inhibit -Werror if NO_WERROR is specified on make command line
#
diff --git a/roms/ipxe/src/util/elf2efi.c b/roms/ipxe/src/util/elf2efi.c
index 2c5b9df8aae853bfce4d5d3bae89..bcd53c9afda7880d42ec80c07f17 100644
--- a/roms/ipxe/src/util/elf2efi.c
+++ b/roms/ipxe/src/util/elf2efi.c
@@ -458,6 +458,7 @@ static struct pe_section * process_section ( struct elf_file *elf,
struct pe_header *pe_header ) {
struct pe_section *new;
const char *name;
+ size_t name_len;
size_t section_memsz;
size_t section_filesz;
unsigned long code_start;
@@ -494,7 +495,10 @@ static struct pe_section * process_section ( struct elf_file *elf,
memset ( new, 0, sizeof ( *new ) + section_filesz );
/* Fill in section header details */
- strncpy ( ( char * ) new->hdr.Name, name, sizeof ( new->hdr.Name ) );
+ name_len = strlen ( name );
+ if ( name_len > sizeof ( new->hdr.Name ) )
+ name_len = sizeof ( new->hdr.Name );
+ memcpy ( new->hdr.Name, name, name_len );
new->hdr.Misc.VirtualSize = section_memsz;
new->hdr.VirtualAddress = shdr->sh_addr;
new->hdr.SizeOfRawData = section_filesz;

View File

@ -1,30 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Fri, 1 Nov 2019 19:41:52 -0600
Subject: Enable cross compile prefix for C compiler invocation
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
Makefile | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/roms/qboot/Makefile b/roms/qboot/Makefile
index adbf1b319e4a7bee78e2f95c5e51..cdde20fc37b13a1877668cd20e2f 100644
--- a/roms/qboot/Makefile
+++ b/roms/qboot/Makefile
@@ -1,3 +1,4 @@
+CROSS_COMPILE ?=
obj-y = code16.o entry.o main.o string.o printf.o cstart.o fw_cfg.o
obj-y += linuxboot.o malloc.o tables.o hwsetup.o pci.o code32seg.o
obj-y += mptable.o
@@ -25,9 +26,9 @@ autodepend-flags = -MMD -MF .deps/cc-$(patsubst %/,%,$(dir $*))-$(notdir $*).d
.PRECIOUS: %.o
%.o: %.c
- $(CC) $(CFLAGS) $(BIOS_CFLAGS) $($@-cflags) -c -s $< -o $@
+ $(CROSS_COMPILE)$(CC) $(CFLAGS) $(BIOS_CFLAGS) $($@-cflags) -c -s $< -o $@
%.o: %.S
- $(CC) $(CFLAGS) $(BIOS_CFLAGS) -c -s $< -o $@
+ $(CROSS_COMPILE)$(CC) $(CFLAGS) $(BIOS_CFLAGS) -c -s $< -o $@
bios.bin.elf: $(obj-y) flat.lds
$(LD) -T flat.lds -o bios.bin.elf $(obj-y)

View File

@ -1,35 +0,0 @@
From: Valentine Barshak <gvaxon@gmail.com>
Date: Sun, 9 Jun 2019 13:30:11 +0300
Subject: Fix "'%s' directive argument is null" error
Git-commit: 412acd7854de10e7194f362a6b1a3257a17974f7
References: bsc#1121464
Use '%p' directive, and print handle's address if the address is null
and the handle doesn't have a name. This fixes the following
compilation error:
interface/efi/efi_debug.c:334:3: error: '%s' directive
argument is null [-Werror=format-overflow=]
Signed-off-by: Valentine Barshak <gvaxon@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
src/interface/efi/efi_debug.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/roms/ipxe/src/interface/efi/efi_debug.c b/roms/ipxe/src/interface/efi/efi_debug.c
index 8ea0a822d044caca088c64ca2407..de9b1af5579cfddba1b55788b7b6 100644
--- a/roms/ipxe/src/interface/efi/efi_debug.c
+++ b/roms/ipxe/src/interface/efi/efi_debug.c
@@ -331,8 +331,7 @@ void dbg_efi_protocols ( EFI_HANDLE handle ) {
/* Sanity check */
if ( ! handle ) {
- printf ( "HANDLE %s could not retrieve protocols\n",
- efi_handle_name ( handle ) );
+ printf ( "HANDLE %p could not retrieve protocols\n", handle );
return;
}

View File

@ -1,131 +0,0 @@
From: Alexander Graf <agraf@suse.de>
Date: Thu, 1 Apr 2010 17:36:23 +0200
Subject: Make char muxer more robust wrt small FIFOs
Virtio-Console can only process one character at a time. Using it on S390
gave me strange "lags" where I got the character I pressed before when
pressing one. So I typed in "abc" and only received "a", then pressed "d"
but the guest received "b" and so on.
While the stdio driver calls a poll function that just processes on its
queue in case virtio-console can't take multiple characters at once, the
muxer does not have such callbacks, so it can't empty its queue.
To work around that limitation, I introduced a new timer that only gets
active when the guest can not receive any more characters. In that case
it polls again after a while to check if the guest is now receiving input.
This patch fixes input when using -nographic on s390 for me.
[AF: Rebased for v2.7.0-rc2]
[BR: minor edits to pass qemu's checkpatch script]
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
chardev/char-fe.c | 1 +
chardev/char-mux.c | 16 ++++++++++++++++
chardev/char.c | 1 +
chardev/chardev-internal.h | 3 +++
chardev/chardev-sysemu.c | 1 +
tests/test-char.c | 1 +
6 files changed, 23 insertions(+)
diff --git a/chardev/char-fe.c b/chardev/char-fe.c
index 474715c5a9257ae9e9e286d2e02d..eeb1b3e0b548027e2bcda0c272d5 100644
--- a/chardev/char-fe.c
+++ b/chardev/char-fe.c
@@ -21,6 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
+#define HW_POISON_H /* avoid poison since we patch against rules it "enforces" */
#include "qemu/osdep.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
diff --git a/chardev/char-mux.c b/chardev/char-mux.c
index 6f980bb83647da13c62f514391b3..094bc6703a3febdf5fefb7c0024f 100644
--- a/chardev/char-mux.c
+++ b/chardev/char-mux.c
@@ -22,6 +22,7 @@
* THE SOFTWARE.
*/
+#define HW_POISON_H /* avoid poison since we patch against rules it "enforces" */
#include "qemu/osdep.h"
#include "qapi/error.h"
#include "qemu/module.h"
@@ -191,6 +192,17 @@ static void mux_chr_accept_input(Chardev *chr)
be->chr_read(be->opaque,
&d->buffer[m][d->cons[m]++ & MUX_BUFFER_MASK], 1);
}
+
+#if defined(TARGET_S390X)
+ /*
+ * We're still not able to sync producer and consumer, so let's wait a bit
+ * and try again by then.
+ */
+ if (d->prod[m] != d->cons[m]) {
+ qemu_mod_timer(d->accept_timer, qemu_get_clock_ns(vm_clock)
+ + (int64_t)100000);
+ }
+#endif
}
static int mux_chr_can_read(void *opaque)
@@ -325,6 +337,10 @@ static void qemu_chr_open_mux(Chardev *chr,
}
d->focus = -1;
+#if defined(TARGET_S390X)
+ d->accept_timer = qemu_new_timer_ns(vm_clock,
+ (QEMUTimerCB *)mux_chr_accept_input, chr);
+#endif
/* only default to opened state if we've realized the initial
* set of muxes
*/
diff --git a/chardev/char.c b/chardev/char.c
index 77e7ec814f2196d8352e2f3ec75e..bcdec537e8753025b715e75214e6 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -22,6 +22,7 @@
* THE SOFTWARE.
*/
+#define HW_POISON_H /* avoid poison since we patch against rules it "enforces" */
#include "qemu/osdep.h"
#include "qemu/cutils.h"
#include "monitor/monitor.h"
diff --git a/chardev/chardev-internal.h b/chardev/chardev-internal.h
index f4d0429763bc28438e6cd6e7de1a..fc6cd39eb2d98af15aec25642438 100644
--- a/chardev/chardev-internal.h
+++ b/chardev/chardev-internal.h
@@ -36,6 +36,9 @@ typedef struct MuxChardev {
Chardev parent;
CharBackend *backends[MAX_MUX];
CharBackend chr;
+#if defined(TARGET_S390X)
+ QEMUTimer *accept_timer;
+#endif
int focus;
int mux_cnt;
int term_got_escape;
diff --git a/chardev/chardev-sysemu.c b/chardev/chardev-sysemu.c
index eecdc615ee1c6c64060452ac837d..c052f101e89c193af1effa9c6fa5 100644
--- a/chardev/chardev-sysemu.c
+++ b/chardev/chardev-sysemu.c
@@ -22,6 +22,7 @@
* THE SOFTWARE.
*/
+#define HW_POISON_H /* avoid poison since we patch against rules it "enforces" */
#include "qemu/osdep.h"
#include "sysemu/sysemu.h"
#include "chardev/char.h"
diff --git a/tests/test-char.c b/tests/test-char.c
index d35cc839bc60db1884c3f265629b..51635ba059ef2302608459e84a65 100644
--- a/tests/test-char.c
+++ b/tests/test-char.c
@@ -1,3 +1,4 @@
+#define HW_POISON_H /* avoid poison since we patch against rules it "enforces" */
#include "qemu/osdep.h"
#include <glib/gstdio.h>

View File

@ -1,34 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Thu, 25 Jan 2018 14:16:10 -0700
Subject: Make installed scripts explicitly python3
References: bsc#1077564
We want to explicitly reference python3 in the scripts we install.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
scripts/analyze-migration.py | 2 +-
scripts/vmstate-static-checker.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/analyze-migration.py b/scripts/analyze-migration.py
index 95838cbff3f00f1ba097ee032032..d5f6c67bf1f7305461bb536f57b1 100755
--- a/scripts/analyze-migration.py
+++ b/scripts/analyze-migration.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/python3
#
# Migration Stream Analyzer
#
diff --git a/scripts/vmstate-static-checker.py b/scripts/vmstate-static-checker.py
index 539ead62b498202fc40b42bff05f..0b7d30eef392cd659dbd722d8bdc 100755
--- a/scripts/vmstate-static-checker.py
+++ b/scripts/vmstate-static-checker.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/python3
#
# Compares vmstate information stored in JSON format, obtained from
# the -dump-vmstate QEMU command.

View File

@ -1,35 +0,0 @@
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <stefan.bruens@rwth-aachen.de>
Date: Mon, 5 Aug 2019 20:03:11 +0000
Subject: Make keycode-gen output reproducible (use SOURCE_DATE_EPOCH
timestamp)
Signed-off-by: Bruce Rogers <brogers@suse.com
---
tools/keymap-gen | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/ui/keycodemapdb/tools/keymap-gen b/ui/keycodemapdb/tools/keymap-gen
index f0269e3cabf57881bb41e2333143..a374eb255fb3c55b65b475e86461 100755
--- a/ui/keycodemapdb/tools/keymap-gen
+++ b/ui/keycodemapdb/tools/keymap-gen
@@ -20,6 +20,7 @@ except:
sys.path.append(os.path.join(os.path.dirname(__file__), "../thirdparty"))
import argparse
import hashlib
+import os
import time
import sys
@@ -317,7 +318,11 @@ class LanguageGenerator(object):
raise NotImplementedError()
def generate_header(self, database, args):
- today = time.strftime("%Y-%m-%d %H:%M")
+ sde = os.getenv("SOURCE_DATE_EPOCH")
+ if sde:
+ today = time.strftime("%Y-%m-%d %H:%M", time.gmtime(int(sde)))
+ else:
+ today = time.strftime("%Y-%m-%d %H:%M")
self._boilerplate([
"This file is auto-generated from keymaps.csv on %s" % today,
"Database checksum sha256(%s)" % database.mapchecksum,

View File

@ -1,33 +0,0 @@
From: Alexander Graf <agraf@suse.de>
Date: Fri, 6 Jan 2012 01:05:55 +0100
Subject: 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.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
exec.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/exec.c b/exec.c
index 6f381f98e2a01c432c28c0c094db..0cec6a514147a1b90e2056f3eac4 100644
--- a/exec.c
+++ b/exec.c
@@ -2328,11 +2328,13 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
return NULL;
}
+#ifndef TARGET_PPC
if (kvm_enabled() && !kvm_has_sync_mmu()) {
error_setg(errp,
"host lacks kvm mmu notifiers, -mem-path unsupported");
return NULL;
}
+#endif
if (phys_mem_alloc != qemu_anon_ram_alloc) {
/*

View File

@ -1,74 +1,202 @@
The qemu package includes a special maintenance workflow in order to support git
based patching. Please use it in order to have changes you make be acceptable to
the package maintainers.
# PACKAGING WORKFLOW(S)
Currently a local clone of the upstream repo(s) is required for the packaging
workflow. It is anticipated that the need for any extra setup will be reduced or
even eliminated entirely in the future, but for now, you will need do so some
setup. See config.sh for details.
The qemu package follows a special maintenance workflow in order to support
git based patching, including of submodules. Please use it in order to have
changes you make be acceptable to the package maintainers.
The qemu.spec file is generated from a qemu.spec.in template, so to make changes
to the spec file beyond the patch name generation, patch reference and automated
versioning done by the scripts, you need to edit the template. Do not directly
edit the spec file. The spec file's version and patch references are added when
the update_git.sh script is passed certain commands, as described below.
All the development happens at https://github.com/openSUSE/qemu. The relevant
branch is `factory`.
If you are not modifying any patches or their order, but just need to update the
spec file from a changed template, run 'bash ./update_git.sh refresh'.
Any change to the package should be submitted in the form of a Pull Request
against such repository and branch.
If the set of patches is being modified, including their order, you will want to
first run 'bash ./update_git.sh pkg2git', which makes the current package patch
queue available in a local git branch named frombundle (see config.sh for the
locations). This set of patches comes from a "bundle of git bundles", the
bundles.tar.xz file, which is included as a package source file. You will then
create an altered patch queue in the branch which corresponds to this release
(eg: opensuse-5.0), using the frombundle branch as the starting point for your
changes (eg perhaps start by doing git reset --hard frombundle, then cherry-pick
upstream patches from there). Once you have the patch queue ready to go run
'bash ./update_git.sh git2pkg' which updates the bundles.tar.xz file, as well as
the spec and patch files.
The reminder of this document provides more details, explanations and examples
for both contributors and maintainers.
The default action for update_git.sh is git2pkg, which helps simplify repeated
package updates as you modify the patch queue from the local git repo.
The maintainer and automation use another workflow mode dealing with packaging
the latest upstream qemu. See 'LATEST' references in the scripts for details.
# FOR CONTRIBUTORS
* * * * * * * * *
## BACKPORTING AN UPSTREAM PATCH
Additional Notes:
For submitting a backport of an upstream patch, proceed as follows (a local
copy of the repository is of course necessary).
Patches which are from an upstream git repo should have the commit id recorded
just below the Subject line (after a blank line) as follows:
Identify the hash of the commit that needs backporting and do:
Git-commit: <40-char-sha-id>
git cherry-pick -esx <commit_hash>
If a patch is anticipated to be shortly included in upstream repo, mark that
fact by doing the above with 40 0's, which will flag it as needing to be updated
in the near future.
This way, the changelog will already contain the reference to the upstream
commit itself, and the appropriate "Signed-off-by:" tag.
Bug or feature tracking identifiers should also be added to the patch similarly,
using the abbreviations identified here:
http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines#Current_set_of_abbreviations
using the "Reference:" tag, with multiple entries comma separated.
If the backport is related to Bugzilla (or Jira, and/or CVEs, etc) entry, add a
reference to that, such as:
The ability to provide a conditional inclusion of a patch (eg based on
architecture, is provided by using the "Include-If:" tag similarly, as follows:
Resolves: bsc#123456
Include-If: %ifarch aarch64
Or:
References: jsc#PED-1234
Or:
Resolves: bsc#7891011 (CVE-1234-5678)
Add it between the "(cherry picked from commit ...)" line and the "Signed-off-by:"
line that follows it.
An example of the end result, where Dario Faggioli (<dfaggioli@suse.com>) is
backporting upstream commit abe2c4bdb65e8dd in order to fix bug 1209546 from
bugzilla.opensuse.org is:
test-vmstate: fix bad GTree usage, use-after-free
According to g_tree_foreach() documentation:
"The tree may not be modified while iterating over it (you can't
add/remove items)."
[...]
Get rid of the node removal within the tree traversal. Also
check the trees have the same number of nodes before the actual
diff.
Fixes: 9a85e4b8f6 ("migration: Support gtree migration")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1518
Signed-off-by: Marc-Andr303251 Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eric Auger <eric.auger@redhat.com>
Reported-by: Richard W.M. Jones <rjones@redhat.com>
Tested-by: Richard W.M. Jones <rjones@redhat.com>
Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
Reviewed-by: Daniel P. Berrang303251 <berrange@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
(cherry picked from commit abe2c4bdb65e8dd9cb2f01c355baa394bf49a8af)
Resolves: bsc#1209546
Signed-off-by: Dario Faggioli <dfaggioli@suse.com>
Of course, all conflicts and issues should be resolved, before committing the
result/completing the cherry-picking.
At this point, the PR should be opened. As soon as that happens, some checks
will be run automatically and the maintainers of the QEMU package will review
and, eventually, merge or reject it.
PRs containing multiple commits are allowed. They are actually encouraged, if
the patches being backported are related and/or dependant among each others. It
must, however, always be the case that each upstream commit is cherry-picked
individually.
Note that there is no need to change any 'qemu.changes' file. That will, in
fact be handled by the package maintainers (and such RPM changelog entries will
be automatically generated out of the git commit messages).
## ADDING A PATCH NOT COMING FROM UPSTREAM
Downstream patches, i.e., patches that are not backports of upstream commits,
should be avoided as much as possible. The (largely!) recommended approach is
to submit the patch upstream and then, once it is accepted and committed,
backport it.
If that is not possible (for whatever reason), a pull request with a downstream
only patch can be opened. The procedure is almost identical to the one described
above for upstream backports. The main differences are:
1) Downstream only patch cannot be cherry-picked from upstream commits, of
course. Therefore, the PR will consist of the commit(s) that introduces the
patch.
2) There will be no "(cherry picked from commit ...") line in the changelog
of a downstream only patch. On the other hand, the "Resolves:" or
"Reference:" tag, that link the patch to the issue it's trying to solve,
must be there, and the same is true for the "Signed-off-by:" tag
indicating who is proposing adding it.
3) It is required that the subject of the commit starts with the [openSUSE] tag.
An example of a downstream only commit is:
[openSUSE] pc: q35: Bump max_cpus to 1024
And use the new limit for machine version 7.1 too.
Keep the old limit of 288 for machine versions 7.0 and earlier.
Signed-off-by: Dario Faggioli <dfaggioli@suse.com>
References: bsc#1202282, jsc#PED-2592
Signed-off-by: Dario Faggioli <dfaggioli@suse.com>
## CHANGING THE PACKAGING FILES
Files that are necessary for building the RPM (like the spec file) or that
are part of the RPM and will be copied in the appropriate places in the
filesystem when it is installed are also part of the git repository. In fact,
they can be found in the `rpm/` directory.
Any addition, removal or change of and on any of those file should just be done
as a regular commit, and a pull request including such commit(s) should be
opened.
Commits to packaging files should be prefixed with both the [openSUSE] tag and
an [RPM] tag. An example can be this one:
[openSUSE][RPM] Add downstream packaging files
Stash the "packaging files" in the QEMU repository, in the rpm/
directory. During package build, they will be pulled out from there
and used as appropriate.
Signed-off-by: Dario Faggioli <dfaggioli@suse.com>
## ADDING A PATCH IN A SUBMODULE
For including a backport, or in general adding a patch, to a submodule, the
downstream git repository for the submodule must be checkedout at the location
where the submodule resides, in the main QEMU git repository.
For example, for including a downstream patch in the ipxe submodule, a local
copy of the repository https://github.com/openSUSE/qemu-ipxe.git is necessary.
After checking out the `factory` branch, add the patch there (cherry-picking
it from upstream, if it is a backport, and respecting all the tagging rules
explained in the previous sections).
At this point:
- the branch must be pushed;
- in the main (qemu) repository, a commit must be added and pushed, for making
sure that the new patch is picked up.
Basically, the commit in the main repository is how the information that a
submodule as a new head is recorded.
The changelog of such commit shall include a reference to the subjects of all
the new commits in the various submodules. Unfortinately, there is not yet a
good way of achieving this automatically.
As last step, a pull request should be opened, as usual.
## REMOVING PATCHES
If a patch, or, in general, a commit, that is already part of the repository
must be removed, this must be done without rewriting the git history, i.e., with
a revert (and then a pull request with the revert should be opened).
# FOR MAINTAINERS
## REVIEWING AND ACCEPTING PRs
TODO
## COMMITTING CHANGES INTO FACTORY
TODO
## UPDATING THE BASE QEMU VERSION
TODO
# MANUAL AND AUTOMATED CHECKS
TODO
This will cause the patch application in the spec file to be done as follows:
%ifarch aarch64
%patch0013 -p1
%endif
A trick worth noting is, if a given git tracked patch is to be applied in a way
that can't be done in the normal patching section of the spec file, you can
still include the patch, and use it by name with the patch program elsewhere in
the spec file by doing something such as:
Include-If: %if 0%{?patch-possibly-applied-elsewhere}
(this variable will remain undefined in the spec file) And then elsewhere in the
spec file, the actual patch (eg specially-handled-change.patch) is referenced as
eg:
patch -p1 < %_sourcedir/specially-handled-change.patch

View File

@ -1,54 +0,0 @@
From: =?UTF-8?q?Andreas=20F=C3=A4rber?= <afaerber@suse.de>
Date: Sun, 15 Jan 2012 19:53:49 +0100
Subject: Raise soft address space limit to hard limit
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
For SLES we want users to be able to use large memory configurations
with KVM without fiddling with ulimit -Sv.
Signed-off-by: Andreas Färber <afaerber@suse.de>
[BR: add include for sys/resource.h]
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
softmmu/vl.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/softmmu/vl.c b/softmmu/vl.c
index 4eb9d1f7fd54f27583bfb1ce9407..c6e7530b012db308d0c607ec749d 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -34,6 +34,7 @@
#include "qemu/uuid.h"
#include "sysemu/reset.h"
#include "sysemu/runstate.h"
+#include <sys/resource.h>
#include "sysemu/seccomp.h"
#include "sysemu/tcg.h"
#include "sysemu/xen.h"
@@ -2868,6 +2869,7 @@ void qemu_init(int argc, char **argv, char **envp)
BlockdevOptionsQueue bdo_queue = QSIMPLEQ_HEAD_INITIALIZER(bdo_queue);
QemuPluginList plugin_list = QTAILQ_HEAD_INITIALIZER(plugin_list);
int mem_prealloc = 0; /* force preallocation of physical target memory */
+ struct rlimit rlimit_as;
os_set_line_buffering();
@@ -2879,6 +2881,16 @@ void qemu_init(int argc, char **argv, char **envp)
qemu_mutex_lock_iothread();
+ /*
+ * Try to raise the soft address space limit.
+ * Default on SLES 11 SP2 is 80% of physical+swap memory.
+ */
+ getrlimit(RLIMIT_AS, &rlimit_as);
+ if (rlimit_as.rlim_cur < rlimit_as.rlim_max) {
+ rlimit_as.rlim_cur = rlimit_as.rlim_max;
+ setrlimit(RLIMIT_AS, &rlimit_as);
+ }
+
atexit(qemu_run_exit_notifiers);
qemu_init_exec_dir(argv[0]);

View File

@ -1,36 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Fri, 3 Nov 2017 11:12:40 -0600
Subject: Switch order of libraries for mpath support
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
Makefile | 2 +-
configure | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 13dd708c4af52df3bc932812fc60..e7116289550f169a65f8aecfeccf 100644
--- a/Makefile
+++ b/Makefile
@@ -613,7 +613,7 @@ fsdev/virtfs-proxy-helper$(EXESUF): fsdev/virtfs-proxy-helper.o fsdev/9p-marshal
scsi/qemu-pr-helper$(EXESUF): scsi/qemu-pr-helper.o scsi/utils.o $(authz-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
ifdef CONFIG_MPATH
-scsi/qemu-pr-helper$(EXESUF): LIBS += -ludev -lmultipath -lmpathpersist
+scsi/qemu-pr-helper$(EXESUF): LIBS += -ludev -lmpathpersist -lmultipath
endif
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx $(SRC_PATH)/scripts/hxtool
diff --git a/configure b/configure
index 2acc4d1465f8165ae3a238784231..a47fda0fb5267e153a3f1f3ee3bc 100755
--- a/configure
+++ b/configure
@@ -4100,7 +4100,7 @@ int main(void) {
return 0;
}
EOF
- if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
+ if compile_prog "" "-ludev -lmpathpersist -lmultipath" ; then
mpathpersist=yes
mpathpersist_new_api=yes
else

View File

@ -1,33 +0,0 @@
From: Alexander Graf <agraf@suse.de>
Date: Mon, 21 Nov 2011 23:50:36 +0100
Subject: XXX dont dump core on sigabort
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
linux-user/signal.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/linux-user/signal.c b/linux-user/signal.c
index 8cf51ffecde659742b7aac6dfaae..08cb813a8a1782ed4b845d716ce2 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -632,6 +632,10 @@ static void QEMU_NORETURN dump_core_and_abort(int target_sig)
trace_user_force_sig(env, target_sig, host_sig);
gdb_signalled(env, target_sig);
+ if (target_sig == 6) {
+ goto no_core;
+ }
+
/* dump core if supported by target binary format */
if (core_dump_signal(target_sig) && (ts->bprm->core_dump != NULL)) {
stop_all_tasks();
@@ -649,6 +653,8 @@ static void QEMU_NORETURN dump_core_and_abort(int target_sig)
target_sig, strsignal(host_sig), "core dumped" );
}
+no_core:
+
/* The proper exit code for dying from an uncaught signal is
* -<signal>. The kernel doesn't allow exit() or _exit() to pass
* a negative value. To get the proper exit code we need to

View File

@ -1,29 +1,15 @@
<constraints>
<!-- All builds are fine with 9GB disk -->
<overwrite>
<conditions>
<package>qemu</package>
<package>qemu:linux-user</package>
<package>qemu:testsuite</package>
<package>qemu:qemu-linux-user</package>
</conditions>
<hardware>
<disk>
<size unit="G">9</size>
<size unit="G">13</size>
</disk>
</hardware>
</overwrite>
<!-- To test qemu-linux-user, armv7l needs more than the default memory -->
<overwrite>
<conditions>
<arch>armv7l</arch>
<package>qemu:linux-user</package>
</conditions>
<hardware>
<memory>
<size unit="M">8192</size>
</memory>
</hardware>
</overwrite>
<!-- To build qemu, s390x needs more than the default memory -->
<overwrite>
<conditions>
@ -36,13 +22,13 @@
</memory>
</hardware>
</overwrite>
<!-- Excluding ARM, qemu-testsuite needs more than the default memory -->
<!-- And this is the case for (some of the) other arch-es as well -->
<overwrite>
<conditions>
<arch>i586</arch>
<arch>x86_64</arch>
<arch>ppc64le</arch>
<package>qemu:testsuite</package>
<package>qemu</package>
</conditions>
<hardware>
<memory>
@ -54,7 +40,7 @@
<overwrite>
<conditions>
<arch>ppc64</arch>
<package>qemu:testsuite</package>
<package>qemu</package>
</conditions>
<hardware>
<memory>
@ -73,4 +59,16 @@
<processors>8</processors>
</hardware>
</overwrite>
<!-- To test qemu-linux-user, armv7l needs more than the default memory -->
<overwrite>
<conditions>
<arch>armv7l</arch>
<package>qemu:qemu-linux-user</package>
</conditions>
<hardware>
<memory>
<size unit="M">8192</size>
</memory>
</hardware>
</overwrite>
</constraints>

View File

@ -1,4 +1,3 @@
<multibuild>
<package>linux-user</package>
<package>testsuite</package>
<package>qemu-linux-user</package>
</multibuild>

22
_service Normal file
View File

@ -0,0 +1,22 @@
<services>
<service name="obs_scm" mode="manual">
<param name="scm">git</param>
<param name="url">https://github.com/opensuse/qemu.git</param>
<param name="revision">factory</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">[v]?([^-+a-z]+)(.*)</param>
<param name="versionrewrite-replacement">\1</param>
<param name="changesgenerate">enable</param>
<param name="extract">rpm/common.inc</param>
<param name="extract">rpm/qemu.spec</param>
<param name="extract">rpm/qemu-linux-user.spec</param>
<param name="extract">rpm/README.PACKAGING</param>
<param name="extract">rpm/qemu-rpmlintrc</param>
</service>
<service name="set_version" mode="manual"/>
<service name="tar" mode="buildtime"/>
<service name="recompress" mode="buildtime">
<param name="file">*.tar</param>
<param name="compression">xz</param>
</service>
</services>

4
_servicedata Normal file
View File

@ -0,0 +1,4 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/opensuse/qemu.git</param>
<param name="changesrevision">6738b4bbb34e47ac23de7ab3c3e8122fdcc6d189</param></service></servicedata>

View File

@ -1,30 +0,0 @@
From: =?UTF-8?q?Andreas=20F=C3=A4rber?= <afaerber@suse.de>
Date: Wed, 31 Jul 2013 17:32:35 +0200
Subject: acpi_piix4: Fix migration from SLE11 SP2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
References: bnc#812836
qemu-kvm 0.15 uses the same GPE format as qemu 1.4, but as version 2
rather than 3.
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/acpi/piix4.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
index 26bac4f16c18a7d32b3821e5e3e6..81c2a3410319e6236c1a09b07bb1 100644
--- a/hw/acpi/piix4.c
+++ b/hw/acpi/piix4.c
@@ -275,7 +275,7 @@ static bool piix4_vmstate_need_smbus(void *opaque, int version_id)
static const VMStateDescription vmstate_acpi = {
.name = "piix4_pm",
.version_id = 3,
- .minimum_version_id = 3,
+ .minimum_version_id = 2, /* qemu-kvm */
.post_load = vmstate_acpi_post_load,
.fields = (VMStateField[]) {
VMSTATE_PCI_DEVICE(parent_obj, PIIX4PMState),

View File

@ -1,11 +0,0 @@
# Access control file for qemu bridge helper
# Syntax consists of:
# # comment (ignored)
# allow all
# allow <bridge_name>
# deny all
# deny <bridge_name>
# include /path/to/additional/ACL/file
# Users are blacklisted by default and 'deny' takes precedence over 'allow'.
# Including additional ACL files allows file access permissions to be used as
# a component of the policy to allow access or deny access to specific bridges.

View File

@ -1,30 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Wed, 6 May 2020 15:03:02 -0600
Subject: [build] Be explicit about -fcommon compiler directive
Git-commit: f982a712979619dbae2c6e0d741757e2ce94be11
References: boo#1171140
gcc10 switched default behavior from -fcommon to -fno-common. Since
"__shared" relies on the legacy behavior, explicitly specify it.
Signed-off-by: Bruce Rogers <brogers@suse.com>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
src/Makefile.housekeeping | 1 +
1 file changed, 1 insertion(+)
diff --git a/roms/ipxe/src/Makefile.housekeeping b/roms/ipxe/src/Makefile.housekeeping
index 4b09e81f0b1eb82e79f6af11986d..f6f3e29248d3e59b76de690aeb0c 100644
--- a/roms/ipxe/src/Makefile.housekeeping
+++ b/roms/ipxe/src/Makefile.housekeeping
@@ -422,6 +422,7 @@ CFLAGS += -Os
CFLAGS += -g
ifeq ($(CCTYPE),gcc)
CFLAGS += -ffreestanding
+CFLAGS += -fcommon
CFLAGS += -Wall -W -Wformat-nonliteral
HOST_CFLAGS += -Wall -W -Wformat-nonliteral
endif

View File

@ -1,55 +0,0 @@
From: Valentine Barshak <gvaxon@gmail.com>
Date: Mon, 22 Jul 2019 10:47:50 +0100
Subject: [build] Workaround compilation error with gcc 9.1
Git-commit: 1dd56dbd11082fb622c2ed21cfaced4f47d798a6
References: bsc#1121464
Include-If: %if 0%{?suse_version} > 1500 && 0%{?is_opensuse}
Compiling with gcc 9.1 generates lots of "taking address of packed
member of ... may result in an unaligned pointer value" warnings.
Some of these warnings are genuine, and indicate correctly that parts
of iPXE currently require the CPU (or runtime environment) to support
unaligned accesses. For example: the TCP/IP receive data path will
attempt to access 32-bit fields that may not be aligned to a 32-bit
boundary.
Other warnings are either spurious (such as when the pointer is to a
variable-length byte array, which can have no alignment requirement
anyway) or unhelpful (such as when the pointer is used solely to
provide a debug colour value for the DBGC() macro).
There appears to be no easy way to silence the spurious warnings.
Since the ability to perform unaligned accesses is already a
requirement for iPXE, work around the problem by silencing this class
of warnings.
Signed-off-by: Valentine Barshak <gvaxon@gmail.com>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
src/Makefile.housekeeping | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/roms/ipxe/src/Makefile.housekeeping b/roms/ipxe/src/Makefile.housekeeping
index f8334921b8b93cbd03f0a0de9910..4b09e81f0b1eb82e79f6af11986d 100644
--- a/roms/ipxe/src/Makefile.housekeeping
+++ b/roms/ipxe/src/Makefile.housekeeping
@@ -185,6 +185,15 @@ WNST_TEST = $(CC) -Wstringop-truncation -x c -c /dev/null -o /dev/null \
>/dev/null 2>&1
WNST_FLAGS := $(shell $(WNST_TEST) && $(ECHO) '-Wno-stringop-truncation')
WORKAROUND_CFLAGS += $(WNST_FLAGS)
+
+# gcc 9.1 generates warnings for taking address of packed member which
+# may result in an unaligned pointer value. Inhibit the warnings.
+#
+WNAPM_TEST = $(CC) -Wno-address-of-packed-member -x c -c /dev/null \
+ -o /dev/null >/dev/null 2>&1
+WNAPM_FLAGS := $(shell $(WNAPM_TEST) && \
+ $(ECHO) '-Wno-address-of-packed-member')
+WORKAROUND_CFLAGS += $(WNAPM_FLAGS)
endif
# Some versions of gas choke on division operators, treating them as

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:538acceeee5a8882a1bacc0a4601a05e402922c18bec4609c6491796073f8556
size 44000

102
common.inc Normal file
View File

@ -0,0 +1,102 @@
%define _buildshell /bin/bash
%define sbver 1.16.3_3_gc13ff2cd
%define srcdir %{_builddir}/%buildsubdir
%define blddir %srcdir/build
%define build_x86_firmware 0
%define build_ppc_firmware 0
%define build_opensbi_firmware 0
%define kvm_available 0
%define legacy_qemu_kvm 0
%define force_fit_virtio_pxe_rom 1
%define with_xen 0%{!?_without_xen:1}
%if "%{?distribution}" == ""
%define distro private-build
%else
%define distro %{distribution}
%endif
# Items to exclude in ALP-based products
%if 0%{?suse_version} == 1600
%define with_xen 0
%endif
%bcond_with system_membarrier
%bcond_with malloc_trim
%bcond_with chkqtests
%if 0%{?suse_version} > 1600
# canokey is an openSUSE thing, not a SLE one
%ifarch x86_64
%bcond_without canokey
%else
%bcond_with canokey
%endif
%endif
%if 0%{?suse_version} > 1600
# XDP seems not to be there in SLE...
%bcond_without xdp
%else
%bcond_with xdp
%endif
# Make it possible to build without spice (for SLE/Leap Micro)
%bcond_without spice
# We do not have the stuff needed to compile rutabaga support.
# If/when we want to do it, we can check how it's done here:
# https://src.fedoraproject.org/rpms/qemu/c/deeb9357cb751df21c566fd8408936cfb034d43b?branch=rawhide
%define has_rutabaga_gfx 0
%define has_virtiofsd 1
# Upstream virtiofsd does not even build on 32 bit systems
%ifarch %ix86 %arm
%define has_virtiofsd 0
%endif
# non-x86 archs still seem to have some issues with Link Time Optimization
%ifnarch %ix86 x86_64
%define _lto_cflags %{nil}
%endif
%ifarch aarch64
%define qemu_arch aarch64
%endif
%ifarch %arm
%define qemu_arch arm
%endif
%ifarch %ix86
%define qemu_arch i386
%endif
%ifarch ppc64
%define qemu_arch ppc64
%endif
%ifarch ppc
%define qemu_arch ppc
%endif
%ifarch ppc64le
%define qemu_arch ppc64le
%endif
%ifarch riscv64
%define qemu_arch riscv64
%endif
%ifarch s390x
%define qemu_arch s390x
%endif
%ifarch x86_64
%define qemu_arch x86_64
%endif
%define generic_qemu_description \
QEMU provides full machine emulation and cross architecture usage. It closely\
integrates with KVM and Xen virtualization, allowing for excellent performance.\
Many options are available for defining the emulated environment, including\
traditional devices, direct host device access, and interfaces specific to\
virtualization.

110
config.sh
View File

@ -1,110 +0,0 @@
#!/bin/bash
# config.sh:
# The next few VARIABLES are to be edited as required:
# The following specifies the upstream tag or commit upon which our patchqueue
# gets rebased. The special value LATEST may be used to "automatically" track
# the upstream development tree in the master branch
GIT_UPSTREAM_COMMIT_ISH=v5.1.0
# WARNING: If transitioning from using LATEST to not, MANUALLY re-set the
# tarball present. If transitioning TO LATEST, make sure that
# NEXT_RELEASE_IS_MAJOR is set correctly
# This is used to choose the version number when LATEST processing is active
NEXT_RELEASE_IS_MAJOR=0
# Unfortunately, SeaBIOS doesn't always follow an "always increasing" version
# model, so there may be times we should overide the automated version setting.
# We can do so by specifing the value here:
#SEABIOS_VERSION=1.13.0
# Temporary directories used by this script
GIT_DIR=/dev/shm/qemu-factory-git-dir
CMP_DIR=/dev/shm/qemu-factory-cmp-dir
BUNDLE_DIR=/dev/shm/qemu-factory-bundle-dir
# For the following, use 1 or 0 as needed
NUMBERED_PATCHES=0
PATCH_RANGE=1000
REPO_COUNT=26
# Perhaps we need to instead use the terminal local dirname as the index
# and store the ~/git/ as a separate VARIABLE
# This way, we only have one big array instead of two
# BUT STILL WE NEED TO START WITH THE DATA STORED SOMEWHERE!!!!!!
LOCAL_REPO_MAP=(
~/git/qemu-opensuse
~/git/qemu-seabios
~/git/qemu-ipxe
~/git/qemu-sgabios
~/git/qemu-edk2
~/git/qemu-skiboot
~/git/qemu-SLOF
~/git/qemu-openbios
~/git/qemu-keycodemapdb
~/git/qemu-slirp
~/git/qemu-u-boot
~/git/qemu-qboot
~/git/qemu-dtc
~/git/qemu-opensbi
~/git/qemu-edk2-openssl
~/git/qemu-capstone
~/git/qemu-qemu-palcode
~/git/qemu-seabios-hppa
~/git/qemu-u-boot-sam460ex
~/git/qemu-QemuMacDrivers
~/git/qemu-tests-berkeley-softfloat-3
~/git/qemu-tests-berkeley-testfloat-3
~/git/qemu-edk2-berkeley-softfloat-3
~/git/qemu-edk2-openssl-boringssl
~/git/qemu-edk2-openssl-krb5
~/git/qemu-edk2-openssl-pyca-cryptography
)
# TEMPORARY! FOR NOW WE REQUIRE THESE LOCALLY TO DO WORK ON PACKAGE
REQUIRED_LOCAL_REPO_MAP=(
~/git/qemu-opensuse
~/git/qemu-seabios
~/git/qemu-ipxe
~/git/qemu-sgabios
~/git/qemu-keycodemapdb
~/git/qemu-qboot
)
PATCH_PATH_MAP=(
""
"roms/seabios/"
"roms/ipxe/"
"roms/sgabios/"
"roms/edk2/"
"roms/skiboot/"
"roms/SLOF/"
"roms/openbios/"
"ui/keycodemapdb/"
"slirp/"
"roms/u-boot/"
"roms/qboot/"
"dtc/"
"roms/opensbi/"
"roms/edk2/CryptoPkg/Library/OpensslLib/openssl/"
"capstone/"
"roms/qemu-palcode/"
"roms/seabios-hppa/"
"roms/u-boot-sam460ex/"
"roms/QemuMacDrivers/"
"tests/fp/berkeley-softfloat-3/"
"tests/fp/berkeley-testfloat-3/"
"roms/edk2/ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3/"
"roms/edk2/CryptoPkg/Library/OpensslLib/openssl/boringssl/"
"roms/edk2/CryptoPkg/Library/OpensslLib/openssl/krb5/"
"roms/edk2/CryptoPkg/Library/OpensslLib/openssl/pyca-cryptography/"
)
# Zero based numbering, so we subtract 1 here:
if (( (REPO_COUNT * PATCH_RANGE) - 1 > 9999 )); then
FIVE_DIGIT_POTENTIAL=1
else
FIVE_DIGIT_POTENTIAL=0
fi

View File

@ -1,26 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Tue, 28 May 2019 14:23:37 -0600
Subject: configure: only populate roms if softmmu
Currently roms are mistakenly getting built in a linux-user only
configuration. Add check for softmmu in all places where our list of
roms is being added to.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
configure | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure b/configure
index a47fda0fb5267e153a3f1f3ee3bc..3b3c5dc2f93b87a91d247079f4c8 100755
--- a/configure
+++ b/configure
@@ -6770,7 +6770,7 @@ if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
fi
# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
-if test "$cpu" = "s390x" ; then
+if test "$cpu" = "s390x" && test "$softmmu" = yes ; then
write_c_skeleton
if compile_prog "-march=z900" ""; then
roms="$roms s390-ccw"

View File

@ -1,32 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Fri, 17 Apr 2020 13:07:37 -0600
Subject: configure: remove $pkgversion from CONFIG_STAMP input to broaden
compatibility
As part of the effort to close the gap with Leap I think we are fine
removing the $pkgversion component to creating a unique CONFIG_STAMP.
This stamp is only used in creating a unique symbol used in ensuring the
dynamically loaded modules correspond correctly to the loading qemu.
The default inputs to producing this unique symbol are somewhat reasonable
as a generic mechanism, but specific packaging and maintenance practices
might require the default to be modified for best use. This is an example
of that.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
configure | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure b/configure
index 3b3c5dc2f93b87a91d247079f4c8..4340229b47a3294307a08df3339e 100755
--- a/configure
+++ b/configure
@@ -7229,7 +7229,7 @@ fi
if test "$modules" = "yes"; then
# $shacmd can generate a hash started with digit, which the compiler doesn't
# like as an symbol. So prefix it with an underscore
- echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
+ echo "CONFIG_STAMP=_$( (echo $qemu_version; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
echo "CONFIG_MODULES=y" >> $config_host_mak
fi
if test "$module_upgrades" = "yes"; then

View File

@ -1,27 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Tue, 28 Apr 2020 09:53:49 -0600
Subject: docs: add SUSE support statements to html docs
Include-If: %if %{legacy_qemu_kvm} && 0%{?is_opensuse} == 0
We can fairly easily produce an html version of our support statements.
Now that qemu includes fairly good html-based documentation, leverage it
to expose our SUSE specific in-package support documentation.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
docs/index.html.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/docs/index.html.in b/docs/index.html.in
index 6736fa4360cfb8c40cbab2a362b0..ad431321ee858bcbe3e237e687b5 100644
--- a/docs/index.html.in
+++ b/docs/index.html.in
@@ -7,6 +7,7 @@
<body>
<h1>QEMU @@VERSION@@ Documentation</h1>
<ul>
+ <li><a href="/usr/share/doc/packages/qemu-kvm/kvm-supported.html">SUSE Support Statements</a></li>
<li><a href="system/index.html">System Emulation User's Guide</a></li>
<li><a href="user/index.html">User Mode Emulation User's Guide</a></li>
<li><a href="tools/index.html">Tools Guide</a></li>

View File

@ -1,62 +0,0 @@
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
Date: Tue, 14 Jul 2020 17:26:59 +0100
Subject: docs: fix trace docs build with sphinx 3.1.1
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Git-commit: 0000000000000000000000000000000000000000
Include-If: %if 0%{?suse_version} > 1500
In Fedora 33 rawhide, we now have sphinx 3.1.1, as opposed
to previous 2.2.2. This new version generates a warning on
the source:
docs/qemu-option-trace.rst.inc:4:Malformed option description
'[enable=]PATTERN', should look like "opt", "-opt args",
"--opt args", "/opt args" or "+opt args"
This turns into an error when QEMU passes -W to sphinx-build
Strangely the previous 2.2.2 code has the exact same logic
for checking the syntax, but it is not being triggered. While
it is only complaining about the first option, I changed all
the options to give consistency.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
docs/qemu-option-trace.rst.inc | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/docs/qemu-option-trace.rst.inc b/docs/qemu-option-trace.rst.inc
index 7e09773a9c518f6a47e9262b66c6..e79b0b43fcb3f5a05ad281109e6f 100644
--- a/docs/qemu-option-trace.rst.inc
+++ b/docs/qemu-option-trace.rst.inc
@@ -1,7 +1,7 @@
Specify tracing options.
-.. option:: [enable=]PATTERN
+.. option:: -trace [enable=]PATTERN
Immediately enable events matching *PATTERN*
(either event name or a globbing pattern). This option is only
@@ -11,7 +11,7 @@ Specify tracing options.
Use :option:`-trace help` to print a list of names of trace points.
-.. option:: events=FILE
+.. option:: -trace events=FILE
Immediately enable events listed in *FILE*.
The file must contain one event name (as listed in the ``trace-events-all``
@@ -19,7 +19,7 @@ Specify tracing options.
available if QEMU has been compiled with the ``simple``, ``log`` or
``ftrace`` tracing backend.
-.. option:: file=FILE
+.. option:: -trace file=FILE
Log output traces to *FILE*.
This option is only available if QEMU has been compiled with

View File

@ -1,22 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Mon, 26 Aug 2019 13:28:57 -0600
Subject: enable cross compilation on ARM
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/roms/seabios/Makefile b/roms/seabios/Makefile
index edb83b7a1c77f7bb75c371330b2c..74a01853f26458d94d4a4e056b7b 100644
--- a/roms/seabios/Makefile
+++ b/roms/seabios/Makefile
@@ -13,7 +13,7 @@ export CONFIG_SHELL := sh
export KCONFIG_AUTOHEADER := autoconf.h
export KCONFIG_CONFIG := $(CURDIR)/.config
export LC_ALL := C
-CROSS_PREFIX=
+CROSS_PREFIX=$(CROSS_COMPILE)
ifneq ($(CROSS_PREFIX),)
CC=$(CROSS_PREFIX)gcc
endif

View File

@ -1,52 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Fri, 1 Nov 2019 19:32:57 -0600
Subject: ensure headers included are compatible with freestanding mode
Certain standard headers are designated for use in freestanding mode
while others are prohibited. To conform to these rules, use <stdint.h>
instead of <inttypes.h> as well as switch one <string.h> reference to
the "string.h" implemented in project.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
include/bios.h | 2 +-
malloc.c | 2 +-
pci.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/roms/qboot/include/bios.h b/roms/qboot/include/bios.h
index f36638b977864c220bf3ed9a612f..7f8f677671d7b47e7c07f800646c 100644
--- a/roms/qboot/include/bios.h
+++ b/roms/qboot/include/bios.h
@@ -1,7 +1,7 @@
#ifndef BIOS_H_
#define BIOS_H_
-#include <inttypes.h>
+#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
diff --git a/roms/qboot/malloc.c b/roms/qboot/malloc.c
index 8738373b774358425b2767fc7e9f..bd0ac0f23ee1e3c4a8f5e003ff1d 100644
--- a/roms/qboot/malloc.c
+++ b/roms/qboot/malloc.c
@@ -1,4 +1,4 @@
-#include <inttypes.h>
+#include <stdint.h>
#include "string.h"
#include "bios.h"
diff --git a/roms/qboot/pci.c b/roms/qboot/pci.c
index 65c9e81793ab7aad9b5d1679e78e..63ebda6a0580463ea2b562317cec 100644
--- a/roms/qboot/pci.c
+++ b/roms/qboot/pci.c
@@ -1,7 +1,7 @@
#include "bios.h"
#include "ioport.h"
#include "pci.h"
-#include <string.h>
+#include "string.h"
static uint16_t addend;
static uint8_t bus, bridge_head;

View File

@ -1,43 +0,0 @@
From: Michael Brown <mcb30@ipxe.org>
Date: Sat, 27 Jun 2020 20:43:32 +0100
Subject: [golan] Add explicit type casts for nodnic_queue_pair_type
Git-commit: 8a1d66c7aec020f3e90254ed2fa55ecd9494fcc3
References: boo#1171139
GCC 10 emits warnings for implicit conversions of enumerated types.
The flexboot_nodnic code defines nodnic_queue_pair_type with values
identical to those of ib_queue_pair_type, and implicitly casts between
them. Add an explicit cast to fix the warning.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
src/drivers/infiniband/flexboot_nodnic.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/roms/ipxe/src/drivers/infiniband/flexboot_nodnic.c b/roms/ipxe/src/drivers/infiniband/flexboot_nodnic.c
index c13fcefc56866da67d701baa96b8..4463bb78458cbeadd962ed7909ef 100644
--- a/roms/ipxe/src/drivers/infiniband/flexboot_nodnic.c
+++ b/roms/ipxe/src/drivers/infiniband/flexboot_nodnic.c
@@ -365,7 +365,8 @@ static int flexboot_nodnic_create_qp ( struct ib_device *ibdev,
goto qp_alloc_err;
}
- status = nodnic_port_create_qp(&port->port_priv, qp->type,
+ status = nodnic_port_create_qp(&port->port_priv,
+ (nodnic_queue_pair_type) qp->type,
qp->send.num_wqes * sizeof(struct nodnic_send_wqbb),
qp->send.num_wqes,
qp->recv.num_wqes * sizeof(struct nodnic_recv_wqe),
@@ -406,7 +407,8 @@ static void flexboot_nodnic_destroy_qp ( struct ib_device *ibdev,
struct flexboot_nodnic_port *port = &flexboot_nodnic->port[ibdev->port - 1];
struct flexboot_nodnic_queue_pair *flexboot_nodnic_qp = ib_qp_get_drvdata ( qp );
- nodnic_port_destroy_qp(&port->port_priv, qp->type,
+ nodnic_port_destroy_qp(&port->port_priv,
+ (nodnic_queue_pair_type) qp->type,
flexboot_nodnic_qp->nodnic_queue_pair);
free(flexboot_nodnic_qp);

View File

@ -1,26 +0,0 @@
From: Jon Doron <arilou@gmail.com>
Date: Wed, 15 Jul 2020 11:43:26 +0300
Subject: hw: hyperv: vmbus: Fix 32bit compilation
Git-commit: 0000000000000000000000000000000000000000
Signed-off-by: Jon Doron <arilou@gmail.com>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
hw/hyperv/vmbus.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/hw/hyperv/vmbus.c b/hw/hyperv/vmbus.c
index 34392e892af6228f270ec327563e..c28bb4201be449eb6dae4b0e0218 100644
--- a/hw/hyperv/vmbus.c
+++ b/hw/hyperv/vmbus.c
@@ -383,7 +383,8 @@ static ssize_t gpadl_iter_io(GpadlIter *iter, void *buf, uint32_t len)
}
}
- p = (void *)(((uintptr_t)iter->map & TARGET_PAGE_MASK) | off_in_page);
+ p = (void *)(uintptr_t)(((uintptr_t)iter->map & TARGET_PAGE_MASK) |
+ off_in_page);
if (iter->dir == DMA_DIRECTION_FROM_DEVICE) {
memcpy(p, buf, cplen);
} else {

View File

@ -1,57 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Wed, 15 May 2019 13:32:01 -0600
Subject: hw/intc/exynos4210_gic: provide more room when formatting alias names
sprintf related parameter validation complains about the size of the
buffer being written to in exynos4210_gic_realize(). Provide a bit more
space to avoid the following warning:
/home/abuild/rpmbuild/BUILD/qemu-4.0.0/hw/intc/exynos4210_gic.c: In function 'exynos4210_gic_realize':
/home/abuild/rpmbuild/BUILD/qemu-4.0.0/hw/intc/exynos4210_gic.c:316:36: error: '%x' directive writing between 1 and 7 bytes into a region of size between 4 and 28 [-Werror=format-overflow=]
316 | sprintf(cpu_alias_name, "%s%x", cpu_prefix, i);
| ^~
/home/abuild/rpmbuild/BUILD/qemu-4.0.0/hw/intc/exynos4210_gic.c:316:33: note: directive argument in the range [0, 29020050]
316 | sprintf(cpu_alias_name, "%s%x", cpu_prefix, i);
| ^~~~~~
In file included from /usr/include/stdio.h:867,
from /home/abuild/rpmbuild/BUILD/qemu-4.0.0/include/qemu/osdep.h:99,
from /home/abuild/rpmbuild/BUILD/qemu-4.0.0/hw/intc/exynos4210_gic.c:23:
/usr/include/bits/stdio2.h:36:10: note: '__builtin___sprintf_chk' output between 2 and 32 bytes into a destination of size 28
36 | return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 | __bos (__s), __fmt, __va_arg_pack ());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/abuild/rpmbuild/BUILD/qemu-4.0.0/hw/intc/exynos4210_gic.c:326:37: error: '%x' directive writing between 1 and 7 bytes into a region of size between 3 and 28 [-Werror=format-overflow=]
326 | sprintf(dist_alias_name, "%s%x", dist_prefix, i);
| ^~
/home/abuild/rpmbuild/BUILD/qemu-4.0.0/hw/intc/exynos4210_gic.c:326:34: note: directive argument in the range [0, 29020050]
326 | sprintf(dist_alias_name, "%s%x", dist_prefix, i);
| ^~~~~~
In file included from /usr/include/stdio.h:867,
from /home/abuild/rpmbuild/BUILD/qemu-4.0.0/include/qemu/osdep.h:99,
from /home/abuild/rpmbuild/BUILD/qemu-4.0.0/hw/intc/exynos4210_gic.c:23:
/usr/include/bits/stdio2.h:36:10: note: '__builtin___sprintf_chk' output between 2 and 33 bytes into a destination of size 28
36 | return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 | __bos (__s), __fmt, __va_arg_pack ());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
hw/intc/exynos4210_gic.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/intc/exynos4210_gic.c b/hw/intc/exynos4210_gic.c
index 0aa3b843a9e045348b719cb4b8a4..83506dda3c9142350319d7f4dd5c 100644
--- a/hw/intc/exynos4210_gic.c
+++ b/hw/intc/exynos4210_gic.c
@@ -291,8 +291,8 @@ static void exynos4210_gic_realize(DeviceState *dev, Error **errp)
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
const char cpu_prefix[] = "exynos4210-gic-alias_cpu";
const char dist_prefix[] = "exynos4210-gic-alias_dist";
- char cpu_alias_name[sizeof(cpu_prefix) + 3];
- char dist_alias_name[sizeof(cpu_prefix) + 3];
+ char cpu_alias_name[sizeof(cpu_prefix) + 7];
+ char dist_alias_name[sizeof(cpu_prefix) + 8];
SysBusDevice *gicbusdev;
uint32_t n = s->num_cpu;
uint32_t i;

View File

@ -1,93 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Fri, 5 Apr 2019 21:10:30 -0600
Subject: hw/smbios: handle both file formats regardless of machine type
References: bsc#994082, bsc#1084316, boo#1131894
It's easy enough to handle either per-spec or legacy smbios structures
in the smbios file input without regard to the machine type used, by
simply applying the basic smbios formatting rules. then depending on
what is detected. terminal numm bytes are added or removed for machine
type specific processing.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
hw/smbios/smbios.c | 43 +++++++++++++++++++++++++++++++++++++++----
1 file changed, 39 insertions(+), 4 deletions(-)
diff --git a/hw/smbios/smbios.c b/hw/smbios/smbios.c
index f56082690437df2962681ea823d3..4ad74efc8e764429b5567c91d7ed 100644
--- a/hw/smbios/smbios.c
+++ b/hw/smbios/smbios.c
@@ -962,6 +962,7 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
struct smbios_structure_header *header;
int size;
struct smbios_table *table; /* legacy mode only */
+ uint8_t *dbl_nulls, *orig_end;
if (!qemu_opts_validate(opts, qemu_smbios_file_opts, errp)) {
return;
@@ -974,11 +975,21 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
}
/*
- * NOTE: standard double '\0' terminator expected, per smbios spec.
- * (except in legacy mode, where the second '\0' is implicit and
- * will be inserted by the BIOS).
+ * NOTE: standard double '\0' terminator expected, per smbios spec,
+ * unless the data is formatted for legacy mode, which is used by
+ * pc-i440fx-2.0 and earlier machine types. Legacy mode structures
+ * without strings have no '\0' terminators, and those with strings
+ * also don't have an additional '\0' terminator at the end of the
+ * final string '\0' terminator. The BIOS will add the '\0' terminators
+ * to comply with the smbios spec.
+ * For greater compatibility, regardless of the machine type used,
+ * either format is accepted.
*/
- smbios_tables = g_realloc(smbios_tables, smbios_tables_len + size);
+ smbios_tables = g_realloc(smbios_tables, smbios_tables_len + size + 2);
+ orig_end = smbios_tables + smbios_tables_len + size;
+ /* add extra null bytes to end in case of legacy file data */
+ *orig_end = '\0';
+ *(orig_end + 1) = '\0';
header = (struct smbios_structure_header *)(smbios_tables +
smbios_tables_len);
@@ -993,6 +1004,19 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
header->type);
return;
}
+ for (dbl_nulls = smbios_tables + smbios_tables_len + header->length;
+ dbl_nulls + 2 <= orig_end; dbl_nulls++) {
+ if (*dbl_nulls == '\0' && *(dbl_nulls + 1) == '\0') {
+ break;
+ }
+ }
+ if (dbl_nulls + 2 < orig_end) {
+ error_setg(errp, "SMBIOS file data malformed");
+ return;
+ }
+ /* increase size by how many extra nulls were actually needed */
+ size += dbl_nulls + 2 - orig_end;
+ smbios_tables = g_realloc(smbios_tables, smbios_tables_len + size);
set_bit(header->type, have_binfile_bitmap);
if (header->type == 4) {
@@ -1013,6 +1037,17 @@ void smbios_entry_add(QemuOpts *opts, Error **errp)
* delete the one we don't need from smbios_set_defaults(),
* once we know which machine version has been requested.
*/
+ if (dbl_nulls + 2 == orig_end) {
+ /* chop off nulls to get legacy format */
+ if (header->length + 2 == size) {
+ size -= 2;
+ } else {
+ size -= 1;
+ }
+ } else {
+ /* undo conversion from legacy format to per-spec format */
+ size -= dbl_nulls + 2 - orig_end;
+ }
if (!smbios_entries) {
smbios_entries_len = sizeof(uint16_t);
smbios_entries = g_malloc0(smbios_entries_len);

View File

@ -1,45 +0,0 @@
From: Alistair Francis <Alistair.Francis@wdc.com>
Date: Sat, 4 May 2019 07:58:55 -0600
Subject: hw/usb/dev-mtp: Fix GCC 9 build warning
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fix this warning with GCC 9 on Fedora 30:
hw/usb/dev-mtp.c:1715:36: error: taking address of packed member of ‘struct <anonymous>’ may result in an unaligned pointer value [-Werror=address-of-packed-member]
1715 | dataset->filename);
| ~~~~~~~^~~~~~~~~~
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
hw/usb/dev-mtp.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c
index 15a2243101f8c465e038e26c6551..d4d3a388f2034d735a6595fdaa36 100644
--- a/hw/usb/dev-mtp.c
+++ b/hw/usb/dev-mtp.c
@@ -1721,9 +1721,22 @@ static void usb_mtp_write_metadata(MTPState *s, uint64_t dlen)
assert(!s->write_pending);
assert(p != NULL);
+/*
+ * We are about to access a packed struct. We are confident that the pointer
+ * address won't be unaligned, so we ignore GCC warnings.
+ */
+#if defined(CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE) && QEMU_GNUC_PREREQ(9, 0)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
+#endif
+
filename = utf16_to_str(MIN(dataset->length, filename_chars),
dataset->filename);
+#if defined(CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE) && QEMU_GNUC_PREREQ(9, 0)
+#pragma GCC diagnostic pop
+#endif
+
if (strchr(filename, '/')) {
usb_mtp_queue_result(s, RES_PARAMETER_NOT_SUPPORTED, d->trans,
0, 0, 0, 0);

View File

@ -1,41 +0,0 @@
From: Alistair Francis <Alistair.Francis@wdc.com>
Date: Sat, 4 May 2019 07:58:35 -0600
Subject: hw/usb/hcd-xhci: Fix GCC 9 build warning
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fix this build warning with GCC 9 on Fedora 30:
hw/usb/hcd-xhci.c:3339:66: error: ‘%d’ directive output may be truncated writing between 1 and 10 bytes into a region of size 5 [-Werror=format-truncation=]
3339 | snprintf(port->name, sizeof(port->name), "usb2 port #%d", i+1);
| ^~
hw/usb/hcd-xhci.c:3339:54: note: directive argument in the range [1, 2147483647]
3339 | snprintf(port->name, sizeof(port->name), "usb2 port #%d", i+1);
| ^~~~~~~~~~~~~~~
In file included from /usr/include/stdio.h:867,
from /home/alistair/qemu/include/qemu/osdep.h:99,
from hw/usb/hcd-xhci.c:21:
/usr/include/bits/stdio2.h:67:10: note: ‘__builtin___snprintf_chk’ output between 13 and 22 bytes into a destination of size 16
67 | return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68 | __bos (__s), __fmt, __va_arg_pack ());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
hw/usb/hcd-xhci.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index 67a18fe2b64c2cc0f77be5897c5d..79386df49b7aaec7c2f2b4c19b6f 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -3340,6 +3340,7 @@ static void usb_xhci_init(XHCIState *xhci)
usb_bus_new(&xhci->bus, sizeof(xhci->bus), &xhci_bus_ops, dev);
for (i = 0; i < usbports; i++) {
+ g_assert(i < MAX(MAXPORTS_2, MAXPORTS_3));
speedmask = 0;
if (i < xhci->numports_2) {
if (xhci_get_flag(xhci, XHCI_FLAG_SS_FIRST)) {

View File

@ -1,42 +0,0 @@
From: =?UTF-8?q?Andreas=20F=C3=A4rber?= <afaerber@suse.de>
Date: Wed, 31 Jul 2013 17:05:29 +0200
Subject: i8254: Fix migration from SLE11 SP2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
References: bnc#812836
qemu-kvm 0.15 had a VMSTATE_UINT32(flags, PITState) field that
qemu 1.4 does not have.
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/timer/i8254_common.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/hw/timer/i8254_common.c b/hw/timer/i8254_common.c
index 050875b49738809ac586ba9ed259..59aa28b8a72590e7fdda0feecefe 100644
--- a/hw/timer/i8254_common.c
+++ b/hw/timer/i8254_common.c
@@ -224,6 +224,12 @@ static int pit_dispatch_post_load(void *opaque, int version_id)
return 0;
}
+static bool is_qemu_kvm(void *opaque, int version_id)
+{
+ /* HACK: We ignore incoming migration from upstream qemu */
+ return version_id < 3;
+}
+
static const VMStateDescription vmstate_pit_common = {
.name = "i8254",
.version_id = 3,
@@ -231,6 +237,7 @@ static const VMStateDescription vmstate_pit_common = {
.pre_save = pit_dispatch_pre_save,
.post_load = pit_dispatch_post_load,
.fields = (VMStateField[]) {
+ VMSTATE_UNUSED_TEST(is_qemu_kvm, 4),
VMSTATE_UINT32_V(channels[0].irq_disabled, PITCommonState, 3),
VMSTATE_STRUCT_ARRAY(channels, PITCommonState, 3, 2,
vmstate_pit_channel, PITChannelState),

View File

@ -1,32 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Fri, 17 May 2013 16:49:58 -0600
Subject: increase x86_64 physical bits to 42
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Allow for guests with higher amounts of ram. The current thought
is that 2TB specified on qemu commandline would be an appropriate
limit. Note that this requires the next higher bit value since
the highest address is actually more than 2TB due to the pci
memory hole.
Signed-off-by: Bruce Rogers <brogers@suse.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
target/i386/cpu.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index e1a5c174dce15c4620bb94bc2826..2dc6d4ae0b61303401cc08bfb7ae 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -1963,7 +1963,7 @@ uint64_t cpu_get_tsc(CPUX86State *env);
/* XXX: This value should match the one returned by CPUID
* and in exec.c */
# if defined(TARGET_X86_64)
-# define TCG_PHYS_ADDR_BITS 40
+# define TCG_PHYS_ADDR_BITS 42
# else
# define TCG_PHYS_ADDR_BITS 36
# endif

View File

@ -1,89 +0,0 @@
From: Michael Brown <mcb30@ipxe.org>
Date: Sat, 27 Jun 2020 20:21:11 +0100
Subject: [intel] Avoid spurious compiler warning on GCC 10
Git-commit: 28cf9806d1632d378485005babec295da0c77fcf
References: boo#1171123
GCC 10 produces a spurious warning about an out-of-bounds array access
for the unsized raw dword array in union intelvf_msg.
Avoid the warning by embedding the zero-length array within a struct.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
src/drivers/net/intelvf.c | 18 ++++++++++--------
src/drivers/net/intelvf.h | 8 +++++++-
2 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/roms/ipxe/src/drivers/net/intelvf.c b/roms/ipxe/src/drivers/net/intelvf.c
index ac6fea745457863544edf6658138..0d48b4178cb5aa0542ba7c507d04 100644
--- a/roms/ipxe/src/drivers/net/intelvf.c
+++ b/roms/ipxe/src/drivers/net/intelvf.c
@@ -52,14 +52,15 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*/
static void intelvf_mbox_write ( struct intel_nic *intel,
const union intelvf_msg *msg ) {
+ const struct intelvf_msg_raw *raw = &msg->raw;
unsigned int i;
/* Write message */
DBGC2 ( intel, "INTEL %p sending message", intel );
- for ( i = 0 ; i < ( sizeof ( *msg ) / sizeof ( msg->dword[0] ) ) ; i++){
- DBGC2 ( intel, "%c%08x", ( i ? ':' : ' ' ), msg->dword[i] );
- writel ( msg->dword[i], ( intel->regs + intel->mbox.mem +
- ( i * sizeof ( msg->dword[0] ) ) ) );
+ for ( i = 0 ; i < ( sizeof ( *msg ) / sizeof ( raw->dword[0] ) ) ; i++){
+ DBGC2 ( intel, "%c%08x", ( i ? ':' : ' ' ), raw->dword[i] );
+ writel ( raw->dword[i], ( intel->regs + intel->mbox.mem +
+ ( i * sizeof ( raw->dword[0] ) ) ) );
}
DBGC2 ( intel, "\n" );
}
@@ -72,14 +73,15 @@ static void intelvf_mbox_write ( struct intel_nic *intel,
*/
static void intelvf_mbox_read ( struct intel_nic *intel,
union intelvf_msg *msg ) {
+ struct intelvf_msg_raw *raw = &msg->raw;
unsigned int i;
/* Read message */
DBGC2 ( intel, "INTEL %p received message", intel );
- for ( i = 0 ; i < ( sizeof ( *msg ) / sizeof ( msg->dword[0] ) ) ; i++){
- msg->dword[i] = readl ( intel->regs + intel->mbox.mem +
- ( i * sizeof ( msg->dword[0] ) ) );
- DBGC2 ( intel, "%c%08x", ( i ? ':' : ' ' ), msg->dword[i] );
+ for ( i = 0 ; i < ( sizeof ( *msg ) / sizeof ( raw->dword[0] ) ) ; i++){
+ raw->dword[i] = readl ( intel->regs + intel->mbox.mem +
+ ( i * sizeof ( raw->dword[0] ) ) );
+ DBGC2 ( intel, "%c%08x", ( i ? ':' : ' ' ), raw->dword[i] );
}
DBGC2 ( intel, "\n" );
}
diff --git a/roms/ipxe/src/drivers/net/intelvf.h b/roms/ipxe/src/drivers/net/intelvf.h
index ab404698fe6de9f48370931fdf56..ffb18e04052f1b4a6fe406f5062c 100644
--- a/roms/ipxe/src/drivers/net/intelvf.h
+++ b/roms/ipxe/src/drivers/net/intelvf.h
@@ -119,6 +119,12 @@ struct intelvf_msg_queues {
uint32_t dflt;
} __attribute__ (( packed ));
+/** Raw mailbox message */
+struct intelvf_msg_raw {
+ /** Raw dwords */
+ uint32_t dword[0];
+} __attribute__ (( packed ));
+
/** Mailbox message */
union intelvf_msg {
/** Message header */
@@ -132,7 +138,7 @@ union intelvf_msg {
/** Queue configuration message */
struct intelvf_msg_queues queues;
/** Raw dwords */
- uint32_t dword[0];
+ struct intelvf_msg_raw raw;
};
/** Maximum time to wait for mailbox message

View File

@ -1,49 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Thu, 27 Jun 2019 10:15:24 -0600
Subject: ipxe:Makefile: fix issues of build reproducibility
References: bsc#1011213
It is desirable to produce the same bits on subsequent
builds when the actual code of the package doesn't
change. (bsc#1011213)
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
src/Makefile.housekeeping | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/roms/ipxe/src/Makefile.housekeeping b/roms/ipxe/src/Makefile.housekeeping
index f6f3e29248d3e59b76de690aeb0c..d94eb1454c9168545c933ec6e900 100644
--- a/roms/ipxe/src/Makefile.housekeeping
+++ b/roms/ipxe/src/Makefile.housekeeping
@@ -1172,11 +1172,18 @@ blib : $(BLIB)
# Command to generate build ID. Must be unique for each $(BIN)/%.tmp,
# even within the same build run.
#
-BUILD_ID_CMD := perl -e 'printf "0x%08x", int ( rand ( 0xffffffff ) );'
+# NB: In the case of the SUSE qemu-ipxe package we want reproducible
+# builds, so we just use the TGT_ROM_NAME variable, which is already
+# a unique (in the context of the files we generate) hex value suitable
+# for specifying the build_id. We no longer define a BUILD_ID_CMD, as
+# we need to use the TGT_ROM_NAME variable directly in the link command
# Build timestamp
#
-BUILD_TIMESTAMP := $(shell date +%s)
+# NB: In the case of the SUSE qemu-ipxe package we want reproducible
+# builds, so we use a pre-determined timestamp, rather than the current
+# timestamp
+BUILD_TIMESTAMP := $(PACKAGING_TIMESTAMP)
# Build version
#
@@ -1196,7 +1203,7 @@ $(BIN)/version.%.o : core/version.c $(MAKEDEPS) $(GIT_INDEX)
$(BIN)/%.tmp : $(BIN)/version.%.o $(BLIB) $(MAKEDEPS) $(LDSCRIPT)
$(QM)$(ECHO) " [LD] $@"
$(Q)$(LD) $(LDFLAGS) -T $(LDSCRIPT) $(TGT_LD_FLAGS) $< $(BLIB) -o $@ \
- --defsym _build_id=`$(BUILD_ID_CMD)` \
+ --defsym _build_id=`$(PRINTF) "0x%b" "$(TGT_ROM_NAME)"` \
--defsym _build_timestamp=$(BUILD_TIMESTAMP) \
-Map $(BIN)/$*.tmp.map
$(Q)$(OBJDUMP) -ht $@ | $(PERL) $(SORTOBJDUMP) >> $(BIN)/$*.tmp.map

View File

@ -1,13 +0,0 @@
[Unit]
Description=Kernel Samepage Merging
ConditionPathExists=/sys/kernel/mm/ksm
ConditionVirtualization=no
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c "/bin/echo 1 > /sys/kernel/mm/ksm/run"
ExecStop=/bin/bash -c "/bin/echo 0 > /sys/kernel/mm/ksm/run"
[Install]
WantedBy=multi-user.target

View File

@ -1,3 +0,0 @@
# load kvm module at boot time
kvm

View File

@ -1,64 +0,0 @@
From: Alexander Graf <agraf@suse.de>
Date: Mon, 23 Jul 2012 10:24:14 +0200
Subject: linux-user: Fake /proc/cpuinfo
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fedora 17 for ARM reads /proc/cpuinfo and fails if it doesn't contain
ARM related contents. This patch implements a quick hack to expose real
/proc/cpuinfo data taken from a real world machine.
The real fix would be to generate at least the flags automatically based
on the selected CPU. Please do not submit this patch upstream until this
has happened.
Signed-off-by: Alexander Graf <agraf@suse.de>
[AF: Rebased for v1.6 and v1.7]
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
linux-user/syscall.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 1a835798d19cc77da8d7ec6bdc7b..5cd29859d6ac5349f04c03996b12 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -7473,6 +7473,27 @@ static int open_self_stat(void *cpu_env, int fd)
return 0;
}
+#if defined(TARGET_ARM)
+static int open_cpuinfo(void *cpu_env, int fd)
+{
+ dprintf(fd,
+"Processor : ARMv7 Processor rev 5 (v7l)\n"
+"BogoMIPS : 799.53\n"
+"Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3\n"
+"CPU implementer : 0x41\n"
+"CPU architecture: 7\n"
+"CPU variant : 0x2\n"
+"CPU part : 0xc08\n"
+"CPU revision : 5\n"
+"\n"
+"Hardware : Genesi Efika MX (Smarttop)\n"
+"Revision : 51030\n"
+"Serial : 0000000000000000\n");
+
+ return 0;
+}
+#endif
+
static int open_self_auxv(void *cpu_env, int fd)
{
CPUState *cpu = env_cpu((CPUArchState *)cpu_env);
@@ -7627,6 +7648,9 @@ static int do_openat(void *cpu_env, int dirfd, const char *pathname, int flags,
#if defined(TARGET_SPARC) || defined(TARGET_HPPA)
{ "/proc/cpuinfo", open_cpuinfo, is_proc },
#endif
+#if defined(TARGET_ARM)
+ { "cpuinfo", open_cpuinfo, is_proc_myself },
+#endif
#if defined(TARGET_M68K)
{ "/proc/hardware", open_hardware, is_proc },
#endif

View File

@ -1,139 +0,0 @@
From: Alexander Graf <agraf@suse.de>
Date: Fri, 30 Sep 2011 19:40:36 +0200
Subject: linux-user: add binfmt wrapper for argv[0] handling
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
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
to the executable while argv[0] can be something completely different.
This breaks in some subtile situations, such as the grep and make test
suites.
This patch adds a wrapper binary called qemu-$TARGET-binfmt that can be
used with binfmt's P flag which passes the full path _and_ argv[0] to
the binfmt handler.
The binary would be smart enough to be versatile and only exist in the
system once, creating the qemu binary path names from its own argv[0].
However, this seemed like it didn't fit the make system too well, so
we're currently creating a new binary for each target archictecture.
CC: Reinhard Max <max@suse.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
[AF: Rebased onto new Makefile infrastructure, twice]
[AF: Updated for aarch64 for v2.0.0-rc1]
[AF: Rebased onto Makefile changes for v2.1.0-rc0]
[AF: Rebased onto script rewrite for v2.7.0-rc2 - to be fixed]
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
Makefile.target | 13 +++++++++++++
linux-user/Makefile.objs | 1 +
linux-user/binfmt.c | 42 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 56 insertions(+)
diff --git a/Makefile.target b/Makefile.target
index ffa2657269ac5e4ed4eab213e1bd..b6621549b8909d76e64cc0c5c2f3 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -39,6 +39,10 @@ endif
PROGS=$(QEMU_PROG) $(QEMU_PROGW)
STPFILES=
+ifdef CONFIG_LINUX_USER
+PROGS+=$(QEMU_PROG)-binfmt
+endif
+
config-target.h: config-target.h-timestamp
config-target.h-timestamp: config-target.mak
@@ -134,6 +138,8 @@ QEMU_CFLAGS+=-I$(SRC_PATH)/linux-user/$(TARGET_ABI_DIR) \
obj-y += linux-user/
obj-y += gdbstub.o thunk.o
+obj-binfmt-y += linux-user/
+
endif #CONFIG_LINUX_USER
#########################################################
@@ -173,7 +179,11 @@ generated-files-y += config-devices.h
endif # CONFIG_SOFTMMU
+ifdef CONFIG_LINUX_USER
+dummy := $(call unnest-vars,,obj-y obj-binfmt-y)
+else
dummy := $(call unnest-vars,,obj-y)
+endif
all-obj-y := $(obj-y)
#
@@ -222,6 +232,9 @@ ifdef CONFIG_DARWIN
$(call quiet-command,SetFile -a C $@,"SETFILE","$(TARGET_DIR)$@")
endif
+$(QEMU_PROG)-binfmt: $(obj-binfmt-y)
+ $(call LINK,$^)
+
gdbstub-xml.c: $(TARGET_XML_FILES) $(SRC_PATH)/scripts/feature_to_c.sh
$(call quiet-command,rm -f $@ && $(SHELL) $(SRC_PATH)/scripts/feature_to_c.sh $@ $(TARGET_XML_FILES),"GEN","$(TARGET_DIR)$@")
diff --git a/linux-user/Makefile.objs b/linux-user/Makefile.objs
index 1940910a7321c5a44d29c2602f9e..84c770a6cb58193d73afdffa2b01 100644
--- a/linux-user/Makefile.objs
+++ b/linux-user/Makefile.objs
@@ -23,3 +23,4 @@ obj-$(TARGET_SPARC) += sparc/
obj-$(TARGET_SPARC64) += $(TARGET_ABI_DIR)/
obj-$(TARGET_X86_64) += x86_64/
obj-$(TARGET_XTENSA) += xtensa/
+obj-binfmt-y = binfmt.o
diff --git a/linux-user/binfmt.c b/linux-user/binfmt.c
new file mode 100644
index 0000000000000000000000000000000000000000..cd1f513b334f3b263d9e4b5adb1981e376429fa6
--- /dev/null
+++ b/linux-user/binfmt.c
@@ -0,0 +1,42 @@
+#include <stdio.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <libgen.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+int main(int argc, char **argv, char **envp)
+{
+ char *binfmt;
+ char **new_argv;
+
+ /*
+ * Check if our file name ends with -binfmt
+ */
+ binfmt = argv[0] + strlen(argv[0]) - strlen("-binfmt");
+ if (strcmp(binfmt, "-binfmt")) {
+ fprintf(stderr, "%s: Invalid executable name\n", argv[0]);
+ exit(1);
+ }
+ if (argc < 3) {
+ fprintf(stderr, "%s: Please use me through binfmt with P flag\n",
+ argv[0]);
+ exit(1);
+ }
+
+ 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));
+ }
+ new_argv[0] = argv[0];
+ new_argv[1] = (char *)"-0";
+ new_argv[2] = argv[2];
+ new_argv[3] = argv[1];
+ new_argv[argc + 1] = NULL;
+
+ return execve(new_argv[0], new_argv, envp);
+}

View File

@ -1,56 +0,0 @@
From: Alexander Graf <agraf@suse.de>
Date: Thu, 2 Feb 2012 18:02:33 +0100
Subject: 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 <agraf@suse.de>
---
linux-user/binfmt.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/linux-user/binfmt.c b/linux-user/binfmt.c
index cd1f513b334f3b263d9e4b5adb19..458f136fb41727702854cae4e542 100644
--- a/linux-user/binfmt.c
+++ b/linux-user/binfmt.c
@@ -5,6 +5,9 @@
#include <string.h>
#include <stdlib.h>
+#ifdef __x86_64__
+#define ARCH_NAME "x86_64"
+#endif
int main(int argc, char **argv, char **envp)
{
@@ -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;
+ char *guestarch;
+ int r;
+
+ guestarch = strrchr(argv[0], '-') ;
+ if (!guestarch) {
+ goto skip;
+ }
+ guestarch++;
+ r = asprintf(&hostbin, "/emul/" ARCH_NAME "-for-%s/%s", guestarch, argv[1]);
+ if ((r > 0) && !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);
+ }
+ }
+skip:
+#endif
+
new_argv = (char **)malloc((argc + 2) * sizeof(*new_argv));
if (argc > 3) {
memcpy(&new_argv[4], &argv[3], (argc - 3) * sizeof(*new_argv));

View File

@ -1,36 +0,0 @@
From: Alexander Graf <agraf@suse.de>
Date: Thu, 13 Dec 2012 14:29:22 +0100
Subject: linux-user: lseek: explicitly cast non-set offsets to signed
When doing lseek, SEEK_SET indicates that the offset is an unsigned variable.
Other seek types have parameters that can be negative.
When converting from 32bit to 64bit parameters, we need to take this into
account and enable SEEK_END and SEEK_CUR to be negative, while SEEK_SET stays
absolute positioned which we need to maintain as unsigned.
Signed-off-by: Alexander Graf <agraf@suse.de>
---
linux-user/syscall.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 9ec933bdc0078f3fc62bfd499957..78a1f6c347511b85634da898f831 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -8149,8 +8149,13 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_ulong arg1,
return ret;
#endif
#ifdef TARGET_NR_lseek
- case TARGET_NR_lseek:
- return get_errno(lseek(arg1, arg2, arg3));
+ case TARGET_NR_lseek: {
+ off_t off = arg2;
+ if (arg3 != SEEK_SET) {
+ off = (abi_long)arg2;
+ }
+ return get_errno(lseek(arg1, off, arg3));
+ }
#endif
#if defined(TARGET_NR_getxpid) && defined(TARGET_ALPHA)
/* Alpha specific */

View File

@ -1,29 +0,0 @@
From: Andreas Schwab <schwab@linux-m68k.org>
Date: Thu, 8 Sep 2016 11:21:05 +0200
Subject: linux-user: properly test for infinite timeout in poll (#8)
After "linux-user: use target_ulong" the poll syscall was no longer
handling infinite timeout.
/home/abuild/rpmbuild/BUILD/qemu-2.7.0-rc5/linux-user/syscall.c:9773:26: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits]
if (arg3 >= 0) {
^~
Signed-off-by: Andreas Schwab <schwab@suse.de>
---
linux-user/syscall.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 78a1f6c347511b85634da898f831..d70d8a59f44feaf126d8b6187f17 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -10207,7 +10207,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_ulong arg1,
{
struct timespec ts, *pts;
- if (arg3 >= 0) {
+ if ((abi_long)arg3 >= 0) {
/* Convert ms to secs, ns */
ts.tv_sec = arg3 / 1000;
ts.tv_nsec = (arg3 % 1000) * 1000000LL;

View File

@ -1,79 +0,0 @@
From: Alexander Graf <agraf@suse.de>
Date: Tue, 9 Oct 2012 09:06:49 +0200
Subject: linux-user: use target_ulong
Linux syscalls pass pointers or data length or other information of that sort
to the kernel. This is all stuff you don't want to have sign extended.
Otherwise a host 64bit variable parameter with a size parameter will extend
it to a negative number, breaking lseek for example.
Pass syscall arguments as ulong always.
Signed-off-by: Alexander Graf <agraf@suse.de>
---
linux-user/qemu.h | 8 ++++----
linux-user/syscall.c | 18 +++++++++---------
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/linux-user/qemu.h b/linux-user/qemu.h
index 5c964389c101ce00fcffe206bc69..76d0399e82d5c2b599b9472e0743 100644
--- a/linux-user/qemu.h
+++ b/linux-user/qemu.h
@@ -227,10 +227,10 @@ abi_long memcpy_to_target(abi_ulong dest, const void *src,
void target_set_brk(abi_ulong new_brk);
abi_long do_brk(abi_ulong new_brk);
void syscall_init(void);
-abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
- abi_long arg2, abi_long arg3, abi_long arg4,
- abi_long arg5, abi_long arg6, abi_long arg7,
- abi_long arg8);
+abi_long do_syscall(void *cpu_env, int num, abi_ulong arg1,
+ abi_ulong arg2, abi_ulong arg3, abi_ulong arg4,
+ abi_ulong arg5, abi_ulong arg6, abi_ulong arg7,
+ abi_ulong arg8);
extern __thread CPUState *thread_cpu;
void cpu_loop(CPUArchState *env);
const char *target_strerror(int err);
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 5cd29859d6ac5349f04c03996b12..9ec933bdc0078f3fc62bfd499957 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -7791,10 +7791,10 @@ static int host_to_target_cpu_mask(const unsigned long *host_mask,
* of syscall results, can be performed.
* All errnos that do_syscall() returns must be -TARGET_<errcode>.
*/
-static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
- abi_long arg2, abi_long arg3, abi_long arg4,
- abi_long arg5, abi_long arg6, abi_long arg7,
- abi_long arg8)
+static abi_long do_syscall1(void *cpu_env, int num, abi_ulong arg1,
+ abi_ulong arg2, abi_ulong arg3, abi_ulong arg4,
+ abi_ulong arg5, abi_ulong arg6, abi_ulong arg7,
+ abi_ulong arg8)
{
CPUState *cpu = env_cpu(cpu_env);
abi_long ret;
@@ -10578,7 +10578,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
*/
ret = -TARGET_EINVAL;
if (cpu_isar_feature(aa64_sve, env_archcpu(cpu_env))
- && arg2 >= 0 && arg2 <= 512 * 16 && !(arg2 & 15)) {
+ && arg2 <= 512 * 16 && !(arg2 & 15)) {
CPUARMState *env = cpu_env;
ARMCPU *cpu = env_archcpu(env);
uint32_t vq, old_vq;
@@ -12610,10 +12610,10 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
return ret;
}
-abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
- abi_long arg2, abi_long arg3, abi_long arg4,
- abi_long arg5, abi_long arg6, abi_long arg7,
- abi_long arg8)
+abi_long do_syscall(void *cpu_env, int num, abi_ulong arg1,
+ abi_ulong arg2, abi_ulong arg3, abi_ulong arg4,
+ abi_ulong arg5, abi_ulong arg6, abi_ulong arg7,
+ abi_ulong arg8)
{
CPUState *cpu = env_cpu(cpu_env);
abi_long ret;

View File

@ -1,24 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Wed, 29 May 2019 09:59:02 -0600
Subject: pc-bios/s390-ccw/net: avoid warning about packed structure members
This is hopefully temporary. Simply disable the warning about taking
the address of packed structure members which is new in gcc9.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
pc-bios/s390-ccw/netboot.mak | 1 +
1 file changed, 1 insertion(+)
diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak
index 577c023afe3db17ada307b2abbcc..cea8fb8532ddccda2390d936c93f 100644
--- a/pc-bios/s390-ccw/netboot.mak
+++ b/pc-bios/s390-ccw/netboot.mak
@@ -54,6 +54,7 @@ LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \
dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o
LIBNETCFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \
-DDHCPARCH=0x1F -MMD -MP -MT $@ -MF $(@:%.o=%.d)
+LIBNETCFLAGS += -Wno-address-of-packed-member
%.o : $(SLOF_DIR)/lib/libnet/%.c
$(call quiet-command,$(CC) $(LIBNETCFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@")

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c9174eb5933d9eb5e61f541cd6d1184cd3118dfe4c5c4955bc1bdc4d390fa4e5
size 62911540

Binary file not shown.

3
qemu-9.0.2.obscpio Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d10414eb94dcc16371793009bc36a0c807a8e05fc188091348959afef2a67c97
size 849586703

View File

@ -1,27 +0,0 @@
From: =?UTF-8?q?Andreas=20F=C3=A4rber?= <afaerber@suse.de>
Date: Wed, 10 Aug 2016 19:00:24 +0200
Subject: qemu-binfmt-conf: Modify default path
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Change QEMU_PATH from /usr/local/bin to /usr/bin prefix.
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
scripts/qemu-binfmt-conf.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index 9f1580a91c7d3ad64120fe8ee66d..246546b10ca5df38035e5ba46a09 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -323,7 +323,7 @@ BINFMT_SET=qemu_register_interpreter
SYSTEMDDIR="/etc/binfmt.d"
DEBIANDIR="/usr/share/binfmts"
-QEMU_PATH=/usr/local/bin
+QEMU_PATH=/usr/bin
CREDENTIAL=no
PERSISTENT=no
QEMU_SUFFIX=""

View File

@ -1,38 +0,0 @@
From: Andreas Schwab <schwab@suse.de>
Date: Fri, 12 Aug 2016 18:20:49 +0200
Subject: qemu-binfmt-conf: use qemu-ARCH-binfmt
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Andreas Schwab <schwab@suse.de>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
scripts/qemu-binfmt-conf.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
index 246546b10ca5df38035e5ba46a09..e0666a3afdc81f0f8277a53f3e1e 100755
--- a/scripts/qemu-binfmt-conf.sh
+++ b/scripts/qemu-binfmt-conf.sh
@@ -266,7 +266,7 @@ qemu_generate_register() {
flags="${flags}F"
fi
- echo ":qemu-$cpu:M::$magic:$mask:$qemu:$flags"
+ echo ":qemu-$cpu:M::$magic:$mask:$qemu:P$flags"
}
qemu_register_interpreter() {
@@ -305,9 +305,9 @@ qemu_set_binfmts() {
continue
fi
- qemu="$QEMU_PATH/qemu-$cpu"
+ qemu="$QEMU_PATH/qemu-$cpu-binfmt"
if [ "$cpu" = "i486" ] ; then
- qemu="$QEMU_PATH/qemu-i386"
+ qemu="$QEMU_PATH/qemu-i386-binfmt"
fi
qemu="$qemu$QEMU_SUFFIX"

View File

@ -1,80 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Tue, 2 Aug 2016 11:36:02 -0600
Subject: qemu-bridge-helper: reduce security profile
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
References: boo#988279
Change from using glib alloc and free routines to those
from libc. Also perform safety measure of dropping privs
to user if configured no-caps.
Signed-off-by: Bruce Rogers <brogers@suse.com>
[AF: Rebased for v2.7.0-rc2]
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
qemu-bridge-helper.c | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/qemu-bridge-helper.c b/qemu-bridge-helper.c
index 88b26747fc866116637716264dea..9ed35df944fa6968045e675e023a 100644
--- a/qemu-bridge-helper.c
+++ b/qemu-bridge-helper.c
@@ -123,7 +123,12 @@ static int parse_acl_file(const char *filename, ACLList *acl_list)
}
if (strcmp(cmd, "deny") == 0) {
- acl_rule = g_malloc(sizeof(*acl_rule));
+ acl_rule = calloc(1, sizeof(*acl_rule));
+ if (!acl_rule) {
+ fclose(f);
+ errno = ENOMEM;
+ return -1;
+ }
if (strcmp(arg, "all") == 0) {
acl_rule->type = ACL_DENY_ALL;
} else {
@@ -132,7 +137,12 @@ static int parse_acl_file(const char *filename, ACLList *acl_list)
}
QSIMPLEQ_INSERT_TAIL(acl_list, acl_rule, entry);
} else if (strcmp(cmd, "allow") == 0) {
- acl_rule = g_malloc(sizeof(*acl_rule));
+ acl_rule = calloc(1, sizeof(*acl_rule));
+ if (!acl_rule) {
+ fclose(f);
+ errno = ENOMEM;
+ return -1;
+ }
if (strcmp(arg, "all") == 0) {
acl_rule->type = ACL_ALLOW_ALL;
} else {
@@ -433,6 +443,18 @@ int main(int argc, char **argv)
goto cleanup;
}
+#ifndef CONFIG_LIBCAP
+ /*
+ * avoid sending the fd as root user if running suid to not fool
+ * peer credentials to daemons that dont expect that
+ */
+ if (setuid(getuid()) < 0) {
+ fprintf(stderr, "Failed to drop privileges.\n");
+ ret = EXIT_FAILURE;
+ goto cleanup;
+ }
+#endif
+
/* write fd to the domain socket */
if (send_fd(unixfd, fd) == -1) {
fprintf(stderr, "failed to write fd to unix socket: %s\n",
@@ -454,7 +476,7 @@ cleanup:
}
while ((acl_rule = QSIMPLEQ_FIRST(&acl_list)) != NULL) {
QSIMPLEQ_REMOVE_HEAD(&acl_list, entry);
- g_free(acl_rule);
+ free(acl_rule);
}
return ret;

View File

@ -1,26 +0,0 @@
From: Ulrich Hecht <uli@suse.de>
Date: Tue, 14 Apr 2009 16:25:41 +0200
Subject: qemu-cvs-gettimeofday
No clue what this is for.
[BR: minor edits to pass qemu's checkpatch script]
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
linux-user/syscall.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 945fc252791ce79d968dba5f9545..b1e68b7b1b3d689af62cd271cf31 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -8988,6 +8988,9 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
{
struct timeval tv;
struct timezone tz;
+ if (copy_from_user_timeval(&tv, arg1)) {
+ return -TARGET_EFAULT;
+ }
ret = get_errno(gettimeofday(&tv, &tz));
if (!is_error(ret)) {

View File

@ -1,41 +0,0 @@
From: Alexander Graf <agraf@suse.de>
Date: Tue, 14 Apr 2009 16:26:33 +0200
Subject: qemu-cvs-ioctl_debug
Extends unsupported ioctl debug output.
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Ulrich Hecht <uli@suse.de>
[BR: minor edits to pass qemu's checkpatch script]
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
linux-user/syscall.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index b1e68b7b1b3d689af62cd271cf31..8a80cf418ab4299548a85b90e427 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -5440,8 +5440,21 @@ static abi_long do_ioctl(int fd, int cmd, abi_long arg)
ie = ioctl_entries;
for(;;) {
if (ie->target_cmd == 0) {
+ int i;
qemu_log_mask(
- LOG_UNIMP, "Unsupported ioctl: cmd=0x%04lx\n", (long)cmd);
+ LOG_UNIMP, "Unsupported ioctl: cmd=0x%04lx (%x)\n", (unsigned long)cmd,
+ (unsigned int)(cmd & (TARGET_IOC_SIZEMASK << TARGET_IOC_SIZESHIFT))
+ >> TARGET_IOC_SIZESHIFT);
+ for (i = 0; ioctl_entries[i].target_cmd; i++) {
+ if ((ioctl_entries[i].target_cmd & ~(TARGET_IOC_SIZEMASK
+ << TARGET_IOC_SIZESHIFT)) == (cmd & ~(TARGET_IOC_SIZEMASK <<
+ TARGET_IOC_SIZESHIFT)))
+ qemu_log_mask(
+ LOG_UNIMP, "%p\t->\t%s (%x)\n", (void *)(unsigned long)
+ ioctl_entries[i].host_cmd, ioctl_entries[i].name,
+ (ioctl_entries[i].target_cmd & (TARGET_IOC_SIZEMASK
+ << TARGET_IOC_SIZESHIFT)) >> TARGET_IOC_SIZESHIFT);
+ }
return -TARGET_ENOSYS;
}
if (ie->target_cmd == cmd)

View File

@ -1,43 +0,0 @@
From: Alexander Graf <agraf@suse.de>
Date: Tue, 14 Apr 2009 16:27:36 +0200
Subject: 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
concept though and declared ioctls IOC_R and IOC_W even though they were
IOC_RW.
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Ulrich Hecht <uli@suse.de>
[BR: minor edits to pass qemu's checkpatch script]
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
linux-user/syscall.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 8a80cf418ab4299548a85b90e427..1a835798d19cc77da8d7ec6bdc7b 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -5485,6 +5485,13 @@ static abi_long do_ioctl(int fd, int cmd, abi_long arg)
arg_type++;
target_size = thunk_type_size(arg_type, 0);
switch(ie->access) {
+ /*
+ * FIXME: actually 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 concept though and
+ * declared ioctls IOC_R and IOC_W even though they were IOC_RW.
+ */
+/*
case IOC_R:
ret = get_errno(safe_ioctl(fd, ie->host_cmd, buf_temp));
if (!is_error(ret)) {
@@ -5503,6 +5510,7 @@ static abi_long do_ioctl(int fd, int cmd, abi_long arg)
unlock_user(argptr, arg, 0);
ret = get_errno(safe_ioctl(fd, ie->host_cmd, buf_temp));
break;
+*/
default:
case IOC_RW:
argptr = lock_user(VERIFY_READ, arg, target_size, 1);

View File

@ -1,14 +0,0 @@
[Unit]
Description=QEMU Guest Agent
Documentation=http://wiki.qemu.org/Features/GuestAgent
BindsTo=dev-%i.device
After=dev-%i.device
[Service]
Type=simple
ExecStart=-/usr/bin/qemu-ga -p /dev/%I
Restart=always
RestartSec=0
[Install]
WantedBy=dev-%i.device

View File

@ -1,23 +0,0 @@
#!/bin/sh
# sample bridge qemu-ifup script
echo 'configuring qemu network with bridge for' $*
# If bridge is not specified, try device with default route.
bridge=$2
if [ -z "$bridge" ]; then
bridge=$(/usr/sbin/ip route list | /usr/bin/awk '/^default / { print $5 }')
fi
# Exit if $bridge is not a bridge. Exit with 0 status
# so qemu process is not terminated and provide message
# about failure to setup network.
if [ ! -e "/sys/class/net/${bridge}/bridge" ]
then
echo "WARNING! ${bridge} is not a bridge. qemu-ifup exiting. VM may not have a functioning networking stack."
exit 0
fi
/usr/sbin/ip link set $1 up
/usr/sbin/ip link set $1 master $bridge || true

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b1b92b2e22f846e4f7c692d8466f3865fbb95c2523aee7fc0a06524a39061e94
size 47

352
qemu-linux-user.spec Normal file
View File

@ -0,0 +1,352 @@
#
# spec file for package qemu-linux-user
#
# Copyright (c) 2024 SUSE LLC
#
# 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 https://bugs.opensuse.org/
#
%include %{_sourcedir}/common.inc
%ifarch %ix86 x86_64 s390x
%define legacy_qemu_kvm 1
%endif
Name: qemu-linux-user
URL: https://www.qemu.org/
Summary: CPU emulator for user space
License: BSD-2-Clause AND BSD-3-Clause AND GPL-2.0-only AND GPL-2.0-or-later AND LGPL-2.1-or-later AND MIT
Group: System/Emulators/PC
Version: 9.0.2
Release: 0
Source0: qemu-%{version}.tar.xz
Source1: common.inc
Source200: qemu-rpmlintrc
Source303: README.PACKAGING
Source1000: qemu-rpmlintrc
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: bison
BuildRequires: glib2-devel-static >= 2.56
BuildRequires: glibc-devel-static
BuildRequires: (pcre-devel-static if glib2-devel-static < 2.73 else pcre2-devel-static)
# passing filelist check for /usr/lib/binfmt.d
BuildRequires: systemd
BuildRequires: zlib-devel-static
# we must not install the qemu-linux-user package when under QEMU build
%if 0%{?qemu_user_space_build:1}
#!BuildIgnore: post-build-checks
%endif
BuildRequires: discount
BuildRequires: fdupes
BuildRequires: flex
BuildRequires: gcc-c++
BuildRequires: meson
BuildRequires: ninja >= 1.7
%if 0%{?suse_version} >= 1600
BuildRequires: python3-Sphinx
BuildRequires: python3-base >= 3.8
%else
BuildRequires: python311-Sphinx
BuildRequires: python311-base
%endif
%description
QEMU provides CPU emulation along with other related capabilities. This package
provides programs to run user space binaries and libraries meant for another
architecture. The syscall interface is intercepted and execution below the
syscall layer occurs on the native hardware and operating system.
%files
%doc README.rst VERSION
%license COPYING COPYING.LIB LICENSE
%_bindir/qemu-aarch64
%_bindir/qemu-aarch64_be
%_bindir/qemu-alpha
%_bindir/qemu-arm
%_bindir/qemu-armeb
%_bindir/qemu-cris
%_bindir/qemu-hexagon
%_bindir/qemu-hppa
%_bindir/qemu-i386
%_bindir/qemu-loongarch64
%_bindir/qemu-m68k
%_bindir/qemu-microblaze
%_bindir/qemu-microblazeel
%_bindir/qemu-mips
%_bindir/qemu-mips64
%_bindir/qemu-mips64el
%_bindir/qemu-mipsel
%_bindir/qemu-mipsn32
%_bindir/qemu-mipsn32el
%_bindir/qemu-nios2
%_bindir/qemu-or1k
%_bindir/qemu-ppc
%_bindir/qemu-ppc64
%_bindir/qemu-ppc64le
%_bindir/qemu-riscv32
%_bindir/qemu-riscv64
%_bindir/qemu-s390x
%_bindir/qemu-sh4
%_bindir/qemu-sh4eb
%_bindir/qemu-sparc
%_bindir/qemu-sparc32plus
%_bindir/qemu-sparc64
%_bindir/qemu-x86_64
%_bindir/qemu-xtensa
%_bindir/qemu-xtensaeb
%_sbindir/qemu-binfmt-conf.sh
%_prefix/lib/binfmt.d/qemu-*.conf
%prep
%autosetup -n qemu-%{version} -p1
# We have the meson subprojects there, but as submodules (because OBS
# SCM bridge can handle the latter, but not the former) so we need to
# apply the layering of the packagefiles manually
meson subprojects packagefiles --apply berkeley-testfloat-3
meson subprojects packagefiles --apply berkeley-softfloat-3
%build
%define rpmfilesdir %{_builddir}/qemu-%{version}/rpm
%if %{legacy_qemu_kvm}
# FIXME: Why are we copying the s390 specific one?
cp %{rpmfilesdir}/supported.s390.txt docs/supported.rst
sed -i '/^\ \ \ about\/index.*/i \ \ \ supported.rst' docs/index.rst
%endif
find . -iname ".git" -exec rm -rf {} +
mkdir -p %blddir
cd %blddir
# We define a few general and common options and then we disable
# pretty much everything. Afterwards, there is a section for each
# of the flavors where we explicitly enable all the feature we want
# for them.
# TODO: Check whether we want to enable the followings:
# * avx512f
# * debug-info
# * fuse
# * malloc-trim
# * multiprocess
# * qom-cast-debug
# * trace-backends=dtrace
#
# Fedora has avx2 enabled for ix86, while we can't (I tried). Guess it's
# because, for them, ix86 == i686 (while for us it's i586).
# Let's try to stick to _FORTIFY_SOURCE=2 for now
EXTRA_CFLAGS="$(echo %{optflags} | sed -E 's/-[A-Z]?_FORTIFY_SOURCE[=]?[0-9]*//g') -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wno-error"
%srcdir/configure \
%if 0%{?suse_version} >= 1600
--python=%_bindir/python3 \
%else
--python=%_bindir/python3.11 \
%endif
--docdir=%_docdir \
--datadir=%_datadir \
--extra-cflags="${EXTRA_CFLAGS}" \
--firmwarepath=%_datadir/%name \
--libdir=%_libdir \
--libexecdir=%_libexecdir \
--localstatedir=%_localstatedir \
--prefix=%_prefix \
--sysconfdir=%_sysconfdir \
--with-pkgversion="%(echo '%{distro}' | sed 's/ (.*)//')" \
--disable-af-xdp \
--disable-alsa \
--disable-attr \
--disable-auth-pam \
--disable-avx2 \
--disable-avx512f \
--disable-block-drv-whitelist-in-tools \
--disable-bochs \
--disable-bpf \
--disable-brlapi \
--disable-bsd-user \
--disable-bzip2 \
--disable-cap-ng \
--disable-capstone \
--disable-cfi \
--disable-cfi-debug \
--disable-cloop \
--disable-cocoa \
--disable-coreaudio \
--disable-coroutine-pool \
--disable-crypto-afalg \
--disable-curl \
--disable-curses \
--disable-dbus-display \
--disable-debug-info \
--disable-debug-mutex \
--disable-debug-tcg \
--disable-dmg \
--disable-docs \
--disable-download \
--disable-dsound \
--disable-fdt \
--disable-fuse \
--disable-fuse-lseek \
--disable-gcrypt \
--disable-gettext \
--disable-gio \
--disable-glusterfs \
--disable-gnutls \
--disable-gtk \
--disable-guest-agent \
--disable-guest-agent-msi \
--disable-hv-balloon \
--disable-hvf \
--disable-iconv \
--disable-jack \
--disable-kvm \
--disable-l2tpv3 \
--disable-libdaxctl \
--disable-libiscsi \
--disable-libkeyutils \
--disable-libnfs \
--disable-libpmem \
--disable-libssh \
--disable-libudev \
--disable-libusb \
--disable-linux-aio \
--disable-linux-io-uring \
--disable-linux-user \
--disable-live-block-migration \
--disable-lto \
--disable-lzfse \
--disable-lzo \
--disable-malloc-trim \
--disable-membarrier \
--disable-module-upgrades \
--disable-modules \
--disable-mpath \
--disable-multiprocess \
--disable-netmap \
--disable-nettle \
--disable-numa \
--disable-nvmm \
--disable-opengl \
--disable-oss \
--disable-pa \
--disable-parallels \
--disable-pie \
--disable-pipewire \
--disable-pixman \
--disable-plugins \
--disable-png \
--disable-pvrdma \
--disable-qcow1 \
--disable-qed \
--disable-qom-cast-debug \
--disable-rbd \
--disable-rdma \
--disable-relocatable \
--disable-replication \
--disable-rng-none \
--disable-rutabaga-gfx \
--disable-safe-stack \
--disable-sanitizers \
--disable-sdl \
--disable-sdl-image \
--disable-seccomp \
--disable-selinux \
--disable-slirp \
--disable-slirp-smbd \
--disable-smartcard \
--disable-snappy \
--disable-sparse \
--disable-spice \
--disable-spice-protocol \
--disable-strip \
--disable-system \
--disable-tcg \
--disable-tcg-interpreter \
--disable-tools \
--disable-tpm \
--disable-u2f \
--disable-usb-redir \
--disable-user \
--disable-vde \
--disable-vdi \
--disable-vhost-crypto \
--disable-vhost-kernel \
--disable-vhost-net \
--disable-vhost-user \
--disable-vhost-user-blk-server \
--disable-vhost-vdpa \
--disable-virglrenderer \
--disable-virtfs \
--disable-vnc \
--disable-vnc-jpeg \
--disable-vnc-sasl \
--disable-vte \
--disable-vvfat \
--disable-werror \
--disable-whpx \
--disable-xen \
--disable-xen-pci-passthrough \
--disable-xkbcommon \
--disable-zstd \
--without-default-devices \
%if %{with system_membarrier}
--enable-membarrier \
%endif
%if %{with malloc_trim}
--enable-malloc-trim \
%endif
%if "%{_lto_cflags}" != "%{nil}"
--enable-lto \
%endif
--disable-install-blobs \
--enable-attr \
--enable-coroutine-pool \
--enable-linux-user \
--enable-selinux \
--enable-tcg \
--static
echo "=== Content of config-host.mak: ==="
cat config-host.mak
echo "=== ==="
%make_build
%install
cd %blddir
%make_build install DESTDIR=%{buildroot}
rm -rf %{buildroot}%_datadir/qemu/keymaps
unlink %{buildroot}%_datadir/qemu/trace-events-all
install -d -m 755 %{buildroot}%_sbindir
install -m 755 scripts/qemu-binfmt-conf.sh %{buildroot}%_sbindir
install -d -m 755 %{buildroot}%{_prefix}/lib/binfmt.d/
scripts/qemu-binfmt-conf.sh --systemd ALL --persistent yes --preserve-argv0 yes --exportdir %{buildroot}%{_prefix}/lib/binfmt.d/
%fdupes -s %{buildroot}
%check
cd %blddir
%ifarch aarch64 %ix86 ppc ppc64 ppc64le riscv64 s390x x86_64
./qemu-%{qemu_arch} %_bindir/ls > /dev/null
%endif
%make_build check-softfloat
%changelog

View File

@ -4,3 +4,4 @@ from Config import *
addFilter("arch-dependent-file-in-usr-share")
addFilter("obsolete-not-provided")
addFilter("summary-not-capitalized")
addFilter("executable-stack")

View File

@ -1,78 +0,0 @@
#!/bin/bash
#############################################################
# Name: Supportconfig Plugin for QEMU/KVM
# Description: Gathers important troubleshooting information
# about QEMU
# Author: Jim Fehlig <jfehlig@suse.com>
#############################################################
RCFILE="/usr/lib/supportconfig/resources/scplugin.rc"
if [ -s $RCFILE ]; then
if ! source $RCFILE; then
echo "ERROR: Initializing resource file: $RCFILE" >&2
exit 1
fi
fi
rpm_verify() {
thisrpm="$1"
local ret=0
echo
echo "#==[ Validating RPM ]=================================#"
if rpm -q "$thisrpm" >/dev/null 2>&1; then
echo "# rpm -V $thisrpm"
if rpm -V "$thisrpm"; then
echo "Status: Passed"
else
echo "Status: WARNING"
fi
else
echo "package $thisrpm is not installed"
ret=1
fi
echo
return $ret
}
if ! rpm_verify qemu; then
echo "Skipped"
exit 0
fi
# skip if the host is xen
echo "#==[ Checking if booted Xen ]=================================#"
if [ -d /proc/xen ] && [ -e /proc/xen/capabilities ] && [ `cat /proc/xen/capabilities` = "control_d" ]; then
echo "Yes"
echo "Skipped"
exit 0
else
echo "No"
echo
fi
# basic system information
plugin_command "uname -r"
plugin_command "lscpu"
plugin_command "kvm_stat -1"
plugin_command "lsmod | grep ^kvm"
for MODULE in `lsmod | grep ^kvm | cut -d ' ' -f 1`; do
plugin_command "modinfo $MODULE"
done
plugin_command "ps -ef | grep qemu"
# list contents of common config and image directories
plugin_command "ls -alR /var/lib/kvm/images/"
# network-related info often useful for debugging
if [ systemctl is-enabled NetworkManager.service 2>&1 > /dev/null ]; then
echo "NOTE: NetworkManager should not be enabled on a KVM host"
fi
plugin_command "route -n"
plugin_command "arp -v"
plugin_command "ip link show type bridge"
plugin_command "bridge link show"
echo "Done"

File diff suppressed because it is too large Load Diff

View File

@ -1,493 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFJhQQ8BCAChk4A3y0VfqeGfuhBZK4nvpZP/cSIQntWDheF3Tx7m9CxEGbc+
5aHxfrvm45LSjwPCK020WjeqYX2UFQfcvcjoW6iMbth1BLydu11vx6Gk/CJuB7Ss
8AbyvEXBcOfHbginUdqr4nwLD9e8qlVxRFbSHfbFRbuybZghke4y1pZzekkqbseT
kahkWHxr6o1EGAjyIdjAq1IQxewW6yJ4rkHWsRvfv3sUQTqBU+wT180kdwC8AAv6
q6TX4um0HGR46uJ+5SG8DYb00kRMckQtYpTuwuUmlAvNh/qLg2fVVMEiHBpcuIiV
h7x8INuq94vc+tgxmr0bomIWIZljMQ7vp8ixABEBAAG0IE1pY2hhZWwgUm90aCA8
bWRyb3RoQHV0ZXhhcy5lZHU+iEYEEBECAAYFAlJnyVsACgkQ7To545NnTEBCPgCe
LEpKLAf5zhYpDalP49ksqzKaTaIAn2sp4fE8wraAV6yhPPy8/eXGiy4uiQEcBBAB
AgAGBQJSaPcsAAoJEJykq7OBq3PI0BwH/33W3cektSdUsEeEb2yeUw+qKKi54H3e
fGZ5w4fx7L2zXCQOuVPWx/+4Gzr7IosmV8eNIfDpsmhSLOHfP4aS8FYjF5JZ9ry0
671p2vMvsH7ptrFLNZJ+JV8kbcH8nSEk0Lj4zM2tROlLCwdtCLpE4pvT60UTWYdO
ltMNfx5U2/Xs97OkccstQmtWRB0KiQ+h0WM/RSVlkvaPAcHAebTxWRYoagWBvbYY
5zwILPyVPeUrQtGpeDMNg6tEnRIYDLMDkVXugtfqsIxrYwOH1G9JyZJKvY1Qp6/c
AGBfoZboUdZwYgPO//3X9yo4bKxQ0pEsymOty3mvPcfuYh86Bw5AFT+JARwEEAEC
AAYFAlXWjX8ACgkQUhGOPAsp2mvjrQgAqTX+lrL3rKyhHOF9UZF+fKmPP5KnuQhG
aLbnxVieeC5uVf5C6iWJ8/xsrWbg8iOYxiVluOy90duCuBFFmoWrjibyASaBJ/MT
gQ6HjcYfKzsftBmfwlLRyFJDT0zGemd3yrP3zHBF1hrDP65EFUwJkTQ/ywZXfTQG
pJscv2V4lc2WA0OfTxpknoh1hlgCK7GEDgB0ROkAY99r5+TUYkzABlyiUbVN2S4E
sVB3TlnnVCSZILtL1wPlzkn46TJB752uZRySSyYgMED+Y+Em5IgZgCu9TFpfv3k+
irKFLEuFwg5oQ1DQkbvSNNe9+ya5DYZGWVDwt9JJKZKjUbdSuX+CL4kBHAQRAQgA
BgUCUm5rYwAKCRCnoWtKJSdDasGfCACJlDnjkLc8A2wgpnV7yh3ddWrm05j74pNv
x9NZeUuqRLgnhV8Jo2cVNvKYQovWJZpoXRPpqMzfPltCsWSihBnn90GX6aZtZVmL
2PiFDsAx3u13uQe3OmMUS8JXZsRx3K5xMyDHtEBUddqtJ2jlgBgZewQU36jZtPG8
2c71r1NBwU4HTjwXQm5cEME7Rma3eM0QiC5ostmKrAN8jJcGp6YSwZGIPcRGUMXb
Wa1G3QvBW++mkxU/XXWyiiVp1bgj7QYbAxj05YZiehIp07QlOyrX/JEQ62brlLl1
DVO3JD+f20KYcazL33vh2efEWqpAyH1Su4S7mD/oBz8lojKqXuDtiQEcBBEBCAAG
BQJV21l8AAoJEPQH2wBh1c9AfOgH/2yk4SrdeezTz7XIUC8al0mG6TUx+JGP951U
VMsmBS0yj2zkvNSV4hfG/8THmejMipv0jqs4CjwkzqsNnJrzQXOxcIlkOjYE9GPf
IyMM4WVd8/11t9HQIyqHmqnU9dFdniO/KUOBYWBeGyNhu+Ln5LiXh8kKqA+dZ7xs
FptpTFLWhUGbb2vGS4e3g/pNjdVF/qNqC5qTLXsAZO3bTMCGFX58FmDwQv1UFJAa
MXkoJjmwtVPBBCGxDgO1T+EZ6gkOjs+KssnpkYIaqpqnt557b1krVSfB6xNrCxv6
8YhTJS3PQ6S6KI3j9u8G7PbToLoPzhyZqh4bO/PMnbIQoynsh/OJATgEEwECACIF
AlJhQQ8CGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEDNTyc7xCLWEAcUH
/1dmjvgVggatJjzXiq6fbBYXVSLCWO3qkuvAl+mfkNAmYxGfpkwAnFdvtLs0TWNW
+jQTzmbi3KSOJ1Zm+sW1OWMMGJVYoD7EdPyKnn5wsg6vmiDCxHu6ML5GTW7mdvwU
hp+jcbtXytpdgjpPux84In7BRQizQDdLDs/saIBAu5p9D6MBSODtLREQ80G8ZqZn
60gAnEvtsAAAJNZ7iFlQah1cm5U5+TuJzanlKl5PQTr893Ym0BxB2x2lEHjHkz32
d5G3IR1k7/dJq6gfMiid5HGaXViuniGvbsaCvwj1YyiZTkTQgzPsdHd9FNBdV3lK
xcouyK1Sp4oeZM4ufXO5e1SJAhwEEAECAAYFAlJnyV4ACgkQ0292m8EYBPDb2hAA
y8414xjC03gTPfP/CK5osUzU7kG3aKwpYpC/eDpXdyYKyhY2oWjhEmwKtCva5QBr
Zzcr3F2/bdF2rI4HRvxcILWzRRnqRp6SoEs6MVWmD3Y157qRoQvqVdvAQVBTD1X9
Rovc5i5EfjRHkehg4Jg9XU3R/EdQdpw9+Bt6jTSZjUq9Rb52SsEr/Exm0Dnxzmvj
EPgeX1J/lTFZ2VQ4bRV9Fhh2Xs330yNN0KCzPNgA08SoRcmoXmXcBuJdlFKaSN5c
nET2km/5x6K7okDgwud32JJbv87Ud7zgGfi9HZI3kCRDBg8yMhOx8BpcTBwJ4hEZ
rx1Zles1AQT1YJ8BVktt3HjgHlopk/0Qy6eXO6MGr9A2l9ZIuQW48P2guG+Gqhqf
ggaviFMXhs2loXKuSFZn+yBhHNIQRFLuB3WWhnU/V+LrW+Oi//BRQKadU10cLpWO
ezmsw3GKC6jRUPaysZ+jHO1fUzxlC/shD+2+U5KeiScDjkQTN3JWRMFpWSYXf375
bIeEDmGqukeHnIFlSapDFQGLDpgH4PoVn6aRBUdbZ3rVDPhVXJvrnAR0uT7qfyvC
p3oFt8RGYe1SUkp2zEBjf45cDAJdDwKae3HUZv+GjxUhhvXeUTbqXbhs+aBnFlgG
My6mnUG35HCnjPmb4RbIZRjbw8HvHpGhgSU/eJ40UySJAhwEEAECAAYFAlJn+kMA
CgkQUfnMkfg/oER7wA/+MZXdNsCPaRjz2Dwp9j0EvetixBxWFzYqMVYT3Hy0ahT9
3YQNj4R+hfFYCipYHuy5nCtDebgrkAaLRTzmW/w13ZBxmJRkEul+/TnjyquV9obD
PHLCkDJME/9985upeosOrevbQ7R9Fks6jYVeOg91BGRZsYW/6IOfg8F6J1nIQ4bC
0jVMbD9XdbSXf7cA5HI/CDaQ5N7+4c5yWrhWH46nnZQkN8EoWp14MPl1KjaPRwJR
l26E1ADGoFBRdJ6t9Vy/xiSOLGcANN/I7dDWsVtwnYokbFgQQtFgUeutfUYAnDIJ
FexUo+XjxLxRj2Ff3JbROT7/RvwiZRjhbNcAaogpTuwOPeLEnuqKPAD6qaneE360
1PmVHRla2+F82WTn2xeMzk11lIt2wddZHWAjonR/TPX7HiGf1ejbSeBP+jDAn6Z2
K0pUE8/82qStyCGsjxTwf+49ysunL9nnQavGwOLZg51ysEJOJBl1E1FaETeWfz0T
jQqo8sXq6EW1ejfCvhMvLbVpTNR+6/95SLQeyGEx04qIL7TAfRRpXwjVBU7SmKvK
AEOkX4SjWFlK7ZxZYet+UzF4m65PIwz9fhDu1M4ggr8inrY6WssoL9d0rjDMGl2p
S/go41sTiHAUZLpz70f+YkNcx7Tilp0AblYah7/CAqvEJL0M8Mda5Fp2wqHDoFqJ
AhwEEAECAAYFAlJoZxkACgkQLtnXdP5wLbUhHw//bfVat5W/l3CSG+E6EHVEnF+d
kPo7VJNMyF877wK3pWl7oFwHKmTnGOdxD4VXbX6AeWtz72BpPK4zmAAn6yjpDyYm
V1UzLHmGexwDNOxkSscN3qByMEzjEgYOk8/tyr87iFycCgNZ08t63G8XFtyNYN6c
dViE4gM+QdZcTxOCyZ72iXpFvI6FyobUT9AiKiKPCvZoaT38UkvuBH5vx2oHjpKj
Aov5u57laxDb2tuVlPSNtuMaAtmlv9W+2jSPtk1tfmoLehKqHvgTwU8amxG0mNLj
89E6ndPTnO8L+vcKXPaSytozQbbsD5jLWZS+kivmobAVADxkWdVI3u3xopsX9AUT
YP+LNJ6XOoUqdBsFiGz0ciR4HyJVXrx8zhXnht+qO9SMq5ynpKW/eyqdCc1mBQQZ
Fqyu0KhjHzV76Z/4zdjf7HweWSlL6iMnFTzdKHegaijoGRRFyPn50VsjX1cH7rZN
5P7RipUO9reaqCEbP1NYrQjr80pvPOQlag/8MWdCwz5FesQQjOveP9fhWUBH+ms/
gOZ42rckaTC3JmMP4FY+YFJhSLGYKrNc+sf6SkTA4JTkh382qddo+IAsLYKP9xZS
BuWQAwULo3Cw6w1WYQcDS6cvAP/CgsyF3TqJBAHVXhjzGzQYwAdscQAIAM9G9eIm
VHG6yLeZMZ2qMTiKnC6JAhwEEAECAAYFAlJujSIACgkQfwmycsiPL9Z7mRAAq5p0
lP8Ca5Esfc1+G0mpgBdHuvvERaTYomWC4ce3JaqNDBBTOdwDq39hvsbUjxLb45G7
RnXJy1xio02uKJj4O1ilkb0p7ez05UnHlE1D3AM1KUKOuk8SRxpHAwsBmBaKNRI7
sFeNMUucvdJMKifyLLznxMYCDC2uzPfqacZZgHa2ZFalli8KChZ36FZ4gbgkWa8j
5yoq5xK/9eFy+i/lzF1rrBg0P5WvSk4q68Slt+VJg0lJjJufKD89eh4+hzmaGD2U
J8TCVD3nvZnYFLoVzCampW+RE9mr4Rm8iysWYlvVeY47o1bL72BYFDL9ouP3wscj
v7UU66gbV8mGP2DShjpBkuysCSZhXrbwzImtZft6wSoEFs5GoyB6DEg94ckn7GJr
gkXd228Ve93wArINiGQAdapSbZINX7KFIyoPYixhQda7EA9DUuXHdiREL2CC/Pd/
LJ5Efa7UHSh7HWCYPH+KsZBl+ygz9uTufmMHQvTi0uUdUfS7cZ9dGs2IOkDiAn4P
eB/z3puCgdfAP2bt4/Cz9VVrIomBiM3XCYW18bUebKnvgnh0dzvmQS13j3bdS5Zx
g9Jx8TNQFYIlHXa7TLK+AGpTGHuDfXYfQqpwUV2VIoVTapw9jOF81caCXqCZe5h6
VgPawmM576cDAGb4bwU+6K3l1drr8uNdrmqPwvOJAhwEEAECAAYFAlJ4Hj4ACgkQ
twV3oWpW1nBLaxAAmQ4aBJ4bWOGP9bAENjLg72aNP7Q8JYOSCzu18Z/wwdwmIile
5QIhFovHaYUpWweGwXxK8tHqRvmC2OMTVdAMx6nRksEmUzemw/DqfRgthZ2bDAc2
OQ3uLmKUeVcatIyc7XO9BgjfvlpcAAcszutN/XZXSZJBZvEcFft+Mj3tuMZjr+Km
wB0eTpvYQgbgu2lLjTTVUiQ1n3jFXkOKvfcGCQDU+afSAAHjuaVh93Ry9cGCpA1w
EMxvd0l5TZ5QjBL9vsJBcXCPEF98TwB0CwR7JW2b1pdoz1/gkkCx9uGMBaupFCrB
KAc3jgNuw8EpHm2BC7HLAYdLqZd1BspJNzfx8rU6yUjdmkC4bMBxSDpcsPxcLp+1
kf3wmJBNu9NkoeVVO8vwDsc7OfLnYdKNRNErRhMo55bfrX4bYeHOy6XxL16EnzvW
KPNY91dCaHUlgEcZwGWpmMFh1AXANAMD5fH/D2rplKCAeHy8qdYx2SGly6F9qrzo
+aBdj1R+sp/uHl6ZL22PCkEU7Ci5f4piWd/2ht9leZf6v/0xCEgDKaSp6yGZLzKC
rSoWT+AdNJIfV+ROQaXKjhTDFi8r7G9WOCF6xjkB/vozI8XzsfeuWcYGMpWsmYof
lT9rZRQcRZfa9pNRVr/NJqFxrWEW+WrC2GaYjISVrGp9cmm3NgdfAEes2raJAhwE
EAECAAYFAlKP+fkACgkQ0f8CSkqpINc4khAA0YliT+JgE8S9Xz4GK/9QPspO1ORd
ai2anhDAawlDRjcaKBC+PribjoQDmEe1OUmmlO3UZVTk8xsPxei4SJsWqyuKgbiX
sDEo4xHdHuRM5elMaR4n4uKj0FXrr9L3Xcc/ig0F34/6RLK47YgZB+ScA4bASdUv
JQ7eZG4tCMEtZYoMJn6brlCIvo3wX/AagxLx3VnTrkpv4yExJXd10EvyEN8xBkCq
l1bsptl3VAAS8dAfwX5YUmHRSX+dbPHYMjRxhUuOF6rSuJWP4bkwZi41uFCtvjDC
V7rmpg8+62Ytn4OB9TGlhYRNW3ysBaWBZTya/Sfyufx+eQ0YMP6Xuz9WD8MCyBL5
F+EUA8xcKLm/SjLp6iJJDNpuVNZdBPKTgEXvPpF1+G7rz1Kn9Zw1YTZvr59DPQYW
tVf3UFDtVidpvQVtdQgwKzCUlUQN5AoZn27w1kI8sImJlo3330Gk44RDYwGOM7gI
Zkg/HpqW9ZFlalKS2z6X7vfjGr0SoZb9/iATDSMiHVnQzH+U034ASkYYj8V8Ki4Q
rri1UhKTmiMB1fFskqferjOK3w6Y83SC8Gbces1ymnZflYa36Or2NMEtYI3pbb2L
seesh6Ko/j8SvjxR/io7m8aCwpzIQadjOVJTXKziLS1igvoPBFwN5S2U+2u5v5F5
wayVEuuI/8zaqzeJAhwEEAECAAYFAlXXYOsACgkQTd4Q9wD/g1rHEg//Uul//b34
fr6U9GcY1o3YLtDPUS/oc/wsg91T9uVlXDqDNEEuvI+FkxM979BL3vWED+TZzr4r
EhPkDU3XXJcGgB1RwcF51mV8FWwn/lyqsIzVs7ILQ3oRSoZawg4MuJIoHqlb5IAP
AEKKcP4KnRvNORsSuXmUO1fC3EDieq9BN/I2gGfY6vQTqZC7c5Os1FoGYIQl7ZWR
2JhZ+EfeoShkZNYit8yFYVcqkr2Khv0tpdffM9X/RSh5i/SY6HfnuzlDbVr7OEtD
bkYZWoGlX3JLZ8ei7JhO+pp8CLoa5TM8qFij0xiev2BoVEeW7KSuYFqzIY8pAJCC
KNBzWjkUgsBkD5IaoF67lH07nszV21oOE2fVTsICDZYXyXZ3RCwmaFd7Bky5sJzU
Ob9T0a1eU1vhaWnokBtkI8S9/VCZPIbona4z/ORgKgDn5eld6wRdFQ52Xny8xrA3
6Q7Ii1AvdplAmQo9knxpomgREwgBYu52E5VPWZQJDpPoWxeiRjxMLe7GTon+/TnA
DZEuJaobHWf4QeAv3K+YQoUk/IhYgjFu1KDWk5hGdXnRB8Z4s5s/W2ILdhViHwaY
BlwMPERkz8TpVXASzaDJybUXK2bl1djuab2YdW9nGRR/HCAjwgoGdfsKaPooVe/E
rKoZbCUjKw3eTxp58sg/topzt8fqOtf3RFGJAhwEEAEIAAYFAlXWhvgACgkQPCUl
7RQ2DN7k4g/+Lc4pZDrcRi9dToQJgJki7Ac/aArrSUS+Vn0hGbkJI4G70716LNRO
QnumP4MQaoONDzhv3/IgjRaX/4Sr21VG/iBtrn1d2VkFnHchl+WtQ1SaGul46srE
i49pltI3WB8fckw8Fjf55z+18qd0FQan5I7PHFM1NPPkZsbgpbU85RRltgmzgWCk
9cNXUoxzRVYkw3nKwa34rHBT30xybV0vfBLeDRGXkr16AeWV9cC/sD/eMKMmk4Mc
HV1xE6obQPnvDIKTdUPyPslpb0LuGcpAVAbBAJXFFAFN9hDqblqsWQY+pWV6YeLQ
YdpEnxr1iaRCaee2WAXaxiXuwIx3jKahxKJtWoYFkMqpSebq8Wt64wiAm4iiykNu
q3oLsWcNXLVwg62RbhDCvT4me5Cgg35KTg67pJvkgD3oeabwplpOK1CuoQDFWrZY
+R+OTSEW8vbaBBzSdevYeMlvo/uQnxods4whm72Nej5bBnp8EYkEtwIqGnK7Vv+f
FJ8+SumcDFuegjGkLGxzpSNJsw/gHpgZJiojuLieTixiWL61f9Yk+sTuNsIUBMZW
/GVS1ZId1eu8JCGfIY1iC6k5Q477zYw2TykajWLvzRvVp6+0/liaSHpEFpo/yals
EAYySaHprg+qBZK3vUCBSdkQQijTHVIrpEBzq9U0OPmZlicvNEHI3O2JAhwEEgEC
AAYFAlJv0BgACgkQCB/CnyQXht15tQ//WO9E1Z7LqlDzNU0V20NFBedXRD2QTA88
RjuTIohMLZlWtvbE9mcVTILz3LzpuW26/cK9uJCDlDffcb03HyHHihS3aPWOnxxl
kb1sZuxHSq9zHdshskqUwsJ7mEleHZ2lFnWCm/uLrvkuzxTPnvihe9YGO7QGnjMX
AcDOn4BAFWlvYKXWcAxPeGF1Q+6Ouhyd94Eb7QoyrvA3m0KQ8crWnij1da5v7/VZ
uCmS3pHQ+CMhz5MLVXunczQGMvwFviPhjzBAJnsG+IuM8UHa0kdNZr2MI4kdgeON
he7RMZKwfXETUgn5kWt5EUnZ1LiCdjEBLompMkpkBi2kWof1XsUy1qy7rGGveOtT
VYMf2cUDNpT/I7HlwteG5eGNnECH3mtCCEQyrJksK3tAa9dHKXRFBaLPW5RydQsh
+1rHPqg5lx96320pINLyUjiYXsI/9hRuQtjoeQIzCr/Xd1dkgaRSGZeaca3fIj6o
edHMnypxjUyfgWVGhkLzCHcmhq1JWN9MHP7dk5/ZjKJXzk0b1i4/80CyJng6dbOd
HmZe6TKlrAGTcsI4zcGS8r6yNOFyWfjID74QhI2hOZBJViW0VF2isjMssxTTB1bd
pxp2wyqg6g1xZwX4puI+6O4frzf4DKXLhjeS/DXbDAOAh8/G+DXNdimPLDra28bh
HmmfHEySv1SJAhwEEgECAAYFAlJySQoACgkQHpo7X4VAg7Y2zw/9G7uqZZhffHNN
zqzD0syvm24FtMEO4sXWITzc1VGKA/HiFubQlbne9r09ZlhhRdAwD0AqD6EBVe/D
7F5PssazPnUw5eG6BQnt24BebcO0/M1EZCawmnJcszAyZt1LPjEjwRKwIPF3EJMU
OGejsyDncwPCt5cmZhYwBsue1mLMwFy2FlFxoKcIE0aPeVvo4SdxgQzgLK9b5w8z
ZYo2mblp/ofEEbzjxDGRfHs3OYNshI3NCvr3e3aETBlr/RUiC1O7k7LlKnQnpnci
VQ8oLiz+lLvv1i5DacA9F3clgT99qq22f+pkP6TSEa7CQkdQYQB4MjkNtoHNB55z
QfsWU73TDURNrwt7CcDeMi54q8zCwD7JfrrYBak1KKT/HcI0l1ZVo7ur3NZDlTF1
4xwE8aNyF0s2cMLataLbPiEs4wZ75ycsuIh7DZxwzx9Yoa4jMVxYFJAHOGJPqJ/S
cvNQu8E+EgMUc1yiaYTDzjCndyAl7gh/0j7Id6BxoS01Gx/IRzrxk3HwY5NUg9Eb
DiXPQjfApn2uKMzmuKTkhww1/xPR2X1FwvvKWEA6vQB7Uk1pouVPG0ShqT5o4Ofo
HNHf5UthJXDPDSWZgTp/3yveQ66UmMg6GAb/yTFmkimk/bVJ9pMedDVYJi2xfac/
vsEJ35iP98+tgtmF2ivcZw2bbEwBQq+JAhwEEwECAAYFAlJv5/8ACgkQNuwWrNAY
aCv2BBAAgOK6hej7O4f+Rm7yejDnFTfBNMEzvKJUEsuoAlK3CzuoTyIwjzXqrk3b
nsbUas97ffEKzx/32FPQZVrmYUcMlhCZ5M/FXHmk9uSIVhzFPYejyd9zwLz7UIeW
xC6wM8iCCi8f4Zj8fNklaoJF4DVGj7f5khm8N4dG75efhINHGDd4Gtq0BbKYyt6K
xzjINu6mAdnmb6t5+mFPq3LOIvPx/fN1IrVJP/Yp11HOwnAHrw8ltepmNGRrYKqV
KN9AT29w/27eKwrCvkoovHfvbNIjpxwD8ZsgXdYVzL7RjSVaYPzPemEaCARa56p9
0yipaLovAfvxEZVa1L1xeNF0O+OzvU/zsy1vW4XGFtQt+Cz+bOzKaok33kA203+E
Z3ou4ule/or37eO90Yu6GPZFOBobAraRiD2Qqfu6AzbUAuoGJlpsTzKOB9eWzvkn
ZLnQas68bR5DufesoehsZU0tIUCIx/pnIMBlOWkSmzOAom5hcJCakvvxYOwtQnmL
1yBgb+xra13hykhsmc5gn1rJp5C1lYdF76OS3xGfF2AiSU1VUBrqzQtjamGgEw7r
oWtGTOeu6YCdz8Naj+V4/qCom5bO0XsGNpMtS1NDaL9NQJglOeOPNEJ6SiLypaZa
dMCIShhyEL+NAI6btHTFvA5a6mk3fZ1iBOwvzBh/A/bu21YE3cy0IU1pY2hhZWwg
Um90aCA8Zmx1a3NodW5AZ21haWwuY29tPohGBBARAgAGBQJSZ8lbAAoJEO06OeOT
Z0xA27oAoIm8++RYoHIxhWYIU7ZrUWziovXVAJ9EFaJpUsuE0Dg+1TnrnX1nDmlT
KokBHAQQAQIABgUCUmj3LAAKCRCcpKuzgatzyGHzCACMIvFw4KCY7OuhY39AaF75
6+CbcbWagXqeTGyg1otch8bQ3teusSQpqN/RsLflp8bZnaaKJ3ufL/MrkCqOPqdX
gOgo9LsAfQbXbVNNQJjc0NDcTdcATQH54Fv5rWj6v8NnbP3TMSDWcuYAX77Ou5No
MlVevK4UzwNeESynGWxs0Aviya+/iqr67GRtWO1da7aQNhV/TvXIR2ZU5G4SEkb1
zwbXOXXE77gHTNI9JUDgTsp3q25bwAXwSWiitxGkzYZwaKlWLTozBbS3U/VzHCTL
058pGdw0YkNJaLL9ysehCJIvZOnCVPfPIBQvuGdZh5+1Rtf9Ztab7RARK/0cRgOo
iQEcBBABAgAGBQJV1o1/AAoJEFIRjjwLKdpr7pMH/R8KyclRez/TT2UIyb6ne4ac
NT3qsLIZkpq2q0Jnkj3QOuoEldlOk1r1thfZhYm8goqvrWmlySxJKpHXKf+nlLGr
QZjatZjf70J8PXu1CAiDBZKAhLL+yzoW11QyZr/UjouhLxFrxCi6yCWuY3oaKi03
HFsvml6vOAY5aYwhbVTYRbucOQ+rGUEgVTIrm2+JpgbeonCH7X1x7fVXYGPgoisR
QWjVncdyHiUdx7gHAT0/APYtRdFpQlLRgQqnr6lnxhLindYe+7b/jmYykJI0gjfe
D58qEpoSUOt9QynLcoVkzz5p+dMfHLZHkEWfSIAlqeuXQjRIU1VKptmBn7CP5laJ
ARwEEQEIAAYFAlJua2IACgkQp6FrSiUnQ2p5UQgAsDzYgPcMWqq0jcSwRpUKLspJ
PdNte/d8u97JCgxlNqzQi8fICutgYe+ZZj0tto+34OHB9kl/fwI+l/GBZrPCWTxZ
gnG6Vqcxb2CBU3cDtqUEe5W7ddFkZfwn34/2RwSswGXgGo6fk247Y3JUDoyUgfyF
w2bYrGUSPG7pXy7pMe2r/k+HbKF972m0sj/gEekmOC4PKhh0ywJf4bxyjB/CSsOw
zV4Hn3i9ehU1sQtarlQ1J5udvUbP7Wu6TvWoA8hwJcWLeBPlwM0ZpAn7wZAf+cik
16s+wve//6a3GUMwuH2PAYBoGDs+0GQMcmODnSBmQ/z9Gi3NTzR7MM2gF1LCPYkB
HAQRAQgABgUCVdtZfAAKCRD0B9sAYdXPQH6mB/9rBQWUp86ApvlTbg0glLsHVbQj
1IqZ/0F409FGcqToDfhW3y/hBktusqOFiQau4/7nz4mWisp7SJTcwwM++i4llfoO
Hfo4IJBRThAajY0GVXT9tukXVetlHzYmtNgqPVEs0RsHz4h+oFXRoKx2GJA/ZF5T
K9ABJj1pW+MpXWTe2RLt/Qr4+x+GCbE7rYMrzlPeqaGPbBjr/LfxigNgJcCzxcGq
7CrQ76hR4fKo+N6xZC/je/kdefHpi1bLC7WkzLTTtaPho4jccxbsLwCAClYQqEMt
BtnqnYuVw5EqMOExxrp7OSQeMlDGAiiR63nCZhmolZkopI1XrBxYjkHwFcCRiQE4
BBMBAgAiBQJSYUJeAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAzU8nO
8Qi1hI9nB/9tTCMhr6aHUj1+ntsurEtHL2d60zU5vqlat1WNsiZR1/ClXL0+krvb
NMpfSeRXXiJEAqqaOPlPwDQyuEe63Jx5f4BMNtfd9pVREjzDCocZS5bgG9OeJ66n
cKXY7cX/lWXE7eHOAc3BfyvaaNS4GaDrehyT8SAvramGEK7JqzmVLQiY4DlzuiJG
nawZsaBTRcUOKlgdrqGfvxxLXHjiG+eqjXzo9+jLRClcKUnGDwMWnj3fZTuz+L5Q
jsesiMztzMxJfgHp+/zWClPFsMEZ7IQJVuBk59l26xEHiceB80syOa/MXzDh9yS4
f2VQDQUe3OXMNTD3u9XwI+Vs166/7HCbiQIcBBABAgAGBQJSZ8leAAoJENNvdpvB
GATwXrMQAINrsWfvQEOMEDutIGmBwQ7s7/YAl71mqsNK3coYFl7mQEl4qP3t/f48
uxS0q6wr+HPdkkdxQQgQTzE5ltnBpKdBTSFHfQHFCFTyfJpmgmWR1IWe562BhATr
wCt5BDY56hmqlxbKXoBz5oUlyRVAFNHJW7WaiQfFUC4uOw9JB/ukgwnGOO4LpLG0
PDuO6V7ObgR7uvc3P83Al6VMSWJMRiRbZxLd/zo5Ft7nq70op4fGkqdgHv1SHDzv
19myqDbY8Bkh0hw1XJX8OV+5Uo9VuG9UWzzTlcmZVGHlYeI0uFVIyciQbwUH4Q6k
/QLkzqZwkdp37FMPqmrZ93rHIcMG9uECQ/uMBofbxpLNbA3VfgOEONhMjBux0ri9
Q4TfCAJa4MCgt2mGZvbUhirw1CzlZiDjDbx6a+HM7vHc11oIvuOkPyAXCjg8DN72
e7tAIT9n300W18E8CrSvLeI61zoAap6mIY8nw+eCD/Ojk3ZQHFrAUbAUOhoze423
wI88zwx+xU+IF/uaBUTpkV4nXP0LLQg9m/4xyXxNTUFfhiHs4Uhsvm7mCWxM/hdk
Dv2oZs7XKCFz0plAnUl9feSyRg9weIE41kTTmYEY4pKk+VANz5ccENnZDLY2IYft
jVXG5ts6REUYZSJzbtbqex7i7mz8zFOCoYiEhG7VAzVvcdzB3MAsiQIcBBABAgAG
BQJSZ/pDAAoJEFH5zJH4P6BEqS4P/iG9sqQ435OX5Fr+OhLp9nH2QTTqXbV3PM/C
d6NfKf+DSAWcsPZFuVvl2StymTA2vsIdiYdxpCOZe8z9BuLTpcyjj8h1sttZ4Wqt
mLi0rTuCvODA6y2VBzTstUxoyDTqbIPRyNWBjDQjKRjZW/IIuAHP78jmII1sFMkD
OzV8vFlteGLC9S6yDjwGDLc3pfczKanX6hw47hS4xoXa0MGeFcWxazoSZrBtn6hb
VBQsthOT+PPaGxVPiJjfB3coAWGal3/KJuLdqg9cThxmcEoIYK95L74+7MRlkkxD
hGdT3LpkvzHWrNePl042o5KLE/JVtErXpHgh//xODumn92CVL8ChH7ztSVY5H479
wUud6lF3gDtg6fGwgUv1u+HhY3fN/Ggjn3uSZ3+YduBaGwnaId47vaWrcLgJY/f4
d9EODcyP6uQxAG7Mr2AtAjAFwoMgf7MKc/0asYBSJZjpGPesBjkC42Mjf/b5rIqh
xAVSnDjXdZ7kTSSHDtZ19lkLG6dp2v/HGGYNq71P814/GotjD4xlOk6tqOuGAYob
mOg0aEWj4GmLkX0uM4WNO94uiWuesGfPmDanoJVFEqD+SypH/kNigySo9E7Ktdkt
bhQcKOO8NF+BXrzFqpmwk5WQO10eZW1opsausUPleJiQ/mqcAksiglZLRpfk2q6f
3n+3euHNiQIcBBABAgAGBQJSaGcZAAoJEC7Z13T+cC21uLcP/0iWwQ3hnROzot7L
roxU0q4kbPYJucbinobxIf8fsoxNb9W+/s62z05ONhiKRwTatBL/FjCNTfvCiPCv
4lmOF7g1gYAZgEnPI62OLSYEfWBfnMNacDYVAD3ARFqYT7fMCZBDmDT9ngZOuBAv
9XRiHavDbZzAeRBYkuzrOQqwoy6tc3fN6qjt87/G2RaOme+ga4HMNVOKeRZfe62b
ffMGHSFbCUdo79Sj3KYkejdRuqmfwkZjsXY/lKOTscMtZWDxPaqe5Z5jKykKK1AH
1zDANVXGyOOd0lYja8zt0mC/Xrj8j7TszCGx92R/EwOY7TSNBVWbEZrVkmH2qDNf
+jtts0q7E8k9kaqt3jhKU4k76P0mk7tzUYoV9DUoNBL2XMd8GK5/5mpEFzu4vVJX
ULUbn9lFt5iKXZ/wEQ/cQCFXl1Qm4lLKq8d4D9zRMidBD395nfRoBWMcFp9sIq53
onCWIX58KM7owUZ0JlEQfxMumZA3VMxp0kupC8jLpaPGW3sBquE8S+iEY8CD6enI
4ISFrn5BF9osSeLOf6aZWHeCBbEhLW1eJbDj16kCwnN6ditvzlyRzTvDk3pUHKtQ
i9YF/wfoE/L0Lhz7pZRf+NIDPKtlWOncCUx0LeUX/EMgoKcWoaKuFvlcPrDdBSJy
plczFEkqDyRLMHCUXNM3v1UlaV9PiQIcBBABAgAGBQJSbo0iAAoJEH8JsnLIjy/W
xRIQAJva6VN+4Vt0UHqWawZe2GSHOhMvQy7wDEO86ANEwsI1WhzmghEFTxlvlV/B
aHb5O8dOgeZhOYXRLDmuWCcE0RzdTlCm59ZffdZdp7XWbWW1ASeEVqGqf7Ez1hKH
2yw20jq4LFsHW2HMUYC30YiD7A4TIyf7ISF5GWWwMvxaPE3iTghS64opKDabVQKt
j0ePb9v+GRvsuGjooQDLIGzx31QZjHmdobsiBcj1nGlu1wt1CyzbIrZMLE1WlIsk
FEHFvQy+AQi7MfegK9RP/nkMLcJ5P6/XLMjseeGjJwVKgZxVN5HpJ0GGZALKwTYV
Q+3VQwOY7K0rHhBzE/iuHzjQPvqcAJqn0rAiy4+2coH9XXQqZMNlhLLTP1uNjjgX
3Z1R7iIcI+tdLULNQuttHKS/2dS97IOLiD8he7HbT+szElVMnK4U7AtCogNJSlM3
CXueH2GJUDFlOPmI97MfDvmVNoKpX5GW7HculiaovKBN1XwQI/RPHiu5L4EgvD0P
fPakwNYeWmFr43cqRzgZhr/o4Jo8IhyS5bZDuVkKDosSBIznQKccr3BEDt/OJdhe
0dhg16fwc6IVwgpopt7Qd/H6lgWKa5t0108b0ZqqYacleq45hmBlJAM1R7vcommJ
X9GSXM/A4a642D2cwwuxy0Z7j8+dCfIxIGReAMKOR9n31EPSiQIcBBABAgAGBQJS
eB4+AAoJELcFd6FqVtZwv0wQANGMZocK1RK5YL2u8dNLv3NZYb1YGZ4mHVvL5YfK
lbB7Or3VfwOxNDVPJyAdyFu+FQM872w42t5V8n/pEZN65829xF6Fk9r5UVqQdldD
WAryttTZZqv4V6Zcd1dR2WGALDfVTLQCxHfwdE3dXGlsTyuUqeY4lk9/2uw5s3rl
j0vfUO0iojqi9zoeKIbhxljLzBe8jK4m70mqvrBkkteCacERxyDyiqR7n3E+wD/F
Y14tlv5XcGpJPxLU3F2mTSEu93g+rsqK7+krcgoLduOYeUJHGde3GIwYvtMnzCUH
1+fPEFN+bRxzHM8ZZJLpYn3TkaCIxK2enrW9PJ3xeW6z6QeoALMSXesG/nzcCm2d
TZ8hkzrWwl3Zht7HyR+b9w8uZk/408LjpslPvTTHTq7ada8FALD0pZSg2N6+dyVL
wd4S++pQz2Q/PtQZynCyvTYTuZ8LG4JjD9thMBvyU676ZhlQDqNv7rBDEaDFlrcM
0w0Y4897IelFFix+sciVM6lX/Kqi4mWLvjPX4Rpa3ouyN5Ai9KvSbvQvat5fOHD6
AHgtVN8FA7RFISUz1kAaNesrUJ3TgGAqPOWwj3MVDvsle7Z3gyCESUVCk0caVEvM
rdnDeGfvMPdodv9dXpZwZRZRsGGhxUNFsytKG9hAnM2oUnm+EkX5j1s2Cb5GCt5V
iXUFiQIcBBABAgAGBQJSj/n5AAoJENH/AkpKqSDX7BEP/273H1gHzqdSwrSvrWRM
QxkiEMXDg/e6tnns7imJJMmKVf3UMmwWlH2rkFguCUZqx3UAGfIh1oalM01p19c2
4PJa5lXAg9oG3yow1O2vR6+Iz9M7v4R6bARlFpBP4i7wCqe0YNjSpB5mFJYwGD/g
hPNonYHaZjVO4dV/IfjtJGyXkjWd3sTaNsjI3b0plFChxbqgbPYigCWKsOVTnmZS
lJTMKfZoC+w7sAG9n9b2WKIbc4yxTszdAh5jcgMtcjePol3IkCJFS7ZC5A+wTHKe
HaIqRGe5UEZtyaqOIwwNXy1WDmDMvT/xPV/swW/xCpTV3YSJYIc3s3N6k619KD4R
H2DUg1m1dVmK3IWsUjz0Z8wbUY9O++sdubtuW9eNkACHyeuqShRflM55qCkgn7rU
Lq9p9V0gkocF4AfKRCB0wYhajw+sUEY21mpDfgrPrAVsPM8It9VCpVLegJTS6muz
tX+U3iKP4y8qTPuJ6s83seBDnrqRDYKkIlfKXFVgzsJSKHMUJFBbKpJrTmFELtKr
LQM9oOGaQLEnA2JWl01tPxcfrK48dQXwZJjZvfgWClNIHo9F3eis0pwafQlBueRf
mV/jYgSJHXenFpN2r5FedzFaMbFT7UJDffE6Grgk4PAdu2HUwW0TgSl1kJT6t/DI
cSjyd+yQpVEoVkAiiQz3Bmd8iQIcBBABAgAGBQJV12DrAAoJEE3eEPcA/4NaKXUQ
ALN4SwCuZuBAiGZWDan10Z4YF03X8z/tAtwDtW3hE4w59n+SZJtKC1YoYkjFYmKG
q7N3E3uM/o00NWgGCo6rLCS7M/fwFQ8eLvQYztEuxt6OkRbIheakF78ns9fGEBTh
xjkq4bBz6ws9kYRLFL/V0EOgV2NxzOxEK7mWY9E2TkgtlA8VVYRywCSmhjuMCnr8
+sbZJnkZRVg5s1b2KK8uwf0BSkzalm83l6i0Aa5x1kjsE9gLf/SkZjw8ggCxEDSj
N0wlRyyWv2A5m6sH2nLSkYFMnUHGj/5zoPfC25YHvBkcxQ/oUFpWigWumcOgjkrv
XFBayMY/0THQwqLYs4sNxEFIqueGv3VlNo/2k6IrHTeaWb8vHIs5ChoA/6dnacM0
pGGsJWqFtDfSwX9ZSjS949QM5El4yK1i9txJbzw/U2HiJ/UrtGx88mBSVVynC2un
IeYsWojlG2ENrMAKeQleQlYjKcimNxdbYtOYAlHn/+zUXS5dlDvO0sUrKPhVAPkF
3/chQTHPLQGtA+vhBXWKBHoog2sAUY28kNsUj1aqnDP7RMpmFoJJEWlxj90Hs1QN
8Xymn191My/IGZ2QsXjZknij4MbsyEks7d3l8veJ7rijPyJ2WvAXE1j89grFhW64
yDsiAur78zvPNJ5T2fIVyhBBNN4lc4GtwgCOnhJsKYBpiQIcBBABCAAGBQJV1ob4
AAoJEDwlJe0UNgzeqTkP/2CE/qK/bokkvt+y3LYQ7/k6zD5OK0yvYIA4/qAU9jZV
Be2wRTuUY2KxZfJoWaV+wuBav/uklkDsWjdyTiyG6aUj5W8SqV0K6D7Tab8XKOcU
5D0YoUn2j7lfjwgetBTszUqWBTgln7cv3mS4b0hIRjm0dT0ab7P9dTVIdxaAqBLG
Rvej7taxarPStoGusvWC1JLaMhGJVRfVwDCeX0gOi3K8sB8ULLLvJ5GLjDcQC8Rc
NTzWrnULiti5l39qTZupj4+SNrlmFQWwvNPtvBstpBFHo+qYnFOEL+c1pmsN56Gl
H9dylu4xaf8KG1zPMySy+alHDrqFl7qlPOX38lQaO8hehkqQAgQ8A8tHo3NiljuB
8nvY5SwhUKyLOr+S4ouLptgiAwHfLFqfFxJRlurKgWh1HxI/tgTyhQy/4Q8Q2nuo
R8LQkaZ6unxb6HP8cj/+cKVuILt4g9qsp2wLET/YeFJoL22NBtdHI6ImnWuVM7jU
pB9wjg/a8s5I6tKUsb4T3rHnUIZlp8xJ2f8bDZwbxP58SkckjZb1JKNXHlusf8U+
SVNNVup4ngnnoWZSLmDJIL9C/JPyWdsq5PFXuZrfjBxMQLEM87/MOTUPNjeZUyRi
cZdJ3bFXshRB1Jk4vAWu0TEKadCNr2Q9ZrbHEe7qzCbMFj6qkTvt0ltFkU1u9BhA
iQIcBBIBAgAGBQJSb9AYAAoJEAgfwp8kF4bdI98P/2i1wJNRkb99anzkE5d+Th1Z
k2SFNLnA2a4YRdpLvKH5v2uZICwu0GUbWaI3N+6xSaZUgJIGVa3VjvTwPACq43r9
uR7HoNO888mwxckYatD1dyTh4ny9j9Xl4cocNdYiVc9ihVWajLjqzBpKcbQAjor4
8ccYdLEjaKndXVjlgkbi75u0AtaxeU7SU1dYEO0/dWk1SEDxyZed3GiZi3f4k5Kx
Rd31X3SxHAKUlCJHRCbyqAMi0qWr9YR81RZmp56gcdMoW3ORyVQpVStWTu3iQUoG
hs1LhvQbKeFIJEnazObWj0okmtLUYu0vfaDZ+FZhgngOzvm/icPulehFcpDquYAK
f3BaTbve4+VyRRF7keUJP8FGZckRBQzoP7k8TFdP2Ita/aMfDs4HZMBjorRs2lD7
a8YoEsf8uHY003ET5AFiGBF1muGmWBD3p9lAszt5QUebfUBbZHjDmnArRhoyLrZU
uSKLoULVg4usOSJco73V/eyyeGbhTpqeps5wXowAX42EbS5ORWtCsA1wn8RY3DYU
3YV3PT3r1RHN+8yh7IVGxhjPV8MyfjVtKuhsVF81MORwiHVchkHx3Ike+S2fLWGU
JihJ45m0l7YU16TurZIWsohCFBfEK8stP7XsPtnXSIC+MC4IFsxcc608UW2mYOlL
X3IJ+UekrED1HWJE0x6oiQIcBBIBAgAGBQJSckkGAAoJEB6aO1+FQIO2tAAQAJU9
+9nPc6SZdNWKbJa0HJAgd3nQ9oV9XOt0059rO4aDAGk2nIH3ZMp7XjfkKYOHEHSj
/Ee2H6kGQ3BxdEgj4FLAM6EF63OnFZgQ7Bxn3495bPg9F/il2itL6yjyGli4UDNc
Ij3FjqOtks03r1mW2Sm4sMb6G69x26Va6wNJeBt7xRuJQa/U7oqeTT1BC8mU5ujc
TUUNyNVmjxiMcTZAvDq5Aen87a+mfg2QVGiH3BlzTFcYJ+GdKlX7CC7KDI2fAU3h
dtS6p+2E89g+SGBISb5oz/IWI8cQBV/OQzSXK7QBKR2cL1tPxk1OO/Y+ps0h+4vL
H7KE3LxPnNAGJmcwFYix594/WrkwK0m18h6yK2tzAZOZGNaeRQyU900NVgYeC4qr
USCk92wdQa/nSaL/V5TEf6wkJv6X8LP0SHDGUSwm0NRr8cbn0nly3rpa4YfYOlLB
+mM5BDZ+XimlmT0iE7xS7cFqDIKes3dvUhWhsFl97c9ISOhkiHc3XQS4gUM3iZtK
X2e5I854K0QnDjimmFcacty4ZsNlWfQ3YcUxTxnYEZ2fnmNWywyr6DeRyvPho6F4
dA+y/bl55q2ikTsZGiXdtSsdnniAJVM5z+zSJpdD9EVviUYEN1Zub+8zLmpgUrH5
BLC9VU+IiPnMwNs9FMZI/zGQpuJ8pTF5CTnqgocCiQIcBBMBAgAGBQJSb+f8AAoJ
EDbsFqzQGGgryvsP/1Cu29YLdqmgwWU0JByv5l/YUpYQPHKAhZPjTtvBwYdCfGHv
5AEUnMgcnXBZiKDB0SiTSJcDOkCPU3VqUe1d+lAtVHo3pJf9j+cHgZJ+w+Xja7YF
xaXcs7R6z0ToxhvyqoatHUUwFpYTXW3bp76vF2nfFzInJ2sWrTIR3OMp4YWYlAYq
g0lyNLWkIHdBEPe9BaBSS/v84aTcx30KqJ18Ern+HSIyJAhc3rj7OGQ2CPBouCPF
Qmv1BFu5aE1EyKbWZ9lIXs7Ryc16CswPEuLiK+zqICOKE6G3LxqYbtLMNTDtIQbE
jmF96FzpoeJ4g2WTeyN0CKauYfcN4eUlKDy64vSO8Ci8UzeYYet5Wi175uMiQ9P+
0fZyvwSDUPlB5yS6HC2JNNraNeFRaXVLzkapikPdxUJtpL8uipCehOFpb6NEysgo
VNtz8yFEELuRQzT9ooGr4DMwUf8cEZEw6fshNQoPkozGDd3wTiENqMKQr24noN8r
PTjQ7K8ajkipmdtzvwdwMxl0qs37i5XNGkeMNe+4RU1Ikt5mJSaPk/os8k8ngpkW
iZv1tphnsbG2mlGBhXwfXXwoQTlUfyzu2BaHWaCi8tp5MXGBzXxb2bX5qefjpz2W
zVE9ikFOqKM1LCK+Pw2AHCX1LriffDVddz2v95FDTtpkzYcFi/6IDS1H5+WKtChN
aWNoYWVsIFJvdGggPG1kcm90aEBsaW51eC52bmV0LmlibS5jb20+iEYEEBECAAYF
AlJnyVsACgkQ7To545NnTEAAEACgsExL86eMQ6OFYYxydYD+9mj3qv4An0r7mSVz
lTKf7+nkZ8uwt8GnRwcxiQEcBBABAgAGBQJSaPcsAAoJEJykq7OBq3PIJ30IAKdV
W02IjEz0xYIxxvhQK9558ZbOvUX0j8MwDHB8+swPvG2I1wC6penWQVp+MSfx7Dkb
GUYgfnqwPidjSqcDd78HJ8CGCYk3M/zb57DdwEMics78SlV5SdHvKTFweLN00dUK
THQpgprtQy4wXTKKAQuQxR2MXPcpQ5J4VGx4p5N7i6r9mNec+BMs8nk+RjFG8Qzo
BnlDY1V95raA92blBfE89acEKKeUBkvC8WvDZFNbFLbvy/uGK7wFUTURIe31wQBZ
Jb9wusL3M6vGH7zW5MYzKZ7dtVAiNCAQ4c6J8AyAoB7ySAGQN0LMmlpyvKlVS5Dn
S5wyo6pQYPD5TgqVVvKJARwEEAECAAYFAlXWjX8ACgkQUhGOPAsp2mvTmggApIif
PJmbXkCkUD4Fqz0vI1R+Lum1m+TgoJ2CH5baSJy7mHtc3OMIdP2IiwtHb/NMqNb7
kz7/ptAlI/UGLjUL8zzLsmjUE4KkzHodwEFIXwsxxWSR64Tu86jc8YEoOFEL9AX1
XS3h6mWlk7eScZ2QO7foZVTvLUV1Fxe92tNqAZKzGFDq7avmxBPjaFzcNtY4Qqfj
KWdN6MW4L8sXhnO1XB/vsbAFYdkrdRbY+EvkhTaEIs3eP0zELdzJPRq6faTgbYUx
Ba2M4f51kqUGluFRGAIkfzq6WVkEmyLQ7AqB+Sr/RmEZGZL4CaYdlAG27IVKiYn/
vtWQuqFSIkZcRO08WIkBHAQRAQgABgUCUm5rZQAKCRCnoWtKJSdDajEVCACCzX42
9NoQgtx8pxQCYTxSYY0ORcyu6OJ/pzkVKw4jqrSypGc82j7F6+71B9wQT6OoJh+S
Av0hkW2J6o5LfhmSzQqD4AceVFQ4v8vZCBaiLfdc4QUjHVE6U8dzE9vrDAfU48vs
4OUnfzV1/WCSpZxVu2xA/Dxipo7XSW6ivIMM43nGDeCDp6U79xrcQ3FtRci6eVie
SbuOsrIVYkyG/Pgoa3cL8uel4/mluUfDBM2VDccTXMgFOd3I5rDL4eYAcziL3g0p
3TThAY5LQedZjeG1I4M62wxL8cu/OC+rBjR1uYXfTUMB74NBUGbSoEH+uogXbkxl
w672FM1ighcbbok5iQEcBBMBCAAGBQJV21lBAAoJEPQH2wBh1c9AY0EH/1HLvhw+
eixzHt8iaJilrhnum0Wb/XPrCVVH6GXEqLyHp8wEkI7M9C6linPEDywgSgE+aISU
IRocyA7r8mGc6ELJuboQHpmEhQXKPrtUXQYNdp9S5XUSTgtnvwpMyR2lKfRJGw2y
jlFk6ociCD0qA1Dj+6q+sm2UUoWCoBJQg9/Ldz84QRMtCVQLE2JiNU+v0z44BAx6
TH1RzKzBUufKmh+7F7GSRSrWnIKM74L8+FKv9n44GMNYKXTXbVb7vL+mTJUbgDx6
GyzGRcD88s6rGAtK4bRkH13akQKeoeas4L4HxlUkqcisva+sgWg2yqV/Rjcfz3nl
VkXb0XT+fUOd2eSJATgEEwECACIFAlJhQjYCGwMGCwkIBwMCBhUIAgkKCwQWAgMB
Ah4BAheAAAoJEDNTyc7xCLWEltAH/37ADf0YFPrJd3gcZyGC/zvtPhYPZ/kxnqoa
hoBIRF/sftGV5XqwwZOGm1Iws/VmTQ0PFBvU+Mw0vNT0HcreRT8PohtRlF+V8umH
LVeL6x3CtmJfsfyYBxLoE5/DLyYqBvpCothLm40ND4O6lRdLF5CUScGhgD1Iblvm
YBs0Uz71tFnHmC+Ov3fNC8YkTNymaxnJGYlPtmwUZ7SWh1XRl8pMQzL+3B9Be6ec
O3J5lbFmwL8XYawx0HtayvM5n9VbPy2eawAn++e7bLLywc39YyQ9/ckmSlZqtlUs
Euij+h0Tqmr9XY7K8WEHqBJXfl8txIm8DTOqq4dcx3j7k+qwQJCJAhwEEAECAAYF
AlJnyV4ACgkQ0292m8EYBPDeyw/7BGxHrXoKe/oPx1PwkqvdYJ1CXXLbr9gFYnxu
JXUV6SjAqOWIkspExisMvLR5HBKKCgtkLfaaN24ezSheDQTOH7zxc+8b6kQmWRw0
Hz9rqASlqJcP0AMrutWhodX+dougNxq1nPXlQI4sZPJhHUeHBhdqCYL4Kbzh3vbE
MHE6rbtcF1oYNH6YwmU4IosW3BktwjfsKmWy9pT7ugN/DjsFLheXIGqlhbAsA+Jp
fU+M4q30tIJP1Ovhvwf012YJNCPuCLhETt+u7wkpLvlvb1kw88UxKoVgG6MSOVvT
Yp3CcTYr37/8/XNvzPP1uOQ2MSbmjrnG0cgM1P06resNVvdgrUCFAXks2pNDMqsQ
/t2Etslu3u2tLKAvhPambBhgS5x7C76GdTCvRznn6VnDz97O5IA9Zmc7RetBfnxf
LMAhXbQg/2B1VIVHALO/a/A7WWy+CXSypilCVqB+6Rx0OdugWbszIWj9cpipFrUr
PpezgI5wusoqiNVMAITlbHh3Xc0iXsFmDgDi8hB0RTUXQePPvpATPD6tJ0MfFIkF
rXOO0xtVU7UvdgtCKM/INFke1ISj2IFWF6BOuZG76tix+CvvQyXrRFN7tFOWgNPX
79XREy5lJNt5IL6l7DiR9hIbZU0JcwSHinuAYKUBHr3eZCmtgefk7EhXDf5gwn+N
m91t9lmJAhwEEAECAAYFAlJn+kMACgkQUfnMkfg/oERxnw/+IH1MpdnfbrLfJLBA
SlJUNa4d7tDSo5D7b/pxKovKnH2ySvt93hHKfOJaFGSa0phNfPiwqvq8/KozW32E
dFzlMo9Yxkbjnchtkyj2tRrNsU/++KN24oI268lJN/YzZhtEk1OBQSIQZCIqVanv
ljLpzGwp7hHOadImYwQfyAetbwBptoWMr4kvLXiPRuBUK5SpeS/EgznlMbo4H8xQ
yf/OFOv5aI9Bdfa40rocxvO8jiqOzEV40Sb2kn97SpcYxSm/8zWjJsv7t6k9d2Qb
Fa3nJUT+TF2+Pt30tv5nNw6d79BBdb/sevsZdWnl+y+zF0cBEUo3YOLW+Pctx9JS
cv1Ty8ruE+eXf56EvS+qYdq+/cou5Acm5Eq3iT8g9wjZAYgZfJBIySQQ55BBspkS
tz3ChK0+JZl11qFzIJlH9R3ZFU1KV2wXrzlFdVpFkj0KrtS+04GZrbzdS2UNeMYI
wHw3VIX/rllpDynVujlSptgLJQzl+YjV89UKSar4N0B1L8CamKeMG9ZxsZS2ydEg
UAgwKnWtT/Uah8PciSEAssK7mFobiTAn02pfOtVgWasC2g8Tg/ZWOaPgVoHIblop
Uipv/F+6+XdDVnwVGH2tdeBZ4Mrtw7MQaVf8nn5Dtrbwf1akFVenMfoMRIHcSGHc
Fp6yrbMgFIvg2AlFJWsASYLc6BWJAhwEEAECAAYFAlJoZxkACgkQLtnXdP5wLbVW
AhAAowPKdqAIT12GENcrQqVlSpRN6BcJ09JO2+5vgkB3xzQh20u3h8F2PRUEqRGR
qmlNEB+2glhdjIyOkYu0jaIDhmDM7sduO4XqZcwPPcfy2O1IW6d7Pa9JqUqdjnZE
0pmDJ3iLq9+Rtve7xMn8N7Fuk/obElaYYU4sqV1yidCVOIptnnKDtILhQ+zcvoi8
HhV0RtYpGT03N4/8ZvgT4bL7MI/wFJA1SuWxO/MnaDqqVBWZ8HhmFv9MN+/yxJUW
GYBnpq9QxehEIxMPwl5ikcrfBYaXRVCDBm6eONvNLKzSPGVze51LpRmdzTpKmXpm
Yp5sL/CLTR5J8HXJpMaoccbjXvR8tHS+of/V88D0FO6RSYO6LMhnJ4eTHcJNPh85
uAoJLkyPzYP/a7l1qRB+gGBSyxYv3jeF5rtfSQTnKGANlnKK7gw3mEjDBq3aXOJh
GlFd6XaFuhf3C8PZzgJAm0/dYyCxKn33gTs4PBXc6RVJsdcXtj6G3T5NfyCpJnb9
z2D1OHYqAosM8IVAr0LQbpy4Lkx6AfnVXZiIJogW0rHLYDbLTCzgObKpufZmNnJJ
JSPpqjus6xzt5WRYVaEC3WG7foqSfoWV3YD4eOeB1W4csDrRkj398+5cqiV++Nxq
2XBB2g7y0ERvuI08gPau4eTYsj891r3YagQoN0c52pqDIRaJAhwEEAECAAYFAlJu
jSIACgkQfwmycsiPL9bOZQ//ThrYMBwk0WV4wA148QhCkp9wpMoFcAyyIeA9qxe4
5CKak00U3yY+Tlggv4W+yy3lJRG0RofkkTQxVONXPzhqf0qTP0RuCADHj+otpRvc
6F/Kv4X2WmNcqzjdM9SKQZhxK0soPJJGKKtL+PYdOjrBJTf/mT3K+Z3k+Qv+vc8C
vaT2eqVj06G5BApf7vCUYy12eM1N+0D4dQ9rjPzsKHw0zNIqbcoolXc/DgGoGvjy
7LPuqjrRhSsYyvaPLFixVTpPKuqpjNEL/U9Ux0PklDVXRgv0gB1RjaZjbfcB/BBa
kFtlUlQkrwCmJQNCeQ3HDodpHdZ8+gCyK3gt7ru6DWhn9IDAsmy/MIGNrlL2rPx6
/vKVSOOZNLbCkY0YOh69gGhEwI0KGQN3YKj3fOCIfRMsAglyrOe6087E2ptb6MbD
XnRSIV9c+Awrdom+hP/DQjXYlhy/sZIdWe6Rj2p5eetDFGBJA8mF/e02zRTAMbif
X6J6aZY7VNPO9/vc/Ej5QErrCWwHb52JjlE9fq4E1kVC+xBg9WTDkXM9upr4NzBn
KtFlv9LNfJALDrziWQCceymBnJfsde9Ms3hsTBozzesg5Sg7yxSV2mps2JyPDFR+
W5/vJ3MYLRI9AO9hSer7JT8AdBPf2h57sFQSOxleOiQafKce4bt8Snqf4uEttYpD
JdqJAhwEEAECAAYFAlJ4Hj4ACgkQtwV3oWpW1nDghxAAmWPzwCvFMWYVYKiN5fwk
gxFtOoq3XNcIYbLFX9/83SBn8kDzbaElT2Cc3f0p1he7VO+v5HvcG1y/Lx8CXLLB
rfS7ncuh0Ahmqz0orgJTZh/PVjrL/7MXnxdLdxkRSM0ewyG/bgx/OBZfA02tkYQt
13VXOAqXNQLlyej1DIiX7OOW8efS+zG2pEf2h6waU5vhVE125Wv1xAUyEb2+VG6V
UxZdGP4hhW+9nHnn38wDF9DS4FoCMHKCsbFIBRPiyGfG31En5txvHlr+CPY8Iaxk
eM9t9DZOJsykiQMz+sbxwUfbiyTJYe4sRgCK8P4VGeK3vKzuZccY2HcELKiuE3KT
XUxbDK4SLSP28IYvs8T1t9Z3t/tyKKSBKjZ/nN7L9Ialp2cT63hbJzwyE3W8/H5f
57g5n+6PYu1S/TnIWR4uUcC3xAtA+g/es30o9vVWBHBd8FRsVOcM44xhpxmpvbvx
RJtbDlLeov1Fnqst1lU9lGR2doWgthiuSZZ4VFMbY391YVzFvhLu/8zE8+mHupH/
WEf74+knQmpzizZrFtETBBbVoNCdRzjFm3UYVRKoZW2eynfTLEFf4KF+EuBW3O87
SCahcHKImHIDVA+ewlbTqlzvCHBGJawwqU1EinF4e+2jTJiCllmLt1aRgGvDM98J
Q6nay8IL+QYpIEoqii/qEoyJAhwEEAECAAYFAlKP+fkACgkQ0f8CSkqpINcEQg/9
H66Cl8JEnZZ++PBsRGsH80fP8opR1yu8Y8IAYccPDK2ViVGIxhp0phqHWdh+5l1Y
4iljQi3/82PWuv6rkK+lri5jaCtBxhq5aYRsWEc2zwP1lrXx3HgpnY0u4Jt8F3va
1qdzlksIjduz7V0kMl0RJdoAFRS6K3nVsPpQbX3kBu1SHk8Jwi9RYGYtq36C3Q7N
17tQhkcPeLS510WNKB0TkwiVEUhz4OKPQR5SXms85xJ+27NtS7QgP3nIRl+1x0/B
Yj5K3oJpI4WSCoMdti0u4zUmNJ++NsSlmOKuR6TeWX5V7ZquhP1gx8bVptB8gUun
LdITunyckIcRVcF7tzRmw3Nx0R14KF3Zv90+78ZWFpC2tEqqdptYincHnwzBu5fM
vziQIR11Gcu46ecEt3xz7rYnVDgQDxiY7Ae6uJK9Q7DzjDYEfxnnhaeKhYRZs/45
/53rBolkOnswveWFAImZj6qU30G3sj/aY4r5bDc/t/IcNRosEjFC2eQmLzb7zhPc
63Dc81AB+Qbu/AgcrP/byM36HZT+4/4mTun/1ms94R3/Dt8hycRmjJIp4+qfjMdz
ufaUL3IdSl0A5FXxLxSqpHyvnMdPwJKUFEyFEIInbe9ASV4Cgn1ERXz8PG5Es1po
nn84WfpOeMBYSZtDpUZPjNIqO6aT5CLdNQ9ZHc/sgT6JAhwEEAECAAYFAlXXYOsA
CgkQTd4Q9wD/g1oYZg//eXdzEcMF/gBI4ptiR3cGr6FbxKWH2nP0y4Ub0RR5YCBL
HTnvp7reJ+Zy7eSrH5Y6bKrPLSkOzROtPwxAzzvmb8SioCC0bPzYcwFN63D4uMng
IOTTQdjJUoza9c0TiSyyC/VYI8g5upLh0l0dBcolabrYKyHE9iZ/AJl84fOirPOo
jlbIFFA6pVBGOIp+OzcfI5cIxorSP4wOT9zj5W/QI7kfEae83fDA8eHcDv7WKYGH
cXBmsOMreEYjQfAPDK4iaOwkXn8RSduARD7fT3xM/sYol/ciakqP5QgII1g4CkyQ
vGnhlKCeNUGrs1aBrIi5hG8zixcrret9o2Oa6uDdxsSNKwBXhqX0kqgUcNzfYsWI
XNUClayHEbeGdK5Yxw7FbIMAphPq2GQniXLPuuV0vaU5MCaECS1Heha8V9kNpEsK
BjTPZjva7UQnxr3FRsdXuKVF+oax1ymmG1Mtz/qkJ6XIa8nWkfCB+ijJpQg4fz9X
4LYNmpI/L6cyjDURt7dQCCg2LOz6nsZZLeXdjmJF8zVEXis/AEcF/w1+r+FP5mCC
X+c9ZSwaATNkAjVZYMZFQSS2BB9DxF8DvkgnRVpGuvZFsICRxIwOzR+RHdprmIMv
ouByLn9IjpQ3/NzByzee8LlWbztftY3x8G16VVIpM/c/yIOVaanybYfTokljzESJ
AhwEEAEIAAYFAlXWhvgACgkQPCUl7RQ2DN6UOg/+M1axSYbHuUrXbE0UX6GaQX8L
h671RuuD6Q4CgLi99RTM59X0xVKZEDrIeTeaY/HLx0DIuxCcFLJ4apP/TfnrbFtn
6FaMyqwk77MRqrk7o8n5Dht+Q9ZZkRD2ieDSSHZH2dbsl8vo+IjZg7gcCVRLR3gP
991QDqTMYBUqL2TGFI+wdcr4YqapPYKWHVFyhyNiUcZ3lcWduHuIrkBBVGhQGreU
yB2qCfuFDkZUmkjVfQtVBgm0FXYgtOafwZpTcSo0hkQ8PVFnXgIaF6a6SOSYxoXH
kZitowDtTslXlvzFLSkmVg+JpstBpP4+ccw/YlPMB8nQX/Ngp7q8S3aj4455Yb20
BSrIj2Y9OS188u2SMnc102AJS+rANRaufNxV3UwzvUiVKF/neUODlyQvVp2uetKu
fullisk+SFcaBT5EmxlAr/RybCPiDBxv8zYC/ajKGoU8g8Cej4qcMOVMfc5gtC/e
zAimNR5gDzlxZklzvsj6B48GOGUBDFUYH8UXPkGcPE6PrDjXagLBKwlZNXkyDzh3
EYH0ANJSgxGcWShf925toSDml7nWoPmLnQH1yYWykr+/ZtnrW3TLoh6HqfVMmfzx
Gp2AGOnYF/jslpIT29cqhKfpwjBJAkCtsrIpApeCrCTVsykMftk4ZQXPTIYRlXCV
C8oPPE2YLaoiL2umj7SJAhwEEgECAAYFAlJv0BgACgkQCB/CnyQXht0M9g/9EVzQ
lSjVFcyFbmmD4NbvDdEfWZzeTiD8qs4WhQyOoKb3Blc9NDNf7p3ygz8h8m2hFkz0
21T+AeD/u3gPYf+WUn5Cdb66y4VZkfX15ZJsqJ4JDFG4yOHCBpWkaiBhAp6Adify
ewPpcxwt1VgwGY/XxJxjaCm047sz9LdXu93FiZvJwnjnNGlKOiUFltvo4j4rZQXv
4WqPy2yuXUZatWBxi7pqqT0NA3XNSVXITmGl9Z15I8dmF/5Z/1BV/YI78Hb8ku/W
WJWgB2tuxQ1WLzTQ4JrlJlsJkkcLSmaqQL29/XLhlR7mbAXehVe6xYotMH2LT6OU
hwdZLtxMoir0/e4I6xwGqmJhitzOGbpvN4DRVxijgiZNTtAxU2R8Uxxjn+501Nrz
jBxOZsvt+8rpQ3ZaHnYKWdqZAP6R175wcVwVIZ/sHhS9+ELZrg0F9Cgc+GnXD+f3
YdRDfOLFFWFH8dJemstxAlMzq581q90TIAehTjCLb1mFjqjuStnPTepYumpcijSa
MYTLXT3wQEZXMdj2QMmM/j3aW9erZR/a8l8MEmUSG3dBP+KLEHXaZ+wLBCzpVpfW
cYe6ifDQTqglRCCIdgD4smNaLWcaqY3+6rGOGfaYePXyrTKsyUsCrmBVXSZLXkaW
WxzQB5KkJvq24mTWnGYyLrnmkT185NHQqVDnx9WJAhwEEgECAAYFAlJySQ0ACgkQ
Hpo7X4VAg7a92Q//e77qzttGBUYewY0eS0PtLcwafbVfKmmUOqC0nDv1Pz4t1JLB
GpLh3U9Iw6nG5O30NpzTq48McWf7zZkikIRhAswF5DBata9BnJ15NGIeK7sPBR0b
Z6TLugQafV70KafZqHE6RwjhkILYMAigK1ECzr6nyqWGKRpT5q7i6hY93rD8IhXa
nkq+EAJj23819YBvMJc+tPAut7/hX4P4jhjWFbkHDzV0G6sCWzQbbrxgfWIte/Cs
HXZUJN9Fin3EFxH+uTKWlWidHMET44pc4Dqnbsd3NRrmLtUy4gBYcjZMuiyHXTz/
pG+WQGraeVB/KEyX5YQok4hNgk38F48Vfwj8mkH533lmOwkL1P8jgji1SeorZ3JT
h9HySFc2oLGrkZGKCa3drWXZgcl9qml5KTyz/XhqUu418nShqudijx3JB+a5eYpc
tJ9/18fKcNC4J0qW9Jctf1lg5XHBJdF8oWAlY4N8TTM647SzjLJ8iHzBVzAbVOVg
8Pxba6k53PeqejlX9lBNfLCjJfHnMrZas0twXh1w2dV6MPnx1ohhtMa9BE4PM0FF
r3qdF3b3uAqqXPduTOBc672maVcWE8TCZyc+HkoRtPomcWaEwtObLvfXoQLiaPAQ
mnOfal8enoH15O1GZvb00dY5sQ9oi44Sx26GhiSQ1AVZqjIxkEAjCwDlSySJAhwE
EwECAAYFAlJv6AMACgkQNuwWrNAYaCvuIBAAiup0EvygA61UgWi2XxsDI1HRAv93
neSJMV9vx1ZTbeQWTfDwbbaJD7v2f07zSBM6Yur+Ew2lg1hAVbEaDVW0znafwPIL
9vx5uTk18D2qz8oGzCYzV99D1KlcQus3LaUPqHI3NgKfW4Bm/mmjaGCM7JPbBxl3
B9eeH3fbdE/QM827H3tzGP36PXH3ebr4NcFEeFCS16CTS6w7jIJu5UaMswPvTjgB
68YP12wVdhm+UqlnWebIBX+7lKIQrPampWFLamHgBi+kIBrjH7vE3AwmyPmUNKp+
Il48k+utj7clK2lhDxPb9WHcIp9S1Frg3wWs45EctgDVSxIJbsx4G+u+igwnYJ0b
3fmU1I8MLZvQGm87VcaMDdUdTq2Cs9R3mm2y7SvNFjntCoezL8bp8IgPiVJRTkMe
V3oCbbDuo15XIpMZmxZuEWOOU9y9NyTEJjhYyUhi8VNy6HDV95tiiXp6VYhZSaTW
AKKEtrzQxf0ffab0fQjNJu92ck5WNk3bE40GuRwzmAG1PnlCkXSygxt8nrSLH13k
mNIE/rZdMklT/aEY1Yk9QM9pay6iF4N+E7P8Bze27rSR+7ndzjpn/yx0oLnF/OMG
uc5rP/rk7PpPyYo67v9+CmE2NDMSlFC1ObjyD97ZoAZbNIyJnXOYP2DBoKsze+ef
viNElsuN8xkTiIK5AQ0EUmFBDwEIAJDxMtsu9ie8QN7eepcm+WuaY6Zbg3iDdPOO
rQ4Ez+4oLaib5FHiZZjikdTsD7hlwcVuuhyEP2/bT9f29pbsrUVjHRgqJPdcuoOl
UzAekgz17895Wh1gRarsbDIJDgs1878OSvIC/ek++qAWkzU4Sy8Psu9eJMTP6F0n
PBOvet+iPwWDZO/dxrf+BnBb9wuBZnihpKMav2gJox0iYrqpnFOFlK/XdSYnZNYp
IyBin1e+K2CG+TzF2M+KmdZE7FMhnTz95estAG2kC37VIVkCq8yHNVZqsgyAfMqp
B1ayQI2r3FUBM0Hxp6z2+8v/Ezp6zhYCI+BiUC7VbrWSSuTlp4UAEQEAAYkBHwQY
AQIACQUCUmFBDwIbDAAKCRAzU8nO8Qi1hKWYB/0R6ct3W2SEyoNuHTTKd5szIJig
HYXrsqBa4XQGaVuFz7XZtcIbFFhEHjMrvTJpBWhuZ091Gp0AjV2ACNi2z+dSpXi1
6QxdFb1/4us6mFEm86UIu4tcNN1V3WPiODpWfFkEys/vmqQImLjfSsdxzhMdX7Ye
n1B3fxiKzwzsTlFbnNiBr2Mv7flDiUvMdbHmb/n0/B6a69SRYfVkJ3MZdl0gptJl
XhJVdwjwVVl3bjvlQd0aZoLwJ7ntrWeMxOkbf8950vPVxemQ1frblB0zR98fuUNh
X4cjrFTI9iJck7xLUwNZfgOz9PodfqUv4riMLczMmw3nwGZO/aJg0m6uWSWk
=YraJ
-----END PGP PUBLIC KEY BLOCK-----

4
qemu.obsinfo Normal file
View File

@ -0,0 +1,4 @@
name: qemu
version: 9.0.2
mtime: 1724775399
commit: 6738b4bbb34e47ac23de7ab3c3e8122fdcc6d189

3983
qemu.spec

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Sun, 3 Nov 2019 07:21:40 -0700
Subject: roms/Makefile: enable cross compile for building microvm bios
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
roms/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/roms/Makefile b/roms/Makefile
index 3aaf3835730023e9a941fc9cd2c2..1bfe34b404d2822bda71edf25ae4 100644
--- a/roms/Makefile
+++ b/roms/Makefile
@@ -205,7 +205,7 @@ opensbi64-sifive_u:
cp opensbi/build/platform/sifive/fu540/firmware/fw_jump.bin ../pc-bios/opensbi-riscv64-sifive_u-fw_jump.bin
bios-microvm:
- $(MAKE) -C qboot
+ $(MAKE) -C qboot CROSS_COMPILE=$(x86_64_cross_prefix) CC=gcc
cp qboot/bios.bin ../pc-bios/bios-microvm.bin
clean:

View File

@ -1,72 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Sat, 19 Nov 2016 08:06:30 -0700
Subject: roms/Makefile: pass a packaging timestamp to subpackages with date
info
References: bsc#1011213
Certain rom subpackages build from qemu git-submodules call the date
program to include date information in the packaged binaries. This
causes repeated builds of the package to be different, wkere the only
real difference is due to the fact that time build timestamp has
changed. To promote reproducible builds and avoid customers being
prompted to update packages needlessly, we'll use the timestamp of the
VERSION file as the packaging timestamp for all packages that build in a
timestamp for whatever reason.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
roms/Makefile | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/roms/Makefile b/roms/Makefile
index f9acf39954dcf96618fab21cafe7..3aaf3835730023e9a941fc9cd2c2 100644
--- a/roms/Makefile
+++ b/roms/Makefile
@@ -51,6 +51,12 @@ SEABIOS_EXTRAVERSION="-prebuilt.qemu.org"
#
EDK2_EFIROM = edk2/BaseTools/Source/C/bin/EfiRom
+# NB: Certain SUSE qemu subpackages use date information, but we want
+# reproducible builds, so we use a pre-determined timestamp, rather
+# than the current timestamp to acheive consistent results build to
+# build.
+PACKAGING_TIMESTAMP = $(shell date -r ../VERSION +%s)
+
default help:
@echo "nothing is build by default"
@echo "available build targets:"
@@ -101,7 +107,7 @@ build-seabios-config-%: config.%
.PHONY: sgabios skiboot
sgabios:
- $(MAKE) -C sgabios
+ $(MAKE) -C sgabios PACKAGING_TIMESTAMP=$(PACKAGING_TIMESTAMP)
cp sgabios/sgabios.bin ../pc-bios
@@ -121,11 +127,13 @@ efi-rom-%: build-pxe-roms build-efi-roms edk2-basetools
build-pxe-roms:
$(MAKE) -C ipxe/src CONFIG=qemu \
+ PACKAGING_TIMESTAMP=$(PACKAGING_TIMESTAMP) \
CROSS_COMPILE=$(x86_64_cross_prefix) \
$(patsubst %,bin/%.rom,$(pxerom_targets))
build-efi-roms: build-pxe-roms
$(MAKE) -C ipxe/src CONFIG=qemu \
+ PACKAGING_TIMESTAMP=$(PACKAGING_TIMESTAMP) \
CROSS_COMPILE=$(x86_64_cross_prefix) \
$(patsubst %,bin-i386-efi/%.efidrv,$(pxerom_targets)) \
$(patsubst %,bin-x86_64-efi/%.efidrv,$(pxerom_targets))
@@ -148,7 +156,9 @@ edk2-basetools:
EXTRA_LDFLAGS='$(EDK2_BASETOOLS_LDFLAGS)'
slof:
- $(MAKE) -C SLOF CROSS=$(powerpc64_cross_prefix) qemu
+ $(MAKE) -C SLOF CROSS=$(powerpc64_cross_prefix) \
+ PACKAGING_TIMESTAMP=$(PACKAGING_TIMESTAMP) \
+ qemu
cp SLOF/boot_rom.bin ../pc-bios/slof.bin
u-boot.e500:

View File

@ -1,30 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Thu, 20 Jun 2019 17:58:37 -0600
Subject: roms: change cross compiler naming to be suse specific
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
roms/edk2-funcs.sh | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/roms/edk2-funcs.sh b/roms/edk2-funcs.sh
index cd6e4f2c82d2b346cdb7b3199bca..529e335121fcb60e419bfc656b6d 100644
--- a/roms/edk2-funcs.sh
+++ b/roms/edk2-funcs.sh
@@ -116,7 +116,15 @@ qemu_edk2_get_cross_prefix()
# force soft-float cross-compiler on Debian
printf 'arm-linux-gnueabi-'
else
- printf '%s-linux-gnu-\n' "$gcc_arch"
+ if [ "$emulation_target" == arm ]; then
+ printf '%s-suse-linux-gnueabi-\n' "$gcc_arch"
+ else
+ if [ "$gcc_arch" == i686 ]; then
+ printf '%s-suse-linux-\n' "i586"
+ else
+ printf '%s-suse-linux-\n' "$gcc_arch"
+ fi
+ fi
fi
}

View File

@ -1,22 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Thu, 27 Jun 2019 09:38:43 -0600
Subject: roms/sgabios: Fix csum8 to be built by host compiler
Signed-off-by: Bruce Rogers <brogers@suse.com
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/roms/sgabios/Makefile b/roms/sgabios/Makefile
index d2934c9f678dadfae5201b8507e9..d7e108faf69007056ddc08c4e63c 100644
--- a/roms/sgabios/Makefile
+++ b/roms/sgabios/Makefile
@@ -55,7 +55,7 @@ sgabios.elf: .depend $(OBJS) $(LDSCRIPT) csum8
$(LD) $(LDFLAGS) $(OBJS) -o $@
csum8: csum8.c
- $(CC) -Wall -O2 -o $@ $<
+ $(HOSTCC) -Wall -O2 -o $@ $<
sgabios.o: buildinfo

View File

@ -1,149 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Thu, 27 Jun 2019 10:15:24 -0600
Subject: seabios: switch to python3 as needed
Switch to python3 the places where "python2" is explicitly referenced.
(Ignore the uses of #!/usr/bin/env python, since that usage does the
right thing in our build environment).
Include changes proposed by the python3 2to3 tool.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
Makefile | 2 +-
scripts/acpi_extract.py | 4 ++--
scripts/acpi_extract_preprocess.py | 2 +-
scripts/layoutrom.py | 28 ++++++++++++++--------------
scripts/vgafixup.py | 2 +-
5 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/roms/seabios/Makefile b/roms/seabios/Makefile
index 87a6ac92e69f23c1ce799d16512a..edb83b7a1c77f7bb75c371330b2c 100644
--- a/roms/seabios/Makefile
+++ b/roms/seabios/Makefile
@@ -22,7 +22,7 @@ LD=$(CROSS_PREFIX)ld
OBJCOPY=$(CROSS_PREFIX)objcopy
OBJDUMP=$(CROSS_PREFIX)objdump
STRIP=$(CROSS_PREFIX)strip
-PYTHON=python2
+PYTHON=python3
CPP=cpp
IASL:=iasl
LD32BIT_FLAG:=-melf_i386
diff --git a/roms/seabios/scripts/acpi_extract.py b/roms/seabios/scripts/acpi_extract.py
index 86c6226c0f9aae4e4687cf216369..7ac054e626780253fcec78414b17 100755
--- a/roms/seabios/scripts/acpi_extract.py
+++ b/roms/seabios/scripts/acpi_extract.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python2
+#!/usr/bin/python3
# Copyright (C) 2011 Red Hat, Inc., Michael S. Tsirkin <mst@redhat.com>
#
# This file may be distributed under the terms of the GNU GPLv3 license.
@@ -348,7 +348,7 @@ def main():
# Pretty print output
outstrs = ["/* DO NOT EDIT! This is an autogenerated file."
" See scripts/acpi_extract.py. */"]
- for array in output.keys():
+ for array in list(output.keys()):
otype = get_value_type(max(output[array]))
outstrs.append("static unsigned %s %s[] = {" % (otype, array))
odata = []
diff --git a/roms/seabios/scripts/acpi_extract_preprocess.py b/roms/seabios/scripts/acpi_extract_preprocess.py
index b8e92a525730442815a0dce78f45..6963847a8b5d3e4bf9340a67afe2 100755
--- a/roms/seabios/scripts/acpi_extract_preprocess.py
+++ b/roms/seabios/scripts/acpi_extract_preprocess.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python2
+#!/usr/bin/python3
# Copyright (C) 2011 Red Hat, Inc., Michael S. Tsirkin <mst@redhat.com>
#
# This file may be distributed under the terms of the GNU GPLv3 license.
diff --git a/roms/seabios/scripts/layoutrom.py b/roms/seabios/scripts/layoutrom.py
index 6616721d1b584892074491b292ba..c6d003273990ae66ca62bc36fe07 100755
--- a/roms/seabios/scripts/layoutrom.py
+++ b/roms/seabios/scripts/layoutrom.py
@@ -81,8 +81,8 @@ def fitSections(sections, fillsections):
section.finalsegloc = addr
fixedsections.append((addr, section))
if section.align != 1:
- print("Error: Fixed section %s has non-zero alignment (%d)" % (
- section.name, section.align))
+ print(("Error: Fixed section %s has non-zero alignment (%d)" % (
+ section.name, section.align)))
sys.exit(1)
fixedsections.sort(key=operator.itemgetter(0))
firstfixed = fixedsections[0][0]
@@ -142,10 +142,10 @@ def fitSections(sections, fillsections):
# Report stats
total = BUILD_BIOS_SIZE-firstfixed
slack = total - totalused
- print ("Fixed space: 0x%x-0x%x total: %d slack: %d"
+ print(("Fixed space: 0x%x-0x%x total: %d slack: %d"
" Percent slack: %.1f%%" % (
firstfixed, BUILD_BIOS_SIZE, total, slack,
- (float(slack) / total) * 100.0))
+ (float(slack) / total) * 100.0)))
return firstfixed + BUILD_BIOS_ADDR
@@ -288,12 +288,12 @@ def doLayout(sections, config, genreloc):
size32flat = sec32fseg_start - sec32flat_start
size32init = sec32flat_start - sec32init_start
sizelow = li.sec32low_end - li.sec32low_start
- print("16bit size: %d" % size16)
- print("32bit segmented size: %d" % size32seg)
- print("32bit flat size: %d" % (size32flat + size32textfseg))
- print("32bit flat init size: %d" % size32init)
- print("Lowmem size: %d" % sizelow)
- print("f-segment var size: %d" % size32fseg)
+ print(("16bit size: %d" % size16))
+ print(("32bit segmented size: %d" % size32seg))
+ print(("32bit flat size: %d" % (size32flat + size32textfseg)))
+ print(("32bit flat init size: %d" % size32init))
+ print(("Lowmem size: %d" % sizelow))
+ print(("f-segment var size: %d" % size32fseg))
return li
@@ -312,7 +312,7 @@ def outXRefs(sections, useseg=0, exportsyms=[], forcedelta=0):
and (symbol.section.fileid != section.fileid
or symbol.name != reloc.symbolname)):
xrefs[reloc.symbolname] = symbol
- for symbolname, symbol in xrefs.items():
+ for symbolname, symbol in list(xrefs.items()):
loc = symbol.section.finalloc
if useseg:
loc = symbol.section.finalsegloc
@@ -482,8 +482,8 @@ def checkRuntime(reloc, rsection, data, chain):
if section is None or '.init.' in section.name:
return 0
if '.data.varinit.' in section.name:
- print("ERROR: %s is VARVERIFY32INIT but used from %s" % (
- section.name, chain))
+ print(("ERROR: %s is VARVERIFY32INIT but used from %s" % (
+ section.name, chain)))
sys.exit(1)
return 1
@@ -691,7 +691,7 @@ def main():
li = doLayout(sections, config, genreloc)
# Exported symbols
- li.varlowsyms = [symbol for symbol in symbols['32flat'].values()
+ li.varlowsyms = [symbol for symbol in list(symbols['32flat'].values())
if (symbol.section is not None
and symbol.section.finalloc is not None
and '.data.varlow.' in symbol.section.name
diff --git a/roms/seabios/scripts/vgafixup.py b/roms/seabios/scripts/vgafixup.py
index 2053cd5d78e5935658e1fecec074..dc662480f909e27958fa906d73b1 100644
--- a/roms/seabios/scripts/vgafixup.py
+++ b/roms/seabios/scripts/vgafixup.py
@@ -29,7 +29,7 @@ re_leal = re.compile(
def handle_leal(sline):
m = re_leal.match(sline[5:])
if m is None or m.group('index') == '%esp':
- print("Unable to fixup leal instruction: %s" % (sline,))
+ print(("Unable to fixup leal instruction: %s" % (sline,)))
sys.exit(-1)
offset, base, index, scale, dest = m.group(
'offset', 'base', 'index', 'scale', 'dest')

View File

@ -1,48 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Thu, 27 Jun 2019 10:15:24 -0600
Subject: seabios: use python2 explicitly as needed
Switch to python2 the places where "python" is explicitly referenced.
(Ignore the uses of #!/usr/bin/env python, since that usage does the
right thing in our build environment).
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
Makefile | 2 +-
scripts/acpi_extract.py | 2 +-
scripts/acpi_extract_preprocess.py | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/roms/seabios/Makefile b/roms/seabios/Makefile
index 3d8943ef5f25afb9c41db84ad2a0..87a6ac92e69f23c1ce799d16512a 100644
--- a/roms/seabios/Makefile
+++ b/roms/seabios/Makefile
@@ -22,7 +22,7 @@ LD=$(CROSS_PREFIX)ld
OBJCOPY=$(CROSS_PREFIX)objcopy
OBJDUMP=$(CROSS_PREFIX)objdump
STRIP=$(CROSS_PREFIX)strip
-PYTHON=python
+PYTHON=python2
CPP=cpp
IASL:=iasl
LD32BIT_FLAG:=-melf_i386
diff --git a/roms/seabios/scripts/acpi_extract.py b/roms/seabios/scripts/acpi_extract.py
index 3ed863b6a79412a1276bb905d08f..86c6226c0f9aae4e4687cf216369 100755
--- a/roms/seabios/scripts/acpi_extract.py
+++ b/roms/seabios/scripts/acpi_extract.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python2
# Copyright (C) 2011 Red Hat, Inc., Michael S. Tsirkin <mst@redhat.com>
#
# This file may be distributed under the terms of the GNU GPLv3 license.
diff --git a/roms/seabios/scripts/acpi_extract_preprocess.py b/roms/seabios/scripts/acpi_extract_preprocess.py
index 2698118406d97c164783335c7fb6..b8e92a525730442815a0dce78f45 100755
--- a/roms/seabios/scripts/acpi_extract_preprocess.py
+++ b/roms/seabios/scripts/acpi_extract_preprocess.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python2
# Copyright (C) 2011 Red Hat, Inc., Michael S. Tsirkin <mst@redhat.com>
#
# This file may be distributed under the terms of the GNU GPLv3 license.

View File

@ -1,36 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Thu, 27 Jun 2019 10:15:24 -0600
Subject: sgabios:Makefile: fix issues of build reproducibility
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
It is desirable to produce the same bits on subsequent
builds when the actual code of the package doesn't
change. (bsc#1011213)
Signed-off-by: Bruce Rogers <brogers@suse.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
Makefile | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/roms/sgabios/Makefile b/roms/sgabios/Makefile
index 970b0ff37a1ae58e98d0527da215..d2934c9f678dadfae5201b8507e9 100644
--- a/roms/sgabios/Makefile
+++ b/roms/sgabios/Makefile
@@ -14,10 +14,10 @@
#
# $Id$
-BUILD_DATE = \"$(shell date -u)\"
-BUILD_SHORT_DATE = \"$(shell date -u +%D)\"
-BUILD_HOST = \"$(shell hostname)\"
-BUILD_USER = \"$(shell whoami)\"
+BUILD_DATE = \"$(shell date --date='@$(PACKAGING_TIMESTAMP)' -u)\"
+BUILD_SHORT_DATE = \"$(shell date --date='@$(PACKAGING_TIMESTAMP)' -u +%D)\"
+BUILD_HOST = \"buildhost\"
+BUILD_USER = \"geeko\"
CFLAGS := -Wall -Os -m32 -nostdlib

View File

@ -1,106 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Mon, 24 Jul 2017 10:44:24 -0600
Subject: stub out the SAN req's in int13
Include-If: %if 0%{?patch-possibly-applied-elsewhere}
We need to find some code or data to change so we can make the rom fit
into the legacy size requirements. Comment out SAN support, and
hopefully nobody will be impacted.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
src/arch/x86/interface/pcbios/int13.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/roms/ipxe/src/arch/x86/interface/pcbios/int13.c b/roms/ipxe/src/arch/x86/interface/pcbios/int13.c
index ca789a0d154e1fe3c2508a3aefea..40c61419c0c134120d1ce7c81a1e 100644
--- a/roms/ipxe/src/arch/x86/interface/pcbios/int13.c
+++ b/roms/ipxe/src/arch/x86/interface/pcbios/int13.c
@@ -23,6 +23,12 @@
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+#define INCLUDE_SAN_HOOKS 0
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wunused-function"
+#pragma GCC diagnostic ignored "-Wunused-variable"
+
#include <stdint.h>
#include <stdlib.h>
#include <limits.h>
@@ -1243,6 +1249,7 @@ static void int13_unhook_vector ( void ) {
*/
static int int13_hook ( unsigned int drive, struct uri **uris,
unsigned int count, unsigned int flags ) {
+#if INCLUDE_SAN_HOOKS
struct san_device *sandev;
struct int13_data *int13;
unsigned int natural_drive;
@@ -1315,6 +1322,9 @@ static int int13_hook ( unsigned int drive, struct uri **uris,
sandev_put ( sandev );
err_alloc:
return rc;
+#else
+ return -1;
+#endif
}
/**
@@ -1328,6 +1338,7 @@ static int int13_hook ( unsigned int drive, struct uri **uris,
*/
static void int13_unhook ( unsigned int drive ) {
struct san_device *sandev;
+#if INCLUDE_SAN_HOOKS
/* Find drive */
sandev = sandev_find ( drive );
@@ -1353,6 +1364,7 @@ static void int13_unhook ( unsigned int drive ) {
/* Drop reference to drive */
sandev_put ( sandev );
+#endif
}
/**
@@ -1514,6 +1526,7 @@ static int int13_load_eltorito ( unsigned int drive, struct segoff *address ) {
* Note that this function can never return success, by definition.
*/
static int int13_boot ( unsigned int drive, const char *filename __unused ) {
+#if INCLUDE_SAN_HOOKS
struct memory_map memmap;
struct segoff address;
int rc;
@@ -1539,6 +1552,9 @@ static int int13_boot ( unsigned int drive, const char *filename __unused ) {
}
return -ECANCELED; /* -EIMPOSSIBLE */
+#else
+ return -1;
+#endif
}
/** Maximum size of boot firmware table(s) */
@@ -1605,6 +1621,7 @@ static int int13_install ( struct acpi_header *acpi ) {
* @ret rc Return status code
*/
static int int13_describe ( void ) {
+#if INCLUDE_SAN_HOOKS
int rc;
/* Clear tables */
@@ -1619,9 +1636,13 @@ static int int13_describe ( void ) {
}
return 0;
+#else
+ return -1;
+#endif
}
PROVIDE_SANBOOT ( pcbios, san_hook, int13_hook );
PROVIDE_SANBOOT ( pcbios, san_unhook, int13_unhook );
PROVIDE_SANBOOT ( pcbios, san_boot, int13_boot );
PROVIDE_SANBOOT ( pcbios, san_describe, int13_describe );
+#pragma GCC diagnostic pop

View File

@ -1,885 +0,0 @@
[qemu-arm package document]
POST SLES 15 SP2 QEMU/KVM RELATED SUPPORT STATEMENTS
Overview
--------
The QEMU based packages included with SLES 15 SP2 provide a large variety of
features, from the very latest customer requests to features of questionable
quality or value. The linux kernel includes components which contribute KVM
virtualization features as well. This document was created to assist the user
in deciding which features can be relied upon to build enterprise class
virtualization solutions. KVM based virtualization for x86 (Intel 64/AMD64),
for IBM System z (s390x), and for the ARM64 architecture (AArch64) are offered
at the L3 (full support) level. The bulk of this document deals with L3
supported features and is primarily ARM64 centric. This document should be
considered a companion to the standard virtualization documentation delivered
with the product.
KVM is implemented in linux kernel modules which enable the linux kernel to
function as an integral part of the KVM hypervisor. The hypervisor-guest
interaction is managed by QEMU through the /dev/kvm ioctl interface. The linux
host assists in the virtualization of storage, networking and display
resources as well as allowing direct hardware passthrough of PCI and USB
devices. Linux memory and cpu management features are used by QEMU/KVM to
enable guests to share those host resources as efficiently as possible.
QEMU is a primary component of KVM based virtualization. The QEMU emulator
binary qemu-system-aarch64 is the program to use to access KVM virtualization.
When using this program, the -machine option accel=kvm (or its alias
-enable-kvm) or --accel kvm option must be specified for KVM acceleration to
be used by the guest.
Libvirt is the preferred means of accessing QEMU/KVM functionality and is
documented elsewhere. This document focuses on the features and direct usage
of QEMU/KVM as provided by the QEMU based packages.
Major QEMU/KVM Supported Features
---------------------------------
- KVM virtualization is accomplished by using the QEMU program in KVM
acceleration mode. KVM acceleration requires that both guest and host have
the same fundamental architecture.
- Guest images created under previous QEMU versions are supported by machine
version compatibilities built into more recent QEMU versions.
- For ease of use, the QEMU program has defaults which represent traditional
usage patterns.
- Guest virtual machine characteristics are specified by a combination of
internal defaults, options provided on the QEMU program command-line, runtime
configurations set via the monitor interfaces and optional config files. The
runtime control of a VM is effected either through the Human Monitor
"Protocol" (HMP), or the JSON based programmatical QEMU Monitor Protocol (QMP)
interface. For QMP details, see qemu-qmp-ref man page.
Since a KVM guest runs in the context of a normal linux process, some types
of execution controls are managed with linux tools.
- QEMU is compatible with EDK II based UEFI firmware available with SLES 15 SP2,
which allow boot options common to physical systems, along with other features
tailored to virtualization. Various VGABIOS ROMs, from the SEABIOS project,
are also available.
- Some QEMU messages have been localized to various languages. This is provided
by the optional qemu-lang package. Keyboard mappings for various nationalities
is also provided.
- Virtual machine lifecycle controls include startup through the UEFI BIOS or
kernel boot, ACPI based shutdown, execution pausing, the saving and restoring
of machine state or disk state, VM migration to another host, and
miscellaneous controls available through the "monitors" mentioned above.
- Guest execution state may be "moved" in both time (save/restore) and space
(static and live migration). These migrations or save/restore operations can
take place either from certain prior SLES versioned hosts to a SLES 15 SP2
host or between hosts of the same version. Certain other restrictions also
apply.
- Security considerations include privileged helpers and a security model which
allows running guests as a non-root user.
- QEMU provides best effort reuse of existing disk images, including those with
systems installed, through geometry probing. Also disk images produced by
other popular virtualization technologies may be imported into QEMU supported
storage formats. These QEMU formats include features which exploit the
benefits of virtualization.
- Memory, cpu and disk space overcommit are possible and can be beneficial when
done responsibly. Additional management of these resources comes in the form
of memory ballooning or hotplug, host KSM, vcpu hot-add, online disk resizing,
trim, discard and hole punching.
- Guest performance is enhanced through the use of virtio devices, various disk
caching modes, network acceleration via the vhost-net kernel module, multi-
queue network transmit capabilities, host transparent huge pages (THP) and
direct hugetlb usage. Physical PCI and USB devices may also be passed through
to the guest, including SR-IOV VF's.
- The guest UI is accessable via GTK, VNC, Spice, and serial (including curses
TUI) interfaces.
- Guest timekeeping is supported in a variety of ways, including a paravirtual
clocksource, and options for the various guest clocks for how to handle the
timeslicing of the guest's execution on the host.
- In addition to the para-virtualized devices already mentioned, other devices
and infrastructure designed to avoid virtualization "problem areas" are
available such as SPICE graphics, vmmouse emulation, tablet style pointer
interfaces and virtio based UI interfaces.
- A built-in user-mode network (SLIRP) stack is available.
- Portions of the host file system may be shared with a guest by using virtFS.
- A guest "agent" is available for SLES 15 SP2 KVM guests via the
qemu-guest-agent package. This allows some introspection and control of the
guest OS environment from the host.
QEMU/KVM Technology Previews
----------------------------
- All features indicated as not being supported in this document fall under the
Technology Preview definition contained in the main product's release notes.
Noteworthy QEMU/KVM Unsupported Features
----------------------------------------
- Note that some features are unsupported simply due to lack of validation. If
an existing feature is desired, but not marked supported, let SUSE know about
your requirements.
- The TCG "acceleration" mode may be helpful for problem isolation, but
otherwise presents insufficient benefit and stability.
- GlusterFS integration is not enabled.
- 32 bit ARM KVM has never been supported by SUSE, but it's worth noting that
this capability will cease to even be possible in a near-future QEMU/KVM
(kernel) combination.
Deprecated, Superseded, Modified and Dropped Features
-----------------------------------------------------
- http://wiki.qemu-project.org/Features/LegacyRemoval
This website tracks feature deprecation and removal at the upstream
development level. Our qemu package inherits this community direction, but be
aware that we can and will deviate as needed. Those deviations and additional
information can be found in this section. Feature deprecation is also tracked
in Appendix B of the qemu-doc.* files installed with the qemu package.
- The use of "?" as a parameter to "-cpu", "-soundhw", "-device", "-M",
"-machine" and "-d" is now considered deprecated. Use "help"
instead.
- The use of "if=scsi" as a parameter to "-drive" does not work anymore with PC
machine types, as it created an obsolete SCSI controller model.
- Use of aio=native without direct cache mode also being specified (cache=none,
cache=directsync, or cache.direct=on) is no longer allowed.
- The use of image encryption in qcow and qcow2 formats is now considered
deprecated.
Analysis has shown it to be weak encryption, in addition to suffering from
poor design. Images can easily be converted to a non-encrypted format.
- Use of acpi, boot-opts, and smp-opts in a -readconfig config file are now
considered deprecated. In the future those names will be standardized to
acpitable, boot, and smp respectively.
- These previously supported command line options are now considered deprecated:
-device scsi-disk (use scsi-hd or scsi-cd instead)
-device virtio-blk,scsi= (use virtio-scsi instead)
-device virtio-blk-pci,scsi= (use virtio-scsi instead)
-realtime mlock= (use -overcommit mem-lock- instead)
- These previously supported command line options are no longer supported:
<previously mentioned items have been moved to another category>
- These previously supported command line options are no longer recognized:
-balloon (use -device virtio-balloon instead)
-clock
-device ivshmem (use ivshmem-doorbell or ivshmem-plain instead)
-device pc-sysfw (no longer needed)
-device pci-assign, -device kvm-pci-assign (use -device vfio-pci instead)
-display sdl
-no-frame
-nodefconfig (use -no-user-config instead)
-sdl
-virtioconsole (use -device virtconsole instead)
- The previously unsupported machine type xlnx-ep108 is no longer recognized
(used xlnx-zcu102 unstead)
- Specifying a cpu feature with both "+feature/-feature" and "feature=on/off"
will now cause a warning. The current behavior for this combination where
"+feature/-feature" wins over "feature=on/off", will be changed going forward
so that "+feature" and "-feature" will be synonyms for "feature=on" and
"feature=off" respectively.
- The previously supported blkdev-add QMP command has been flagged as lacking
and could possibly change syntax in the future.
- This previously unsupported command line option is now deprecated:
-soundhw (use -device ... instead)
-tb-size
- These previously unsupported command line options are no longer recognized:
-bt
-device at24c-eeprom
-device mmio_interface
-device ssi-sd
-enable-hax
-tdf
-xen-create
- These previously supported QMP commands are now deprecated:
change (use blockdev-change-medium or change-vnc-password instead)
cpu-add
migrate-set-cache-size (use migrate-set-parameters instead)
migrate_set_downtime (use migrate-set-parameters instead)
migrate_set_speed (use migrate-set-parameters instead)
query-cpus (use query-cpus-fast instead)
query-events
query-migrate-cache-size (use query-migrate-parameters instead)
- These previously supported monitor commands are now deprecated:
change
cpu-add
migrate_set_downtime
migrate_set_speed
- These previously supported monitor commands are no longer recognized:
pci_add (use device_add instead)
pci_del (use device_del instead)
usb_add (use device_add instead)
usb_del (use device_del instead)
- These previously unsupported monitor command are now deprecated:
acl_add ...
acl_policy ...
acl_remove ...
acl_reset ...
acl_show ...
- These previously unsupported monitor commands are no longer recognized:
host_net_add
host_net_remove
- These previously unsupported QMP commands are now supported under a new name:
x-block-dirty-bitmap-disable (use block-dirty-bitmap-disable instead)
x-block-dirty-bitmap-enable (use block-dirty-bitmap-enable instead)
x-block-dirty-bitmap-merge (use block-dirty-bitmap-merge instead)
x-block-latency-histogram-set (use block-latency-histogram-set instead)
x-blockdev-create (use blockdev-create instead)
- This previously unsupported QMP commands is no longer recognized:
x-nbd-server-add-bitmap
- Due to upstream's decision to no longer fully support the qed storage format
going forward (since it really provides no benefit over qcow2 and is now no
longer actively maintained upstream), creating qed storage images is no longer
supported and it is highly discouraged to continue using existing qed images.
They should instead be converted to another supported format.
QEMU Command-Line and Monitor Syntax and Support
------------------------------------------------
- The QEMU program command-line syntax is as follows:
qemu-system-aarch64 [options]
Where 'options' are taken from the options listed below.
The images used with -drive or -cdrom, may be in the raw (no format) or qcow2
storage formats, and may be located in files within the host filesystem,
logical volumes, host physical disks, or network based storage. Read only
media may also be accessed via URL style protocol specifiers.
Note that as a general rule, as new command line options are added which serve
to replace an older option or interface, you are strongly encouraged to adapt
your usage to the new option. The new option is being introduced to provide
better functionality and usability going forward. In some cases existing
problems or even bugs in older interfaces cannot be fixed due to functional
expectations, but are resolved in the newer interface or option.
This advice includes moving to the most recent machine type (eg virt-4.2
instead of virt-3.1) if possible.
- The following command line options are supported:
-accel ...
-add-fd ...
-alt-grab
-append ...
-audio-help
-audiodev
-bios ...
-blockdev ...
-boot ...
-cdrom ...
-chardev ..
-cpu host
-ctrl-grab
-d ...
-daemonize
-debugcon ...
-device
[VGA|rtl8139|virtio-net-pci|virtio-blk-pci|virtio-balloon-pci|
virtio-9p-pci|usb-hub|usb-ehci|usb-tablet|usb-storage|usb-mouse|
usb-kbd|virtserialport|virtconsole|virtio-serial-pci|i82559er|
virtio-scsi-pci|scsi-cd|scsi-hd|scsi-generic|scsi-disk|scsi-block|
pci-serial|pci-serial-2x|pci-serial-4x|ich9-ahci|usb-host|usb-serial|
usb-wacom-tablet|usb-braille|usb-net|pci-ohci|virtio-rng-pci|i6300esb|
qxl|qxl-vga|pvpanic|vfio-pci|ivshmem-doorbell|ivshmem-plain|
pci-bridge|megasas-gen2|e1000e|e1000|vmcoreinfo|pcie-pci-bridge|
vhost-user-blk|vhost-user-blk-pci|vhost-user-scsi|vhost-user-scsi-pci|
vhost-vsock-pci|virtio-crypto-pci|virtio-vga|
vhost-scsi-pci-non-transitional|vhost-scsi-pci-transitional|
vhost-user-blk-pci-non-transitional|vhost-user-blk-pci-transitional|
vhost-user-scsi-pci-non-transitional|vhost-user-scsi-pci-transitional|
vhost-vsock-pci-non-transitional|vhost-vsock-pci-transitional|
virtio-9p-pci-non-transitional|virtio-9p-pci-transitional|
virtio-balloon-pci-non-transitional|virtio-balloon-pci-transitional|
virtio-blk-pci-non-transitional|virtio-blk-pci-transitional|
virtio-input-host-pci-non-transitional|
virtio-input-host-pci-transitional|virtio-net-pci-non-transitional|
virtio-net-pci-transitional|virtio-rng-pci-non-transitional|
virtio-rng-pci-transitional|virtio-scsi-pci-non-transitional|
virtio-scsi-pci-transitional|virtio-serial-pci-non-transitional|
virtio-serial-pci-transitional|vhost-user-fs-pci|vhost-user-gpu|
vhost-user-pci-pci|vhost-user-input|vhost-user-input-pci|
vhost-user-vga|virtio-mmio]
(the following are aliases of these supported devices: ahci|
virtio-blk|virtio-net|virtio-serial|virtio-balloon| virtio-9p|
virtio-input-host|virtio-keyboard|virtio-mouse|virtio-tablet|
virtio-gpu|virtio-scsi|virtio-rng|e1000-82540em)
-dfilter range, ...
-display ...
-drive
... (if specified if=[virtio] and format=[qcow2|raw] and
snapshot=off only)
-echr ...
-enable-fips
-enable-kvm
-fsdev ...
-full-screen
-fw_cfg ...
-gdb ...
-global ...
-h
-help
-incoming ...
-initrd ...
-iscsi ...
-k ...
-kernel ...
-loadvm ...
-m ...
-M [help|?|none|virt|virt-2.6|virt-2.11|virtio-3.1|virt-4.2]
-machine [help|?|none|virt|virt-2.6|virt-2.11|virt-3.1|virt-4.2]
-mem-path ...
-mem-prealloc
-mon ...
-monitor ...
-msg ...
-name ...
-net
[bridge|l2tpv3|nic|none|tap|user] ... (for model= only e1000, rtl8139,
and virtio are supported)
-netdev [bridge|tap|user] ...
-nic ...
-no-acpi
-nodefaults
-nographic
-no-quit
-no-reboot
-no-shutdown
-no-user-config
-object ...
-only-migratable
-parallel ...
-pidfile ...
-plugin ...
-qmp ...
-qmp-pretty ...
-readconfig ...
-realtime ...
-rtc ...
-runas ...
-s
-S
-sandbox ...
-seed ...
-serial ...
-show-cursor
-smbios ...
-smp ...
-spice
-tpmdev passthrough ...
-trace ...
-usb
-usbdevice [braile|disk|host|mouse|net|serial|tablet]
-uuid ..
-version
-vga [none|qxl|std|virtio]
-virtfs ...
-vnc ...
-watchdog ...
-watchdog-action ...
-writeconfig ...
- The following monitor commands are supported:
?
announce_self ...
balloon ...
block_resize ...
boot_set ...
c
change ...
chardev-add ...
chardev-change ...
chardev-remove ...
chardev-send-break ...
client_migrate_info ...
closefd ...
cont
cpu ...
cpu-add ...
delvm ...
device_add ...
device_del ...
drive_add ...
drive_backup ...
drive_del ...
dump_guest_memory ...
eject ...
gdbserver ...
gpa2hpa ...
gpa2hva ...
gva2gpa ...
help
i ...
info ...
loadvm ...
logfile ...
logitem ...
mce ...
memsave ...
migrate ...
migrate_cancel
migrate_continue ...
migrate_incoming
migrate_pause
migrate_recover ...
migrate_set_cache_size ...
migrate_set_capability ...
migrate_set_downtime ...
migrate_set_parameter ...
migrate_set_speed ...
migrate_start_post_copy
mouse_button ...
mouse_move ...
mouse_set ...
nmi ...
o ...
object_add ...
object_del ...
p ...
pmemsave ...
print ...
q
qemu-io ...
qom-list
qom-set
ringbuf_read ...
ringbuf_write ...
savevm ...
screendump ...
sendkey ...
snapshot_blkdev_internal ...
snapshot_delete_blkdev_internal ...
stop
sum ...
system_powerdown
system_reset
system_wakeup
trace-event ...
watchdog_action ...
x ...
xp ...
- The following QMP commands are supported:
add_client
add-fd
announce-self
balloon
blockdev-add
blockdev-backup
blockdev-change-medium
blockdev-close-tray
blockdev-create
blockdev-del
blockdev-mirror
blockdev-open-tray
blockdev-snapshot
blockdev-snapshot-delete-internal-sync
blockdev-snapshot-internal-sync
blockdev-snapshot-sync
block-commit
block-dirty-bitmap-add
block-dirty-bitmap-clear
block-dirty-bitmap-disable
block-dirty-bitmap-enable
block-dirty-bitmap-merge
block-dirty-bitmap-remove
block-latency-histogram-set
block_passwd
block_resize
block_set_io_throttle
block-set-write-threshold
block_stream
change
change-vnc-password
chardev-add
chardev-change
chardev-remove
chardev-send-break
client_migrate_info
closefd
cont
cpu
cpu-add
device_add
device_del
device-list-properties
dump-guest-memory
eject
expire_password
getfd
human-monitor-command
inject-nmi
input-send-event
job-cancel
job-complete
job-dismiss
job-finalize
job-pause
job-resume
memsave
migrate
migrate_cancel
migrate-continue
migrate-incoming
migrate-pause
migrate-resume
migrate-set-cache-size
migrate-set-capabilities
migrate_set_downtime
migrate_set_speed
migrate-set-parameters
migrate-start-postcopy
object-add
object-del
pmemsave
qmp_capabilities
qom-get
qom-list
qom-list-types
qom-set
query-acpi-ospm-status
query-balloon
query-block
query-block-jobs
query-blockstats
query-chardev
query-chardev-backends
query-command-line-options
query-commands
query-cpu-definitions
query-cpu-model-baseline
query-cpu-model-comparison
query-cpu-model-expansion
query-cpus
query-cpus-fast
query-current-machine
query-display-options
query-dump
query-dump-guest-memory-capability
query-events
query-fdsets
query-gic-capabilities
query-hotpluggable-cpus
query-iothreads
query-jobs
query-kvm
query-machines
query-memdev
query-memory-devices
query-memory-size-summary
query-mice
query-migrate
query-migrate-cache-size
query-migrate-capabilities
query-migrate-parameters
query-name
query-named-block-nodes
query-pci
query-pr-managers
query-qmp-schema
query-rocker
query-rocker-of-dpa-flows
query-rocker-of-dpa-groups
query-rocker-ports
query-rx-filter
query-spice
query-status
query-target
query-tpm
query-tpm-models
query-tpm-types
query-uuid
query-version
query-vnc
query-vnc-servers
query-xen-replication-status
quit
remove-fd
ringbuf-read
ringbuf-write
rtc-reset-reinjection
screendump
send-key
set_link
set_password
stop
system_powerdown
system_reset
system_wakeup
trace-event-get-state
trace-event-set-state
transaction
watchdog-set-action
- The following command line options are unsupported:
-acpitable ...
-chroot ...
-cpu ... (all except host)
-curses
-device
[160s33b|320s33b|640s33b|a15mpcore_priv|a9mpcore_priv|a9-scu|adlib|
ads7846|allwinner-a10|allwinner-a10-pic|allwinner-A10-timer|
allwinner-emac|amd-iommu|AMDVI-PCI|arm1026-arm-cpu|arm1136-arm-cpu|
arm1136-r2-arm-cpu|arm1176-arm-cpu|arm11mpcore-arm-cpu|
arm11mpcore_priv|arm11-scu|arm926-arm-cpu|arm946-arm-cpu|
ARMbitband-memory|arm.cortex-a9-global-timer|arm_gic|arm-gicv2m|
arm_mptimer|armv7m_nvic|aspeed.timer|aspeed.vic|ast2400|
at25128a-nonjedec|at25256a-nonjedec|at25df041a|at25df321a|at25df641|
at25fs010|at25fs040|at26df081a|at26df161a|at26df321|at26f004|
at45db081d|bcm2835-aux|bcm2835-dma|bcm2835-fb|bcm2835-ic|bcm2835-mbox|
bcm2835-peripherals|bcm2835-property|bcm2836|bcm2836-control|
bochs-display|cadence_gem|cadence_ttc|cadence_uart|ccid-card-emulated|
ccid-card-passthru|cfi.pflash02|cirrus-vga|cmsdk-apb-dualtimer|
cmsdk-apb-watchdog|corgi-ssp|cortex-a15-arm-cpu|cortex-a53-arm-cpu|
cortex-a57-arm-cpu|cortex-a72-arm-cpu|cortex-a8-arm-cpu|
cortex-a9-arm-cpu|cortex-m0-arm-cpu|cortex-m3-arm-cpu|
cortex-m4-arm-cpu|cortex-r5-arm-cpu|cs4231a|digic|digic-timer|
digic-uart|ds1338|dscm1xxxx|e1000|en25f32|en25p32|en25p64|en25q32b|
en25q64|exynos4210.combiner|exynos4210-ehci-usb|exynos4210.fimd|
exynos4210.gic|exynos4210.i2c|exynos4210.irq_gate|exynos4210.mct|
exynos4210.pmu|exynos4210.pwm|exynos4210.rtc|exynos4210.uart|floppy|
fsl,imx6ul|fslimx25|fslimx31|fusbh200-ehci-usb|fw_cfg|gd25q32|gd25q64|
gpex-pcihost|gpex-root|gpio_i2c|gpio-key|gus|hyperv-testdev|
highbank-regs|host-arm-cpu|*-i386-cpu|i8042|ib700|icp-ctrl-regs|
igd-passthrough-isa-bridge|imx25.ccm|imx31.ccm|imx6.ccm|imx.avic|
imx.epit|imx.fec|imx.gpio|imx.gpt|imx.i2c|imx.serial|imx6ul.ccm|
integrator_core|integrator_debug|integrator_pic|integrator_pit|
intel_iommu|iotkit-sysctl|iotkit-sysinfo|ipmi-bmc-extern|ipmi-bmc-sim|
isa-applesmc|isa-cirrus-vga|isa-debugcon|isa-debug-exit|isa-fdc|
isa-ide|isa-ipmi-bt|isa-ipmi-kcs|isa-parallel|isa-vga|kvaser_pci|
kvm-arm-gic|kvm-arm-gicv3|l2x0|lan9118|lm8323|loader|lsi53c810a|
lsi53c895a|m25p05|m25p10|m25p128|m25p16|m25p20|m25p32|m25p40|m25p64|
m25p80|m25pe16|m25pe20|m25pe80|m25px32|m25px32-s0|m25px32-s1|m25px64|
m45pe10|m45pe16|m45pe80|mainstone-fpga|max1110|max1111|max7310|
mioe3680_pci|msf2-soc|msf2-sysreg|mss-sp1|mss-timer|musicpal_gpio|
musicpal_key|musicpal_lcd|musicpal-misc|mv88w8618_audio|mv88w8618_eth|
mv88w8618_flashcfg|mv88w8618_pic|mv88w8618_pit|mv88w8618_wlan|
mx25l12805d|mx25l12855e|mx25l1606e|mx25l2005a|mx25l25635e|mx25l25655e|
mx25l3205d|mx25l4005a|mx25l6405d|mx25l8005|n25q032|n25q032a11|
n25q032a13|n25q064|n25q064a11|n25q064a13|n25q128|n25q128a11|
n25q128a13|n25q256a|n25q256a11|n25q256a13|n25q512a|n25q512a11|
n25q512a13|nand|ne2k_isa|nrf51-soc|nrf51_soc.uart|nvdimm|omap2-gpio|
omap2-intc|omap-gpio|omap_i2c|omap-intc|onenand|pc-dimm|pc-testdev|
piix3-ide|piix3-ide|piix3-ide-xen|piix3-usb-uhci|pl011|pl011_luminary|
pl022|pl031|pl041|pl050_keyboard|pl050_mouse|pl061|pl061_luminary|
pl080|pl081|pl110|pl110_versatile|pl111|pl181|pl190|pl330|
platform-bus-device|pvrdma|pxa250-arm-cpu|pxa255-arm-cpu|pxa25x-timer|
pxa260-arm-cpu|pxa261-arm-cpu|pxa262-arm-cpu|pxa270-a0-arm-cpu|
pxa270-a1-arm-cpu|pxa270-arm-cpu|pxa270-b0-arm-cpu|pxa270-b1-arm-cpu|
pxa270-c0-arm-cpu|pxa270-c5-arm-cpu|pxa27x-timer|pxa2xx-dma|
pxa2xx-fir|pxa2xx-gpio|pxa2xx_i2c|pxa2xx-i2c-slave|pxa2xx-mmci|
pxa2xx-pcmcia|pxa2xx_pic|pxa2xx_rtc|pxa2xx-ssp|ramfb|realview_gic|
realview_mpcore|realview_pci|realview_sysctl|s25fl016k|s25fl064k|
s25fl129p0|s25fl129p1|s25fl256s0|s25fl256s1|s25fl512s|s25sl004a|
s25sl008a|s25sl016a|s25sl032a|s25sl032p|s25sl064a|s25sl064p|
s25sl12800|s25sl12801|s70fl01gs|sa1100-arm-cpu|sa1110-arm-cpu|sb16|
scoop|sdhci-pci|sga|sii9022|sl-nand|smbus-eeprom|smc91c111|sp804|
spitz-keyboard|spitz-lcdtg|ssd0303|ssd0323|sst25vf016b|sst25vf032b|
sst25vf040b|sst25vf080b|sst25wf010|sst25wf020|sst25wf040| sst25wf080|
sst25wf512|stellaris-adc|stellaris_enet|stellaris-gptm|stellaris-i2c|
stm32f205-soc|stm32f2xx-syscfg|stm32f2xx-timer|stm32f2xx-usart|
strongarm-gpio|strongarm_pic|strongarm-ppc|strongarm-rtc|
strongarm-ssp|strongarm-uart|tegra2-ehci-usb|ti925t-arm-cpu|tmp105|
tosa_dac|tosa-ssp|tusb6010|twl92230|tz-msc|usb-redir|versatile_i2c|
versatilepb_sic|versatile_pci|versatile_pci_host|vfio-pci-nohotplug|
vfio-platform|vhost-vsock-device|virtconsole|virtio-crypto-device|
vmgenid|vmware-svga|w25q256|w25q32|w25q32dw|w25q64|w25q80|w25q80bl|
w25x10|w25x16|w25x20|w25x32|w25x40|w25x64|w25x80|wm8750|*-x86_64-cpu|
xen-backend|xen-pci-passthrough|xen-platform|xen-pvdevice|xgmac|
xilinxzynq_slcr|xlnx-versal|xlnx.ps7-qspi|xlnx.ps7-spi|xlnxzynqmp|
xlnxzynq-xadc|armsse-cpuid|armsse-mhu|cpu-cluster|luminary-watchdog|
microbit.i2c|nrf51_soc.gpio|nrf51_soc.nvm|nrf51_soc.rng|
nrf51_soc.timer|platform-ehci-usb|sse-200|vmware-svga|vmxnet3|ati-vga|
cirrus-vga|vhost-user-fs-device|tulip|ati-vga|aw-hc-ehci-usb|
virtio-iommu-device|virtio-iommu-pci|
virtio-iommu-pci-non-transitional|virtio-iommu-pci-transitional|
cortex-m7-arm-cpu|allwinner-cpucfg|allwinner-h3|allwinner-h3-ccu|
allwinner-h3-dramc|allwinner-h3-sysctrl|allwinner-rtc-sun4i|
allwinner-rtc-sun6i|allwinner-rtc-sun7i|allwinner-sdhost-sun4i|
allwinner-sdhost-sun5i|allwinner-sid|allwinner-sun8i-emac|imx.rngc|
imx.usbphy|serial|serial-io|stm32f405-soc|stm32f4xx-exti|
stm32f4xx-syscfg|tpm-tis-device|nvdimm|vhost-user-vsock-device|i
vhost-user-vsock-pci|vhost-user-vsock-pci-non-transitional|
vhost-user-vsock-pci-transitional]
(the following are aliases of these unsupported devices: lsi|
piix3-usb-uhci)
(note that some of these device names represent supported devices and
are used internally, but are not specifyable via -device even though
they appear in the list of devices)
-drive
,if=[scsi|mtd|pflash], snapshot=on, format=[anything besides qcow2 or
raw]
-dtb file
-enable-hax
-enable-sync-profile
-fda/-fdb ...
-g ...
-hda/-hdb/-hdc/-hdd ...
-icount ...
-L ...
-M
[akita|ast2500-evb|ast2600-evb|borzoi|canon-a1100|cheetah|collie|connex|
cubieboard|highbank|imx25-pdk|integratorcp|kzm|lm3s6965evb|lm3s811evb|
mainstone|mcimx6ul-evk|mcimx7d-sabre|microbit|midway|mps2-an385|mps2-an505|
mps2-an511|mps2-an521|musca-a|musca-b1|musicpal|n800|n810|netduino2|
netduinoplus2|nuri|orangepi-pc|palmetto-bmc|raspi2|raspi3|realview-eb|
realview-eb-mpcore|realview-pb-a8|realview-pbx-a9|romulus-bmc|sabrelite|
sbsa-ref|smdkc210|sonorapass-bmc|spitz|swift-bmc|sx1|sx1-v1|tacoma-bmc|
terrier|tosa|verdex|versatileab|versatilepb|vexpress-a15|vexpress-a9|
virt-2.7|virt-2.8|virt-2.12|virt-3.0|virt-4.0|virt-4.1|virt-5.0|virt-5.1|
witherspoon-bmc|xilinx-zynq-a9|xlnx-versal-virt|xlnx-zcu102|z2]
-machine
[akita|ast2500-evb|ast2600-evb|borzoi|canon-a1100|cheetah|collie|
connex|cubieboard|highbank|imx25-pdk|integratorcp|kzm|lm3s6965evb|
lm3s811evb|mainstone|mcimx6ul-evk|mcimx7d-sabre|microbit|midway|
mps2-an385|mps2-an521|mps2-an505|mps2-an511|musca-a|musca-b1|
musicpal|n800|n810|netduino2|netduinoplus2|nuri|orangepi-pc|
palmetto-bmc|raspi2|raspi3|realview-eb|realview-eb-mpcore|
realview-pb-a8|realview-pbx-a9|romulus-bmc|sabrelite|sbsa-ref|
smdkc210|sonorapass-bmc|spitz|swift-bmc|sx1|sx1-v1|tacoma-bmc|
terrier|tosa|verdex|versatileab|versatilepb|vexpress-a15|vexpress-a9|
virt-2.7|virt-2.8|virt-2.12|virt-3.0|virt-4.0|virt-4.1|virt-5.0|
virt-5.1|witherspoon-bmc|xilinx-zynq-a9|xlnx-versal-virt|xlnx-zcu102|
z2]
-mtdblock file
-net [dump|socket|vde] ...
-netdev [dump|hubport|l2tpv3|socket|vde] ...
-no-fd-bootchk
-no-hpet
-no-kvm
-no-kvm-irqchip
-no-kvm-pit
-no-kvm-pit-reinjection
-numa cpu ...
-numa dist ...
-numa node ...
-option-rom ...
-overcommit ...
-pflash file
-portrait
-preconfig
-prom-env ...
-qtest ...
-qtest-log ...
-rotate
-sd file
-sdl
-set ...
-singlestep
-snapshot
-soundhw ...
-tb-size ...
-tpmdev emulator ...
-vga [cg3|tcx|virtio|cirrus|xenfb]
-win2k-hack
-xen-attach ...
-xen-domid ...
-xen-domid-restrict ...
- The following monitor commands are unsupported:
acl_add ...
acl_policy ...
acl_remove ...
acl_reset ...
acl_show ...
block_job_cancel ...
block_job_complete ...
block_job_pause ...
block_job_resume ...
block_job_set_speed ...
block_passwd ...
commit ...
drive_mirror ...
exit_preconfig
expire_password ...
hostfwd_add ...
hostfwd_remove ...
nbd_server_add ...
nbd server_start ...
nbd_server_stop ...
netdev_add
netdev_del ...
pcie_aer_inject_error ...
set_link ...
set_password ...
singlestep ...
snapshot_blkdev ...
stopcapture ...
sync-profile ...
wavcapture ...
x_colo_lost_heartbeat
- The following QMP commands are unsupported:
block-job-cancel
block-job-complete
block-job-pause
block-job-resume
block-job-set-speed
change-backing-file
drive-backup
drive-mirror
dump-skeys
netdev_add
netdev_del
nbd-server-add
nbd-server-start
nbd-server-stop
query-colo-status
query-sev
query-sev-launch-measure
x-blockdev-amend
x-blockdev-change
x-blockdev-insert-medium
x-blockdev-remove-medium
x-blockdev-reopen
x-colo-lost-heartbeat
x-debug-block-dirty-bitmap-sha256
x-debug-query-block-graph
x-exit-preconfig
xen-colo-do-checkpoint
xen-load-devices-state
xen-save-devices-state
xen-set-global-dirty-log
xen-set-replication

View File

@ -1,5 +0,0 @@
[qemu-ppc package document]
POST SLES 15 SP2 QEMU/KVM RELATED SUPPORT STATEMENTS
QEMU/KVM on ppc is not supported.

View File

@ -1,837 +0,0 @@
[qemu-s390 package document]
POST SLES 15 SP2 QEMU/KVM RELATED SUPPORT STATEMENTS
Overview
--------
The QEMU based packages included with SLES 15 SP2 provide a large variety of
features, from the very latest customer requests to features of questionable
quality or value. The linux kernel includes components which contribute KVM
virtualization features as well. This document was created to assist the user
in deciding which features can be relied upon to build enterprise class
virtualization solutions. KVM based virtualization for x86 (Intel 64/AMD64),
for IBM System z (s390x), and for the ARM64 architecture (AArch64) are offered
at the L3 (full support) level. The bulk of this document deals with L3
supported features and is primarily s390x centric. This document should be
considered a companion to the standard virtualization documentation delivered
with the product.
KVM is implemented in linux kernel modules which enable the linux kernel to
function as an integral part of the KVM hypervisor. The hypervisor-guest
interaction is managed by QEMU through the /dev/kvm ioctl interface. The linux
host assists in the virtualization of storage, networking and display
resources as well as allowing direct hardware passthrough of PCI devices.
Linux memory and cpu management features are used by QEMU/KVM to enable guests
to share those host resources as efficiently as possible.
QEMU is a primary component of KVM based virtualization. The legacy qemu-kvm
program is available for continuity with pre SLES 12 usage, including in
libvirt domain xml references. The QEMU emulator binary qemu-system-s390x is
now the primary program to use to access KVM virtualization. When using this
program, the -machine option accel=kvm (or its alias -enable-kvm) or --accel
kvm option must be specified for KVM acceleration to be used by the guest.
Libvirt is the preferred means of accessing QEMU/KVM functionality and is
documented elsewhere. This document focuses on the features and direct usage
of QEMU/KVM as provided by the QEMU based packages.
Major QEMU/KVM Supported Features
---------------------------------
- KVM virtualization is accomplished by using the QEMU program in KVM
acceleration mode. KVM acceleration requires that both guest and host have
the same fundamental architecture.
- Guest images created under previous QEMU versions are supported by machine
version compatibilities built into more recent QEMU versions.
- For ease of use, the QEMU program has defaults which represent traditional
usage patterns.
- Guest virtual machine characteristics are specified by a combination of
internal defaults, options provided on the QEMU program command-line, runtime
configurations set via the monitor interfaces and optional config files. The
runtime control of a VM is effected either through the Human Monitor
"Protocol" (HMP), or the JSON based programmatical QEMU Monitor Protocol (QMP)
interface. For QMP details, see qemu-qmp-ref man page.
Since a KVM guest runs in the context of a normal linux process, some types
of execution controls are managed with linux tools.
- QEMU incorporates virtualized, s390 specific, ccw bus based firmware for
booting s390 guests. This firmware is automatically incorporated and
doesn't need to be explicitly referenced.
- Some QEMU messages have been localized to various languages. This is provided
by the optional qemu-lang package. Keyboard mappings for various nationalities
is also provided.
- Virtual machine lifecycle controls include startup through the ccw firmware or
kernel boot, firmware based shutdown, execution pausing, the saving and
restoring of machine state or disk state, VM migration to another host, and
miscellaneous controls available through the "monitors" mentioned above.
- Guest execution state may be "moved" in both time (save/restore) and space
(static and live migration). These migrations or save/restore operations can
take place either from certain prior SLES versioned hosts to a SLES 15 SP2
host or between hosts of the same version. Certain other restrictions also
apply.
- Security considerations include privileged helpers and a security model which
allows running guests as a non-root user.
- QEMU provides best effort reuse of existing disk images, including those with
systems installed, through geometry probing. Also disk images produced by
other popular virtualization technologies may be imported into QEMU supported
storage formats. These QEMU formats include features which exploit the
benefits of virtualization.
- Memory, cpu and disk space overcommit are possible and can be beneficial when
done responsibly. Additional management of these resources comes in the form
of memory ballooning or hotplug, host KSM, vcpu hot-add, online disk resizing,
trim, discard and hole punching.
- Guest performance is enhanced through the use of virtio devices, various disk
caching modes, network acceleration via the vhost-net kernel module, multi-
queue network transmit capabilities, host transparent huge pages (THP) and
direct hugetlb usage. Physical PCI devices may also be passed through to the
guest, including SR-IOV VF's.
- The guest UI is accessable via GTK, VNC, and serial (including curses TUI)
interfaces.
- Guest timekeeping is supported in a variety of ways, including a paravirtual
clocksource, and options for the various guest clocks for how to handle the
timeslicing of the guest's execution on the host.
- In addition to the para-virtualized devices already mentioned, other devices
and infrastructure designed to avoid virtualization "problem areas" are
available such as SPICE graphics, vmmouse emulation, tablet style pointer
interfaces and virtio based UI interfaces.
- A built-in user-mode network (SLIRP) stack is available.
- Portions of the host file system may be shared with a guest by using virtFS.
- A guest "agent" is available for SLES 15 SP2 KVM guests via the
qemu-guest-agent package. This allows some introspection and control of the
guest OS environment from the host.
QEMU/KVM Technology Previews
----------------------------
- All features indicated as not being supported in this document fall under the
Technology Preview definition contained in the main product's release notes.
Noteworthy QEMU/KVM Unsupported Features
----------------------------------------
- Note that some features are unsupported simply due to lack of validation. If
an existing feature is desired, but not marked supported, let SUSE know about
your requirements.
- The TCG "acceleration" mode may be helpful for problem isolation, but
otherwise presents insufficient benefit and stability.
- GlusterFS integration is not enabled.
Deprecated, Superseded, Modified and Dropped Features
-----------------------------------------------------
- http://wiki.qemu-project.org/Features/LegacyRemoval
This website tracks feature deprecation and removal at the upstream
development level. Our qemu package inherits this community direction, but be
aware that we can and will deviate as needed. Those deviations and additional
information can be found in this section. Feature deprecation is also tracked
in Appendix B of the qemu-doc.* files installed with the qemu package.
- The use of "?" as a parameter to "-cpu", "-soundhw", "-device", "-M",
"-machine" and "-d" is now considered deprecated. Use "help"
instead.
- The use of "if=scsi" as a parameter to "-drive" does not work anymore with PC
machine types, as it created an obsolete SCSI controller model.
- Use of aio=native without direct cache mode also being specified (cache=none,
cache=directsync, or cache.direct=on) is no longer allowed.
- The use of image encryption in qcow and qcow2 formats is now considered
deprecated.
Analysis has shown it to be weak encryption, in addition to suffering from
poor design. Images can easily be converted to a non-encrypted format.
- Use of acpi, boot-opts, and smp-opts in a -readconfig config file are now
considered deprecated. In the future those names will be standardized to
acpitable, boot, and smp respectively.
- This previously supported command line option is now considered deprecated:
-device virtio-blk,scsi= (use virtio-scsi instead)
-device virtio-blk-pci,scsi= (use virtio-scsi instead)
-realtime mlock= (use -overcommit mem-lock= instead)
- These previously supported command line options are no longer supported:
<previously mentioned items have been moved to another category>
- These previously supported command line options are no longer recognized:
-balloon (use -device virtio-balloon instead)
-clock
-device ivshmem (use ivshmem-doorbell or ivshmem-plain instead)
-device pc-sysfw (no longer needed)
-device pci-assign, -device kvm-pci-assign (use -device vfio-pci instead)
-display sdl
-no-frame
-nodefconfig (use -no-user-config instead)
-sdl
-virtioconsole (use -device virtconsole instead)
- Specifying a cpu feature with both "+feature/-feature" and "feature=on/off"
will now cause a warning. The current behavior for this combination where
"+feature/-feature" wins over "feature=on/off", will be changed going forward
so that "+feature" and "-feature" will be synonyms for "feature=on" and
"feature=off" respectively.
- The previously supported blkdev-add QMP command has been flagged as lacking
and could possibly change syntax in the future.
- These previously unsupported command line options are now deprecated:
-bt
-device ide-drive (use ide-hd or ide-cd)
-device scsi-disk (use scsi-hd or scsi-cd)
-soundhw (use -device ... instead)
-tb-size
- These previously unsupported command line options are no longer recognized:
-device mmio_interface
-device ramfb
-enable-hax
-tdf
-xen-create
- These previously supported QMP commands are now deprecated:
change (use blockdev-change-medium or change-vnc-password instead)
cpu-add
migrate-set-cache-size (use migrate-set-parameters instead)
migrate_set_downtime (use migrate-set-parameters instead)
migrate_set_speed (use migrate-set-parameters instead)
query-cpus (use query-cpus-fast instead)
query-events
query-migrate-cache-size (use query-migrate-parameters instead)
- These previously supported monitor commands are now deprecated:
change
cpu-add
migrate_set_downtime
migrate_set_speed
- These previously supported monitor commands are no longer recognized:
pci_add (use device_add instead)
pci_del (use device_del instead)
- These previously unsupported monitor command are now deprecated:
acl_add ...
acl_policy ...
acl_remove ...
acl_reset ...
acl_show ...
- These previously unsupported monitor commands are no longer recognized:
host_net_add
host_net_remove
usb_add
usb_del
- These previously unsupported QMP commands are now supported under a new name:
x-block-dirty-bitmap-disable (use block-dirty-bitmap-disable instead)
x-block-dirty-bitmap-enable (use block-dirty-bitmap-enable instead)
x-block-dirty-bitmap-merge (use block-dirty-bitmap-merge instead)
x-block-latency-histogram-set (use block-latency-histogram-set instead)
x-blockdev-create (use blockdev-create instead)
- This previously unsupported QMP commands is no longer recognized:
x-nbd-server-add-bitmap
- Due to upstream's decision to no longer fully support the qed storage format
going forward (since it really provides no benefit over qcow2 and is now no
longer actively maintained upstream), creating qed storage images is no longer
supported and it is highly discouraged to continue using existing qed images.
They should instead be converted to another supported format.
QEMU Command-Line and Monitor Syntax and Support
------------------------------------------------
- The QEMU program command-line syntax is as follows:
qemu-system-s390x [options]
Where 'options' are taken from the options listed below.
The images used with -drive or -cdrom, may be in the raw (no format) or qcow2
storage formats, and may be located in files within the host filesystem,
logical volumes, host physical disks, or network based storage. Read only
media may also be accessed via URL style protocol specifiers.
Note that as a general rule, as new command line options are added which serve
to replace an older option or interface, you are strongly encouraged to adapt
your usage to the new option. The new option is being introduced to provide
better functionality and usability going forward. In some cases existing
problems or even bugs in older interfaces cannot be fixed due to functional
expectations, but are resolved in the newer interface or option.
This advice includes moving to the most recent machine type (eg
s390-ccw-virtio-4.2 instead of s390-ccw-virtio-3.1) if possible.
- The following command line options are supported:
-accel ...
-add-fd ...
-alt-grab
-append ...
-audio-help
-audiodev
-bios ...
-blockdev ...
-boot ...
-cdrom ...
-chardev ..
-cpu host
-ctrl-grab
-d ...
-daemonize
-debugcon ...
-device
[virtio-net-pci|virtio-blk-pci|virtio-balloon-pci|virtserialport|
virtconsole|virtio-serial-pci|virtio-scsi-pci|scsi-cd|scsi-hd|
scsi-generic|scsi-disk|scsi-block|virtio-rng-pci|pci-bridge|
megasas-gen2|e1000e|e1000|zpci|virtio-gpu-ccw|virtio-keyboard-ccw|
vhost-user-blk-pci|vhost-user-scsi|vhost-user-scsi-pci|
vhost-vsock-ccw|virtio-balloon-ccw|virtio-blk-ccw|
vhost-scsi-ccw|vhost-user-blk|virtio-crypto-ccw|virtio-net-ccw|
virtio-rng-ccw|virtio-scsi-ccw|virtio-serial-ccw|virtio-mouse-ccw|
virtio-tablet-ccw|vfio-pci|virtio-vga|vhost-scsi-pci-non-transitional|
vhost-scsi-pci-transitional|vhost-user-blk-pci-non-transitional|
vhost-user-blk-pci-transitional|vhost-user-scsi-pci-non-transitional|
vhost-user-scsi-pci-transitional|vhost-vsock-pci-non-transitional|
vhost-vsock-pci-transitional|virtio-9p-pci-non-transitional|
virtio-9p-pci-transitional|virtio-balloon-pci-non-transitional|
virtio-balloon-pci-transitional|virtio-blk-pci-non-transitional|
virtio-blk-pci-transitional|virtio-input-host-pci-non-transitional|
virtio-input-host-pci-transitional|virtio-net-pci-non-transitional|
virtio-net-pci-transitional|virtio-rng-pci-non-transitional|
virtio-rng-pci-transitional|virtio-scsi-pci-non-transitional|
virtio-scsi-pci-transitional|virtio-serial-pci-non-transitional|
virtio-serial-pci-transitional|vhost-user-fs-pci|vhost-user-gpu|
vhost-user-pci-pci|vhost-user-input|vhost-user-input-pci|
vhost-user-vga]
(the following are aliases of these supported devices: virtio-blk|
virtio-input-host|virtio-keyboard|virtio-mouse|virtio-tablet|
virtio-gpu|virtio-9p|virtio-net|virtio-serial|virtio-balloon|
virtio-scsi|virtio-rng)
-dfilter range, ...
-display ...
-drive
... (if specified if=[virtio] and format=[qcow2|raw] and
snapshot=off only)
-echr ...
-enable-fips
-enable-kvm
-fsdev ...
-full-screen
-fw_cfg ...
-gdb ...
-global ...
-h
-help
-incoming ...
-initrd ...
-iscsi ...
-k ...
-kernel ...
-loadvm ...
-m ...
-M
[help|?|none|s390-ccw-virtio|s390-ccw-virtio-2.6|s390-ccw-virtio-2.9|
s390-ccw-virtio-2.11|s390-ccw-virtio-3.1|s390-ccw-virtio-4.2]
-machine
[help|?|none|s390-ccw-virtio|s390-ccw-virtio-2.6|s390-ccw-virtio-2.9|
s390-ccw-virtio-2.11|s390-ccw-virtio-3.1|s390-ccw-virtio-4.2]
-mem-path ...
-mem-prealloc
-mon ...
-monitor ...
-msg ...
-name ...
-net
[bridge|l2tpv3|nic|none|tap|user] ... (for model= only e1000, rtl8139,
and virtio are supported)
-netdev [bridge|tap|user] ...
-nic ...
-nodefaults
-nographic
-no-quit
-no-reboot
-no-shutdown
-no-user-config
-object ...
-only-migratable
-parallel ...
-pidfile ...
-plugin ...
-qmp ...
-qmp-pretty ...
-readconfig ...
-realtime ...
-rtc ...
-runas ...
-s
-S
-sandbox ...
-seed ...
-serial ...
-show-cursor
-smp ...
-trace ...
-uuid ..
-version
-vga [none|qxl|std]
-virtfs ...
-vnc ...
-watchdog ...
-watchdog-action ...
-writeconfig ...
- The following monitor commands are supported:
?
announce_self ...
balloon ...
block_resize ...
boot_set ...
c
change ...
chardev-add ...
chardev-change ...
chardev-remove ...
chardev-send-break ...
client_migrate_info ...
closefd ...
cont
cpu ...
cpu-add ...
delvm ...
device_add ...
device_del ...
drive_add ...
drive_backup ...
drive_del ...
dump_guest_memory ...
eject ...
gdbserver ...
gpa2hpa ...
gpa2hva ...
gva2gpa ...
help
i ...
info ...
loadvm ...
logfile ...
logitem ...
mce ...
memsave ...
migrate ...
migrate_cancel
migrate_continue ...
migrate_incoming
migrate_pause
migrate_recover ...
migrate_set_cache_size ...
migrate_set_capability ...
migrate_set_downtime ...
migrate_set_parameter ...
migrate_set_speed ...
migrate_start_post_copy
mouse_button ...
mouse_move ...
mouse_set ...
nmi ...
o ...
object_add ...
object_del ...
p ...
pmemsave ...
print ...
q
qemu-io ...
qom-list
qom-set
ringbuf_read ...
ringbuf_write ...
savevm ...
screendump ...
sendkey ...
snapshot_blkdev_internal ...
snapshot_delete_blkdev_internal ...
stop
sum ...
system_powerdown
system_reset
system_wakeup
trace-event ...
watchdog_action ...
x ...
xp ...
- The following QMP commands are supported:
add_client
add-fd
announce-self
balloon
blockdev-add
blockdev-backup
blockdev-change-medium
blockdev-close-tray
blockdev-create
blockdev-del
blockdev-mirror
blockdev-open-tray
blockdev-snapshot
blockdev-snapshot-delete-internal-sync
blockdev-snapshot-internal-sync
blockdev-snapshot-sync
block-commit
block-dirty-bitmap-add
block-dirty-bitmap-clear
block-dirty-bitmap-disable
block-dirty-bitmap-enable
block-dirty-bitmap-merge
block-dirty-bitmap-remove
block-latency-histogram-set
block_passwd
block_resize
block_set_io_throttle
block-set-write-threshold
block_stream
change
change-vnc-password
chardev-add
chardev-change
chardev-remove
chardev-send-break
client_migrate_info
closefd
cont
cpu
cpu-add
device_add
device_del
device-list-properties
dump-guest-memory
eject
expire_password
getfd
human-monitor-command
inject-nmi
input-send-event
job-cancel
job-complete
job-dismiss
job-finalize
job-pause
job-resume
memsave
migrate
migrate_cancel
migrate-continue
migrate-incoming
migrate-pause
migrate-resume
migrate-set-cache-size
migrate-set-capabilities
migrate_set_downtime
migrate_set_speed
migrate-set-parameters
migrate-start-postcopy
object-add
object-del
pmemsave
qmp_capabilities
qom-get
qom-list
qom-list-types
qom-set
query-acpi-ospm-status
query-balloon
query-block
query-block-jobs
query-blockstats
query-chardev
query-chardev-backends
query-command-line-options
query-commands
query-cpu-definitions
query-cpu-model-baseline
query-cpu-model-comparison
query-cpu-model-expansion
query-cpus
query-cpus-fast
query-current-machine
query-display-options
query-dump
query-dump-guest-memory-capability
query-events
query-fdsets
query-gic-capabilities
query-hotpluggable-cpus
query-iothreads
query-jobs
query-kvm
query-machines
query-memdev
query-memory-devices
query-memory-size-summary
query-mice
query-migrate
query-migrate-cache-size
query-migrate-capabilities
query-migrate-parameters
query-name
query-named-block-nodes
query-pci
query-pr-managers
query-qmp-schema
query-rocker
query-rocker-of-dpa-flows
query-rocker-of-dpa-groups
query-rocker-ports
query-rx-filter
query-spice
query-status
query-target
query-uuid
query-version
query-vnc
query-vnc-servers
query-xen-replication-status
quit
remove-fd
ringbuf-read
ringbuf-write
rtc-reset-reinjection
screendump
send-key
set_link
set_password
stop
system_powerdown
system_reset
system_wakeup
trace-event-get-state
trace-event-set-state
transaction
watchdog-set-action
- The following command line options are unsupported:
-acpitable ...
-chroot ...
-cpu ... (all except host)
-curses
-device
[AC97|adlib|am53c974|amd-iommu|AMDVI-PCI|ccid-card-emulated|
ccid-card-passthrough|cirrus-vga|cs4231a|dc390|diag288|e1000-82544gc|
e1000-82545em|edu|ES1370|floppy|generic-sdhci|gus|hda-duplex|
hda-micro|hda-output|hyperv-testdev|*-i386-cpu|i8042|i82550|i82551|
i82557a|i82557b|i82557c|i82558a|i82558b|i82559a|i82559b|i82559c|
i82562|i82801|i82801b11-bridge|ib700|ich9-intel-hda|ich9-usb-ehci1|
ich9-usb-ehci2|ich9-usb-uhci1|ich9-usb-uhci2|ich9-usb-uhci3|
ich9-usb-uhci4|ich9-usb-uhci5|ich9-usb-uhci6|ide-cd|ide-drive|ide-hd|
igd-passthrough-isa-bridge|intel-hda|intel_iommu|ioh3420|
ipmi-bmc-extern|ipmi-bmc-sim|ipoctal232|isa-applesmc|isa-cirrus-vga|
isa-debugcon|isa-debug-exit|isa-fdc|isa-ide|isa-ipmi-bt|isa-ipmi-kcs|
isa-parallel|isa-serial|isa-vga|lsi53c810|lsi53c810a|max-s390x-cpu|
megasas|mptsas1068|ne2k_isa|ne2k_pci|nec-usb-xhci|nvdimm|nvme|pc-dimm|
pci-testdev|pcnet|pc-testdev|piix3-ide|piix3-ide|piix3-ide-xen|
piix4-usb-uhci|pvscsi|pxb|pxb-host|pxb-pcie|qemu-s390-cpu|
rocker|s390-flic|s390-flic-qemu|s390-ipl|s390-pcihost|
s390-sclp-event-facility|s390-skeys-qemu|sb16|sclp|sclpconsole|
sclp-cpu-hotplug|sclplmconsole|sclp-memory-hotplug-dev|sclpquiesce|
sd-card|sdhci-pci|secondary-vga|sga|smbus-eeprom|tpci200|usb-audio|
usb-bot|usb-ccid|usb-mtp|usb-uas|vfio-ap|vfio-pci-nohotplug|
virtio-9p-device|virtual-css-bridge|vmcoreinfo|vmgenid|vmware-svga|
vmxnet3|vt82c686b-usb-uhci|x3130-upstream|*-x86_64-cpu|xen-backend|
xen-pci-passthrough|xen-platform|xen-pvdevice|xio3130-downstream|
z10BC.2-base-s390x-cpu|z10BC.2-s390x-cpu|z10BC-base-s390x-cpu|
z10BC-s390x-cpu|z10EC.2-base-s390x-cpu|z10EC.2-s390x-cpu|
z10EC.3-base-s390x-cpu|z10EC.3-s390x-cpu|z10EC-base-s390x-cpu|
z10EC-s390x-cpu|z114-base-s390x-cpu|z114-s390x-cpu|
z13.2-base-s390x-cpu|z13.2-s390x-cpu|z13-base-s390x-cpu|z13-s390x-cpu|
z13s-base-s390x-cpu|z13s-s390x-cpu|z196.2-base-s390x-cpu|
z196.2-s390x-cpu|z196-base-s390x-cpu|z196-s390x-cpu|
z800-base-s390x-cpu|z800-s390x-cpu|z890.2-base-s390x-cpu|
z890.2-s390x-cpu|z890.3-base-s390x-cpu|z890.3-s390x-cpu|
z890-base-s390x-cpu|z890-s390x-cpu|z900.2-base-s390x-cpu|
z900.2-s390x-cpu|z900.3-base-s390x-cpu|z900.3-s390x-cpu|
z900-base-s390x-cpu|z900-s390x-cpu|z990.2-base-s390x-cpu|
z990.2-s390x-cpu|z990.3-base-s390x-cpu|z990.3-s390x-cpu|
z990.4-base-s390x-cpu|z990.4-s390x-cpu|z990.5-base-s390x-cpu|
z990.5-s390x-cpu|z990-base-s390x-cpu|z990-s390x-cpu|
z9BC.2-base-s390x-cpu|z9BC.2-s390x-cpu|z9BC-base-s390x-cpu|
z9BC-s390x-cpu|z9EC.2-base-s390x-cpu|z9EC.2-s390x-cpu|
z9EC.3-base-s390x-cpu|z9EC.3-s390x-cpu|z9EC-base-s390x-cpu|
z9EC-s390x-cpu|z14ZR1-base-s390x-cpu|z14ZR1-s390x-cpu|
zBC12-base-s390x-cpu|zBC12-s390x-cpu|zEC12.2-base-s390x-cpu|
zEC12.2-s390x-cpu|zEC12-base-s390x-cpu|zEC12-s390x-cpu|cpu-cluster|
z14.2-base-s390x-cpu|z14.2-s390x-cpu|vhost-user-fs-device|
virtio-iommu-device|virtio-iommu-pci|
virtio-iommu-pci-non-transitional|virtio-iommu-pci-transitional|
vhost-user-vsock-device|vhost-user-vsock-pci|
vhost-user-vsock-pci-non-transitional|
vhost-user-vsock-pci-transitional]
(the following are aliases of these unsupported devices: lsi|
ahci|e1000-82540em|vfio-ccw)
(note that some of these device names represent supported devices and
are used internally, but are not specifyable via -device even though
they appear in the list of devices)
-drive
,if=[scsi|mtd|pflash], snapshot=on, format=[anything besides qcow2 or
raw]
-dtb file
-enable-hax
-enable-sync-profile
-fda/-fdb ...
-g ...
-hda/-hdb/-hdc/-hdd ...
-icount ...
-L ...
-M
[s390-ccw-virtio-2.4|s390-ccw-virtio-2.5|s390-ccw-virtio-2.7|
s390-ccw-virtio-2.8|s390-ccw-virtio-2.10|s390-ccw-virtio-2.12|
s390-ccw-virtio-3.0|s390-ccw-virtio-4.0|s390-ccw-virtio-4.1|
s390-ccw-virtio-5.0|s390-ccw-virtio-5.1]
-machine
[s390-ccw-virtio-2.4|s390-ccw-virtio-2.5|s390-ccw-virtio-2.7|
s390-ccw-virtio-2.8|s390-ccw-virtio-2.10|s390-ccw-virtio-2.12|
s390-ccw-virtio-3.0|s390-ccw-virtio-4.0|s390-ccw-virtio-4.1|
s390-ccw-virtio-5.0|s390-ccw-virtio-5.1]
-mtdblock file
-net [dump|socket|vde] ...
-netdev [dump|hubport|l2tpv3|socket|vde] ...
-no-acpi
-no-fd-bootchk
-no-hpet
-no-kvm
-no-kvm-irqchip
-no-kvm-pit
-no-kvm-pit-reinjection
-numa cpu ...
-numa dist ...
-numa node ...
-option-rom ...
-overcommit ...
-pflash file
-portrait
-preconfig
-prom-env ...
-qtest ...
-qtest-log ...
-rotate
-sd file
-sdl
-set ...
-singlestep
-smbios ...
-snapshot
-soundhw ...
-spice
-tb-size ...
-tdf
-tpmdev emulator ...
-tpmdev passthrough ...
-usb
-usbdevice [braile|disk|host|mouse|net|serial|tablet]
-vga [cg3|tcx|virtio|cirrus|xenfb|vmware]
-win2k-hack
-xen-attach ...
-xen-domid ...
-xen-domid-restrict ...
- The following monitor commands are unsupported:
acl_add ...
acl_policy ...
acl_remove ...
acl_reset ...
acl_show ...
block_job_cancel ...
block_job_complete ...
block_job_pause ...
block_job_resume ...
block_job_set_speed ...
block_passwd ...
commit ...
drive_mirror ...
exit_preconfig
expire_password ...
hostfwd_add ...
hostfwd_remove ...
nbd_server_add ...
nbd server_start ...
nbd_server_stop ...
netdev_add
netdev_del ...
pcie_aer_inject_error ...
set_link ...
set_password ...
singlestep ...
snapshot_blkdev ...
stopcapture ...
sync-profile ...
wavcapture ...
x_colo_lost_heartbeat
- The following QMP commands are unsupported:
block-job-cancel
block-job-complete
block-job-pause
block-job-resume
block-job-set-speed
change-backing-file
drive-backup
drive-mirror
dump-skeys
netdev_add
netdev_del
nbd-server-add
nbd-server-start
nbd-server-stop
query-colo-status
query-sev
query-sev-launch-measure
query-tpm
query-tpm-models
query-tpm-types
x-blockdev-amend
x-blockdev-change
x-blockdev-insert-medium
x-blockdev-remove-medium
x-blockdev-reopen
x-colo-lost-heartbeat
x-debug-block-dirty-bitmap-sha256
x-debug-query-block-graph
x-exit-preconfig
xen-colo-do-checkpoint
xen-load-devices-state
xen-save-devices-state
xen-set-global-dirty-log
xen-set-replication

View File

@ -1,933 +0,0 @@
[qemu-x86 package document]
POST SLES 15 SP2 QEMU/KVM RELATED SUPPORT STATEMENTS
Overview
--------
The QEMU based packages included with SLES 15 SP2 provide a large variety of
features, from the very latest customer requests to features of questionable
quality or value. The linux kernel includes components which contribute KVM
virtualization features as well. This document was created to assist the user
in deciding which features can be relied upon to build enterprise class
virtualization solutions. KVM based virtualization for x86 (Intel 64/AMD64),
for IBM System z (s390x), and for the ARM64 architecture (AArch64) are offered
at the L3 (full support) level. The bulk of this document deals with L3
supported features and is primarily x86 centric. This document should be
considered a companion to the standard virtualization documentation delivered
with the product.
KVM is implemented in linux kernel modules which enable the linux kernel to
function as an integral part of the KVM hypervisor. The hypervisor-guest
interaction is managed by QEMU through the /dev/kvm ioctl interface. The linux
host assists in the virtualization of storage, networking and display
resources as well as allowing direct hardware passthrough of PCI and USB
devices. Linux memory and cpu management features are used by QEMU/KVM to
enable guests to share those host resources as efficiently as possible.
QEMU is a primary component of KVM based virtualization. The legacy qemu-kvm
program is available for continuity with pre SLES 12 usage, including in
libvirt domain xml references. The QEMU emulator binaries qemu-system-x86_64
and qemu-system-i386 (x86 host) are now the primary programs to use to access
KVM virtualization. When using these programs, the -machine option accel=kvm
(or its alias -enable-kvm), or --accel kvm option must be specified for KVM
acceleration to be used by the guest. Although Xen uses QEMU for
virtualization as well, this document does not identify Xen supported
features.
Libvirt is the preferred means of accessing QEMU/KVM functionality and is
documented elsewhere. This document focuses on the features and direct usage
of QEMU/KVM as provided by the QEMU based packages.
Major QEMU/KVM Supported Features
---------------------------------
- KVM virtualization is accomplished by using the QEMU program in KVM
acceleration mode. KVM acceleration requires that both guest and host have
the same fundamental architecture.
- Guest images created under previous QEMU versions are supported by machine
version compatibilities built into more recent QEMU versions.
- For ease of use, the QEMU program has defaults which represent traditional
usage patterns.
- Guest virtual machine characteristics are specified by a combination of
internal defaults, options provided on the QEMU program command-line, runtime
configurations set via the monitor interfaces and optional config files. The
runtime control of a VM is effected either through the Human Monitor
"Protocol" (HMP), or the JSON based programmatical QEMU Monitor Protocol (QMP)
interface. For QMP details, see qemu-qmp-ref man page.
Since a KVM guest runs in the context of a normal linux process, some types
of execution controls are managed with linux tools.
- Various standard vCPU types are available, along with the ability to specify
individual CPU features visible to the guest.
- QEMU incorporates a SEABIOS based system BIOS and iPXE based PXE ROMs, which
allow boot options common to physical systems, along with other features
tailored to virtualization. Various VGABIOS ROMs, also from the SEABIOS
project, are also included. A UEFI based guest boot environment is also
available by using the firmware provided by the qemu-ovmf-x86_64 package.
- Some QEMU messages have been localized to various languages. This is provided
by the optional qemu-lang package. Keyboard mappings for various nationalities
is also provided.
- Virtual machine lifecycle controls include startup through the system BIOS or
kernel boot, ACPI or legacy based shutdown, execution pausing, the saving and
restoring of machine state or disk state, VM migration to another host, and
miscellaneous controls available through the "monitors" mentioned above.
- Guest execution state may be "moved" in both time (save/restore) and space
(static and live migration). These migrations or save/restore operations can
take place either from certain prior SLES versioned hosts to a SLES 15 SP2
host or between hosts of the same version. Certain other restrictions also
apply.
- Security considerations include seccomp2 based sandboxing, vTPM, privileged
helpers and a security model which allows running guests as a non-root user.
- QEMU/KVM supports a wide range of operating systems within the VMs. See the
online SUSE documentation for supported OS's. Windows guests can optionally be
accelerated with QEMU/KVM provided Hyper-V hypercalls, or with paravirtual
drivers from the SUSE Virtual Machine Driver Pack. Linux includes a number of
paravirtual drivers as well.
- QEMU provides best effort reuse of existing disk images, including those with
systems installed, through geometry probing. Also disk images produced by
other popular virtualization technologies may be imported into QEMU supported
storage formats. These QEMU formats include features which exploit the
benefits of virtualization.
- Memory, cpu and disk space overcommit are possible and can be beneficial when
done responsibly. Additional management of these resources comes in the form
of memory ballooning or hotplug, host KSM, vcpu hot-add, online disk resizing,
trim, discard and hole punching.
- Guest performance is enhanced through the use of virtio devices, various disk
caching modes, network acceleration via the vhost-net kernel module, multi-
queue network transmit capabilities, host transparent huge pages (THP) and
direct hugetlb usage. Physical PCI and USB devices may also be passed through
to the guest, including SR-IOV VF's.
- The guest UI is accessable via GTK, VNC, Spice, and serial (including curses
TUI) interfaces.
- Guest timekeeping is supported in a variety of ways, including a paravirtual
clocksource, and options for the various guest clocks for how to handle the
timeslicing of the guest's execution on the host.
- Guest OS's interact with virtualized hardware including a choice of either
older or more recent x86 system chipsets, system devices and buses, and a
variety of common storage and networking emulated devices. SMBIOS and ACPI
table details can be customized.
- In addition to the para-virtualized devices already mentioned, other devices
and infrastructure designed to avoid virtualization "problem areas" are
available such as SPICE graphics, vmmouse emulation, tablet style pointer
interfaces and virtio based UI interfaces.
- A built-in user-mode network (SLIRP) stack is available.
- Portions of the host file system may be shared with a guest by using virtFS.
- A guest "agent" is available for SLES 15 SP2 KVM guests via the
qemu-guest-agent package. This allows some introspection and control of the
guest OS environment from the host.
QEMU/KVM Technology Previews
----------------------------
- Nested VMX and SVM virtualization is possible.
- All features indicated as not being supported in this document fall under the
Technology Preview definition contained in the main product's release notes.
Noteworthy QEMU/KVM Unsupported Features
----------------------------------------
- Note that some features are unsupported simply due to lack of validation. If
an existing feature is desired, but not marked supported, let SUSE know about
your requirements.
- The TCG "acceleration" mode may be helpful for problem isolation, but
otherwise presents insufficient benefit and stability.
- Use of -cpu host is not supported in all host/guest configurations.
- GlusterFS integration is not enabled.
Deprecated, Superseded, Modified and Dropped Features
-----------------------------------------------------
- http://wiki.qemu-project.org/Features/LegacyRemoval
This website tracks feature deprecation and removal at the upstream
development level. Our qemu package inherits this community direction, but be
aware that we can and will deviate as needed. Those deviations and additional
information can be found in this section. Feature deprecation is also tracked
in Appendix B of the qemu-doc.* files installed with the qemu package.
- When no video adapter is specified, the default used is stdvga. This differs
from the default of prior releases which was cirrus. The cirrus adapter was
considered too outdated to continue to use as the default.
- The deprecated windows drivers (win-virtio-drivers.iso) are no longer provided.
The Virtual Machine Driver Pack is the supported way to get virtio drivers for
Windows guests.
- The use of ",boot=on" for virtio disks is no longer needed since the bios used
supports the virtio block interface directly. In fact, its usage may cause
problems, and is now considered deprecated.
- The use of "?" as a parameter to "-cpu", "-soundhw", "-device", "-M",
"-machine" and "-d" is now considered deprecated. Use "help"
instead.
- The use of "if=scsi" as a parameter to "-drive" does not work anymore with PC
machine types, as it created an obsolete SCSI controller model.
- Passthrough of a host floppy device is now considered deprecated.
- Use of aio=native without direct cache mode also being specified (cache=none,
cache=directsync, or cache.direct=on) is no longer allowed.
- The use of image encryption in qcow and qcow2 formats is now considered
deprecated.
Analysis has shown it to be weak encryption, in addition to suffering from
poor design. Images can easily be converted to a non-encrypted format.
- Use of acpi, boot-opts, and smp-opts in a -readconfig config file are now
considered deprecated. In the future those names will be standardized to
acpitable, boot, and smp respectively.
- When only a partial SMP topology is provided (ie only some of sockets, cores,
threads) the derived guest ABI is not guaranteed to be equivalent in future
versions.
- These previously supported command line options are now considered deprecated:
-device ide-drive (use ide-hd or ide-cd instead)
-device scsi-disk (use scsi-hd or scsi-cd instead)
-device virtio-blk,scsi= (use virtio-scsi instead)
-device virtio-blk-pci,scsi= (use virtio-scsi instead)
-realtime mlock= (use -overcommit mem-lock= instead)
- These previously supported command line options are no longer supported:
<previously mentioned items have been moved to another category>
- The previously supported machine types pc-0.12, pc-0.14 and pc-0.15 are no
longer recognized. Switch to a newer machine type.
- These previously supported command line options are no longer recognized:
-balloon (use -device virtio-balloon instead)
-clock
-device ivshmem (use ivshmem-doorbell or ivshmem-plain instead)
-device pc-sysfw (no longer needed)
-device pci-assign, -device kvm-pci-assign (use -device vfio-pci instead)
-display sdl
-no-frame
-nodefconfig (use -no-user-config instead)
-sdl
-virtioconsole (use -device virtconsole instead)
- Specifying a cpu feature with both "+feature/-feature" and "feature=on/off"
will now cause a warning. The current behavior for this combination where
"+feature/-feature" wins over "feature=on/off", will be changed going forward
so that "+feature" and "-feature" will be synonyms for "feature=on" and
"feature=off" respectively.
- The previously supported blkdev-add QMP command has been flagged as lacking
and could possibly change syntax in the future.
- These previously unsupported command line options are now deprecated:
-no-kvm-pit
-soundhw (use -device ... instead)
-tb-size
- The case of specified sockets, cores, and threads not matching the vcpu count
is no longer silently ignored. QEMU now requires that the topology match the
vcpu count.
- These previously unsupported command line options are no longer recognized:
-bt
-device at24c-eeprom
-device ccid-card-passthru
-device cfi.pflash01
-device esp
-device exynos4210-ehci-usb
-device fusbh200-ehci-usb
-device icc-bridge
-device q35-pcihost
-device mch
-device mmio_interface
-device smbus-eeprom
-device SUNW,fdtwo
-device sysbus-ahci
-device sysbus-fdc
-device sysbus-ohci
-device tegra2-ehci-usb
-device testdev (use -device pc-testdev instead)
-device virtio-mmio
-device xln,ps7-usb
-enable-hax (use -accel hax instead)
-enable-nesting
-kvm-shadow-memory (use -machine kvm_shadow_mem= instead)
-M mac
-machine mac
-no-kvm-irqchip (use -machine kernel_irqchip=off instead)
-no-kvm-pit
-no-kvm-pit-reinjection (use -global kvm-pit.lost_tick_policy=discard instead)
-nvram
-old-param
-osk
-pcidevice (use -device vfio-pci instead)
-qtest
-semihosting
-tdf (note: mistakenly listed previously as supported)
-xen-create
- The previously unsupported machine types pc-1.0, pc-1.1, pc-1.2 and pc-1.3 are
now deprecated.
- The previously unsupported machine types pc-0.10, pc-0.13, pc-0.14 and
pc-0.11 are no longer recognized.
- These previously supported QMP commands are now deprecated:
change (use blockdev-change-medium or change-vnc-password instead)
cpu-add
migrate-set-cache-size (use migrate-set-parameters instead)
migrate_set_downtime (use migrate-set-parameters instead)
migrate_set_speed (use migrate-set-parameters instead)
query-cpus (use query-cpus-fast instead)
query-events
query-migrate-cache-size (use query-migrate-parameters instead)
- These previously supported monitor commands are now deprecated:
change
cpu-add
migrate_set_downtime
migrate_set_speed
- These previously supported monitor commands are no longer recognized:
cpu_set
pci_add (use device_add instead)
pci_del (use device_del instead)
usb_add (use device_add instead)
usb_del (use device_del instead)
- These previously unsupported monitor command are now deprecated:
acl_add ...
acl_policy ...
acl_remove ...
acl_reset ...
acl_show ...
- These previously unsupported monitor commands are no longer recognized:
host_net_add
host_net_remove
- These previously unsupported QMP commands are now supported under a new name:
x-block-dirty-bitmap-disable (use block-dirty-bitmap-disable instead)
x-block-dirty-bitmap-enable (use block-dirty-bitmap-enable instead)
x-block-dirty-bitmap-merge (use block-dirty-bitmap-merge instead)
x-block-latency-histogram-set (use block-latency-histogram-set instead)
x-blockdev-create (use blockdev-create instead)
x-input-send-event (use input-send-event instead)
- This previously unsupported QMP commands is no longer recognized:
x-nbd-server-add-bitmap
- Due to the lack of migration support (mainly due to ahci interface issues)
and other unstable interface issues, earlier versions of the q35 machine type
are not supported in this release. The current q35 machine type is however now
fully supported.
- Due to upstream's decision to no longer fully support the qed storage format
going forward (since it really provides no benefit over qcow2 and is now no
longer actively maintained upstream), creating qed storage images is no longer
supported and it is highly discouraged to continue using existing qed images.
They should instead be converted to another supported format.
- If KVM Intel nested virtualization is enabled, and the guest is passed the vmx
feature, then live migration or save/restore is prohibited.
QEMU Command-Line and Monitor Syntax and Support
------------------------------------------------
- The QEMU program command-line syntax is as follows:
qemu-system-i386 [options] [disk_image]
qemu-system-x86_64 [options] [disk_image]
Where 'options' are taken from the options listed below, and 'disk_image' is
the file system reference to the x86 guest's primary IDE based hard disk
image. This image as well as those used with -drive or -cdrom, may be in the
raw (no format) or qcow2 storage formats, and may be located in files within
the host filesystem, logical volumes, host physical disks, or network based
storage. Read only media may also be accessed via URL style protocol
specifiers.
Note that as a general rule, as new command line options are added which serve
to replace an older option or interface, you are strongly encouraged to adapt
your usage to the new option. The new option is being introduced to provide
better functionality and usability going forward. In some cases existing
problems or even bugs in older interfaces cannot be fixed due to functional
expectations, but are resolved in the newer interface or option.
This advice includes moving to the most recent machine type (eg pc-i440fx-4.2
instead of pc-i440fx-3.1) if possible.
- The following command line options are supported:
-accel ...
-add-fd ...
-alt-grab
-append ...
-audio-help
-audiodev
-bios ...
-blockdev ...
-boot ...
-cdrom ...
-chardev ..
-cpu ... (all except host)
-ctrl-grab
-d ...
-daemonize
-debugcon ...
-device
[isa-serial|isa-parallel|isa-fdc|ide-drive|ide-hd|ide-cd|VGA|
cirrus-vga|rtl8139|usb-hub|usb-ehci|usb-tablet|usb-storage|usb-mouse|
usb-kbd|virtserialport|virtconsole|sga|i82559er|scsi-cd|scsi-hd|
scsi-generic|scsi-disk|scsi-block|pci-serial|pci-serial-2x|
pci-serial-4x|ich9-ahci|piix3-usb-uhci|usb-host|usb-serial|
usb-wacom-tablet|usb-braille|usb-net|pci-ohci|piix4-usb-uhci|i6300esb|
ib700|qxl|qxl-vga|pvpanic|vfio-pci|ivshmem-doorbell|ivshmem-plain|
pci-bridge|megasas-gen2|pc-dimm|floppy|e1000e|ccid-card-emulated|
ccid-card-passthrough|xen-backend|loader|e1000-82540em|vmgenid|
vmcoreinfo|pcie-pci-bridge|ich9-usb-ehci1|ich9-usb-ehci2|
ich9-usb-uhci1|ich9-usb-uhci2|ich9-usb-uhci3|ich9-usb-uhci4|
ich9-usb-uhci5|ich9-usb-uhci6|usb-redir|vhost-scsi|vhost-scsi-pci|
vhost-user-blk|vhost-user-blk-pci|vhost-user-blk-pci-non-transitional|
vhost-user-blk-pci-transitional|vhost-user-scsi|vhost-user-scsi-pci|
vhost-user-scsi-pci-non-transitional|vhost-user-pci-transitional|
vhost-vsock-pci|vhost-vsock-pci-non-transitional|
vhost-vsock-pci-transitional|virtio-balloon-pci|
virtio-balloon-pci-non-transitional|virtio-balloon-pci-transitional|
virtio-blk-pci|virtio-blk-pci-non-transitional|
virtio-blk-pci-transitional|virtio-net-pci|
virtio-net-pci-non-transitional|virtio-net-pci-transitional|
virtio-9p-pci|virtio-9p-pci-non-transitional|
virtio-9p-pci-transitional|virtio-serial-pci|
virtio-serial-pci-non-transitional|virtio-serial-pci-transitional|
virtio-scsi-pci|virtio-scsi-pci-non-transitional|
virtio-scsi-pci-transitional|virtio-rng-pci|
virtio-rng-pci-non-transitional|virtio-rng-pci-transitional|
virtio-input-host-pci|virtio-input-host-pci-non-transitional|
virtio-input-host-pci-transitional|virtio-keyboard-pci|
virtio-mouse-pci|virtio-tablet-pci|virtio-gpu-pci|virtio-crypto-pci|
virtio-vga|vhost-user-fs-pci|vhost-user-gpu|vhost-user-pci-pci|
vhost-user-input|vhost-user-input-pci|vhost-user-vga|virtio-mmio|
virtio-pmem|virtio-pmem-pci|mc146818rtc]
(the following are aliases of these supported devices: ahci|
e1000|virtio-blk|virtio-net|virtio-serial|virtio-balloon|virtio-9p|
virtio-scsi|virtio-rng|virtio-input-host|virtio-keyboard|virtio-mouse|
virtio-tablet|virtio-gpu)
-dfilter range, ...
-display ...
-drive
... (if specified if=[floppy|ide|virtio] and format=[qcow2|raw] and
snapshot=off only)
-echr ...
-enable-fips
-enable-kvm
-fda/-fdb ...
-fsdev ...
-full-screen
-fw_cfg ...
-gdb ...
-global ...
-h
-hda/-hdb/-hdc/-hdd ...
-help
-incoming ...
-initrd ...
-iscsi ...
-k ...
-kernel ...
-loadvm ...
-m ...
-M
[help|?|none|pc|pc-i440fx-1.4|pc-i440fx-1.7|pc-i440fx-2.0|pc-i440fx-2.3|
pc-i440fx-2.6|pc-i440fx-2.9|pc-i440fx-2.11|pc-i440fx-3.1|pc-i440fx-4.2|q35|
pc-q35-2.6|pc-q35-2.9|pc-q35-2.11|pc-q35-3.1|pc-q35-4.2|xenfv|xenfv-4.2]
-machine
[help|?|none|pc|pc-i440fx-1.4|pc-i440fx-1.7|pc-i440fx-2.0|
pc-i440fx-2.3|pc-440fx-2.6|pc-i440fx-2.9|pc-i440fx-2.11|
pc-i440fx-3.1|pc-i440fx-4.2|q35|pc-q35-2.6|pc-q35-2.9|pc-q35-2.11|
pc-q35-3.1|pc-q35-4.2|xenfv|xenifv-4.2]
-mem-path ...
-mem-prealloc
-mon ...
-monitor ...
-msg ...
-name ...
-net
[bridge|l2tpv3|nic|none|tap|user] ... (for model= only e1000, rtl8139,
and virtio are supported)
-netdev [bridge|tap|user] ...
-nic ...
-no-acpi
-nodefaults
-no-fd-bootchk
-nographic
-no-hpet
-no-quit
-no-reboot
-no-shutdown
-no-user-config
-numa cpu ...
-numa dist ...
-object ...
-only-migratable
-parallel ...
-pidfile ...
-plugin ...
-qmp ...
-qmp-pretty ...
-readconfig ...
-realtime ...
-rtc ...
-runas ...
-s
-S
-sandbox ...
-seed ...
-serial ...
-show-cursor
-smbios ...
-smp ...
-spice
-tpmdev passthrough ...
-trace ...
-usb
-usbdevice [braile|disk|host|mouse|net|serial|tablet]
-uuid ..
-version
-vga [cirrus|none|qxl|std|xenfb]
-virtfs ...
-vnc ...
-watchdog ...
-watchdog-action ...
-writeconfig ...
-xen-attach ...
-xen-domid ...
-xen-domid-restrict ...
- The following monitor commands are supported:
?
announce_self ...
balloon ...
block_resize ...
boot_set ...
c
change ...
chardev-add ...
chardev-change ...
chardev-remove ...
chardev-send-break ...
client_migrate_info ...
closefd ...
cont
cpu ...
cpu-add ...
delvm ...
device_add ...
device_del ...
drive_add ...
drive_backup ...
drive_del ...
dump_guest_memory ...
eject ...
gdbserver ...
gpa2hpa ...
gpa2hva ...
gva2gpa ...
help
i ...
info ...
loadvm ...
logfile ...
logitem ...
mce ...
memsave ...
migrate ...
migrate_cancel
migrate_continue ...
migrate_incoming
migrate_pause
migrate_recover ...
migrate_set_cache_size ...
migrate_set_capability ...
migrate_set_downtime ...
migrate_set_parameter ...
migrate_set_speed ...
migrate_start_post_copy
mouse_button ...
mouse_move ...
mouse_set ...
nmi ...
o ...
object_add ...
object_del ...
p ...
pci_add ...
pci_del...
pmemsave ...
print ...
q
qemu-io ...
qom-list
qom-set
ringbuf_read ...
ringbuf_write ...
savevm ...
screendump ...
sendkey ...
snapshot_blkdev_internal ...
snapshot_delete_blkdev_internal ...
stop
sum ...
system_powerdown
system_reset
system_wakeup
trace-event ...
watchdog_action ...
x ...
xp ...
- The following QMP commands are supported:
add_client
add-fd
announce-self
balloon
blockdev-add
blockdev-backup
blockdev-change-medium
blockdev-close-tray
blockdev-create
blockdev-del
blockdev-mirror
blockdev-open-tray
blockdev-snapshot
blockdev-snapshot-delete-internal-sync
blockdev-snapshot-internal-sync
blockdev-snapshot-sync
block-commit
block-dirty-bitmap-add
block-dirty-bitmap-clear
block-dirty-bitmap-disable
block-dirty-bitmap-enable
block-dirty-bitmap-merge
block-dirty-bitmap-remove
block-latency-histogram-set
block_passwd
block_resize
block_set_io_throttle
block-set-write-threshold
block_stream
change
change-vnc-password
chardev-add
chardev-change
chardev-remove
chardev-send-break
client_migrate_info
closefd
cont
cpu
cpu-add
device_add
device_del
device-list-properties
dump-guest-memory
eject
expire_password
getfd
human-monitor-command
inject-nmi
input-send-event
job-cancel
job-complete
job-dismiss
job-finalize
job-pause
job-resume
memsave
migrate
migrate_cancel
migrate-continue
migrate-incoming
migrate-pause
migrate-resume
migrate-set-cache-size
migrate-set-capabilities
migrate_set_downtime
migrate_set_speed
migrate-set-parameters
migrate-start-postcopy
object-add
object-del
pmemsave
qmp_capabilities
qom-get
qom-list
qom-list-types
qom-set
query-acpi-ospm-status
query-balloon
query-block
query-block-jobs
query-blockstats
query-chardev
query-chardev-backends
query-command-line-options
query-commands
query-cpu-definitions
query-cpu-model-baseline
query-cpu-model-comparison
query-cpu-model-expansion
query-cpus
query-cpus-fast
query-current-machine
query-display-options
query-dump
query-dump-guest-memory-capability
query-events
query-fdsets
query-gic-capabilities
query-hotpluggable-cpus
query-iothreads
query-jobs
query-kvm
query-machines
query-memdev
query-memory-devices
query-memory-size-summary
query-mice
query-migrate
query-migrate-cache-size
query-migrate-capabilities
query-migrate-parameters
query-name
query-named-block-nodes
query-pci
query-pr-managers
query-qmp-schema
query-rocker
query-rocker-of-dpa-flows
query-rocker-of-dpa-groups
query-rocker-ports
query-rx-filter
query-spice
query-status
query-target
query-tpm
query-tpm-models
query-tpm-types
query-uuid
query-version
query-vnc
query-vnc-servers
query-xen-replication-status
quit
remove-fd
ringbuf-read
ringbuf-write
rtc-reset-reinjection
screendump
send-key
set_link
set_password
set-numa-node
stop
system_powerdown
system_reset
system_wakeup
trace-event-get-state
trace-event-set-state
transaction
watchdog-set-action
xen-load-devices-state
xen-save-devices-state
xen-set-global-dirty-log
- The following command line options are unsupported:
-acpitable ...
-chroot ...
-cpu host
-curses
-device
[ipoctal232|i82562|nec-usb-xhci|hda-duplex|hda-output|usb-bot|
lsi53c810a|isa-debug-exit|ne2k_pci|usb-uas|ioh3420|isa-ide|usb-ccid|
pcnet|ich9-intel-hda|dc390|hda-micro|x3130-upstream|isa-cirrus-vga|
pc-testdev|ne2k_isa|isa-vga|cs4231a|gus|vmware-svga|i82801b11-bridge|
i82557a|i82557c|i82557b|i82801|AC97|am53c974|intel-hda|i82558a|
i82558b|usb-audio|i82550|isa-debugcon|sb16|megasas|i82551|
xio3130-downstream|vt82c686b-usb-uhci|tpci200|i82559a|i82559b|i82559c|
isa-applesmc|adlib|ES1370|lsi53c810|nvme|pci-testdev|pvscsi|
virtio-9p-device|virtio-balloon-device|virtio-blk-device|
virtio-net-device|virtio-rng-device|virtio-scsi-device|
virtio-serial-device|vmxnet3|xen-pci-passthrough|xen-platform|
xen-pvdevice|piix3-ide|piix3-ide-xen|piix3-ide|i8042|sdhci-pci|
secondary-vga|edu|intel_iommu|usb-mtp|e1000-82544gc|e1000-82545em|
pci-bridge-seat|pxb|pxb-pcie|rocker|virtio-input-host-device|
virtio-keyboard-device|virtio-mouse-device|virtio-tablet-device|
hyperv-testdev|generic-sdhci|igd-passthrough-isa-bridge|
ipmi-bmc-extern|ipmi-bmc-sim|isa-ipmi-bt|isa-ipmi-kcs|mptsas1068|
nvdimm|pxb-host|sd-card|virtio-gpu-device|amd-iommu|AMDVI-PCI|
vhost-vsock-device|virtio-crypto-device|vfio-pci-igd-lpc-bridge|
pcie-root-port|qemu-xhci|*-i386-cpu|*-x86_64-cpu|pvrdma|bochs-display|
ramfb|ccid-card-emulated|ccid-card-passthru|kvaser_pci|tpm-crb|
mioe3680_pci|pcm3680_pci|hyperv-synic|vfio-pci-nohotplug|
vfio-platform|xen-bridge|xen-cdrom|xen-disk|ati-vga|cpu-cluster|
intel-iommu|vhost-user-fs-device|tulip|ati-vga|i2c-ddc|pci-ipmi-bt|
pci-ipmi-kcs|serial|serial-io|serial-mm|virtio-iommu-device|
virtio-iommu-pci|virtio-iommu-pci-nontransitional|
virtio-iommu-pci-transitional|xen-sysdev|imx.usbphy|vmbus-bridge|
vhost-user-vsock-device|vhost-user-vsock-pci|
vhost-user-vsock-pci-non-transitional|
vhost-user-vsock-pci-transitional|virtio-mem|virtio-mem-pci]
(the following are aliases of these unsupported devices: lsi)
(note that some of these device names represent supported devices and
are used internally, but are not specifyable via -device even though
they appear in the list of devices)
-drive
,if=[scsi|mtd|pflash], snapshot=on, format=[anything besides qcow2 or
raw]
-dtb file
-enable-hax
-enable-sync-profile
-g ...
-icount ...
-L ...
-M
[isapc|microvm|pc-1.0|pc-1.1|pc-1.2|pc-1.3|pc-i440fx-1.5|pc-i440fx-1.6|
pc-i440fx-2.1|pc-i440fx-2.2|pc-i440fx-2.4|pc-i440fx-2.5|pc-i440fx-2.7|
pc-i440fx-2.8|pc-i440fx-2.10|pc-i440fx-2.12|pc-i440fx-3.0|pc-i440fx-4.0|
pc-i440fx-4.1|pc-i440fx-5.0|pc-i440fx-5.1|pc-q35-1.4|pc-q35-1.5|pc-q35-1.6|
pc-q35-1.7|pc-q35-2.0|pc-q35-2.1|pc-q35-2.2|pc-q35-2.3|pc-q35-2.4|
pc-q35-2.5|pc-q35-2.7|pc-q35-2.8|pc-q35-2.10|pc-q35-2.12|pc-q35-3.0|
pc-q35-4.0|pc-q35-4.1|pc-q35-5.0|pc-q35-5.1]
-machine
[isapc|microvm|pc-1.0|pc-1.1|pc-1.2|pc-1.3|pc-i440fx-1.5|
pc-i440fx-1.6|pc-i440fx-2.1|pc-i440fx-2.2|pc-i440fx-2.4|
pc-i440fx-2.5|pc-i440fx-2.7|pc-i440fx-2.8|pc-i440fx-2.10|
pc-i440fx-2.12|pc-i440fx-3.0|pc-i440fx-4.0|pc-i440fx-4.1|
pc-i440fx-5.0|pc-i440fx-5.1|pc-q35-1.4|pc-q35-1.5|pc-q35-1.6|
pc-q35-1.7|pc-q35-2.0|pc-q35-2.1|pc-q35-2.2|pc-q35-2.3|pc-q35-2.4|
pc-q35-2.5|pc-q35-2.7|pc-q35-2.8|pc-q35-2.10|pc-q35-2.12|pc-q35-3.0|
pc-q35-4.0|pc-q35-4.1|pc-q35-5.0|pc-q35-5.1]
-mtdblock file
-net [dump|socket|vde] ...
-netdev [dump|hubport|l2tpv3|socket|vde] ...
-no-kvm
-numa node ...
-option-rom ...
-overcommit ...
-pflash file
-portrait
-preconfig
-prom-env ...
-qtest ...
-qtest-log ...
-rotate
-sd file
-sdl
-set ...
-singlestep
-snapshot
-soundhw ...
-tb-size ...
-tpmdev emulator ...
-vga [cg3|tcx|virtio|vmware]
-win2k-hack
- The following monitor commands are unsupported:
acl_add ...
acl_policy ...
acl_remove ...
acl_reset ...
acl_show ...
block_job_cancel ...
block_job_complete ...
block_job_pause ...
block_job_resume ...
block_job_set_speed ...
block_passwd ...
commit ...
drive_mirror ...
exit_preconfig
expire_password ...
hostfwd_add ...
hostfwd_remove ...
nbd_server_add ...
nbd server_start ...
nbd_server_stop ...
netdev_add
netdev_del ...
pcie_aer_inject_error ...
set_link ...
set_password ...
singlestep ...
snapshot_blkdev ...
stopcapture ...
sync-profile ...
wavcapture ...
x_colo_lost_heartbeat
- The following QMP commands are unsupported:
block-job-cancel
block-job-complete
block-job-pause
block-job-resume
block-job-set-speed
change-backing-file
drive-backup
drive-mirror
dump-skeys
netdev_add
netdev_del
nbd-server-add
nbd-server-start
nbd-server-stop
query-colo-status
query-sev
query-sev-launch-measure
x-blockdev-amend
x-blockdev-change
x-blockdev-insert-medium
x-blockdev-remove-medium
x-blockdev-reopen
x-colo-lost-heartbeat
x-debug-block-dirty-bitmap-sha256
x-debug-query-block-graph
x-exit-preconfig
xen-colo-do-checkpoint
xen-set-replication

View File

@ -1,25 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Sat, 5 Oct 2019 09:09:42 -0600
Subject: test: add mapping from arch of i686 to qemu_arch=i386
While we don't specifically set QEMU_PROG, the code which detects the
host architecture needs a little help mapping the output of uname -m to
what the qemu project uses to reference that architecture.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
tests/qemu-iotests/common.config | 1 +
1 file changed, 1 insertion(+)
diff --git a/tests/qemu-iotests/common.config b/tests/qemu-iotests/common.config
index 9bd1a5a6fc8367c336e9f51fe22f..e1c6ffa0cca3a8f14feeb38d6da8 100644
--- a/tests/qemu-iotests/common.config
+++ b/tests/qemu-iotests/common.config
@@ -24,6 +24,7 @@ PATH=".:$PATH"
HOSTOS=$(uname -s)
arch=$(uname -m)
[[ "$arch" =~ "ppc64" ]] && qemu_arch=ppc64 || qemu_arch="$arch"
+[[ "$arch" = "i686" ]] && qemu_arch=i386
# make sure we have a standard umask
umask 022

View File

@ -1,107 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Tue, 15 Oct 2019 11:16:14 -0600
Subject: tests: Fix block tests to be compatible with membarrier configuration
The use of membarriers collides with the block test's practice of
SIGKILLing test vm's. Have them quit politely. Tests: 130, 153 - and
though test 161 seems to have the same issue, it is not yet fixed, but
just marked here as possibly needing a fix.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
tests/qemu-iotests/130 | 6 ++++--
tests/qemu-iotests/130.out | 2 ++
tests/qemu-iotests/153 | 6 ++++--
tests/qemu-iotests/153.out | 4 ++++
4 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/tests/qemu-iotests/130 b/tests/qemu-iotests/130
index a7b365701c490b4b4894eb0c26a8..02cb0f8216a6618b5e0dc526c361 100755
--- a/tests/qemu-iotests/130
+++ b/tests/qemu-iotests/130
@@ -63,7 +63,8 @@ echo
_launch_qemu -drive id=testdisk,file="$TEST_IMG",backing.file.filename="$TEST_IMG.base"
_send_qemu_cmd $QEMU_HANDLE "commit testdisk" "(qemu)"
_send_qemu_cmd $QEMU_HANDLE '' '(qemu)'
-_cleanup_qemu
+_send_qemu_cmd $QEMU_HANDLE 'quit' ''
+wait=1 _cleanup_qemu
_img_info | _filter_img_info
# Make sure that if there was a backing file that was just overridden on the
@@ -72,7 +73,8 @@ _make_test_img -F raw -b "$TEST_IMG.orig" 64M
_launch_qemu -drive id=testdisk,file="$TEST_IMG",backing.file.filename="$TEST_IMG.base",backing.driver=$IMGFMT
_send_qemu_cmd $QEMU_HANDLE "commit testdisk" "(qemu)"
_send_qemu_cmd $QEMU_HANDLE '' '(qemu)'
-_cleanup_qemu
+_send_qemu_cmd $QEMU_HANDLE 'quit' ''
+wait=1 _cleanup_qemu
_img_info | _filter_img_info
echo
diff --git a/tests/qemu-iotests/130.out b/tests/qemu-iotests/130.out
index e45285ccc311522481ac1b27ba99..7168bdf70c3eb32d4de0d28bb947 100644
--- a/tests/qemu-iotests/130.out
+++ b/tests/qemu-iotests/130.out
@@ -11,6 +11,7 @@ virtual size: 64 MiB (67108864 bytes)
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) commit testdisk
(qemu)
+(qemu) quit
image: TEST_DIR/t.IMGFMT
file format: IMGFMT
virtual size: 64 MiB (67108864 bytes)
@@ -18,6 +19,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) commit testdisk
(qemu)
+(qemu) quit
image: TEST_DIR/t.IMGFMT
file format: IMGFMT
virtual size: 64 MiB (67108864 bytes)
diff --git a/tests/qemu-iotests/153 b/tests/qemu-iotests/153
index 34045ea3cfeb5e30acac17ae8a10..b5cec71dd9a718055d9264e51946 100755
--- a/tests/qemu-iotests/153
+++ b/tests/qemu-iotests/153
@@ -201,7 +201,8 @@ _send_qemu_cmd $QEMU_HANDLE \
'return'
_run_cmd $QEMU_IMG commit -b "${TEST_IMG}.b" "${TEST_IMG}.c"
-_cleanup_qemu
+_send_qemu_cmd $QEMU_HANDLE "{ 'execute': 'quit' }" ''
+wait=1 _cleanup_qemu
_launch_qemu
@@ -253,7 +254,8 @@ _send_qemu_cmd $QEMU_HANDLE \
_run_cmd $QEMU_IO "${TEST_IMG}" -c 'write 0 512'
-_cleanup_qemu
+_send_qemu_cmd $QEMU_HANDLE "{ 'execute': 'quit' }" ''
+wait=1 _cleanup_qemu
echo
echo "== Detecting -U and force-share conflicts =="
diff --git a/tests/qemu-iotests/153.out b/tests/qemu-iotests/153.out
index 8a79e1ee870d72c6d346898113b1..d1d6b673b22d5443700ae9c146c7 100644
--- a/tests/qemu-iotests/153.out
+++ b/tests/qemu-iotests/153.out
@@ -424,6 +424,8 @@ Is another process using the image [TEST_DIR/t.qcow2]?
_qemu_img_wrapper commit -b TEST_DIR/t.qcow2.b TEST_DIR/t.qcow2.c
{ 'execute': 'qmp_capabilities' }
{"return": {}}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"return": {}}
Adding drive
{ 'execute': 'human-monitor-command', 'arguments': { 'command-line': 'drive_add 0 if=none,id=d0,file=TEST_DIR/t.IMGFMT' } }
{"return": "OKrn"}
@@ -457,6 +459,8 @@ Closing the other
{"return": ""}
_qemu_io_wrapper TEST_DIR/t.qcow2 -c write 0 512
+{"return": {}}
+{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
== Detecting -U and force-share conflicts ==

View File

@ -1,27 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Mon, 11 Mar 2019 22:02:37 -0600
Subject: tests: change error message in test 162
Since we have a quite restricted execution environment, as far as
networking is concerned, we need to change the error message we expect
in test 162. There is actually no routing set up so the error we get is
"Network is unreachable". Change the expected output accordingly.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
tests/qemu-iotests/162.out | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/qemu-iotests/162.out b/tests/qemu-iotests/162.out
index 5a00d36d17878376380430dad705..390cca9027e918f1a0d252753ce5 100644
--- a/tests/qemu-iotests/162.out
+++ b/tests/qemu-iotests/162.out
@@ -1,7 +1,7 @@
QA output created by 162
=== NBD ===
-qemu-img: Could not open 'json:{"driver": "nbd", "host": -1}': address resolution failed for -1:10809: Name or service not known
+qemu-img: Could not open 'json:{"driver": "nbd", "host": 42}': Failed to connect socket: Network is unreachable
image: nbd://localhost:PORT
image: nbd+unix://?socket=42

View File

@ -1,27 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Tue, 20 Nov 2018 15:46:41 -0700
Subject: tests/qemu-iotests: Triple timeout of i/o tests due to obs
environment
Executing tests in obs is very fickle, since you aren't guaranteed
reliable cpu time. Triple the timeout for each test to help ensure
we don't fail a test because the stars align against us.
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
tests/qemu-iotests/common.qemu | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/qemu-iotests/common.qemu b/tests/qemu-iotests/common.qemu
index de680cf1c7c92e50b82aa2bc0262..4f2557cc568beed038223af7660b 100644
--- a/tests/qemu-iotests/common.qemu
+++ b/tests/qemu-iotests/common.qemu
@@ -76,7 +76,7 @@ _timed_wait_for()
timeout=yes
QEMU_STATUS[$h]=0
- while IFS= read -t ${QEMU_COMM_TIMEOUT} resp <&${QEMU_OUT[$h]}
+ while IFS= read -t $((${QEMU_COMM_TIMEOUT}*3)) resp <&${QEMU_OUT[$h]}
do
if [ -z "${silent}" ] && [ -z "${mismatch_only}" ]; then
echo "${resp}" | _filter_testdir | _filter_qemu \

View File

@ -1,824 +0,0 @@
#!/bin/bash
# update_git.sh: script to manage package maintenance using a git-based
# workflow. Commands are as follows:
# git2pkg (update package spec file and patches from git)
# pkg2git (update git (frombundle branch) from the package "bundleofbundles")
# refresh (refresh spec file from spec file template and "bundlofbundles")
#
# (default is git2pkg)
# TODO NOTES:
# after ensuring current status of local repo is clean, incl submodules, we checkout master+submodules, then also ensure they're clean, then checkout the commit or tag corresponding to latest / stable-release + submodules (but don't bother to verift that's clean) - so this is a detached HEAD for stable-release and IS master (almost certainly) for LATEST. WOW - is that what we need to be doing!?!?! At least it seems to be working for the cases I've seen!!!!
# initbundle operates from the current checked out state of the local superproject, to get the submodule ids - CORRECT!!!!
# the LATEST processing of cloning the local repo, clones master - but perhaps it doesn't matter? because it adds upstream as a remote and probably gets most things from there? INVESTIGATE!!!!!!!!!!!!!!!!!!!1
# bundle2local checks out master in local repo to ensure we're off the frombundle branch (doesn't seem needed the way the script currently is). It fetches the bundle's head (FETCH_HEAD) REQUIRING that the base commit be present (which it seems to be. Then it creates the frombundle branch, with the current FETCH_HEAD (SAME AS IN BUNDLE, RIGHT?)
# The LATEST's rebase loop checks out the frombundle branch (with force), so we are now OFF of the "correct checkout" that happened at the beginning, it DELETES the GIT_BRANCH (so in this case it DIDN'T MATTER WHAT WAS THERE WHEN SCRIPT STARTED !!!!!!! WARNING !!!!!, branches off of the frombundle branch (w/checkout), then rebases that (which came from bundle) onto the current superproject, or submodule commit id.
# At this point, if the GIT_BRANCH rebased ok, it's ready for making a patchqueue, out of, if the rebase failed, it's time to manually fix that.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
# LATEST processing implies updated upstream/master IS the right thing
# HOW do we protect against a bad bundle being created (we do have the build service's tracking of previous files - is that sufficient?
# initbundle - what does it need? Currently we take the default branch in local superproject for the superproject and submodule commit ids, so it needs to be right! (ie which ever branch it is (DECIDE!), make it the RIGHT ONE for this release. It takes the commits from the $GIT_BUNDLE branch of each of superproject and submodule repos, which are beyond above found commits. IT CERTIANLY SEEMS REASONABLE THAT WE WOULD HAVE THE $$GIT_BRANCH BRANCH BE THE DEFAULT AND CORRECT BUT HOW DO WE GUARANTEE THATS OK? GIVEN OUR REQS HERE QEMU_VERSION CAN BE GRABBED HERE IN LOCAL SUPERPROJECT RIGHT AWAY!
# bundle2local - what does it need? This checks out local master just to get off of frombundle (could have been $GIT_BRANCH as well) No other req's
# bundle2spec - what does it need? THIS SHOULD HAVE LATEST SPLIT OUT!!!! We allow this alone, so see what setup it alone needs - for this one particularly, we don't want to REQUIRE local repo. FOR NOW I ASSUME THE RIGHT THING IS CHECKED OUT!
#
# SEEMS WE SHOULD NOT,NOT,NOT require user to have previously updated, or set local repo a certain way, but for us to enforce it or actually do it
# TODO: confirm local repo present, correct remotes, correct local branches, somehow validate local branch content against remote, ...
#
# In both cases we DO require the $GIT_BRANCH to exist, and should confirm that the appropriate upstream basis commit is indeed part of that. In the LATEST case, we can treat master as a source for initial current upstream.
set -e
source ./config.sh
declare -A COMMIT_IDS_BY_SUBMODULE_PATH
# Get version info from the packages' tarball - decode and do some checks
BASE_RE="qemu-[[:digit:]]+(\.[[:digit:]]+){2}(-rc[[:digit:]])?"
EXTRA_RE="\+git\.[[:digit:]]+\.([[:xdigit:]]+)"
SUFFIX_RE="\.tar\.xz"
SIG_SUFFIX_RE="\.tar\.xz\.sig"
QEMU_TARBALL=($(find -maxdepth 1 -type f -regextype posix-extended -regex \
"\./$BASE_RE($EXTRA_RE)?$SUFFIX_RE" -printf "%f "))
QEMU_TARBALL_SIG=($(find -maxdepth 1 -type f -regextype posix-extended -regex \
"\./$BASE_RE($EXTRA_RE)?$SIG_SUFFIX_RE" -printf "%f "))
if [ ${#QEMU_TARBALL[@]} -gt 1 ]; then
echo "Multiple qemu tarballs detected. Please clean up"
exit
fi
if [ ${#QEMU_TARBALL_SIG[@]} -gt 1 ]; then
echo "Multiple qemu tarballs signature files detected. Please clean up"
exit
fi
OLD_SOURCE_VERSION_AND_EXTRA=$(echo $QEMU_TARBALL 2>/dev/null | head --bytes=-8\
| cut --bytes=6-)
VERSION_EXTRA=$(echo $OLD_SOURCE_VERSION_AND_EXTRA|awk -F+ '{if ($2) print \
"+"$2}')
if [ "$OLD_SOURCE_VERSION_AND_EXTRA" = "" ]; then
echo "ERROR: No tarball found!"
exit
fi
#==============================================================================
TEMP_CHECK() {
# Validate that all the local repos that we currently have patches in are available
# TEMPORARY REQUIREMENT!
for entry in ${REQUIRED_LOCAL_REPO_MAP[@]}; do
if [[ -e $(readlink -f ${entry}) ]]; then
if $(git -C $entry branch| grep -F "$GIT_BRANCH" >/dev/null); then
:
else
echo "Didn't find the $GIT_BRANCH branch in repo at $entry"
exit
fi
else
echo "ERROR! For now, you need to have these local git repos available:"
echo ${REQUIRED_LOCAL_REPO_MAP[@]}
exit
fi
done
}
#==============================================================================
initbundle() {
# The bundle tarball has git bundles stored in a directory structure which mimics the
# submodule locations in the containing git repo. Also at that same dir level
# is a file named repo which contains the one line git repo url (with git:// or
# http(s) prefix). The bundles are named as follows:
# "{path/}{git_sha}.{bundle}", where {path/} isn't present for
# the top (qemu) bundle (ie it's for submodules).
SUBMODULE_COMMIT_IDS=($(git -C ${LOCAL_REPO_MAP[0]} submodule status --recursive|awk '{print $1}'))
SUBMODULE_DIRS=($(git -C ${LOCAL_REPO_MAP[0]} submodule status --recursive|awk '{print $2}'))
SUBMODULE_COUNT=${#SUBMODULE_COMMIT_IDS[@]}
# TODO: do this with simply math - ie: use (( ... ))
if [[ "$REPO_COUNT" != "$(expr $SUBMODULE_COUNT + 1)" ]]; then
echo "ERROR: submodule count doesn't match the REPO_COUNT variable in config.sh file!"
exit
fi
rm -rf $GIT_DIR
rm -rf $BUNDLE_DIR
mkdir -p $BUNDLE_DIR
for (( i=0; i <$SUBMODULE_COUNT; i++ )); do
mkdir -p $BUNDLE_DIR/${SUBMODULE_DIRS[$i]}
# what should this file be? for now use an extension of id
touch $BUNDLE_DIR/${SUBMODULE_DIRS[$i]}/${SUBMODULE_COMMIT_IDS[$i]}.id
done
if [ "$GIT_UPSTREAM_COMMIT_ISH" = "LATEST" ]; then
GIT_UPSTREAM_COMMIT=$NEW_COMMIT_ISH_FULL
else
# TODO: make this smarter, or change something - works for tag, but not normal commit?
GIT_UPSTREAM_COMMIT=$(git -C ${LOCAL_REPO_MAP[0]} show-ref -d $GIT_UPSTREAM_COMMIT_ISH|grep -F "^{}"|awk '{print $1}')
fi
touch $BUNDLE_DIR/$GIT_UPSTREAM_COMMIT.id
# Now go through all the submodule local repos that are present and create a bundle file for the patches found there
for (( i=0; i <$REPO_COUNT; i++ )); do
if [[ -e $(readlink -f ${LOCAL_REPO_MAP[$i]}) ]]; then
SUBDIR=${PATCH_PATH_MAP[$i]}
GITREPO_COMMIT_ISH=($BUNDLE_DIR/$SUBDIR*.id)
if [[ $GITREPO_COMMIT_ISH =~ .*(.{40})[.]id ]]; then
GITREPO_COMMIT_ISH=${BASH_REMATCH[1]}
echo "Using $GITREPO_COMMIT_ISH"
PATCH_RANGE_INDEX=$i
mkdir -p $GIT_DIR/$SUBDIR
git -C $GIT_DIR/$SUBDIR init
git -C $GIT_DIR/$SUBDIR remote add origin file://$(readlink -f \
${LOCAL_REPO_MAP[$PATCH_RANGE_INDEX]})
if [[ $(git -C $GIT_DIR/$SUBDIR ls-remote --heads origin $GIT_BRANCH) ]]; then
git -C $GIT_DIR/$SUBDIR fetch origin $GIT_BRANCH
if [[ $(git -C $GIT_DIR/$SUBDIR rev-list $GITREPO_COMMIT_ISH..FETCH_HEAD) ]]; then
git -C $GIT_DIR/$SUBDIR bundle create $BUNDLE_DIR/$SUBDIR$GITREPO_COMMIT_ISH.bundle $GITREPO_COMMIT_ISH..FETCH_HEAD
#TODO: post-process repo info to avoid un-needed diffs (eg git vs https)
git -C $(readlink -f ${LOCAL_REPO_MAP[$PATCH_RANGE_INDEX]}) remote get-url origin >$BUNDLE_DIR/$SUBDIR/repo
fi
fi
fi
fi
done
# keep diffs to a minimum - touch bundle files to "something common"
tar --format gnu --xz \
--numeric-owner \
--owner=0 \
--group=0 \
--mtime="@$(date -r qemu-$SOURCE_VERSION$VERSION_EXTRA.tar.xz +%s)" \
--create \
-f bundles.tar.xz -C $BUNDLE_DIR .
rm -rf $BUNDLE_DIR
rm -rf $GIT_DIR
}
#==============================================================================
bundle2local() {
rm -rf $BUNDLE_DIR
mkdir -p $BUNDLE_DIR
tar xJf bundles.tar.xz -C $BUNDLE_DIR
BUNDLE_FILES=$(find $BUNDLE_DIR -printf "%P\n"|grep "bundle$")
for entry in ${BUNDLE_FILES[@]}; do
if [[ $entry =~ ^(.*)[/]*([a-f0-9]{40})[.]bundle$ ]]; then
SUBDIR=${BASH_REMATCH[1]}
GITREPO_COMMIT_ISH=${BASH_REMATCH[2]}
else
echo "ERROR! BAD BUNDLE CONTENT!"
exit
fi
for (( i=0; i <$REPO_COUNT; i++ )); do
if [[ "$SUBDIR" = "${PATCH_PATH_MAP[$i]}" ]]; then
PATCH_RANGE_INDEX=$i
break
fi
done
LOCAL_REPO=$(readlink -f ${LOCAL_REPO_MAP[$PATCH_RANGE_INDEX]})
if [ -e $LOCAL_REPO ]; then
git -C $LOCAL_REPO remote remove bundlerepo || true
# git won't let you delete a branch we're on - so get onto master temporarily (TODO: is there a better approach?)
git -C $LOCAL_REPO checkout master -f
git -C $LOCAL_REPO branch -D frombundle || true
git -C $LOCAL_REPO remote add bundlerepo $BUNDLE_DIR/$entry
git -C $LOCAL_REPO fetch bundlerepo FETCH_HEAD
git -C $LOCAL_REPO branch frombundle FETCH_HEAD
git -C $LOCAL_REPO remote remove bundlerepo
else
echo "No local repo $LOCAL_REPO corresponding to archived git bundle!"
exit
fi
done
rm -rf $BUNDLE_DIR
}
#==============================================================================
redo_tarball_and_rebase_patches() {
rm -rf $GIT_DIR
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# CREATE TARBALL, USING FRESH REPO - WE COULD RELY MORE ON LOCAL IF WE WERE MORE CAREFUL
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# TODO: WHAT IS THIS NEXT LINE EVEN DOING FOR US?? (OK, it's initing a repo, what do we rely on there?)
git clone -ls ${LOCAL_REPO_MAP[0]} $GIT_DIR -b master --single-branch &>/dev/null
echo "Please wait..."
(cd $GIT_DIR && git remote add upstream \
git://git.qemu-project.org/qemu.git &>/dev/null)
(cd $GIT_DIR && git remote update upstream &>/dev/null)
(cd $GIT_DIR && git checkout $NEW_COMMIT_ISH &>/dev/null)
# As an alternative, we could add a --recurse-submodules to the checkout instead here as well, right?
#UPSTREAM DOESNT DO THIS (time takes 17 minutes!):
# (cd $GIT_DIR && git submodule update --init --recursive &>/dev/null)
#INSTEAD THESE NEXT TWO LINES ARE WHAT IS DONE (these take 9 minutes and 3 minutes respectively):
(cd $GIT_DIR && git submodule update --init &>/dev/null)
(cd $GIT_DIR/roms/edk2 && git submodule update --init &>/dev/null)
VERSION_EXTRA=+git.$NOW_SECONDS.$NEW_COMMIT_ISH
if (cd ${LOCAL_REPO_MAP[0]} && git describe --exact-match $NEW_COMMIT_ISH \
&>/dev/null); then
if [ "$X" = "50" ]; then
echo "Ignoring non-standard tag"
else
# there is no VERSION_EXTRA
VERSION_EXTRA=
fi
fi
(cd $GIT_DIR/roms/seabios && git describe --tags --long --dirty > \
.version)
(cd $GIT_DIR/roms/skiboot && ./make_version.sh > .version)
echo "Almost there..."
tar --exclude=.git --transform "s,$GIT_DIR,qemu-$SOURCE_VERSION," \
-Pcf qemu-$SOURCE_VERSION$VERSION_EXTRA.tar $GIT_DIR
osc rm --force qemu-$OLD_SOURCE_VERSION_AND_EXTRA.tar.xz &>/dev/null ||\
true
osc rm --force qemu-$OLD_SOURCE_VERSION_AND_EXTRA.tar.xz.sig \
&>/dev/null || true
unset QEMU_TARBALL_SIG
xz -T 0 qemu-$SOURCE_VERSION$VERSION_EXTRA.tar
osc add qemu-$SOURCE_VERSION$VERSION_EXTRA.tar.xz
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# GET THE SUBMODULE COMMIT ID'S FROM THIS NEWLY MINTED QEMU CHECKOUT. WE'LL USE THAT WHEN WE REBASE OUR PATCHES
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# !! We (perhaps temporarily) do MORE recursive submodules, since we are tracking ALL in these scripts, while upstream doesn't include all in tarball currently
# !!! THIS IS AT LEAST PARTLY REDUNDANT WITH THE update --init DONE ABOUT 30 LINES AGO
(cd $GIT_DIR && git submodule update --init --recursive &>/dev/null)
SUBMODULE_COMMIT_IDS=($(git -C $GIT_DIR submodule status --recursive|awk '{print $1}'))
SUBMODULE_DIRS=($(git -C $GIT_DIR submodule status --recursive|awk '{print $2}'))
SUBMODULE_COUNT=${#SUBMODULE_COMMIT_IDS[@]}
# TODO: do this with simply math - ie: use (( ... ))
if [[ "$REPO_COUNT" != "$(expr $SUBMODULE_COUNT + 1)" ]]; then
echo "ERROR: submodule count doesn't match the REPO_COUNT variable in config.sh file!"
exit
fi
# We have the submodule commits, but not in the PATCH ORDER which our config.sh has (see $PATCH_PATH_MAP)
for (( i=0; i <$REPO_COUNT-1; i++ )); do
COMMIT_IDS_BY_SUBMODULE_PATH[${SUBMODULE_DIRS[$i]}/]=${SUBMODULE_COMMIT_IDS[$i]}
done
COMMIT_IDS_BY_SUBMODULE_PATH[SUPERPROJECT]=$NEW_COMMIT_ISH_FULL
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# MOVE BUNDLE COMMITS OVER TO LOCAL frombundle BRANCH
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
bundle2local
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# REBASE frombundle patches USING COMMIT_IDS_BY_SUBMODULE, ALSO USING OLD ID'S STORED IN OLD BUNDLE
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
mkdir -p $BUNDLE_DIR
tar xJf bundles.tar.xz -C $BUNDLE_DIR
# Now go through all the submodule local repos that are present and create a bundle file for the patches found there
for (( i=0; i <$REPO_COUNT; i++ )); do
if [[ -e $(readlink -f ${LOCAL_REPO_MAP[$i]}) ]]; then
if $(git -C ${LOCAL_REPO_MAP[$i]} branch | grep -F "frombundle" >/dev/null); then
SUBDIR=${PATCH_PATH_MAP[$i]}
GITREPO_COMMIT_ISH=($BUNDLE_DIR/$SUBDIR*.id)
if [[ $GITREPO_COMMIT_ISH =~ .*(.{40})[.]id ]]; then
GITREPO_COMMIT_ISH=${BASH_REMATCH[1]}
fi
git -C ${LOCAL_REPO_MAP[$i]} checkout frombundle -f
git -C ${LOCAL_REPO_MAP[$i]} branch -D $GIT_BRANCH
git -C ${LOCAL_REPO_MAP[$i]} checkout -b $GIT_BRANCH
if [[ "$SUBDIR" = "" ]]; then
SUBDIR=SUPERPROJECT
fi
if ! $(git -C ${LOCAL_REPO_MAP[$i]} rebase --onto ${COMMIT_IDS_BY_SUBMODULE_PATH[$SUBDIR]} $GITREPO_COMMIT_ISH >/dev/null); then
# TODO: record that this one needs manual help!
echo "Rebase of ${LOCAL_REPO_MAP[$i]}, branch $GIT_BRANCH needs manual help"
REBASE_FAILS="${LOCAL_REPO_MAP[$i]} $REBASE_FAILS"
fi
fi
fi
done
}
#==============================================================================
bundle2spec() {
rm -f checkpatch.log
rm -f checkthese
rm -rf checkdir
rm -rf $GIT_DIR
rm -rf $CMP_DIR
rm -rf $BUNDLE_DIR
mkdir -p $BUNDLE_DIR
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# NOW PROCESS BUNDLES INTO COMMITS AND FILL SPEC FILE
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
tar xJf bundles.tar.xz -C $BUNDLE_DIR
BUNDLE_FILES=$(find $BUNDLE_DIR -printf "%P\n"|grep "bundle$")
for entry in ${BUNDLE_FILES[@]}; do
if [[ $entry =~ ^(.*)[/]*([a-f0-9]{40})[.]bundle$ ]]; then
SUBDIR=${BASH_REMATCH[1]}
GITREPO_COMMIT_ISH=${BASH_REMATCH[2]}
else
echo "ERROR! BAD BUNDLE CONTENT!"
exit
fi
for (( i=0; i <$REPO_COUNT; i++ )); do
if [[ "$SUBDIR" = "${PATCH_PATH_MAP[$i]}" ]]; then
PATCH_RANGE_INDEX=$i
break
fi
done
mkdir -p $GIT_DIR/$SUBDIR
git -C $GIT_DIR/$SUBDIR init
git -C $GIT_DIR/$SUBDIR remote add origin file://$(readlink -f \
${LOCAL_REPO_MAP[$PATCH_RANGE_INDEX]})
git -C $GIT_DIR/$SUBDIR fetch origin $GIT_BRANCH
git -C $GIT_DIR/$SUBDIR reset --hard $GITREPO_COMMIT_ISH
git -C $GIT_DIR/$SUBDIR remote add bundle $BUNDLE_DIR/$entry
git -C $GIT_DIR/$SUBDIR fetch bundle FETCH_HEAD
git -C $GIT_DIR/$SUBDIR format-patch -N --suffix= --no-renames -o $CMP_DIR -k --stat=72 \
--indent-heuristic --zero-commit --no-signature --full-index \
--src-prefix=a/$SUBDIR --dst-prefix=b/$SUBDIR \
--start-number=$(expr $PATCH_RANGE_INDEX \* $PATCH_RANGE) \
$GITREPO_COMMIT_ISH..FETCH_HEAD > /dev/null
done
rm -rf $GIT_DIR
rm -rf $BUNDLE_DIR
(
CHANGED_COUNT=0
UNCHANGED_COUNT=0
DELETED_COUNT=0
ADDED_COUNT=0
TOTAL_COUNT=0
shopt -s nullglob
for i in $CMP_DIR/*; do
# index line isn't consistent, so cut full index to normal line length
sed -E -i 's/(^index [a-f0-9]{28})[a-f0-9]{12}([.][.][a-f0-9]{28})[a-f0-9]{12}( [0-9]{6}$)/\1\2\3/' $i
BASENAME=$(basename $i)
if [ "$FIVE_DIGIT_POTENTIAL" = "1" ]; then
if [[ $BASENAME =~ [[:digit:]]{5}.* ]]; then
:
else
BASENAME=0$BASENAME
fi
fi
if [[ "$NUMBERED_PATCHES" = "0" ]]; then
KEEP_COUNT=40+4+$FIVE_DIGIT_POTENTIAL+1
else
KEEP_COUNT=40
fi
tail -n +2 $i > $CMP_DIR/${BASENAME:0:$KEEP_COUNT}.patch
rm $i
done
if [[ "$NUMBERED_PATCHES" = "0" ]]; then
for i in [0-9]*.patch; do
osc rm --force $i
done
# make sure that w/out the numbered prefixes, the patchnames are all unique
mkdir checkdir
for i in $CMP_DIR/*; do
BASENAME=$(basename $i)
FINALNAME=${BASENAME:4+$FIVE_DIGIT_POTENTIAL+1:40+1+5}
if [[ -e checkdir/$FINALNAME ]]; then
echo "ERROR! Patch name $FINALNAME is not unique! Please modify patch subject to achieve uniqueness"
exit 1
fi
cp $i checkdir/$FINALNAME
done
CHECK_DIR=checkdir
cp $CMP_DIR/*.patch .
else
CHECK_DIR=$CMP_DIR
fi
if [ "$FIVE_DIGIT_POTENTIAL" = "0" ]; then
CHECK_PREFIX="0"
else
CHECK_PREFIX="00"
fi
for i in $CHECK_DIR/*; do
BASENAME=$(basename $i)
if [ -e $BASENAME ]; then
if cmp -s $i $BASENAME; then
touch --reference=$BASENAME $i
rm $BASENAME
let UNCHANGED_COUNT+=1
else
if [ "${BASENAME:0:1+$FIVE_DIGIT_POTENTIAL}" = "$CHECK_PREFIX" ]; then
echo "$BASENAME" >> checkthese
fi
rm $BASENAME
let CHANGED_COUNT+=1
let TOTAL_COUNT+=1
fi
else
echo " $BASENAME" >> qemu.changes.added
if [ "${BASENAME:0:1+$FIVE_DIGIT_POTENTIAL}" = "$CHECK_PREFIX" ]; then
echo "$BASENAME" >> checkthese
fi
let ADDED_COUNT+=1
let TOTAL_COUNT+=1
fi
done
if [ "$FIVE_DIGIT_POTENTIAL" = "0" ]; then
NUMBERED_PATCH_RE="^[[:digit:]]{4}-.*[.]patch$"
else
NUMBERED_PATCH_RE="^[[:digit:]]{5}-.*[.]patch$"
fi
for i in *.patch; do
if [[ $i =~ $NUMBERED_PATCH_RE ]]; then
if [[ "$NUMBERED_PATCHES" = "1" ]]; then
osc rm --force $i
echo " $i" >> qemu.changes.deleted
let DELETED_COUNT+=1
let TOTAL_COUNT+=1
fi
else
osc rm --force $i
echo " $i" >> qemu.changes.deleted
let DELETED_COUNT+=1
let TOTAL_COUNT+=1
fi
done
mv $CHECK_DIR/* .
if [ -e qemu.changes.added ]; then
xargs osc add < qemu.changes.added
fi
if [[ -e checkthese ]]; then
tar Jxf qemu-$SOURCE_VERSION$VERSION_EXTRA.tar.xz \
qemu-$SOURCE_VERSION/scripts/checkpatch.pl --strip-components=2
for i in $(cat checkthese); do
./checkpatch.pl --no-tree --terse --no-summary --summary-file \
--patch $i >> checkpatch.log || true
done
fi
rm -f checkthese
rm -f checkpatch.pl
if [ -s checkpatch.log ]; then
echo "WARNING: Issues reported by qemu patch checker. Please handle" \
"ERROR items now:"
cat checkpatch.log
fi
rm -f checkpatch.log
if [ "$TOTAL_COUNT" != "0" -a "$VERSION_EXTRA" != "" -a "$OLD_COMMIT_ISH" =\
"$NEW_COMMIT_ISH" ]; then
# Only patches changed: update the version using current timestamp
VERSION_EXTRA=+git.$NOW_SECONDS.$OLD_COMMIT_ISH
osc mv qemu-$OLD_SOURCE_VERSION_AND_EXTRA.tar.xz \
qemu-$SOURCE_VERSION$VERSION_EXTRA.tar.xz
osc add qemu-$SOURCE_VERSION$VERSION_EXTRA.tar.xz
fi
echo "QEMU version file: $QEMU_VERSION"
echo "QEMU source version: $SOURCE_VERSION"
echo "QEMU version extra: $VERSION_EXTRA"
# get rid of "rel-" prefix to the seabios version - keep any trailing git info, such as: "-44-g88ab0c1"
SEABIOS_VERSION=${SEABIOS_VERSION:-$(tar JxfO qemu-$SOURCE_VERSION$VERSION_EXTRA.tar.xz \
qemu-$SOURCE_VERSION/roms/seabios/.version | cut -c5- | tr '-' '_')}
for package in qemu; do
while IFS= read -r line; do
if [ "$line" = "PATCH_FILES" ]; then
for i in [0-9]*-*.patch; do
NUM=${i%%-*}
DIV=$((10#$NUM/$PATCH_RANGE))
REM=$((10#$NUM%$PATCH_RANGE))
if [[ "$REM" = "0" ]]; then
if [[ "$DIV" = "0" ]]; then
echo "# Patches applied in base project:"
else
echo "# Patches applied in ${PATCH_PATH_MAP[$DIV]}:"
fi
fi
if [[ "$FIVE_DIGIT_POTENTIAL" != "0" ]]; then
if [[ "$NUMBERED_PATCHES" = "0" ]]; then
PATCH_NUMBER=${i%%-*}
echo -e "Patch$NUM: ${i:${#PATCH_NUMBER}+1:40+1+5}"
else
echo -e "Patch$NUM: $i"
fi
else
if [[ "$NUMBERED_PATCHES" = "0" ]]; then
PATCH_NUMBER=${i%%-*}
echo -e "Patch$NUM: ${i:${#PATCH_NUMBER}+1:40+1+5}"
else
echo -e "Patch$NUM: $i"
fi
fi
done
elif [ "$line" = "PATCH_EXEC" ]; then
for i in [0-9]*-*.patch; do
S=$(grep "^Include-If: " $i) || true
NUM=${i%%-*}
if [ "$S" != "" ]; then
echo "${S:12}"
echo "%patch$NUM -p1"
echo "%endif"
else
echo "%patch$NUM -p1"
fi
done
elif [ "$line" = "INSERT_VERSIONING" ]; then
echo "%define qemuver $QEMU_VERSION$VERSION_EXTRA"
echo "%define srcver $SOURCE_VERSION$VERSION_EXTRA"
echo "%define sbver $SEABIOS_VERSION"
elif [[ "$line" =~ ^Source: ]]; then
echo "$line"
if [ ${#QEMU_TARBALL_SIG[@]} -eq 1 ]; then
# We assume the signature file corresponds - just add .sig
echo "$line.sig"|sed 's/^Source: /Source99:/'
fi
else
echo "$line"
fi
done < $package.spec.in > $CMP_DIR/$package.spec
if cmp -s $package.spec $CMP_DIR/$package.spec; then
echo "$package.spec unchanged"
else
mv $CMP_DIR/$package.spec $package.spec
echo "$package.spec regenerated"
let PACKAGE_CHANGED_COUNT+=1
fi
if [ "$WRITE_LOG" = "1" ]; then
# Factory requires all deleted and added patches to be mentioned
if [ -e qemu.changes.deleted ]; then
echo "* Patches dropped:" >> $package.changes.proposed
cat qemu.changes.deleted >> $package.changes.proposed
fi
if [ -e qemu.changes.added ]; then
echo "* Patches added:" >> $package.changes.proposed
cat qemu.changes.added >> $package.changes.proposed
fi
if [ -e $package.changes.proposed ]; then
osc vc --file=$package.changes.proposed $package
rm -f $package.changes.proposed
fi
fi
done
if [[ "$NUMBERED_PATCHES" = "0" ]]; then
rm -f [0-9]*-*.patch
fi
if [ -e qemu.changes.deleted ]; then
rm -f qemu.changes.deleted
fi
if [ -e qemu.changes.added ]; then
rm -f qemu.changes.added
fi
# Decide if there is a better way to handle the no change case:
if [[ "0" = "$(expr $CHANGED_COUNT + $DELETED_COUNT + $ADDED_COUNT)" ]]; then
osc revert bundles.tar.xz
fi
echo "git patch summary"
echo " unchanged: $UNCHANGED_COUNT"
echo " changed: $CHANGED_COUNT"
echo " deleted: $DELETED_COUNT"
echo " added: $ADDED_COUNT"
)
rm -rf $CMP_DIR
rm -rf checkdir
osc service localrun format_spec_file
}
#==============================================================================
usage() {
echo "Usage:"
echo "bash ./git_update.sh <command>"
echo "description: package maintenance using a git-based workflow. Commands:"
echo " git2pkg (update package spec file and patches from git. Is default)"
echo " pkg2git (update git (frombundle branch) from the package "bundleofbundles")"
echo " refresh (refresh spec file from spec file template and "bundlofbundles")"
echo "(See script for details on doing 'LATEST' workflow)"
}
#==============================================================================
explain_setup() {
echo "Currently we require local git repos at these locations:"
echo "${REQUIRED_LOCAL_REPO_MAP[@]}"
echo "Where each has as it's remote the uri: https://github.com/opensuse/*.git"
echo "and where * is replaced by the qemu-whatever, and the remote is named origin"
echo "and the qemu or qemu submodule repos as remotes named upstream"
}
#==============================================================================
if [[ ! -e $(readlink -f ${LOCAL_REPO_MAP[0]}) ]]; then
echo "ERROR: Local QEMU related git repos not found. Please follow these setup instructions:"
explain_setup
exit
fi
# There are some req's on needing a recent git, and a recent osc (double chk the osc part - I guess it's related to the osc service )
# get the current state of the git superproject
# TODO: This sends output to stdout which we don't want to see
git -C ${LOCAL_REPO_MAP[0]} status --untracked-files=no --branch --porcelain=2 \
| awk '{print "var"NR"="$3}'
# $var1 is the current commit
# $var2 is the current branch or 'detached', if not on a branch
# $var3 is the current upstream branch (if set), as in eg 'origin/opensuse-5.0'
# $var4 is not of use to us
# TODO: What checks should be different between LATEST and non-LATEST?
# If we don't actually patch from the submodule repo, we shouldn't care about what's in the local one
# Does non-LATEST really require master?
echo "WARNING: Script using local git repos. Some operations may be time consuming..."
#TODO: Most of these checks are not necessary
for (( i=0; i <$REPO_COUNT; i++ )); do
if [[ -e $(readlink -f ${LOCAL_REPO_MAP[$i]}) ]]; then
if [[ -d ${LOCAL_REPO_MAP[$i]}/.git/rebase-merge || \
-d ${LOCAL_REPO_MAP[$i]}/.git/rebase-apply ]]; then
echo "ERROR! Rebase appears to be in progress in ${LOCAL_REPO_MAP[$i]}. Please resolve"
exit
fi
# !! Does this presume the branch as indicated in config is the current branch? (I believe that's been my modus operandi to date, so perhaps THAT should be enforced at this point?)
if ! git -C ${LOCAL_REPO_MAP[$i]} submodule update --init --recursive &> /dev/null; then
echo "Please clean up state of local repo ${LOCAL_REPO_MAP[$i]} before using script"
echo "(ensure git submodule update --init --recursive is successful)"
exit
fi
if [ "$(git -C ${LOCAL_REPO_MAP[$i]} status --porcelain)" ]; then
echo "Please clean up state of local repo ${LOCAL_REPO_MAP[$i]} before using script"
echo "(ensure git status --porcelain produces no output)"
exit
fi
if ! git -C ${LOCAL_REPO_MAP[$i]} checkout master --recurse-submodules -f &> /dev/null; then
echo "Please clean up state of local repo ${LOCAL_REPO_MAP[$i]} before using script"
echo "(cannot check out master, incl. it's submodules)"
exit
fi
if ! git -C ${LOCAL_REPO_MAP[$i]} submodule update --init --recursive &> /dev/null; then
echo "Please clean up state of local repo ${LOCAL_REPO_MAP[$i]} before using script"
echo "(cannot init and update master submodules)"
exit
fi
if [ "$(git -C ${LOCAL_REPO_MAP[$i]} status --porcelain)" ]; then
echo "Please clean up state of local repo ${LOCAL_REPO_MAP[$i]} before using script"
echo "(ensure git status --porcelain produces no output)"
exit
fi
fi
done
if [ "$GIT_UPSTREAM_COMMIT_ISH" = "LATEST" ]; then
if [ "$1" = "continue" ]; then
CONTINUE_AFTER_REBASE=1
else
if [ "$1" = "pause" ]; then
PAUSE_BEFORE_BUNDLE_CREATION=1
else
if [ "$1" ]; then
echo "ERROR: unrecognized option '$1'. Script in LATEST mode only recognizes 'pause' and 'continue' options"
exit
fi
fi
fi
for (( i=0; i <$REPO_COUNT; i++ )); do
if [[ -e $(readlink -f ${LOCAL_REPO_MAP[$i]}) ]]; then
git -C ${LOCAL_REPO_MAP[$i]} remote update upstream &> /dev/null
fi
done
NEW_COMMIT_ISH_FULL=$(cd ${LOCAL_REPO_MAP[0]} && git rev-parse upstream/master)
NEW_COMMIT_ISH=${NEW_COMMIT_ISH_FULL:0:8}
git -C ${LOCAL_REPO_MAP[0]} checkout $NEW_COMMIT_ISH_FULL --recurse-submodules -f &> /dev/null
QEMU_VERSION=$(git -C ${LOCAL_REPO_MAP[0]} show upstream/master:VERSION)
MAJOR_VERSION=$(echo $QEMU_VERSION|awk -F. '{print $1}')
MINOR_VERSION=$(echo $QEMU_VERSION|awk -F. '{print $2}')
X=$(echo $QEMU_VERSION|awk -F. '{print $3}')
# 0 = release, 50 = development cycle, 90..99 equate to release candidates
if [ "$X" != "0" -a "$X" != "50" ]; then
if [ "$NEXT_RELEASE_IS_MAJOR" = "0" ]; then
SOURCE_VERSION=$MAJOR_VERSION.$[$MINOR_VERSION+1].0-rc$[X-90]
GIT_BRANCH=opensuse-$MAJOR_VERSION.$[$MINOR_VERSION+1]
else
SOURCE_VERSION=$[$MAJOR_VERSION+1].0.0-rc$[X-90]
GIT_BRANCH=opensuse-$[$MAJOR_VERSION+1].0
fi
else
SOURCE_VERSION=$MAJOR_VERSION.$MINOR_VERSION.$X
if [ "$NEXT_RELEASE_IS_MAJOR" = "0" ]; then
GIT_BRANCH=opensuse-$MAJOR_VERSION.$[$MINOR_VERSION+1]
else
GIT_BRANCH=opensuse-$[MAJOR_VERSION+1].0
fi
fi
WRITE_LOG=0
echo "Processing LATEST upstream changes"
echo "(If SUCCESS is not printed upon completion, see /tmp/latest.log for issues)"
TEMP_CHECK
if [[ $QEMU_TARBALL =~ $BASE_RE$EXTRA_RE$SUFFIX_RE ]]; then
OLD_COMMIT_ISH=${BASH_REMATCH[3]}
else
#Assume release (or release candidate) tarball with equivalent tag:
OLD_COMMIT_ISH=$(cd ${LOCAL_REPO_MAP[0]} && git rev-list --abbrev-commit \
--abbrev=8 -1 v$OLD_SOURCE_VERSION_AND_EXTRA)
fi
if [ ${#QEMU_TARBALL_SIG[@]} -ne 0 ]; then
echo "INFO: Ignoring signature file: $QEMU_TARBALL_SIG"
QEMU_TARBALL_SIG=
fi
NOW_SECONDS=$(date +%s)
if [ "$OLD_COMMIT_ISH" != "$NEW_COMMIT_ISH" ]; then
if [ "$CONTINUE_AFTER_REBASE" = "1" ]; then
echo "continue after rebase selected but tarball is out of date. Continuing not possible."
echo "If desired, save your rebase work (eg, branch $GIT_BRANCH), because otherwise it will"
echo "be lost. Then run script again without the continue option"
exit
fi
redo_tarball_and_rebase_patches &> /tmp/latest.log
if [[ "$REBASE_FAILS" ]]; then
echo "ERROR! Rebase of the $GIT_BRANCH branch failed in the following local git repos:"
echo $REBASE_FAILS
echo "Manually resolve all these rebases, then finish the workflow by passing 'continue' to script"
if [[ "$PAUSE_BEFORE_BUNDLE_CREATION" = "1" ]]; then
echo "Feel free to also do the work now occasioned by the selected 'pause' option"
fi
exit
fi
CONTINUE_AFTER_REBASE=1
fi
if [[ "$PAUSE_BEFORE_BUNDLE_CREATION" = "1" ]]; then
echo "As requested, pausing before re-creating bundle of bundles for additional patch or specfile work"
echo "(using current 'ready to go' $GIT_BRANCH branch of local repos to produce patches.)"
echo "When changes are complete, finish the workflow by passing 'continue' to script"
exit
fi
if [ "$CONTINUE_AFTER_REBASE" = "1" ]; then
initbundle &>> /tmp/latest.log
fi
bundle2spec &>> /tmp/latest.log
echo "SUCCESS"
tail -9 /tmp/latest.log
else # not LATEST
if [ ! "$GIT_UPSTREAM_COMMIT_ISH" = "v$OLD_SOURCE_VERSION_AND_EXTRA" ]; then
echo "Tarball name (which we decode) doesn't correspond to the \$GIT_UPSTREAM_COMMIT_ISH in config.sh"
exit
fi
git -C ${LOCAL_REPO_MAP[0]} checkout $GIT_UPSTREAM_COMMIT_ISH --recurse-submodules -f &> /dev/null
NEW_COMMIT_ISH=
SOURCE_VERSION=$OLD_SOURCE_VERSION_AND_EXTRA
QEMU_VERSION=$(tar JxfO qemu-$SOURCE_VERSION$VERSION_EXTRA.tar.xz qemu-$SOURCE_VERSION/VERSION)
if [ ! "$QEMU_VERSION" = "$OLD_SOURCE_VERSION_AND_EXTRA" ]; then
echo "Tarball name (which we decode) doesn't correspond to the VERSION file contained therein"
exit
fi
MAJOR_VERSION=$(echo $QEMU_VERSION|awk -F. '{print $1}')
MINOR_VERSION=$(echo $QEMU_VERSION|awk -F. '{print $2}')
GIT_BRANCH=opensuse-$MAJOR_VERSION.$MINOR_VERSION
WRITE_LOG=1
if [ "$1" = "" ]; then
set -- git2pkg
fi
case $1 in
initbundle )
initbundle
;;
git2pkg )
echo "Updating the package using the $GIT_BRANCH branch of the local repos."
echo "(If SUCCESS is not printed upon completion, see /tmp/git2pkg.log for issues)"
TEMP_CHECK
initbundle &> /tmp/git2pkg.log
bundle2spec &>> /tmp/git2pkg.log
echo "SUCCESS"
tail -9 /tmp/git2pkg.log
;;
pkg2git )
echo "Exporting the package's git bundles to the local repo's frombundle branches..."
echo "(If SUCCESS is not printed upon completion, see /tmp/pkg2git.log for issues)"
TEMP_CHECK
bundle2local &> /tmp/pkg2git.log
echo "SUCCESS"
echo "To modify package patches, use the frombundle branch as the basis for updating"
echo "the $GIT_BRANCH branch with the new patch queue."
echo "Then export the changes back to the package using update_git.sh git2pkg"
;;
refresh )
echo "Updating the spec file and patches from the spec file template and the bundle"
echo "of bundles (bundles.tar.xz)"
echo "(If SUCCESS is not printed upon completion, see /tmp/refresh.log for issues)"
TEMP_CHECK
bundle2spec &> /tmp/refresh.log
echo "SUCCESS"
tail -9 /tmp/refresh.log
;;
* )
echo "Unknown command"
usage
;;
help )
usage
;;
esac
fi
exit

View File

@ -1,30 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Wed, 16 Jan 2019 16:29:36 -0700
Subject: xen: add block resize support for xen disks
Provide monitor naming of xen disks, and plumb guest driver
notification through xenstore of resizing instigated via the
monitor.
[BR: minor edits to pass qemu's checkpatch script]
[BR: significant rework needed due to upstream xen disk qdevification]
[BR: At this point, monitor_add_blk call is all we need to add!]
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
hw/block/xen-block.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c
index 1a379e8771faee970808dd2efd89..310b9639e06b0d543f22652fadd9 100644
--- a/hw/block/xen-block.c
+++ b/hw/block/xen-block.c
@@ -270,6 +270,9 @@ static void xen_block_realize(XenDevice *xendev, Error **errp)
xen_block_set_size(blockdev);
+ if (!monitor_add_blk(conf->blk, blockdev->drive->id, errp)) {
+ return;
+ }
blockdev->dataplane =
xen_block_dataplane_create(xendev, blk, conf->logical_block_size,
blockdev->props.iothread);

View File

@ -1,41 +0,0 @@
From: Olaf Hering <olaf@aepfle.de>
Date: Tue, 8 Jan 2019 14:20:08 +0100
Subject: xen: ignore live parameter from xen-save-devices-state
References: bsc#1079730, bsc#1101982, bsc#1063993
The final step of xl migrate|save for an HVM domU is saving the state of
qemu. This also involves releasing all block devices. While releasing
backends ought to be a separate step, such functionality is not
implemented.
Unfortunately, releasing the block devices depends on the optional
'live' option. This breaks offline migration with 'virsh migrate domU
dom0' because the sending side does not release the disks, as a result
the receiving side can not properly claim write access to the disks.
As a minimal fix, remove the dependency on the 'live' option. Upstream
may fix this in a different way, like removing the newly added 'live'
parameter entirely.
Fixes: 5d6c599fe1 ("migration, xen: Fix block image lock issue on live migration")
Signed-off-by: Olaf Hering <olaf@aepfle.de>
Signed-off-by: Bruce Rogers <brogers@suse.com>
---
migration/savevm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/migration/savevm.c b/migration/savevm.c
index a843d202b5b4dd449e6982b59d80..d75642353e8276f5d3c391fe2c48 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -2820,7 +2820,7 @@ void qmp_xen_save_devices_state(const char *filename, bool has_live, bool live,
* So call bdrv_inactivate_all (release locks) here to let the other
* side of the migration take controle of the images.
*/
- if (live && !saved_vm_running) {
+ if (!saved_vm_running) {
ret = bdrv_inactivate_all();
if (ret) {
error_setg(errp, "%s: bdrv_inactivate_all() failed (%d)",

View File

@ -1,49 +0,0 @@
From: Bruce Rogers <brogers@suse.com>
Date: Wed, 9 Mar 2016 15:18:11 -0700
Subject: xen_disk: Add suse specific flush disable handling and map to QEMU
equiv
Add code to read the suse specific suse-diskcache-disable-flush flag out
of xenstore, and set the equivalent flag within QEMU.
Patch taken from Xen's patch queue, Olaf Hering being the original author.
[bsc#879425]
[BR: minor edits to pass qemu's checkpatch script]
[BR: With qdevification of xen-block, code has changed significantly]
Signed-off-by: Bruce Rogers <brogers@suse.com>
Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
hw/block/xen-block.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c
index 8a7a3f54523ed050587c3e2047de..1a379e8771faee970808dd2efd89 100644
--- a/hw/block/xen-block.c
+++ b/hw/block/xen-block.c
@@ -729,6 +729,8 @@ static XenBlockDrive *xen_block_drive_create(const char *id,
const char *mode = qdict_get_try_str(opts, "mode");
const char *direct_io_safe = qdict_get_try_str(opts, "direct-io-safe");
const char *discard_enable = qdict_get_try_str(opts, "discard-enable");
+ const char *suse_diskcache_disable_flush = qdict_get_try_str(opts,
+ "suse-diskcache-disable-flush");
char *driver = NULL;
char *filename = NULL;
XenBlockDrive *drive = NULL;
@@ -797,6 +799,16 @@ static XenBlockDrive *xen_block_drive_create(const char *id,
}
}
+ if (suse_diskcache_disable_flush) {
+ unsigned long value;
+ if (!qemu_strtoul(suse_diskcache_disable_flush, NULL, 2, &value) && !!value) {
+ QDict *cache_qdict = qdict_new();
+
+ qdict_put_bool(cache_qdict, "no-flush", true);
+ qdict_put_obj(file_layer, "cache", QOBJECT(cache_qdict));
+ }
+ }
+
/*
* It is necessary to turn file locking off as an emulated device
* may have already opened the same image file.