* [PULL 01/10] Run docker probe only if docker or podman are available
2022-11-15 13:34 [PULL for 7.2 00/10] testing and doc updates Alex Bennée
@ 2022-11-15 13:34 ` Alex Bennée
2022-11-15 13:34 ` [PULL 02/10] tests/avocado: improve behaviour waiting for login prompts Alex Bennée
` (9 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Alex Bennée @ 2022-11-15 13:34 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Stefan Weil, Alex Bennée, Thomas Huth,
Paolo Bonzini
From: Stefan Weil <sw@weilnetz.de>
The docker probe uses "sudo -n" which can cause an e-mail with a security warning
each time when configure is run. Therefore run docker probe only if either docker
or podman are available.
That avoids the problematic "sudo -n" on build environments which have neither
docker nor podman installed.
Fixes: c4575b59155e2e00 ("configure: store container engine in config-host.mak")
Signed-off-by: Stefan Weil <sw@weilnetz.de>
Message-Id: <20221030083510.310584-1-sw@weilnetz.de>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20221111145529.4020801-2-alex.bennee@linaro.org>
diff --git a/configure b/configure
index 66928692b0..26c7bc5154 100755
--- a/configure
+++ b/configure
@@ -1780,7 +1780,7 @@ fi
# functions to probe cross compilers
container="no"
-if test $use_containers = "yes"; then
+if test $use_containers = "yes" && (has "docker" || has "podman"); then
case $($python "$source_path"/tests/docker/docker.py probe) in
*docker) container=docker ;;
podman) container=podman ;;
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PULL 02/10] tests/avocado: improve behaviour waiting for login prompts
2022-11-15 13:34 [PULL for 7.2 00/10] testing and doc updates Alex Bennée
2022-11-15 13:34 ` [PULL 01/10] Run docker probe only if docker or podman are available Alex Bennée
@ 2022-11-15 13:34 ` Alex Bennée
2022-11-15 13:34 ` [PULL 03/10] tests/avocado/machine_aspeed.py: Reduce noise on the console for SDK tests Alex Bennée
` (8 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Alex Bennée @ 2022-11-15 13:34 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Alex Bennée, Philippe Mathieu-Daudé,
Cleber Rosa, Wainer dos Santos Moschetta, Beraldo Leal
This attempts to deal with the problem of login prompts not being
guaranteed to be terminated with a newline. The solution to this is to
peek at the incoming data looking to see if we see an up-coming match
before we fall back to the old readline() logic. The reason to mostly
rely on readline is because I am occasionally seeing the peek stalling
despite data being there.
This seems kinda hacky and gross so I'm open to alternative approaches
and cleaner python code.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20221111145529.4020801-3-alex.bennee@linaro.org>
diff --git a/tests/avocado/avocado_qemu/__init__.py b/tests/avocado/avocado_qemu/__init__.py
index 910f3ba1ea..7469a06804 100644
--- a/tests/avocado/avocado_qemu/__init__.py
+++ b/tests/avocado/avocado_qemu/__init__.py
@@ -131,6 +131,59 @@ def pick_default_qemu_bin(bin_prefix='qemu-system-', arch=None):
return path
return None
+def _peek_ahead(console, min_match, success_as_str):
+ """
+ peek ahead in the console stream keeping an eye out for the
+ success message. Because we are partially peeking into the data
+ stream we do everything as bytes to avoid partial UTF decode
+ issues.
+
+ Returns some message to process or None, indicating the normal
+ readline should occur.
+ """
+ console_logger = logging.getLogger('console')
+ success_message = bytes(success_as_str, 'utf-8')
+ peek_len = 0
+ retries = 0
+
+ while True:
+ old_peek_len = peek_len
+ peek_ahead = console.peek(min_match)
+ peek_len = len(peek_ahead)
+
+ # if we get stuck too long lets just fallback to readline
+ if peek_len <= old_peek_len:
+ time.sleep(0.001 * retries)
+ retries += 1
+ if retries > 20:
+ return None
+ else:
+ retries = 0
+
+ # if we see a newline in the peek we can let safely bail
+ # and let the normal readline() deal with it
+ if peek_ahead.endswith((b'\n', b'\r')):
+ return None
+
+ # if we haven't seen enough for the whole message but the
+ # first part matches lets just loop again
+ if len(peek_ahead) < min_match and \
+ success_message[:peek_len] in peek_ahead:
+ continue
+
+ # if we see the whole success_message we are done, consume
+ # it and pass back so we can exit to the user
+ if success_message in peek_ahead:
+ return console.read(peek_len).decode()
+
+ # of course if we've seen enough then this line probably
+ # doesn't contain what we are looking for, fallback
+ if peek_len > min_match:
+ return None
+
+ # we should never get here
+ return None
+
def _console_interaction(test, success_message, failure_message,
send_string, keep_sending=False, vm=None):
@@ -139,17 +192,52 @@ def _console_interaction(test, success_message, failure_message,
vm = test.vm
console = vm.console_socket.makefile(mode='rb', encoding='utf-8')
console_logger = logging.getLogger('console')
+
+ # Establish the minimum number of bytes we would need to
+ # potentially match against success_message
+ if success_message is not None:
+ min_match = len(success_message)
+ else:
+ min_match = 0
+
+ console_logger.debug("looking for %d:(%s), sending %s (always=%s)",
+ min_match, success_message, send_string, keep_sending)
+
while True:
+ msg = None
+
+ # First send our string, optionally repeating the send next
+ # cycle.
if send_string:
vm.console_socket.sendall(send_string.encode())
if not keep_sending:
send_string = None # send only once
+
+ # If the console has no data to read we briefly
+ # sleep before continuing.
+ if not console.readable():
+ time.sleep(0.1)
+ continue
+
try:
- msg = console.readline().decode().strip()
+
+ # First we shall peek ahead for a potential match to cover waiting
+ # for lines without any newlines.
+ if min_match > 0:
+ msg = _peek_ahead(console, min_match, success_message)
+
+ # otherwise we block here for a full line
+ if not msg:
+ msg = console.readline().decode().strip()
+
except UnicodeDecodeError:
+ console_logger.debug("skipped unicode error")
msg = None
+
+ # if nothing came out we continue and try again
if not msg:
continue
+
console_logger.debug(msg)
if success_message is None or success_message in msg:
break
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PULL 03/10] tests/avocado/machine_aspeed.py: Reduce noise on the console for SDK tests
2022-11-15 13:34 [PULL for 7.2 00/10] testing and doc updates Alex Bennée
2022-11-15 13:34 ` [PULL 01/10] Run docker probe only if docker or podman are available Alex Bennée
2022-11-15 13:34 ` [PULL 02/10] tests/avocado: improve behaviour waiting for login prompts Alex Bennée
@ 2022-11-15 13:34 ` Alex Bennée
2022-11-15 13:34 ` [PULL 04/10] tests/docker: allow user to override check target Alex Bennée
` (7 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Alex Bennée @ 2022-11-15 13:34 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Cédric Le Goater, Alex Bennée, Cleber Rosa,
Philippe Mathieu-Daudé, Wainer dos Santos Moschetta,
Beraldo Leal
From: Cédric Le Goater <clg@kaod.org>
The Aspeed SDK images are based on OpenBMC which starts a lot of
services. The output noise on the console can break from time to time
the test waiting for the logging prompt.
Change the U-Boot bootargs variable to add "quiet" to the kernel
command line and reduce the output volume. This also drops the test on
the CPU id which was nice to have but not essential.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Message-Id: <20221104075347.370503-1-clg@kaod.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20221111145529.4020801-4-alex.bennee@linaro.org>
diff --git a/tests/avocado/machine_aspeed.py b/tests/avocado/machine_aspeed.py
index fba6527026..1fc385e1c8 100644
--- a/tests/avocado/machine_aspeed.py
+++ b/tests/avocado/machine_aspeed.py
@@ -12,6 +12,7 @@
from avocado_qemu import wait_for_console_pattern
from avocado_qemu import exec_command
from avocado_qemu import exec_command_and_wait_for_pattern
+from avocado_qemu import interrupt_interactive_console_until_pattern
from avocado.utils import archive
from avocado import skipIf
@@ -182,6 +183,8 @@ def test_arm_ast2600_evb_buildroot(self):
class AST2x00MachineSDK(QemuSystemTest):
+ EXTRA_BOOTARGS = ' quiet'
+
# FIXME: Although these tests boot a whole distro they are still
# slower than comparable machine models. There may be some
# optimisations which bring down the runtime. In the meantime they
@@ -194,7 +197,7 @@ def wait_for_console_pattern(self, success_message, vm=None):
failure_message='Kernel panic - not syncing',
vm=vm)
- def do_test_arm_aspeed_sdk_start(self, image, cpu_id):
+ def do_test_arm_aspeed_sdk_start(self, image):
self.require_netdev('user')
self.vm.set_console()
self.vm.add_args('-drive', 'file=' + image + ',if=mtd,format=raw',
@@ -202,9 +205,13 @@ def do_test_arm_aspeed_sdk_start(self, image, cpu_id):
self.vm.launch()
self.wait_for_console_pattern('U-Boot 2019.04')
- self.wait_for_console_pattern('## Loading kernel from FIT Image')
+ interrupt_interactive_console_until_pattern(
+ self, 'Hit any key to stop autoboot:', 'ast#')
+ exec_command_and_wait_for_pattern(
+ self, 'setenv bootargs ${bootargs}' + self.EXTRA_BOOTARGS, 'ast#')
+ exec_command_and_wait_for_pattern(
+ self, 'boot', '## Loading kernel from FIT Image')
self.wait_for_console_pattern('Starting kernel ...')
- self.wait_for_console_pattern('Booting Linux on physical CPU ' + cpu_id)
@skipIf(os.getenv('GITLAB_CI'), 'Running on GitLab')
def test_arm_ast2500_evb_sdk(self):
@@ -221,7 +228,7 @@ def test_arm_ast2500_evb_sdk(self):
archive.extract(image_path, self.workdir)
self.do_test_arm_aspeed_sdk_start(
- self.workdir + '/ast2500-default/image-bmc', '0x0')
+ self.workdir + '/ast2500-default/image-bmc')
self.wait_for_console_pattern('ast2500-default login:')
@skipIf(os.getenv('GITLAB_CI'), 'Running on GitLab')
@@ -243,7 +250,7 @@ def test_arm_ast2600_evb_sdk(self):
self.vm.add_args('-device',
'ds1338,bus=aspeed.i2c.bus.5,address=0x32');
self.do_test_arm_aspeed_sdk_start(
- self.workdir + '/ast2600-default/image-bmc', '0xf00')
+ self.workdir + '/ast2600-default/image-bmc')
self.wait_for_console_pattern('ast2600-default login:')
exec_command_and_wait_for_pattern(self, 'root', 'Password:')
exec_command_and_wait_for_pattern(self, '0penBmc', 'root@ast2600-default:~#')
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PULL 04/10] tests/docker: allow user to override check target
2022-11-15 13:34 [PULL for 7.2 00/10] testing and doc updates Alex Bennée
` (2 preceding siblings ...)
2022-11-15 13:34 ` [PULL 03/10] tests/avocado/machine_aspeed.py: Reduce noise on the console for SDK tests Alex Bennée
@ 2022-11-15 13:34 ` Alex Bennée
2022-11-15 13:34 ` [PULL 05/10] docs/devel: add a maintainers section to development process Alex Bennée
` (6 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Alex Bennée @ 2022-11-15 13:34 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Alex Bennée, Philippe Mathieu-Daudé,
Thomas Huth, Wainer dos Santos Moschetta, Beraldo Leal
This is useful when trying to bisect a particular failing test behind
a docker run. For example:
make docker-test-clang@fedora \
TARGET_LIST=arm-softmmu \
TEST_COMMAND="meson test qtest-arm/qos-test" \
J=9 V=1
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20221111145529.4020801-5-alex.bennee@linaro.org>
diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index c87f14477a..fc7a3b7e71 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -184,6 +184,7 @@ docker:
@echo ' TARGET_LIST=a,b,c Override target list in builds.'
@echo ' EXTRA_CONFIGURE_OPTS="..."'
@echo ' Extra configure options.'
+ @echo ' TEST_COMMAND="..." Override the default `make check` target.'
@echo ' IMAGES="a b c ..": Restrict available images to subset.'
@echo ' TESTS="x y z .." Restrict available tests to subset.'
@echo ' J=[0..9]* Overrides the -jN parameter for make commands'
@@ -230,6 +231,7 @@ docker-run: docker-qemu-src
$(if $(NETWORK),$(if $(subst $(NETWORK),,1),--net=$(NETWORK)),--net=none) \
-e TARGET_LIST=$(subst $(SPACE),$(COMMA),$(TARGET_LIST)) \
-e EXTRA_CONFIGURE_OPTS="$(EXTRA_CONFIGURE_OPTS)" \
+ -e TEST_COMMAND="$(TEST_COMMAND)" \
-e V=$V -e J=$J -e DEBUG=$(DEBUG) \
-e SHOW_ENV=$(SHOW_ENV) \
$(if $(NOUSER),, \
diff --git a/tests/docker/common.rc b/tests/docker/common.rc
index e6f8cee0d6..9a33df2832 100755
--- a/tests/docker/common.rc
+++ b/tests/docker/common.rc
@@ -63,12 +63,12 @@ check_qemu()
{
# default to make check unless the caller specifies
if [ $# = 0 ]; then
- INVOCATION="check"
+ INVOCATION="${TEST_COMMAND:-make $MAKEFLAGS check}"
else
- INVOCATION="$@"
+ INVOCATION="make $MAKEFLAGS $@"
fi
- make $MAKEFLAGS $INVOCATION
+ $INVOCATION
}
test_fail()
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PULL 05/10] docs/devel: add a maintainers section to development process
2022-11-15 13:34 [PULL for 7.2 00/10] testing and doc updates Alex Bennée
` (3 preceding siblings ...)
2022-11-15 13:34 ` [PULL 04/10] tests/docker: allow user to override check target Alex Bennée
@ 2022-11-15 13:34 ` Alex Bennée
2022-11-15 13:34 ` [PULL 06/10] docs/devel: make language a little less code centric Alex Bennée
` (5 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Alex Bennée @ 2022-11-15 13:34 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, Alex Bennée, Paolo Bonzini
We don't currently have a clear place in the documentation to describe
the roles and responsibilities of a maintainer. Lets create one so we
can. I've moved a few small bits out of other files to try and keep
everything in one place.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20221111145529.4020801-6-alex.bennee@linaro.org>
diff --git a/docs/devel/code-of-conduct.rst b/docs/devel/code-of-conduct.rst
index 195444d1b4..f734ed0317 100644
--- a/docs/devel/code-of-conduct.rst
+++ b/docs/devel/code-of-conduct.rst
@@ -1,3 +1,5 @@
+.. _code_of_conduct:
+
Code of Conduct
===============
diff --git a/docs/devel/index-process.rst b/docs/devel/index-process.rst
index d0d7a200fd..d50dd74c3e 100644
--- a/docs/devel/index-process.rst
+++ b/docs/devel/index-process.rst
@@ -8,6 +8,7 @@ Notes about how to interact with the community and how and where to submit patch
code-of-conduct
conflict-resolution
+ maintainers
style
submitting-a-patch
trivial-patches
diff --git a/docs/devel/maintainers.rst b/docs/devel/maintainers.rst
new file mode 100644
index 0000000000..05110909d1
--- /dev/null
+++ b/docs/devel/maintainers.rst
@@ -0,0 +1,106 @@
+.. _maintainers:
+
+The Role of Maintainers
+=======================
+
+Maintainers are a critical part of the project's contributor ecosystem.
+They come from a wide range of backgrounds from unpaid hobbyists
+working in their spare time to employees who work on the project as
+part of their job. Maintainer activities include:
+
+ - reviewing patches and suggesting changes
+ - collecting patches and preparing pull requests
+ - tending to the long term health of their area
+ - participating in other project activities
+
+They are also human and subject to the same pressures as everyone else
+including overload and burnout. Like everyone else they are subject
+to project's :ref:`code_of_conduct` and should also be exemplars of
+excellent community collaborators.
+
+The MAINTAINERS file
+--------------------
+
+The `MAINTAINERS
+<https://gitlab.com/qemu-project/qemu/-/blob/master/MAINTAINERS>`__
+file contains the canonical list of who is a maintainer. The file
+is machine readable so an appropriately configured git (see
+:ref:`cc_the_relevant_maintainer`) can automatically Cc them on
+patches that touch their area of code.
+
+The file also describes the status of the area of code to give an idea
+of how actively that section is maintained.
+
+.. list-table:: Meaning of support status in MAINTAINERS
+ :widths: 25 75
+ :header-rows: 1
+
+ * - Status
+ - Meaning
+ * - Supported
+ - Someone is actually paid to look after this.
+ * - Maintained
+ - Someone actually looks after it.
+ * - Odd Fixes
+ - It has a maintainer but they don't have time to do
+ much other than throw the odd patch in.
+ * - Orphan
+ - No current maintainer.
+ * - Obsolete
+ - Old obsolete code, should use something else.
+
+Please bear in mind that even if someone is paid to support something
+it does not mean they are paid to support you. This is open source and
+the code comes with no warranty and the project makes no guarantees
+about dealing with bugs or features requests.
+
+
+
+Becoming a reviewer
+-------------------
+
+Most maintainers start by becoming subsystem reviewers. While anyone
+is welcome to review code on the mailing list getting added to the
+MAINTAINERS file with a line like::
+
+ R: Random Hacker <rhacker@example.com>
+
+will ensure that patches touching a given subsystem will automatically
+be CC'd to you.
+
+Becoming a maintainer
+---------------------
+
+Maintainers are volunteers who put themselves forward or have been
+asked by others to keep an eye on an area of code. They have generally
+demonstrated to the community, usually via contributions and code
+reviews, that they have a good understanding of the subsystem. They
+are also trusted to make a positive contribution to the project and
+work well with the other contributors.
+
+The process is simple - simply send a patch to the list that updates
+the ``MAINTAINERS`` file. Sometimes this is done as part of a larger
+series when a new sub-system is being added to the code base. This can
+also be done by a retiring maintainer who nominates their replacement
+after discussion with other contributors.
+
+Once the patch is reviewed and merged the only other step is to make
+sure your GPG key is signed.
+
+.. _maintainer_keys:
+
+Maintainer GPG Keys
+~~~~~~~~~~~~~~~~~~~
+
+GPG is used to sign pull requests so they can be identified as really
+coming from the maintainer. If your key is not already signed by
+members of the QEMU community, you should make arrangements to attend
+a `KeySigningParty <https://wiki.qemu.org/KeySigningParty>`__ (for
+example at KVM Forum) or make alternative arrangements to have your
+key signed by an attendee. Key signing requires meeting another
+community member **in person** [#]_ so please make appropriate
+arrangements.
+
+.. [#] In recent pandemic times we have had to exercise some
+ flexibility here. Maintainers still need to sign their pull
+ requests though.
diff --git a/docs/devel/submitting-a-pull-request.rst b/docs/devel/submitting-a-pull-request.rst
index c9d1e8afd9..a4cd7ebbb6 100644
--- a/docs/devel/submitting-a-pull-request.rst
+++ b/docs/devel/submitting-a-pull-request.rst
@@ -53,14 +53,10 @@ series) and that "make check" passes before sending out the pull
request. As a submaintainer you're one of QEMU's lines of defense
against bad code, so double check the details.
-**All pull requests must be signed**. If your key is not already signed
-by members of the QEMU community, you should make arrangements to attend
-a `KeySigningParty <https://wiki.qemu.org/KeySigningParty>`__ (for
-example at KVM Forum) or make alternative arrangements to have your key
-signed by an attendee. Key signing requires meeting another community
-member \*in person\* so please make appropriate arrangements. By
-"signed" here we mean that the pullreq email should quote a tag which is
-a GPG-signed tag (as created with 'gpg tag -s ...').
+**All pull requests must be signed**. By "signed" here we mean that
+the pullreq email should quote a tag which is a GPG-signed tag (as
+created with 'gpg tag -s ...'). See :ref:`maintainer_keys` for
+details.
**Pull requests not for master should say "not for master" and have
"PULL SUBSYSTEM whatever" in the subject tag**. If your pull request is
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PULL 06/10] docs/devel: make language a little less code centric
2022-11-15 13:34 [PULL for 7.2 00/10] testing and doc updates Alex Bennée
` (4 preceding siblings ...)
2022-11-15 13:34 ` [PULL 05/10] docs/devel: add a maintainers section to development process Alex Bennée
@ 2022-11-15 13:34 ` Alex Bennée
2022-11-15 13:34 ` [PULL 07/10] docs/devel: simplify the minimal checklist Alex Bennée
` (4 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Alex Bennée @ 2022-11-15 13:34 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, Alex Bennée, Paolo Bonzini
We welcome all sorts of patches.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20221111145529.4020801-7-alex.bennee@linaro.org>
diff --git a/docs/devel/submitting-a-patch.rst b/docs/devel/submitting-a-patch.rst
index fec33ce148..9c7c4331f3 100644
--- a/docs/devel/submitting-a-patch.rst
+++ b/docs/devel/submitting-a-patch.rst
@@ -3,11 +3,11 @@
Submitting a Patch
==================
-QEMU welcomes contributions of code (either fixing bugs or adding new
-functionality). However, we get a lot of patches, and so we have some
-guidelines about submitting patches. If you follow these, you'll help
-make our task of code review easier and your patch is likely to be
-committed faster.
+QEMU welcomes contributions to fix bugs, add functionality or improve
+the documentation. However, we get a lot of patches, and so we have
+some guidelines about submitting them. If you follow these, you'll
+help make our task of code review easier and your patch is likely to
+be committed faster.
This page seems very long, so if you are only trying to post a quick
one-shot fix, the bare minimum we ask is that:
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PULL 07/10] docs/devel: simplify the minimal checklist
2022-11-15 13:34 [PULL for 7.2 00/10] testing and doc updates Alex Bennée
` (5 preceding siblings ...)
2022-11-15 13:34 ` [PULL 06/10] docs/devel: make language a little less code centric Alex Bennée
@ 2022-11-15 13:34 ` Alex Bennée
2022-11-15 13:34 ` [PULL 08/10] docs/devel: try and improve the language around patch review Alex Bennée
` (3 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Alex Bennée @ 2022-11-15 13:34 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, Alex Bennée, Paolo Bonzini
The bullet points are quite long and contain process tips. Move those
bits of the bullet to the relevant sections and link to them. Use a
table for nicer formatting of the checklist.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20221111145529.4020801-8-alex.bennee@linaro.org>
diff --git a/docs/devel/submitting-a-patch.rst b/docs/devel/submitting-a-patch.rst
index 9c7c4331f3..1f2bde0625 100644
--- a/docs/devel/submitting-a-patch.rst
+++ b/docs/devel/submitting-a-patch.rst
@@ -12,25 +12,18 @@ be committed faster.
This page seems very long, so if you are only trying to post a quick
one-shot fix, the bare minimum we ask is that:
-- You **must** provide a Signed-off-by: line (this is a hard
- requirement because it's how you say "I'm legally okay to contribute
- this and happy for it to go into QEMU", modeled after the `Linux kernel
- <http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/SubmittingPatches?id=f6f94e2ab1b33f0082ac22d71f66385a60d8157f#n297>`__
- policy.) ``git commit -s`` or ``git format-patch -s`` will add one.
-- All contributions to QEMU must be **sent as patches** to the
- qemu-devel `mailing list <https://wiki.qemu.org/Contribute/MailingLists>`__.
- Patch contributions should not be posted on the bug tracker, posted on
- forums, or externally hosted and linked to. (We have other mailing lists too,
- but all patches must go to qemu-devel, possibly with a Cc: to another
- list.) ``git send-email`` (`step-by-step setup
- guide <https://git-send-email.io/>`__ and `hints and
- tips <https://elixir.bootlin.com/linux/latest/source/Documentation/process/email-clients.rst>`__)
- works best for delivering the patch without mangling it, but
- attachments can be used as a last resort on a first-time submission.
-- You must read replies to your message, and be willing to act on them.
- Note, however, that maintainers are often willing to manually fix up
- first-time contributions, since there is a learning curve involved in
- making an ideal patch submission.
+.. list-table:: Minimal Checklist for Patches
+ :widths: 35 65
+ :header-rows: 1
+
+ * - Check
+ - Reason
+ * - Patches contain Signed-off-by: Real Name <author@email>
+ - States you are legally able to contribute the code. See :ref:`patch_emails_must_include_a_signed_off_by_line`
+ * - Sent as patch emails to ``qemu-devel@nongnu.org``
+ - The project uses an email list based workflow. See :ref:`submitting_your_patches`
+ * - Be prepared to respond to review comments
+ - Code that doesn't pass review will not get merged. See :ref:`participating_in_code_review`
You do not have to subscribe to post (list policy is to reply-to-all to
preserve CCs and keep non-subscribers in the loop on the threads they
@@ -229,6 +222,19 @@ bisection doesn't land on a known-broken state.
Submitting your Patches
-----------------------
+The QEMU project uses a public email based workflow for reviewing and
+merging patches. As a result all contributions to QEMU must be **sent
+as patches** to the qemu-devel `mailing list
+<https://wiki.qemu.org/Contribute/MailingLists>`__. Patch
+contributions should not be posted on the bug tracker, posted on
+forums, or externally hosted and linked to. (We have other mailing
+lists too, but all patches must go to qemu-devel, possibly with a Cc:
+to another list.) ``git send-email`` (`step-by-step setup guide
+<https://git-send-email.io/>`__ and `hints and tips
+<https://elixir.bootlin.com/linux/latest/source/Documentation/process/email-clients.rst>`__)
+works best for delivering the patch without mangling it, but
+attachments can be used as a last resort on a first-time submission.
+
.. _if_you_cannot_send_patch_emails:
If you cannot send patch emails
@@ -314,10 +320,12 @@ git repository to fetch the original commit.
Patch emails must include a ``Signed-off-by:`` line
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-For more information see `SubmittingPatches 1.12
-<http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/SubmittingPatches?id=f6f94e2ab1b33f0082ac22d71f66385a60d8157f#n297>`__.
-This is vital or we will not be able to apply your patch! Please use
-your real name to sign a patch (not an alias or acronym).
+Your patches **must** include a Signed-off-by: line. This is a hard
+requirement because it's how you say "I'm legally okay to contribute
+this and happy for it to go into QEMU". The process is modelled after
+the `Linux kernel
+<http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/SubmittingPatches?id=f6f94e2ab1b33f0082ac22d71f66385a60d8157f#n297>`__
+policy.
If you wrote the patch, make sure your "From:" and "Signed-off-by:"
lines use the same spelling. It's okay if you subscribe or contribute to
@@ -327,6 +335,11 @@ include a "From:" line in the body of the email (different from your
envelope From:) that will give credit to the correct author; but again,
that author's Signed-off-by: line is mandatory, with the same spelling.
+There are various tooling options for automatically adding these tags
+include using ``git commit -s`` or ``git format-patch -s``. For more
+information see `SubmittingPatches 1.12
+<http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/SubmittingPatches?id=f6f94e2ab1b33f0082ac22d71f66385a60d8157f#n297>`__.
+
.. _include_a_meaningful_cover_letter:
Include a meaningful cover letter
@@ -397,9 +410,19 @@ Participating in Code Review
----------------------------
All patches submitted to the QEMU project go through a code review
-process before they are accepted. Some areas of code that are well
-maintained may review patches quickly, lesser-loved areas of code may
-have a longer delay.
+process before they are accepted. This will often mean a series will
+go through a number of iterations before being picked up by
+:ref:`maintainers<maintainers>`. You therefore should be prepared to
+read replies to your messages and be willing to act on them.
+
+Maintainers are often willing to manually fix up first-time
+contributions, since there is a learning curve involved in making an
+ideal patch submission. However for the best results you should
+proactively respond to suggestions with changes or justifications for
+your current approach.
+
+Some areas of code that are well maintained may review patches
+quickly, lesser-loved areas of code may have a longer delay.
.. _stay_around_to_fix_problems_raised_in_code_review:
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PULL 08/10] docs/devel: try and improve the language around patch review
2022-11-15 13:34 [PULL for 7.2 00/10] testing and doc updates Alex Bennée
` (6 preceding siblings ...)
2022-11-15 13:34 ` [PULL 07/10] docs/devel: simplify the minimal checklist Alex Bennée
@ 2022-11-15 13:34 ` Alex Bennée
2022-11-15 13:34 ` [PULL 09/10] tests/avocado: Raise timeout for boot_linux.py:BootLinuxPPC64.test_pseries_tcg Alex Bennée
` (2 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: Alex Bennée @ 2022-11-15 13:34 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, Alex Bennée, Markus Armbruster, Paolo Bonzini
It is important that contributors take the review process seriously
and we collaborate in a respectful way while avoiding personal
attacks. Try and make this clear in the language.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20221111145529.4020801-9-alex.bennee@linaro.org>
diff --git a/docs/devel/submitting-a-patch.rst b/docs/devel/submitting-a-patch.rst
index 1f2bde0625..80e8693bb6 100644
--- a/docs/devel/submitting-a-patch.rst
+++ b/docs/devel/submitting-a-patch.rst
@@ -434,14 +434,20 @@ developers will identify bugs, or suggest a cleaner approach, or even
just point out code style issues or commit message typos. You'll need to
respond to these, and then send a second version of your patches with
the issues fixed. This takes a little time and effort on your part, but
-if you don't do it then your changes will never get into QEMU. It's also
-just polite -- it is quite disheartening for a developer to spend time
-reviewing your code and suggesting improvements, only to find that
-you're not going to do anything further and it was all wasted effort.
+if you don't do it then your changes will never get into QEMU.
+
+Remember that a maintainer is under no obligation to take your
+patches. If someone has spent the time reviewing your code and
+suggesting improvements and you simply re-post without either
+addressing the comment directly or providing additional justification
+for the change then it becomes wasted effort. You cannot demand others
+merge and then fix up your code after the fact.
When replying to comments on your patches **reply to all and not just
the sender** -- keeping discussion on the mailing list means everybody
-can follow it.
+can follow it. Remember the spirit of the :ref:`code_of_conduct` and
+keep discussions respectful and collaborative and avoid making
+personal comments.
.. _pay_attention_to_review_comments:
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PULL 09/10] tests/avocado: Raise timeout for boot_linux.py:BootLinuxPPC64.test_pseries_tcg
2022-11-15 13:34 [PULL for 7.2 00/10] testing and doc updates Alex Bennée
` (7 preceding siblings ...)
2022-11-15 13:34 ` [PULL 08/10] docs/devel: try and improve the language around patch review Alex Bennée
@ 2022-11-15 13:34 ` Alex Bennée
2022-11-15 13:34 ` [PULL 10/10] gitlab: integrate coverage report Alex Bennée
2022-11-15 23:53 ` [PULL for 7.2 00/10] testing and doc updates Stefan Hajnoczi
10 siblings, 0 replies; 14+ messages in thread
From: Alex Bennée @ 2022-11-15 13:34 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Peter Maydell, Alex Bennée, Cleber Rosa,
Philippe Mathieu-Daudé, Wainer dos Santos Moschetta,
Beraldo Leal
From: Peter Maydell <peter.maydell@linaro.org>
On my machine, a debug build of QEMU takes about 260 seconds to
complete this test, so with the current timeout value of 180 seconds
it always times out. Double the timeout value to 360 so the test
definitely has enough time to complete.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20221110142901.3832318-1-peter.maydell@linaro.org>
Message-Id: <20221111145529.4020801-11-alex.bennee@linaro.org>
diff --git a/tests/avocado/boot_linux.py b/tests/avocado/boot_linux.py
index 571d33882a..2be4be395d 100644
--- a/tests/avocado/boot_linux.py
+++ b/tests/avocado/boot_linux.py
@@ -116,7 +116,7 @@ class BootLinuxPPC64(LinuxTest):
:avocado: tags=arch:ppc64
"""
- timeout = 180
+ timeout = 360
def test_pseries_tcg(self):
"""
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PULL 10/10] gitlab: integrate coverage report
2022-11-15 13:34 [PULL for 7.2 00/10] testing and doc updates Alex Bennée
` (8 preceding siblings ...)
2022-11-15 13:34 ` [PULL 09/10] tests/avocado: Raise timeout for boot_linux.py:BootLinuxPPC64.test_pseries_tcg Alex Bennée
@ 2022-11-15 13:34 ` Alex Bennée
2022-11-15 23:53 ` [PULL for 7.2 00/10] testing and doc updates Stefan Hajnoczi
10 siblings, 0 replies; 14+ messages in thread
From: Alex Bennée @ 2022-11-15 13:34 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Alex Bennée, Philippe Mathieu-Daudé,
Thomas Huth, Wainer dos Santos Moschetta, Beraldo Leal
This should hopefully give is nice coverage information about what our
tests (or at least the subset we are running) have hit. Ideally we
would want a way to trigger coverage on tests likely to be affected by
the current commit.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20221111145529.4020801-12-alex.bennee@linaro.org>
diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml
index 7173749c52..d21b4a1fd4 100644
--- a/.gitlab-ci.d/buildtest.yml
+++ b/.gitlab-ci.d/buildtest.yml
@@ -494,7 +494,17 @@ check-gprof-gcov:
IMAGE: ubuntu2004
MAKE_CHECK_ARGS: check
after_script:
- - ${CI_PROJECT_DIR}/scripts/ci/coverage-summary.sh
+ - cd build
+ - gcovr --xml-pretty --exclude-unreachable-branches --print-summary
+ -o coverage.xml --root ${CI_PROJECT_DIR} . *.p
+ coverage: /^\s*lines:\s*\d+.\d+\%/
+ artifacts:
+ name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
+ expire_in: 2 days
+ reports:
+ coverage_report:
+ coverage_format: cobertura
+ path: build/coverage.xml
build-oss-fuzz:
extends: .native_build_job_template
--
2.34.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PULL for 7.2 00/10] testing and doc updates
2022-11-15 13:34 [PULL for 7.2 00/10] testing and doc updates Alex Bennée
` (9 preceding siblings ...)
2022-11-15 13:34 ` [PULL 10/10] gitlab: integrate coverage report Alex Bennée
@ 2022-11-15 23:53 ` Stefan Hajnoczi
2022-11-16 18:20 ` Failure analysis (was Re: [PULL for 7.2 00/10] testing and doc updates) Alex Bennée
10 siblings, 1 reply; 14+ messages in thread
From: Stefan Hajnoczi @ 2022-11-15 23:53 UTC (permalink / raw)
To: Alex Bennée; +Cc: qemu-devel, stefanha
This pull request causes the following CI failure:
https://gitlab.com/qemu-project/qemu/-/jobs/3328449477
I haven't figured out the root cause of the failure. Maybe the pull
request just exposes a latent failure. Please take a look and we can
try again for -rc2.
Thanks,
Stefan
^ permalink raw reply [flat|nested] 14+ messages in thread* Failure analysis (was Re: [PULL for 7.2 00/10] testing and doc updates)
2022-11-15 23:53 ` [PULL for 7.2 00/10] testing and doc updates Stefan Hajnoczi
@ 2022-11-16 18:20 ` Alex Bennée
2022-11-16 19:26 ` Mark Cave-Ayland
0 siblings, 1 reply; 14+ messages in thread
From: Alex Bennée @ 2022-11-16 18:20 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: qemu-devel, stefanha, Paolo Bonzini, Mark Cave-Ayland,
Huacai Chen, Philippe Mathieu-Daudé, John Snow
Stefan Hajnoczi <stefanha@gmail.com> writes:
> This pull request causes the following CI failure:
>
> https://gitlab.com/qemu-project/qemu/-/jobs/3328449477
>
> I haven't figured out the root cause of the failure. Maybe the pull
> request just exposes a latent failure. Please take a look and we can
> try again for -rc2.
OK after a lot of digging I've come to the following conclusion:
* the Fuloong 2E machine never enables the FIFO on the 16550 (s->fcr & UART_FCR_FE)
* as a result if qemu_chr_fe_write(&s->chr, &s->tsr, 1) fails with -EAGAIN
- a serial_watch_cb is queued
- s->tsr_retry++
* additional serial_ioport_write's overwrite s->thr
* the console output gets corrupted
You can see the effect by comparing the serial write and xmit values:
➜ grep serial_write alex.log | cut -d ' ' -f 6 | xxd -r -p | head -n 10
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.16.0-6-loongson-2e (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 Debian 3.16.56-1+deb8u1 (2018-05-08)
[ 0.000000] memsize=256, highmemsize=0
[ 0.000000] CpuClock = 533080000
[ 0.000000] bootconsole [early0] enabled
[ 0.000000] CPU0 revision is: 00006302 (ICT Loongson-2)
[ 0.000000] FPU revision is: 00000501
[ 0.000000] Checking for the multiply/shift bug... no.
🕙18:27:17 alex@zen:qemu.git/builds/all on pr/141122-misc-for-7.2-1 [$!?⇕]
➜ grep serial_xmit alex.log | cut -d ' ' -f 2 | xxd -r -p | head -n 10
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.16.0-6-loongson-2e (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 Debian 33 0.000000] bootconsole [early0] enabled
[ 0.000000] CPU0 revision is: 00006302 (ICT Loongson-2)
[ 0.000000] FPU revision is: 00000501
[ 0.000000] Checking for the multiply/shift bug... no.
[ 0.000000] Checking for the daddiu bug... no.
[ 0.000000] Determined physical RAM map:
[ 0.000000] memory: 000
As a result the check for the pattern fails:
console_pattern = 'Kernel command line: %s' % kernel_command_line
self.wait_for_console_pattern(console_pattern)
resulting in a timeout and test fail.
In effect the configuration makes the output dependent on how fast the
avocado test can drain the socket as there is no buffering elsewhere in
the system. The changes in:
Subject: [PULL 02/10] tests/avocado: improve behaviour waiting for login prompts
makes this failure more likely to happen - I think because the .peek() and
.readline() behaviour have different buffering strategies. Options
include:
- enable the 16550 FIFO for the Loognson kernel (command line option?)
- increase the buffering of the python socket.socket() code
I can get it to pass by shuffling the time.sleep() and a few other
checks around but that seems flaky at best.
--
Alex Bennée
^ permalink raw reply [flat|nested] 14+ messages in thread* Re: Failure analysis (was Re: [PULL for 7.2 00/10] testing and doc updates)
2022-11-16 18:20 ` Failure analysis (was Re: [PULL for 7.2 00/10] testing and doc updates) Alex Bennée
@ 2022-11-16 19:26 ` Mark Cave-Ayland
0 siblings, 0 replies; 14+ messages in thread
From: Mark Cave-Ayland @ 2022-11-16 19:26 UTC (permalink / raw)
To: Alex Bennée, Stefan Hajnoczi
Cc: qemu-devel, stefanha, Paolo Bonzini, Huacai Chen,
Philippe Mathieu-Daudé, John Snow
On 16/11/2022 18:20, Alex Bennée wrote:
> Stefan Hajnoczi <stefanha@gmail.com> writes:
>
>> This pull request causes the following CI failure:
>>
>> https://gitlab.com/qemu-project/qemu/-/jobs/3328449477
>>
>> I haven't figured out the root cause of the failure. Maybe the pull
>> request just exposes a latent failure. Please take a look and we can
>> try again for -rc2.
>
> OK after a lot of digging I've come to the following conclusion:
>
> * the Fuloong 2E machine never enables the FIFO on the 16550 (s->fcr & UART_FCR_FE)
> * as a result if qemu_chr_fe_write(&s->chr, &s->tsr, 1) fails with -EAGAIN
> - a serial_watch_cb is queued
> - s->tsr_retry++
> * additional serial_ioport_write's overwrite s->thr
> * the console output gets corrupted
>
> You can see the effect by comparing the serial write and xmit values:
>
> ➜ grep serial_write alex.log | cut -d ' ' -f 6 | xxd -r -p | head -n 10
> [ 0.000000] Initializing cgroup subsys cpuset
> [ 0.000000] Initializing cgroup subsys cpu
> [ 0.000000] Initializing cgroup subsys cpuacct
> [ 0.000000] Linux version 3.16.0-6-loongson-2e (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 Debian 3.16.56-1+deb8u1 (2018-05-08)
> [ 0.000000] memsize=256, highmemsize=0
> [ 0.000000] CpuClock = 533080000
> [ 0.000000] bootconsole [early0] enabled
> [ 0.000000] CPU0 revision is: 00006302 (ICT Loongson-2)
> [ 0.000000] FPU revision is: 00000501
> [ 0.000000] Checking for the multiply/shift bug... no.
> 🕙18:27:17 alex@zen:qemu.git/builds/all on pr/141122-misc-for-7.2-1 [$!?⇕]
> ➜ grep serial_xmit alex.log | cut -d ' ' -f 2 | xxd -r -p | head -n 10
> [ 0.000000] Initializing cgroup subsys cpuset
> [ 0.000000] Initializing cgroup subsys cpu
> [ 0.000000] Initializing cgroup subsys cpuacct
> [ 0.000000] Linux version 3.16.0-6-loongson-2e (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 Debian 33 0.000000] bootconsole [early0] enabled
> [ 0.000000] CPU0 revision is: 00006302 (ICT Loongson-2)
> [ 0.000000] FPU revision is: 00000501
> [ 0.000000] Checking for the multiply/shift bug... no.
> [ 0.000000] Checking for the daddiu bug... no.
> [ 0.000000] Determined physical RAM map:
> [ 0.000000] memory: 000
>
> As a result the check for the pattern fails:
>
> console_pattern = 'Kernel command line: %s' % kernel_command_line
> self.wait_for_console_pattern(console_pattern)
>
> resulting in a timeout and test fail.
>
> In effect the configuration makes the output dependent on how fast the
> avocado test can drain the socket as there is no buffering elsewhere in
> the system. The changes in:
>
> Subject: [PULL 02/10] tests/avocado: improve behaviour waiting for login prompts
>
> makes this failure more likely to happen - I think because the .peek() and
> .readline() behaviour have different buffering strategies. Options
> include:
>
> - enable the 16550 FIFO for the Loognson kernel (command line option?)
> - increase the buffering of the python socket.socket() code
>
> I can get it to pass by shuffling the time.sleep() and a few other
> checks around but that seems flaky at best.
Nice work! This is the well-known problem whereby the kernel sometimes expects the
BIOS to have pre-configured the serial ports, which of course never happens when
booting directly with -kernel.
Given that the fuloong2e machine already has a mini "trampoline" bootloader, would it
be possible to tweak write_bootloader() at
https://gitlab.com/qemu-project/qemu/-/blob/master/hw/mips/fuloong2e.c#L166 to set
UART_FCR_FE on the available UARTs before jumping into the kernel?
ATB,
Mark.
^ permalink raw reply [flat|nested] 14+ messages in thread