Re: [kvm-unit-tests RFC PATCH 1/5] lib: arm: Print test exit status on exit if chr-testdev is not available

Andrew Jones
2021-07-12T17:07:51Z

On Mon, Jul 12, 2021 at 05:51:55PM +0100, Andre Przywara wrote:
> On Fri, 2 Jul 2021 17:31:18 +0100
> Alexandru Elisei <alexandru.elisei@arm.com> wrote:
>
> Hi,
>
> > The arm64 tests can be run under kvmtool, which doesn't emulate a
> > chr-testdev device. In preparation for adding run script support for
> > kvmtool, print the test exit status so the scripts can pick it up and
> > correctly mark the test as pass or fail.
> >
> > Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
> > ---
> > lib/chr-testdev.h | 1 +
> > lib/arm/io.c | 10 +++++++++-
> > lib/chr-testdev.c | 5 +++++
> > 3 files changed, 15 insertions(+), 1 deletion(-)
> >
> > diff --git a/lib/chr-testdev.h b/lib/chr-testdev.h
> > index ffd9a851aa9b..09b4b424670e 100644
> > --- a/lib/chr-testdev.h
> > +++ b/lib/chr-testdev.h
> > @@ -11,4 +11,5 @@
> > */
> > extern void chr_testdev_init(void);
> > extern void chr_testdev_exit(int code);
> > +extern bool chr_testdev_available(void);
> > #endif
> > diff --git a/lib/arm/io.c b/lib/arm/io.c
> > index 343e10822263..9e62b571a91b 100644
> > --- a/lib/arm/io.c
> > +++ b/lib/arm/io.c
> > @@ -125,7 +125,15 @@ extern void halt(int code);
> >
> > void exit(int code)
> > {
> > - chr_testdev_exit(code);
> > + if (chr_testdev_available()) {
> > + chr_testdev_exit(code);
> > + } else {
> > + /*
> > + * Print the test return code in the format used by chr-testdev
> > + * so the runner script can parse it.
> > + */
> > + printf("\nEXIT: STATUS=%d\n", ((code) << 1) | 1);
>
> It's more me being clueless here rather than a problem, but where does
> this "EXIT: STATUS" line come from? In lib/chr-testdev.c I see "%dq",
> so it this coming from QEMU (but I couldn't find it in there)?
>
> But anyways the patch looks good and matches what PPC and s390 do.

I invented the 'EXIT: STATUS' format for PPC, which didn't/doesn't have an
exit code testdev. Now that it has also been adopted by s390 I guess we've
got a kvm-unit-tests standard to follow for arm :-)

Thanks,
drew

>
> Cheers,
> Andre
>
>
> > + }
> > psci_system_off();
> > halt(code);
> > __builtin_unreachable();
> > diff --git a/lib/chr-testdev.c b/lib/chr-testdev.c
> > index b3c641a833fe..301e73a6c064 100644
> > --- a/lib/chr-testdev.c
> > +++ b/lib/chr-testdev.c
> > @@ -68,3 +68,8 @@ void chr_testdev_init(void)
> > in_vq = vqs[0];
> > out_vq = vqs[1];
> > }
> > +
> > +bool chr_testdev_available(void)
> > +{
> > + return vcon != NULL;
> > +}
>