From: Miles Glenn <milesg@linux.ibm.com>
To: qemu-devel@nongnu.org
Cc: qemu-ppc@nongnu.org, clg@redhat.com, npiggin@gmail.com,
harshpb@linux.ibm.com, thuth@redhat.com, rathc@linux.ibm.com,
richard.henderson@linaro.org
Subject: Re: [PATCH v3 9/9] tests/functional: Add test for IBM PPE42 instructions
Date: Mon, 08 Sep 2025 16:17:19 -0500 [thread overview]
Message-ID: <cc33c790bbc44f6145dcc3c41c8c2ddd32ca30dd.camel@linux.ibm.com> (raw)
In-Reply-To: <20250908200028.115789-10-milesg@linux.ibm.com>
I noticed after sending this that it did not apply cleanly to the
latest master branch. Looks like the tests/functional directory
structure has been changed. Not sure how this situation is normally
handled. I assume I can just send out a v4 patch that is rebased on the
latest master branch once I get feeedback for v3.
-Glenn
On Mon, 2025-09-08 at 15:00 -0500, Glenn Miles wrote:
> Adds a functional test for the IBM PPE42 instructions which
> downloads a test image from a public github repo and then
> loads and executes the image.
> (see https://github.com/milesg-github/ppe42-tests for details)
>
> Test status is checked by periodically issuing 'info register'
> commands and checking the NIP value. If the NIP is 0xFFF80200
> then the test successfully executed to completion. If the
> machine stops before the test completes or if a 90 second
> timeout is reached, then the test is marked as having failed.
>
> This test does not test any PowerPC instructions as it is
> expected that these instructions are well covered in other
> tests. Only instructions that are unique to the IBM PPE42
> processor are tested.
>
> Signed-off-by: Glenn Miles <milesg@linux.ibm.com>
> Reviewed-by: Thomas Huth <thuth@redhat.com>
> ---
>
> No changes from v2 patch 4
>
> MAINTAINERS | 1 +
> tests/functional/meson.build | 1 +
> tests/functional/test_ppc_ppe42.py | 79 ++++++++++++++++++++++++++++++
> 3 files changed, 81 insertions(+)
> create mode 100644 tests/functional/test_ppc_ppe42.py
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 52fa303e0a..af412ad0ce 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1536,6 +1536,7 @@ M: Glenn Miles <milesg@linux.ibm.com>
> L: qemu-ppc@nongnu.org
> S: Odd Fixes
> F: hw/ppc/ppe42_machine.c
> +F: tests/functional/test_ppc_ppe42.py
>
> PReP
> M: Hervé Poussineau <hpoussin@reactos.org>
> diff --git a/tests/functional/meson.build b/tests/functional/meson.build
> index 311c6f1806..ddfef55bd2 100644
> --- a/tests/functional/meson.build
> +++ b/tests/functional/meson.build
> @@ -233,6 +233,7 @@ tests_ppc_system_quick = [
> ]
>
> tests_ppc_system_thorough = [
> + 'ppc_ppe42',
> 'ppc_40p',
> 'ppc_amiga',
> 'ppc_bamboo',
> diff --git a/tests/functional/test_ppc_ppe42.py b/tests/functional/test_ppc_ppe42.py
> new file mode 100644
> index 0000000000..26bbe11b2d
> --- /dev/null
> +++ b/tests/functional/test_ppc_ppe42.py
> @@ -0,0 +1,79 @@
> +#!/usr/bin/env python3
> +#
> +# Functional tests for the IBM PPE42 processor
> +#
> +# Copyright (c) 2025, IBM Corporation
> +#
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +
> +from qemu_test import QemuSystemTest, Asset
> +import asyncio
> +
> +class Ppe42Machine(QemuSystemTest):
> +
> + timeout = 90
> + poll_period = 1.0
> +
> + ASSET_PPE42_TEST_IMAGE = Asset(
> + ('https://github.com/milesg-github/ppe42-tests/raw/refs/heads/main/'
> + 'images/ppe42-test.out'),
> + '03c1ac0fb7f6c025102a02776a93b35101dae7c14b75e4eab36a337e39042ea8')
> +
> + def _test_completed(self):
> + self.log.info("Checking for test completion...")
> + try:
> + output = self.vm.cmd('human-monitor-command',
> + command_line='info registers')
> + except Exception as err:
> + self.log.debug(f"'info registers' cmd failed due to {err=},"
> + " {type(err)=}")
> + raise
> +
> + self.log.info(output)
> + if "NIP fff80200" in output:
> + self.log.info("<test completed>")
> + return True
> + else:
> + self.log.info("<test not completed>")
> + return False
> +
> + def _wait_pass_fail(self, timeout):
> + while not self._test_completed():
> + if timeout >= self.poll_period:
> + timeout = timeout - self.poll_period
> + self.log.info(f"Waiting {self.poll_period} seconds for test"
> + " to complete...")
> + e = None
> + try:
> + e = self.vm.event_wait('STOP', self.poll_period)
> +
> + except asyncio.TimeoutError:
> + self.log.info("Poll period ended.")
> + pass
> +
> + except Exception as err:
> + self.log.debug(f"event_wait() failed due to {err=},"
> + " {type(err)=}")
> + raise
> +
> + if e != None:
> + self.log.debug(f"Execution stopped: {e}")
> + self.log.debug("Exiting due to test failure")
> + self.fail("Failure detected!")
> + break
> + else:
> + self.fail("Timed out waiting for test completion.")
> +
> + def test_ppe42_instructions(self):
> + self.set_machine('ppe42_machine')
> + self.require_accelerator("tcg")
> + image_path = self.ASSET_PPE42_TEST_IMAGE.fetch()
> + self.vm.add_args('-nographic')
> + self.vm.add_args('-device', f'loader,file={image_path}')
> + self.vm.add_args('-device', 'loader,addr=0xfff80040,cpu-num=0')
> + self.vm.add_args('-action', 'panic=pause')
> + self.vm.launch()
> + self._wait_pass_fail(self.timeout)
> +
> +if __name__ == '__main__':
> + QemuSystemTest.main()
prev parent reply other threads:[~2025-09-08 21:18 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-08 20:00 [PATCH v3 0/9] Add IBM PPE42 CPU support Glenn Miles
2025-09-08 20:00 ` [PATCH v3 1/9] target/ppc: IBM PPE42 general regs and flags Glenn Miles
2025-09-08 20:00 ` [PATCH v3 2/9] target/ppc: Add IBM PPE42 family of processors Glenn Miles
2025-09-08 20:00 ` [PATCH v3 3/9] target/ppc: IBM PPE42 exception flags and regs Glenn Miles
2025-09-08 20:00 ` [PATCH v3 4/9] target/ppc: Add IBM PPE42 exception model Glenn Miles
2025-09-08 20:00 ` [PATCH v3 5/9] target/ppc: Support for IBM PPE42 MMU Glenn Miles
2025-09-08 20:00 ` [PATCH v3 6/9] target/ppc: Add IBM PPE42 special instructions Glenn Miles
2025-09-12 10:50 ` Chinmay Rath
2025-09-12 15:59 ` Miles Glenn
2025-09-08 20:00 ` [PATCH v3 7/9] hw/ppc: Support for an IBM PPE42 CPU decrementer Glenn Miles
2025-09-08 20:00 ` [PATCH v3 8/9] hw/ppc: Add a test machine for the IBM PPE42 CPU Glenn Miles
2025-09-10 7:10 ` Cédric Le Goater
2025-09-10 14:21 ` Miles Glenn
2025-09-08 20:00 ` [PATCH v3 9/9] tests/functional: Add test for IBM PPE42 instructions Glenn Miles
2025-09-08 21:17 ` Miles Glenn [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cc33c790bbc44f6145dcc3c41c8c2ddd32ca30dd.camel@linux.ibm.com \
--to=milesg@linux.ibm.com \
--cc=clg@redhat.com \
--cc=harshpb@linux.ibm.com \
--cc=npiggin@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=rathc@linux.ibm.com \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.