mirror of https://gitee.com/openkylin/qemu.git
* qtest improvements (test for crash found with the fuzzer, increase
downtime in migration test, less verbose output when running w/o KVM) * Improve handling of acceptance tests in the Gitlab-CI * Run checkpatch.pl in the Gitlab-CI * Improve the gitlab-pipeline-status script * Misc patches (mark 'moxie' as deprecated, remove stale .gitignore files, ...) -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAl+FhiIRHHRodXRoQHJl ZGhhdC5jb20ACgkQLtnXdP5wLbXfcBAAkMc4eUbZ0Wkm7M7TdIRkn1vQEstgvyJN 6t02MuqY0R01rdbIBAnCLSw9okxfCTf7Q33VmC7snLtPo6WmvYIPAXZAnUiz13K1 hGhMJfEY0JSyPEXlENMC/SWcRfNuHud6OPp6KePvn6EQsVZ5CR9SeO5zMsCVj2SP bMaBYIAJsVCEHkR2lq9UXbjckjyO0GQnQ/oR3mNiqDLYBmrXUOxIFMBctgfbuUtm uPuvvknHVQa8foD18qVJ8QYZrpwrqN4edFjcoW3yvwfX6OOhTnx+pY43BG/of9YB OoRY7V4VN8aYmVR08sqyn6PRNpXW9WcSUn8D3JNeiAhLzO/8H197JhHwFVvbZc7t puLECIINy91wH2i3Onx7HWhss3XLUK3HsvWNLrvLui6vdbFHEtiW2/0GbwJzrcA0 a9inH7bvI7BlPiIau/J7goaDv0fzZ7xVXlQcrM8hC9oCWH5gvmvcgTBWJn/5OxUZ fov3iFxcRWslFSQe+D66gBceIl/fScF+TUmPoWyeSlD/f1OR2WW+q8N1FvnbLflz oPutIoja8b6CobzAzp8Igc6/9uQvzCAFB92Y8q1Og7eguQybw7dDtbArjBmjUBVi slFWoY8/ri2+uyiPsyU13Yfu9N5myqdwIQeM7H8sQ7qS40QHp0z2tj18o951xH2w WJv3PlGcez4= =lCRK -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2020-10-13' into staging * qtest improvements (test for crash found with the fuzzer, increase downtime in migration test, less verbose output when running w/o KVM) * Improve handling of acceptance tests in the Gitlab-CI * Run checkpatch.pl in the Gitlab-CI * Improve the gitlab-pipeline-status script * Misc patches (mark 'moxie' as deprecated, remove stale .gitignore files, ...) # gpg: Signature made Tue 13 Oct 2020 11:49:06 BST # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * remotes/huth-gitlab/tags/pull-request-2020-10-13: (23 commits) scripts/ci/gitlab-pipeline-status: wait for pipeline creation scripts/ci/gitlab-pipeline-status: use more descriptive exceptions scripts/ci/gitlab-pipeline-status: handle keyboard interrupts scripts/ci/gitlab-pipeline-status: refactor parser creation scripts/ci/gitlab-pipeline-status: give early feedback on running pipelines scripts/ci/gitlab-pipeline-status: improve message regarding timeout scripts/ci/gitlab-pipeline-status: make branch name configurable gitlab: assign python helper files to GitLab maintainers section gitlab: add a CI job to validate the DCO sign off gitlab: add a CI job for running checkpatch.pl configure: fixes indent of $meson setup docs/system/deprecated: Mark the 'moxie' CPU as deprecated Remove superfluous .gitignore files MAINTAINERS: Ignore bios-tables-test in the qtest section Add a comment in bios-tables-test.c to clarify the reason behind approach softmmu/vl: Be less verbose about missing KVM when running the qtests tests/migration: Allow longer timeouts qtest: add fuzz test case Acceptance tests: show test report on GitLab CI Acceptance tests: do not show canceled test logs on GitLab CI ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
b37da83763
|
@ -0,0 +1,94 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# check-dco.py: validate all commits are signed off
|
||||
#
|
||||
# Copyright (C) 2020 Red Hat, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
namespace = "qemu-project"
|
||||
if len(sys.argv) >= 2:
|
||||
namespace = sys.argv[1]
|
||||
|
||||
cwd = os.getcwd()
|
||||
reponame = os.path.basename(cwd)
|
||||
repourl = "https://gitlab.com/%s/%s.git" % (namespace, reponame)
|
||||
|
||||
subprocess.check_call(["git", "remote", "add", "check-dco", repourl])
|
||||
subprocess.check_call(["git", "fetch", "check-dco", "master"],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL)
|
||||
|
||||
ancestor = subprocess.check_output(["git", "merge-base",
|
||||
"check-dco/master", "HEAD"],
|
||||
universal_newlines=True)
|
||||
|
||||
ancestor = ancestor.strip()
|
||||
|
||||
subprocess.check_call(["git", "remote", "rm", "check-dco"])
|
||||
|
||||
errors = False
|
||||
|
||||
print("\nChecking for 'Signed-off-by: NAME <EMAIL>' " +
|
||||
"on all commits since %s...\n" % ancestor)
|
||||
|
||||
log = subprocess.check_output(["git", "log", "--format=%H %s",
|
||||
ancestor + "..."],
|
||||
universal_newlines=True)
|
||||
|
||||
if log == "":
|
||||
commits = []
|
||||
else:
|
||||
commits = [[c[0:40], c[41:]] for c in log.strip().split("\n")]
|
||||
|
||||
for sha, subject in commits:
|
||||
|
||||
msg = subprocess.check_output(["git", "show", "-s", sha],
|
||||
universal_newlines=True)
|
||||
lines = msg.strip().split("\n")
|
||||
|
||||
print("🔍 %s %s" % (sha, subject))
|
||||
sob = False
|
||||
for line in lines:
|
||||
if "Signed-off-by:" in line:
|
||||
sob = True
|
||||
if "localhost" in line:
|
||||
print(" ❌ FAIL: bad email in %s" % line)
|
||||
errors = True
|
||||
|
||||
if not sob:
|
||||
print(" ❌ FAIL missing Signed-off-by tag")
|
||||
errors = True
|
||||
|
||||
if errors:
|
||||
print("""
|
||||
|
||||
❌ ERROR: One or more commits are missing a valid Signed-off-By tag.
|
||||
|
||||
|
||||
This project requires all contributors to assert that their contributions
|
||||
are provided in compliance with the terms of the Developer's Certificate
|
||||
of Origin 1.1 (DCO):
|
||||
|
||||
https://developercertificate.org/
|
||||
|
||||
To indicate acceptance of the DCO every commit must have a tag
|
||||
|
||||
Signed-off-by: REAL NAME <EMAIL>
|
||||
|
||||
This can be achieved by passing the "-s" flag to the "git commit" command.
|
||||
|
||||
To bulk update all commits on current branch "git rebase" can be used:
|
||||
|
||||
git rebase -i master -x 'git commit --amend --no-edit -s'
|
||||
|
||||
""")
|
||||
|
||||
sys.exit(1)
|
||||
|
||||
sys.exit(0)
|
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# check-patch.py: run checkpatch.pl across all commits in a branch
|
||||
#
|
||||
# Copyright (C) 2020 Red Hat, Inc.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
namespace = "qemu-project"
|
||||
if len(sys.argv) >= 2:
|
||||
namespace = sys.argv[1]
|
||||
|
||||
cwd = os.getcwd()
|
||||
reponame = os.path.basename(cwd)
|
||||
repourl = "https://gitlab.com/%s/%s.git" % (namespace, reponame)
|
||||
|
||||
# GitLab CI environment does not give us any direct info about the
|
||||
# base for the user's branch. We thus need to figure out a common
|
||||
# ancestor between the user's branch and current git master.
|
||||
subprocess.check_call(["git", "remote", "add", "check-patch", repourl])
|
||||
subprocess.check_call(["git", "fetch", "check-patch", "master"],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL)
|
||||
|
||||
ancestor = subprocess.check_output(["git", "merge-base",
|
||||
"check-patch/master", "HEAD"],
|
||||
universal_newlines=True)
|
||||
|
||||
ancestor = ancestor.strip()
|
||||
|
||||
subprocess.check_call(["git", "remote", "rm", "check-patch"])
|
||||
|
||||
errors = False
|
||||
|
||||
print("\nChecking all commits since %s...\n" % ancestor)
|
||||
|
||||
ret = subprocess.run(["scripts/checkpatch.pl", ancestor + "..."])
|
||||
|
||||
if ret.returncode != 0:
|
||||
print(" ❌ FAIL one or more commits failed scripts/checkpatch.pl")
|
||||
sys.exit(1)
|
||||
|
||||
sys.exit(0)
|
|
@ -53,6 +53,11 @@ include:
|
|||
paths:
|
||||
- ${CI_PROJECT_DIR}/avocado-cache
|
||||
policy: pull-push
|
||||
artifacts:
|
||||
paths:
|
||||
- build/tests/results/latest/results.xml
|
||||
reports:
|
||||
junit: build/tests/results/latest/results.xml
|
||||
before_script:
|
||||
- mkdir -p ~/.config/avocado
|
||||
- echo "[datadir.paths]" > ~/.config/avocado/avocado.conf
|
||||
|
@ -63,7 +68,7 @@ include:
|
|||
fi
|
||||
after_script:
|
||||
- cd build
|
||||
- python3 -c 'import json; r = json.load(open("tests/results/latest/results.json")); [print(t["logfile"]) for t in r["tests"] if t["status"] not in ("PASS", "SKIP")]' | xargs cat
|
||||
- python3 -c 'import json; r = json.load(open("tests/results/latest/results.json")); [print(t["logfile"]) for t in r["tests"] if t["status"] not in ("PASS", "SKIP", "CANCEL")]' | xargs cat
|
||||
- du -chs ${CI_PROJECT_DIR}/avocado-cache
|
||||
|
||||
build-system-ubuntu:
|
||||
|
@ -303,7 +308,7 @@ build-oss-fuzz:
|
|||
| grep -v slirp); do
|
||||
grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
|
||||
echo Testing ${fuzzer} ... ;
|
||||
"${fuzzer}" -runs=1000 -seed=1 || exit 1 ;
|
||||
"${fuzzer}" -runs=1 -seed=1 || exit 1 ;
|
||||
done
|
||||
# Unrelated to fuzzer: run some tests with -fsanitize=address
|
||||
- cd build-oss-fuzz && make check-qtest-i386 check-unit
|
||||
|
@ -394,3 +399,25 @@ check-crypto-only-gnutls:
|
|||
variables:
|
||||
IMAGE: centos7
|
||||
MAKE_CHECK_ARGS: check
|
||||
|
||||
|
||||
check-patch:
|
||||
stage: build
|
||||
image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
|
||||
script: .gitlab-ci.d/check-patch.py
|
||||
except:
|
||||
variables:
|
||||
- $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
|
||||
variables:
|
||||
GIT_DEPTH: 1000
|
||||
allow_failure: true
|
||||
|
||||
check-dco:
|
||||
stage: build
|
||||
image: $CI_REGISTRY_IMAGE/qemu/centos8:latest
|
||||
script: .gitlab-ci.d/check-dco.py
|
||||
except:
|
||||
variables:
|
||||
- $CI_PROJECT_NAMESPACE == 'qemu-project' && $CI_COMMIT_BRANCH == 'master'
|
||||
variables:
|
||||
GIT_DEPTH: 1000
|
||||
|
|
|
@ -2497,7 +2497,7 @@ S: Maintained
|
|||
F: softmmu/qtest.c
|
||||
F: accel/qtest/
|
||||
F: tests/qtest/
|
||||
X: tests/qtest/bios-tables-test-allowed-diff.h
|
||||
X: tests/qtest/bios-tables-test*
|
||||
|
||||
Device Fuzzing
|
||||
M: Alexander Bulekov <alxndr@bu.edu>
|
||||
|
@ -3128,6 +3128,7 @@ R: Wainer dos Santos Moschetta <wainersm@redhat.com>
|
|||
S: Maintained
|
||||
F: .gitlab-ci.yml
|
||||
F: .gitlab-ci.d/crossbuilds.yml
|
||||
F: .gitlab-ci.d/*py
|
||||
|
||||
Guest Test Compilation Support
|
||||
M: Alex Bennée <alex.bennee@linaro.org>
|
||||
|
|
|
@ -7211,13 +7211,13 @@ NINJA=${ninja:-$PWD/ninjatool} $meson setup \
|
|||
-Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
|
||||
-Db_staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi) \
|
||||
-Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
|
||||
-Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
|
||||
-Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
|
||||
-Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
|
||||
-Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
|
||||
-Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
|
||||
-Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f \
|
||||
-Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
|
||||
-Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
|
||||
-Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
|
||||
-Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
|
||||
-Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
|
||||
-Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
|
||||
-Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f \
|
||||
-Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
|
||||
$cross_arg \
|
||||
"$PWD" "$source_path"
|
||||
|
||||
|
|
|
@ -283,6 +283,14 @@ for VNC should be performed using the pluggable QAuthZ objects.
|
|||
System emulator CPUS
|
||||
--------------------
|
||||
|
||||
``moxie`` CPU (since 5.2.0)
|
||||
'''''''''''''''''''''''''''
|
||||
|
||||
The ``moxie`` guest CPU support is deprecated and will be removed in
|
||||
a future version of QEMU. It's unclear whether anybody is still using
|
||||
CPU emulation in QEMU, and there are no test images available to make
|
||||
sure that the code is still working.
|
||||
|
||||
``compat`` property of server class POWER CPUs (since 5.0)
|
||||
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
/*.stamp
|
|
@ -1,2 +0,0 @@
|
|||
qemu-plugins-ld.symbols
|
||||
qemu-plugins-ld64.symbols
|
|
@ -23,20 +23,28 @@ import time
|
|||
import sys
|
||||
|
||||
|
||||
def get_local_staging_branch_commit():
|
||||
class CommunicationFailure(Exception):
|
||||
"""Failed to communicate to gitlab.com APIs."""
|
||||
|
||||
|
||||
class NoPipelineFound(Exception):
|
||||
"""Communication is successfull but pipeline is not found."""
|
||||
|
||||
|
||||
def get_local_branch_commit(branch='staging'):
|
||||
"""
|
||||
Returns the commit sha1 for the *local* branch named "staging"
|
||||
"""
|
||||
result = subprocess.run(['git', 'rev-parse', 'staging'],
|
||||
result = subprocess.run(['git', 'rev-parse', branch],
|
||||
stdin=subprocess.DEVNULL,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.DEVNULL,
|
||||
cwd=os.path.dirname(__file__),
|
||||
universal_newlines=True).stdout.strip()
|
||||
if result == 'staging':
|
||||
raise ValueError("There's no local branch named 'staging'")
|
||||
if result == branch:
|
||||
raise ValueError("There's no local branch named '%s'" % branch)
|
||||
if len(result) != 40:
|
||||
raise ValueError("Branch staging HEAD doesn't look like a sha1")
|
||||
raise ValueError("Branch '%s' HEAD doesn't look like a sha1" % branch)
|
||||
return result
|
||||
|
||||
|
||||
|
@ -50,14 +58,14 @@ def get_pipeline_status(project_id, commit_sha1):
|
|||
connection.request('GET', url=url)
|
||||
response = connection.getresponse()
|
||||
if response.code != http.HTTPStatus.OK:
|
||||
raise ValueError("Failed to receive a successful response")
|
||||
raise CommunicationFailure("Failed to receive a successful response")
|
||||
json_response = json.loads(response.read())
|
||||
|
||||
# As far as I can tell, there should be only one pipeline for the same
|
||||
# project + commit. If this assumption is false, we can add further
|
||||
# filters to the url, such as username, and order_by.
|
||||
if not json_response:
|
||||
raise ValueError("No pipeline found")
|
||||
raise NoPipelineFound("No pipeline found")
|
||||
return json_response[0]
|
||||
|
||||
|
||||
|
@ -69,16 +77,28 @@ def wait_on_pipeline_success(timeout, interval,
|
|||
start = time.time()
|
||||
while True:
|
||||
if time.time() >= (start + timeout):
|
||||
print("Waiting on the pipeline timed out")
|
||||
msg = ("Timeout (-t/--timeout) of %i seconds reached, "
|
||||
"won't wait any longer for the pipeline to complete")
|
||||
msg %= timeout
|
||||
print(msg)
|
||||
return False
|
||||
|
||||
status = get_pipeline_status(project_id, commit_sha)
|
||||
if status['status'] == 'running':
|
||||
time.sleep(interval)
|
||||
print('running...')
|
||||
try:
|
||||
status = get_pipeline_status(project_id, commit_sha)
|
||||
except NoPipelineFound:
|
||||
print('Pipeline has not been found, it may not have been created yet.')
|
||||
time.sleep(1)
|
||||
continue
|
||||
|
||||
if status['status'] == 'success':
|
||||
pipeline_status = status['status']
|
||||
status_to_wait = ('created', 'waiting_for_resource', 'preparing',
|
||||
'pending', 'running')
|
||||
if pipeline_status in status_to_wait:
|
||||
print('%s...' % pipeline_status)
|
||||
time.sleep(interval)
|
||||
continue
|
||||
|
||||
if pipeline_status == 'success':
|
||||
return True
|
||||
|
||||
msg = "Pipeline failed, check: %s" % status['web_url']
|
||||
|
@ -86,10 +106,7 @@ def wait_on_pipeline_success(timeout, interval,
|
|||
return False
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
Script entry point
|
||||
"""
|
||||
def create_parser():
|
||||
parser = argparse.ArgumentParser(
|
||||
prog='pipeline-status',
|
||||
description='check or wait on a pipeline status')
|
||||
|
@ -110,7 +127,7 @@ def main():
|
|||
'for https://gitlab.com/qemu-project/qemu, that '
|
||||
'is, "%(default)s"'))
|
||||
try:
|
||||
default_commit = get_local_staging_branch_commit()
|
||||
default_commit = get_local_branch_commit()
|
||||
commit_required = False
|
||||
except ValueError:
|
||||
default_commit = ''
|
||||
|
@ -124,9 +141,15 @@ def main():
|
|||
parser.add_argument('--verbose', action='store_true', default=False,
|
||||
help=('A minimal verbosity level that prints the '
|
||||
'overall result of the check/wait'))
|
||||
return parser
|
||||
|
||||
def main():
|
||||
"""
|
||||
Script entry point
|
||||
"""
|
||||
parser = create_parser()
|
||||
args = parser.parse_args()
|
||||
|
||||
success = False
|
||||
try:
|
||||
if args.wait:
|
||||
success = wait_on_pipeline_success(
|
||||
|
@ -139,9 +162,11 @@ def main():
|
|||
args.commit)
|
||||
success = status['status'] == 'success'
|
||||
except Exception as error: # pylint: disable=W0703
|
||||
success = False
|
||||
if args.verbose:
|
||||
print("ERROR: %s" % error.args[0])
|
||||
except KeyboardInterrupt:
|
||||
if args.verbose:
|
||||
print("Exiting on user's request")
|
||||
|
||||
if success:
|
||||
if args.verbose:
|
||||
|
|
19
softmmu/vl.c
19
softmmu/vl.c
|
@ -165,8 +165,9 @@ bool boot_strict;
|
|||
uint8_t *boot_splash_filedata;
|
||||
int only_migratable; /* turn it off unless user states otherwise */
|
||||
bool wakeup_suspend_enabled;
|
||||
|
||||
int icount_align_option;
|
||||
static const char *qtest_chrdev;
|
||||
static const char *qtest_log;
|
||||
|
||||
/* The bytes in qemu_uuid are in the order specified by RFC4122, _not_ in the
|
||||
* little-endian "wire format" described in the SMBIOS 2.6 specification.
|
||||
|
@ -2713,10 +2714,15 @@ static int do_configure_accelerator(void *opaque, QemuOpts *opts, Error **errp)
|
|||
AccelClass *ac = accel_find(acc);
|
||||
AccelState *accel;
|
||||
int ret;
|
||||
bool qtest_with_kvm;
|
||||
|
||||
qtest_with_kvm = g_str_equal(acc, "kvm") && qtest_chrdev != NULL;
|
||||
|
||||
if (!ac) {
|
||||
*p_init_failed = true;
|
||||
error_report("invalid accelerator %s", acc);
|
||||
if (!qtest_with_kvm) {
|
||||
error_report("invalid accelerator %s", acc);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
accel = ACCEL(object_new_with_class(OBJECT_CLASS(ac)));
|
||||
|
@ -2728,8 +2734,9 @@ static int do_configure_accelerator(void *opaque, QemuOpts *opts, Error **errp)
|
|||
ret = accel_init_machine(accel, current_machine);
|
||||
if (ret < 0) {
|
||||
*p_init_failed = true;
|
||||
error_report("failed to initialize %s: %s",
|
||||
acc, strerror(-ret));
|
||||
if (!qtest_with_kvm || ret != -ENOENT) {
|
||||
error_report("failed to initialize %s: %s", acc, strerror(-ret));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2800,7 +2807,7 @@ static void configure_accelerators(const char *progname)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
if (init_failed) {
|
||||
if (init_failed && !qtest_chrdev) {
|
||||
AccelClass *ac = ACCEL_GET_CLASS(current_accel());
|
||||
error_report("falling back to %s", ac->name);
|
||||
}
|
||||
|
@ -2870,8 +2877,6 @@ void qemu_init(int argc, char **argv, char **envp)
|
|||
MachineClass *machine_class;
|
||||
const char *cpu_option;
|
||||
const char *vga_model = NULL;
|
||||
const char *qtest_chrdev = NULL;
|
||||
const char *qtest_log = NULL;
|
||||
const char *incoming = NULL;
|
||||
bool userconfig = true;
|
||||
bool nographic = false;
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
atomic_add-bench
|
||||
benchmark-crypto-cipher
|
||||
benchmark-crypto-hash
|
||||
benchmark-crypto-hmac
|
||||
check-*
|
||||
!check-*.c
|
||||
!check-*.sh
|
||||
fp/*.out
|
||||
qht-bench
|
||||
rcutorture
|
||||
test-*
|
||||
!test-*.c
|
||||
!test-*.py
|
||||
!docker/test-*
|
||||
test-qapi-commands.[ch]
|
||||
test-qapi-init-commands.[ch]
|
||||
include/test-qapi-commands-sub-module.[ch]
|
||||
test-qapi-commands-sub-sub-module.[ch]
|
||||
test-qapi-emit-events.[ch]
|
||||
test-qapi-events.[ch]
|
||||
include/test-qapi-events-sub-module.[ch]
|
||||
test-qapi-events-sub-sub-module.[ch]
|
||||
test-qapi-types.[ch]
|
||||
include/test-qapi-types-sub-module.[ch]
|
||||
test-qapi-types-sub-sub-module.[ch]
|
||||
test-qapi-visit.[ch]
|
||||
include/test-qapi-visit-sub-module.[ch]
|
||||
test-qapi-visit-sub-sub-module.[ch]
|
||||
test-qapi-introspect.[ch]
|
||||
*-test
|
||||
qapi-schema/*.test.*
|
||||
vm/*.img
|
|
@ -1,2 +0,0 @@
|
|||
fp-test
|
||||
fp-bench
|
|
@ -1,2 +0,0 @@
|
|||
initrd-stress.img
|
||||
stress
|
|
@ -1,3 +0,0 @@
|
|||
*.bin
|
||||
*.elf
|
||||
test.out
|
|
@ -1,9 +0,0 @@
|
|||
check.log
|
||||
check.time*
|
||||
common.env
|
||||
*.out.bad
|
||||
*.notrun
|
||||
socket_scm_helper
|
||||
|
||||
# ignore everything in the scratch directory
|
||||
scratch/
|
|
@ -11,7 +11,7 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
* How to add or update the tests:
|
||||
* How to add or update the tests or commit changes that affect ACPI tables:
|
||||
* Contributor:
|
||||
* 1. add empty files for new tables, if any, under tests/data/acpi
|
||||
* 2. list any changed files in tests/qtest/bios-tables-test-allowed-diff.h
|
||||
|
@ -38,6 +38,11 @@
|
|||
* $(SRC_PATH)/tests/data/acpi/rebuild-expected-aml.sh
|
||||
* 6. Now commit any changes to the expected binary, include diff from step 4
|
||||
* in commit log.
|
||||
* Expected binary updates needs to be a separate patch from the code that
|
||||
* introduces changes to ACPI tables. It lets the maintainer drop
|
||||
* and regenerate binary updates in case of merge conflicts. Further, a code
|
||||
* change is easily reviewable but a binary blob is not (without doing a
|
||||
* disassembly).
|
||||
* 7. Before sending patches to the list (Contributor)
|
||||
* or before doing a pull request (Maintainer), make sure
|
||||
* tests/qtest/bios-tables-test-allowed-diff.h is empty - this will ensure
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* QTest testcase for fuzz case
|
||||
*
|
||||
* Copyright (c) 2020 Li Qiang <liq3ea@gmail.com>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
||||
* See the COPYING file in the top-level directory.
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
|
||||
#include "libqos/libqtest.h"
|
||||
|
||||
/*
|
||||
* This used to trigger the assert in scsi_dma_complete
|
||||
* https://bugs.launchpad.net/qemu/+bug/1878263
|
||||
*/
|
||||
static void test_lp1878263_megasas_zero_iov_cnt(void)
|
||||
{
|
||||
QTestState *s;
|
||||
|
||||
s = qtest_init("-nographic -monitor none -serial none "
|
||||
"-M q35 -device megasas -device scsi-cd,drive=null0 "
|
||||
"-blockdev driver=null-co,read-zeroes=on,node-name=null0");
|
||||
qtest_outl(s, 0xcf8, 0x80001818);
|
||||
qtest_outl(s, 0xcfc, 0xc101);
|
||||
qtest_outl(s, 0xcf8, 0x8000181c);
|
||||
qtest_outl(s, 0xcf8, 0x80001804);
|
||||
qtest_outw(s, 0xcfc, 0x7);
|
||||
qtest_outl(s, 0xcf8, 0x8000186a);
|
||||
qtest_writeb(s, 0x14, 0xfe);
|
||||
qtest_writeb(s, 0x0, 0x02);
|
||||
qtest_outb(s, 0xc1c0, 0x17);
|
||||
qtest_quit(s);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *arch = qtest_get_arch();
|
||||
|
||||
g_test_init(&argc, &argv, NULL);
|
||||
|
||||
if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) {
|
||||
qtest_add_func("fuzz/test_lp1878263_megasas_zero_iov_cnt",
|
||||
test_lp1878263_megasas_zero_iov_cnt);
|
||||
}
|
||||
|
||||
return g_test_run();
|
||||
}
|
|
@ -54,6 +54,7 @@ qtests_i386 = \
|
|||
'bios-tables-test',
|
||||
'rtc-test',
|
||||
'i440fx-test',
|
||||
'fuzz-test',
|
||||
'fw_cfg-test',
|
||||
'device-plug-test',
|
||||
'drive_del-test',
|
||||
|
|
|
@ -34,6 +34,9 @@ unsigned start_address;
|
|||
unsigned end_address;
|
||||
static bool uffd_feature_thread_id;
|
||||
|
||||
/* A downtime where the test really should converge */
|
||||
#define CONVERGE_DOWNTIME 1000
|
||||
|
||||
#if defined(__linux__)
|
||||
#include <sys/syscall.h>
|
||||
#include <sys/vfs.h>
|
||||
|
@ -864,8 +867,7 @@ static void test_precopy_unix(void)
|
|||
|
||||
wait_for_migration_pass(from);
|
||||
|
||||
/* 300 ms should converge */
|
||||
migrate_set_parameter_int(from, "downtime-limit", 300);
|
||||
migrate_set_parameter_int(from, "downtime-limit", CONVERGE_DOWNTIME);
|
||||
|
||||
if (!got_stop) {
|
||||
qtest_qmp_eventwait(from, "STOP");
|
||||
|
@ -946,10 +948,12 @@ static void test_xbzrle(const char *uri)
|
|||
|
||||
migrate_qmp(from, uri, "{}");
|
||||
|
||||
wait_for_migration_pass(from);
|
||||
/* Make sure we have 2 passes, so the xbzrle cache gets a workout */
|
||||
wait_for_migration_pass(from);
|
||||
|
||||
/* 300ms should converge */
|
||||
migrate_set_parameter_int(from, "downtime-limit", 300);
|
||||
/* 1000ms should converge */
|
||||
migrate_set_parameter_int(from, "downtime-limit", 1000);
|
||||
|
||||
if (!got_stop) {
|
||||
qtest_qmp_eventwait(from, "STOP");
|
||||
|
@ -999,8 +1003,7 @@ static void test_precopy_tcp(void)
|
|||
|
||||
wait_for_migration_pass(from);
|
||||
|
||||
/* 300ms should converge */
|
||||
migrate_set_parameter_int(from, "downtime-limit", 300);
|
||||
migrate_set_parameter_int(from, "downtime-limit", CONVERGE_DOWNTIME);
|
||||
|
||||
if (!got_stop) {
|
||||
qtest_qmp_eventwait(from, "STOP");
|
||||
|
@ -1068,8 +1071,7 @@ static void test_migrate_fd_proto(void)
|
|||
|
||||
wait_for_migration_pass(from);
|
||||
|
||||
/* 300ms should converge */
|
||||
migrate_set_parameter_int(from, "downtime-limit", 300);
|
||||
migrate_set_parameter_int(from, "downtime-limit", CONVERGE_DOWNTIME);
|
||||
|
||||
if (!got_stop) {
|
||||
qtest_qmp_eventwait(from, "STOP");
|
||||
|
@ -1304,8 +1306,7 @@ static void test_multifd_tcp(const char *method)
|
|||
|
||||
wait_for_migration_pass(from);
|
||||
|
||||
/* 300ms it should converge */
|
||||
migrate_set_parameter_int(from, "downtime-limit", 300);
|
||||
migrate_set_parameter_int(from, "downtime-limit", CONVERGE_DOWNTIME);
|
||||
|
||||
if (!got_stop) {
|
||||
qtest_qmp_eventwait(from, "STOP");
|
||||
|
|
|
@ -292,7 +292,7 @@ static void alarm_time(void)
|
|||
break;
|
||||
}
|
||||
|
||||
clock_step(1000000000);
|
||||
clock_step(NANOSECONDS_PER_SECOND);
|
||||
}
|
||||
|
||||
g_assert(get_irq(RTC_ISA_IRQ));
|
||||
|
|
|
@ -2,4 +2,4 @@
|
|||
# in the tests/venv Python virtual environment. For more info,
|
||||
# refer to: https://pip.pypa.io/en/stable/user_guide/#id1
|
||||
avocado-framework==81.0
|
||||
pycdlib==1.9.0
|
||||
pycdlib==1.11.0
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
# These are build artefacts which only appear when you are doing
|
||||
# builds directly in the source tree.
|
||||
config-*.mak
|
||||
*-softmmu/
|
||||
*-linux-user/
|
|
@ -1,3 +0,0 @@
|
|||
Build
|
||||
Conf
|
||||
log
|
Loading…
Reference in New Issue