[LTP] [PATCH 4/7] KVM: Add async communication helper functions

Petr Vorel pvorel@suse.cz
Thu May 18 11:55:03 CEST 2023


> On 18. 05. 23 0:47, Petr Vorel wrote:
> > Hi Martin,

> > Acked-by: Petr Vorel <pvorel@suse.cz>

> > >   /*
> > >    * Result value indicating end of test. If the test program exits using
> > >    * the HLT instruction with any valid result value other than KVM_TEXIT or
> > > diff --git a/testcases/kernel/kvm/include/kvm_guest.h b/testcases/kernel/kvm/include/kvm_guest.h
> > > index ec13c5845..96f246155 100644
> > > --- a/testcases/kernel/kvm/include/kvm_guest.h
> > > +++ b/testcases/kernel/kvm/include/kvm_guest.h
> > > @@ -64,6 +64,20 @@ void tst_brk_(const char *file, const int lineno, int result,
> > >   	const char *message) __attribute__((noreturn));
> > >   #define tst_brk(result, msg) tst_brk_(__FILE__, __LINE__, (result), (msg))

> > BTW (unrelated to this commit, as it was not added to this commit) tst_brk()
> > definition from include/tst_test.h contains also
> > TST_BRK_SUPPORTS_ONLY_TCONF_TBROK().

> > And tst_res() has also TST_RES_SUPPORTS_TCONF_TFAIL_TINFO_TPASS_TWARN().

> The support macros are not needed, the controller program always handles
> TBROK using tst_brk() even if the guest incorrectly called tst_res(TBROK).

ack

> > We could rename tst_res_flags.h to tst_res.h and add there tst_brk() and
> > tst_res() definitions and tst_brk_() and tst_res_() signatures.

> I don't think that's a good idea. The guest library currently does not
> support variadic parameters for tst_res() and tst_brk() so the function
> signatures are slightly different.

Ah, right.

> > > diff --git a/testcases/kernel/kvm/lib_guest.c b/testcases/kernel/kvm/lib_guest.c
> > > index d3b2ac3d5..f3e21d3d6 100644
> > > --- a/testcases/kernel/kvm/lib_guest.c
> > > +++ b/testcases/kernel/kvm/lib_guest.c
> > > @@ -155,6 +155,22 @@ void tst_brk_(const char *file, const int lineno, int result,
> > >   	kvm_exit();
> > >   }

> > > +void tst_signal_host(void *data)
> > > +{
> > > +	test_result->file_addr = (uintptr_t)data;
> > > +	test_result->result = KVM_TSYNC;
> > > +}
> > > +
> > > +void tst_wait_host(void *data)
> > > +{
> > > +	volatile int32_t *vres = &test_result->result;
> > > +
> > > +	tst_signal_host(data);
> > > +
> > > +	while (*vres != KVM_TNONE)
> > > +		;
> > Interesting there is no any usleep().

> usleep() does not exist in the guest library. And even if it did, yielding
> the CPU to the host would prevent kvm_svm03 from ever reproducing the CLGI
> bug.

Ah, I thought I'm missing something obvious, thanks for an explanation.

Kind regards,
Petr


More information about the ltp mailing list