[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZXL_Lmx9J8U25fq-@alley>
Date:   Fri, 8 Dec 2023 13:43:24 +0100
From:   Petr Mladek <pmladek@...e.com>
To:     Miroslav Benes <mbenes@...e.cz>
Cc:     Joe Lawrence <joe.lawrence@...hat.com>,
        Marcos Paulo de Souza <mpdesouza@...e.com>,
        Shuah Khan <shuah@...nel.org>,
        Jonathan Corbet <corbet@....net>,
        Heiko Carstens <hca@...ux.ibm.com>,
        Vasily Gorbik <gor@...ux.ibm.com>,
        Alexander Gordeev <agordeev@...ux.ibm.com>,
        Christian Borntraeger <borntraeger@...ux.ibm.com>,
        Sven Schnelle <svens@...ux.ibm.com>,
        Josh Poimboeuf <jpoimboe@...nel.org>,
        Jiri Kosina <jikos@...nel.org>,
        linux-kselftest@...r.kernel.org, linux-doc@...r.kernel.org,
        linux-kernel@...r.kernel.org, linux-s390@...r.kernel.org,
        live-patching@...r.kernel.org
Subject: Re: [PATCH v3 2/3] livepatch: Move tests from lib/livepatch to
 selftests/livepatch
On Fri 2023-12-08 09:06:30, Miroslav Benes wrote:
> > > My idea is to abandon this way completely, take the selftests and build 
> > > and run them on the system right away.
> > > 
> > > Both should be doable, hopefully, if we wire it all correctly... and 
> > > document it.
> > > 
> > I can't think of why it shouldn't continue to work, even in a future
> > where newer livepatching selftests support older kernels.  (We would
> > just have newer selftests sources backported to test older kernel sources.)
> > 
> > Are there any test cases which truly need to be build on-the-fly?  Aside
> > from testing different toolchain pieces?
> 
> https://github.com/SUSE/qa_test_klp is what we would like to migrate to 
> selftests to have just one place for all tests.
> 
> There is basically just one live patch template and one supporting kernel 
> module template which is livepatched. The final result is driven by a set 
> of macros and function parameters. In some cases more modules are compiled 
> as parts of a test in a loop.
>
> However, I do not think there is anything which truly needs to be built 
> on-the-fly in the end. Everything can be worked around. Templates may be 
> abandoned and we would have a live patch and a module(s) per test. Some 
> tests are probably not worth it and may be removed. So it is a question of 
> convenience and maintainability. When we, for example, simplified API and 
> klp_register_patch() was removed, only one place needed to be amended. 
> Also, the current state in lib/livepatch/ could be simplified with the 
> proposed infrastructure as some files could be merged together.
In the patchset reworking livepatch states, I solved this problem
by including the same sources in another module source, like:
$> cat lib/livepatch/test_klp_speaker_livepatch2.c
// SPDX-License-Identifier: GPL-2.0
// Copyright (C) 2023 SUSE
/* Same livepatch with the same features. */
#include "test_klp_speaker_livepatch.c"
=========
$> cat lib/livepatch/test_klp_speaker2.c
// SPDX-License-Identifier: GPL-2.0
// Copyright (C) 2023 SUSE
/* Use versioned function name for livepatched functions */
#define _VER_NAME(name) name ## 2
/* Same module with the same features. */
#include "test_klp_speaker.c"
==========
And the behavior was changed by module parameters. The test
lookes like:
$> cat tools/testing/selftests/livepatch/test-modules.sh
[...]
start_test "multiple target modules"
load_mod $MOD_TARGET
read_module_param $MOD_TARGET welcome
load_lp $MOD_LIVEPATCH add_applause=1
read_module_param $MOD_TARGET welcome
load_mod $MOD_TARGET2
read_module_param $MOD_TARGET2 welcome
unload_mod $MOD_TARGET2
disable_lp $MOD_LIVEPATCH
read_module_param $MOD_TARGET welcome
unload_lp $MOD_LIVEPATCH
unload_mod $MOD_TARGET
===========
It is a kind of hack. But it would allow to build and package the
test modules. It has several advantages:
   + Less modules are needed. The behavior is modified by
     the parameters.
   + The separate parameters are easier to parse in compare
     with embedding the behavior into the module name.
   + Build problems would be solved before the packages
     reach QA department
   + The package would have lightweight dependencies.
   + Running the tests would be faster.
Regarding disadvantages:
   + The source included in all the other variants would be more
     complex.
     But the same would happen when building the modules during
     the tests. It would also require a more complicated template
     and an extra script generating the particular module sources.
I personally prefer the solution with "#include" because it has
all the mentioned advantages. The "#include" is a hack but it is
needed only when we need more modules with all the features.
Best Regards,
Petr
Powered by blists - more mailing lists
 
