diff mbox series

configure: Check for KVM linker script support

Message ID 20220610131442.5032-1-mdoucha@suse.cz
State Superseded
Headers show
Series configure: Check for KVM linker script support | expand

Commit Message

Martin Doucha June 10, 2022, 1:14 p.m. UTC
Some toolchains don't fully support the KVM linker scripts. Disable KVM tests
if linker check fails in configure script.

Signed-off-by: Martin Doucha <mdoucha@suse.cz>
---
 configure.ac              | 14 ++++++++++++++
 include/mk/features.mk.in |  3 +++
 testcases/kernel/Makefile |  5 ++++-
 3 files changed, 21 insertions(+), 1 deletion(-)

Comments

Cyril Hrubis June 10, 2022, 1:33 p.m. UTC | #1
Hi!
> Some toolchains don't fully support the KVM linker scripts. Disable KVM tests
> if linker check fails in configure script.
> 
> Signed-off-by: Martin Doucha <mdoucha@suse.cz>
> ---
>  configure.ac              | 14 ++++++++++++++
>  include/mk/features.mk.in |  3 +++
>  testcases/kernel/Makefile |  5 ++++-
>  3 files changed, 21 insertions(+), 1 deletion(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 816ebf820..88ecbafda 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -397,6 +397,20 @@ LTP_CHECK_TASKSTATS
>  test "x$with_tirpc" = xyes && LTP_CHECK_TIRPC
>  LTP_DETECT_HOST_CPU
>  
> +AC_MSG_CHECKING([whether linker can handle KVM payloads])
> +ltp_backup_ldflags=$LDFLAGS
> +LDFLAGS="$LDFLAGS -T ${srcdir}/testcases/kernel/kvm/linker/${HOST_CPU}.lds"
> +AC_LINK_IFELSE([AC_LANG_PROGRAM()],
> +  [
> +    AC_MSG_RESULT([yes])
> +    AC_SUBST([WITH_KVM_TESTSUITE],["yes"])
> +  ],
> +  [
> +    AC_MSG_RESULT([no])
> +    AC_SUBST([WITH_KVM_TESTSUITE],["no"])
> +  ])
> +LDFLAGS="$ltp_backup_ldflags"
> +
>  AC_OUTPUT
>  
>  cat << EOF
> diff --git a/include/mk/features.mk.in b/include/mk/features.mk.in
> index ecb15a0f7..802ee0ba8 100644
> --- a/include/mk/features.mk.in
> +++ b/include/mk/features.mk.in
> @@ -52,3 +52,6 @@ WITH_REALTIME_TESTSUITE		:= no
>  else
>  WITH_REALTIME_TESTSUITE		:= @WITH_REALTIME_TESTSUITE@
>  endif
> +
> +# Enable testcases/kernel/kvm compile and install?
> +WITH_KVM_TESTSUITE		:= @WITH_KVM_TESTSUITE@
> diff --git a/testcases/kernel/Makefile b/testcases/kernel/Makefile
> index c0fa24147..bf890e175 100644
> --- a/testcases/kernel/Makefile
> +++ b/testcases/kernel/Makefile
> @@ -29,7 +29,6 @@ SUBDIRS			+= connectors \
>  			   io \
>  			   ipc \
>  			   irq \
> -			   kvm \
>  			   logging \
>  			   mem \
>  			   numa \
> @@ -45,6 +44,10 @@ ifeq ($(WITH_POWER_MANAGEMENT_TESTSUITE),yes)
>  SUBDIRS			+= power_management
>  endif
>  
> +ifeq ($(WITH_KVM_TESTSUITE),yes)
> +SUBDIRS			+= kvm
> +endif

Skipping the whole directory will actually cause problems too, since the
runltp files does include the kvm_pagefault01 now which will obvious
fail because the binary would be missing.

I'm not sure what the best solution would be, maybe install dummy
libraries that just print TCONF in a case that linker does now work?
Cyril Hrubis June 10, 2022, 1:39 p.m. UTC | #2
Hi!
> Skipping the whole directory will actually cause problems too, since the
> runltp files does include the kvm_pagefault01 now which will obvious
> fail because the binary would be missing.
> 
> I'm not sure what the best solution would be, maybe install dummy
> libraries that just print TCONF in a case that linker does now work?

s/libraries/binaries/
Martin Doucha June 10, 2022, 2:42 p.m. UTC | #3
On 10. 06. 22 15:33, Cyril Hrubis wrote:
> Skipping the whole directory will actually cause problems too, since the
> runltp files does include the kvm_pagefault01 now which will obvious
> fail because the binary would be missing.
> 
> I'm not sure what the best solution would be, maybe install dummy
> libraries that just print TCONF in a case that linker does now work?

KVM tests have their own runfile which can be simply skipped. These
tests should not be included in any other runfiles because they should
only be run on baremetal. That's the solution: Don't run the KVM runfile
if the KVM tests were not built.

Also, the KVM Makefile already builds nothing on non-x86 archs so the
problem was there from the beginning.
Cyril Hrubis June 13, 2022, 8:15 a.m. UTC | #4
Hi!
> > Skipping the whole directory will actually cause problems too, since the
> > runltp files does include the kvm_pagefault01 now which will obvious
> > fail because the binary would be missing.
> > 
> > I'm not sure what the best solution would be, maybe install dummy
> > libraries that just print TCONF in a case that linker does now work?
> 
> KVM tests have their own runfile which can be simply skipped. These
> tests should not be included in any other runfiles because they should
> only be run on baremetal. That's the solution: Don't run the KVM runfile
> if the KVM tests were not built.
> 
> Also, the KVM Makefile already builds nothing on non-x86 archs so the
> problem was there from the beginning.

Looks like these are not in default scenario either, then this is not a
reson to block the patch. However we should really figure out how to
deal with cases like this at least for the new testrunner.
Petr Vorel June 13, 2022, 11:59 a.m. UTC | #5
> Hi!
> > > Skipping the whole directory will actually cause problems too, since the
> > > runltp files does include the kvm_pagefault01 now which will obvious
> > > fail because the binary would be missing.

> > > I'm not sure what the best solution would be, maybe install dummy
> > > libraries that just print TCONF in a case that linker does now work?

> > KVM tests have their own runfile which can be simply skipped. These
> > tests should not be included in any other runfiles because they should
> > only be run on baremetal. That's the solution: Don't run the KVM runfile
> > if the KVM tests were not built.

> > Also, the KVM Makefile already builds nothing on non-x86 archs so the
> > problem was there from the beginning.

I thought we're using TST_TEST_TCONF() for non-x86 archs.

> Looks like these are not in default scenario either, then this is not a
> reson to block the patch. However we should really figure out how to
> deal with cases like this at least for the new testrunner.

Yes, not having to use TST_TEST_TCONF() would be nice.

Kind regards,
Petr
Martin Doucha June 13, 2022, 12:54 p.m. UTC | #6
On 13. 06. 22 13:59, Petr Vorel wrote:
>>> Also, the KVM Makefile already builds nothing on non-x86 archs so the
>>> problem was there from the beginning.
> 
> I thought we're using TST_TEST_TCONF() for non-x86 archs.

We will use TST_TEST_TCONF() for KVM on unsupported archs once they have
their own guest bootstrap code (which is currently available only for
32bit and 64bit x86). But it is not possible to link test binaries
without bootstrap code so non-x86 archs are currently skipped during build.
Petr Vorel June 13, 2022, 1:49 p.m. UTC | #7
Hi Martin,

> > I thought we're using TST_TEST_TCONF() for non-x86 archs.

> We will use TST_TEST_TCONF() for KVM on unsupported archs once they have
> their own guest bootstrap code (which is currently available only for
> 32bit and 64bit x86). But it is not possible to link test binaries
> without bootstrap code so non-x86 archs are currently skipped during build.

Ah, makes sense. Thanks for info!

Kind regards,
Petr
diff mbox series

Patch

diff --git a/configure.ac b/configure.ac
index 816ebf820..88ecbafda 100644
--- a/configure.ac
+++ b/configure.ac
@@ -397,6 +397,20 @@  LTP_CHECK_TASKSTATS
 test "x$with_tirpc" = xyes && LTP_CHECK_TIRPC
 LTP_DETECT_HOST_CPU
 
+AC_MSG_CHECKING([whether linker can handle KVM payloads])
+ltp_backup_ldflags=$LDFLAGS
+LDFLAGS="$LDFLAGS -T ${srcdir}/testcases/kernel/kvm/linker/${HOST_CPU}.lds"
+AC_LINK_IFELSE([AC_LANG_PROGRAM()],
+  [
+    AC_MSG_RESULT([yes])
+    AC_SUBST([WITH_KVM_TESTSUITE],["yes"])
+  ],
+  [
+    AC_MSG_RESULT([no])
+    AC_SUBST([WITH_KVM_TESTSUITE],["no"])
+  ])
+LDFLAGS="$ltp_backup_ldflags"
+
 AC_OUTPUT
 
 cat << EOF
diff --git a/include/mk/features.mk.in b/include/mk/features.mk.in
index ecb15a0f7..802ee0ba8 100644
--- a/include/mk/features.mk.in
+++ b/include/mk/features.mk.in
@@ -52,3 +52,6 @@  WITH_REALTIME_TESTSUITE		:= no
 else
 WITH_REALTIME_TESTSUITE		:= @WITH_REALTIME_TESTSUITE@
 endif
+
+# Enable testcases/kernel/kvm compile and install?
+WITH_KVM_TESTSUITE		:= @WITH_KVM_TESTSUITE@
diff --git a/testcases/kernel/Makefile b/testcases/kernel/Makefile
index c0fa24147..bf890e175 100644
--- a/testcases/kernel/Makefile
+++ b/testcases/kernel/Makefile
@@ -29,7 +29,6 @@  SUBDIRS			+= connectors \
 			   io \
 			   ipc \
 			   irq \
-			   kvm \
 			   logging \
 			   mem \
 			   numa \
@@ -45,6 +44,10 @@  ifeq ($(WITH_POWER_MANAGEMENT_TESTSUITE),yes)
 SUBDIRS			+= power_management
 endif
 
+ifeq ($(WITH_KVM_TESTSUITE),yes)
+SUBDIRS			+= kvm
+endif
+
 endif
 
 ifeq ($(ANDROID),1)