Message ID | 20190718202948.3404-1-joe.lawrence@redhat.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | fbb01c52471c8fb4ec2422c0ab26c134bd90bbff |
Headers | show |
Series | selftests/livepatch: push and pop dynamic debug config | expand |
On 7/18/19 4:29 PM, Joe Lawrence wrote: > The livepatching self-tests tweak the dynamic debug config to verify > the kernel log during the tests. Enhance set_dynamic_debug() so that > the config changes are restored when the script exits. > > Note this functionality needs to keep in sync with: > - dynamic_debug input/output formatting > - functions affected by set_dynamic_debug() > > For example, push_dynamic_debug() transforms: > kernel/livepatch/transition.c:530 [livepatch]klp_init_transition =_ "'%s': initializing %s transition\012" > to: > file kernel/livepatch/transition.c line 530 =_ > > Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com> > --- > .../testing/selftests/livepatch/functions.sh | 26 ++++++++++++++----- > 1 file changed, 20 insertions(+), 6 deletions(-) > > diff --git a/tools/testing/selftests/livepatch/functions.sh b/tools/testing/selftests/livepatch/functions.sh > index de5a504ffdbc..860f27665ebd 100644 > --- a/tools/testing/selftests/livepatch/functions.sh > +++ b/tools/testing/selftests/livepatch/functions.sh > @@ -29,13 +29,27 @@ function die() { > exit 1 > } > > -# set_dynamic_debug() - setup kernel dynamic debug > -# TODO - push and pop this config? > +function push_dynamic_debug() { > + DYNAMIC_DEBUG=$(grep '^kernel/livepatch' /sys/kernel/debug/dynamic_debug/control | \ > + awk -F'[: ]' '{print "file " $1 " line " $2 " " $4}') > +} > + > +function pop_dynamic_debug() { > + if [[ -n "$DYNAMIC_DEBUG" ]]; then > + echo -n "$DYNAMIC_DEBUG" > /sys/kernel/debug/dynamic_debug/control > + fi > +} > + > +# set_dynamic_debug() - save the current dynamic debug config and tweak > +# it for the self-tests. Set a script exit trap > +# that restores the original config. > function set_dynamic_debug() { > - cat << EOF > /sys/kernel/debug/dynamic_debug/control > -file kernel/livepatch/* +p > -func klp_try_switch_task -p > -EOF > + push_dynamic_debug > + trap pop_dynamic_debug EXIT INT TERM HUP > + cat <<-EOF > /sys/kernel/debug/dynamic_debug/control > + file kernel/livepatch/* +p > + func klp_try_switch_task -p > + EOF > } > > # loop_until(cmd) - loop a command until it is successful or $MAX_RETRIES, > I took a stab as this while working on "[PATCH v2] selftests/livepatch: add test skip handling", which this applies on top of. It works for me, though I feel that the /sys/kernel/debug/dynamic_debug/control output to input translation is brittle. It would be nice to have some kind of mass export/import capability for that interface. -- Joe
On Thu 2019-07-18 16:42:25, Joe Lawrence wrote: > On 7/18/19 4:29 PM, Joe Lawrence wrote: > > The livepatching self-tests tweak the dynamic debug config to verify > > the kernel log during the tests. Enhance set_dynamic_debug() so that > > the config changes are restored when the script exits. > > > > diff --git a/tools/testing/selftests/livepatch/functions.sh b/tools/testing/selftests/livepatch/functions.sh > > index de5a504ffdbc..860f27665ebd 100644 > > --- a/tools/testing/selftests/livepatch/functions.sh > > +++ b/tools/testing/selftests/livepatch/functions.sh > > @@ -29,13 +29,27 @@ function die() { > > exit 1 > > } > > -# set_dynamic_debug() - setup kernel dynamic debug > > -# TODO - push and pop this config? > > +function push_dynamic_debug() { > > + DYNAMIC_DEBUG=$(grep '^kernel/livepatch' /sys/kernel/debug/dynamic_debug/control | \ > > + awk -F'[: ]' '{print "file " $1 " line " $2 " " $4}') > > +} > > It works for me, though I feel that the > /sys/kernel/debug/dynamic_debug/control output to input translation is > brittle. It would be nice to have some kind of mass export/import > capability for that interface. I believe that the format is pretty stable. We could always reconsider it when it breaks. I could confirm that it restores the original state, so: Tested-by: Petr Mladek <pmladek@suse.com> Best Regards, Petr
On 7/19/19 6:46 AM, Petr Mladek wrote: > On Thu 2019-07-18 16:42:25, Joe Lawrence wrote: >> On 7/18/19 4:29 PM, Joe Lawrence wrote: >>> The livepatching self-tests tweak the dynamic debug config to verify >>> the kernel log during the tests. Enhance set_dynamic_debug() so that >>> the config changes are restored when the script exits. >>> >>> diff --git a/tools/testing/selftests/livepatch/functions.sh b/tools/testing/selftests/livepatch/functions.sh >>> index de5a504ffdbc..860f27665ebd 100644 >>> --- a/tools/testing/selftests/livepatch/functions.sh >>> +++ b/tools/testing/selftests/livepatch/functions.sh >>> @@ -29,13 +29,27 @@ function die() { >>> exit 1 >>> } >>> -# set_dynamic_debug() - setup kernel dynamic debug >>> -# TODO - push and pop this config? >>> +function push_dynamic_debug() { >>> + DYNAMIC_DEBUG=$(grep '^kernel/livepatch' /sys/kernel/debug/dynamic_debug/control | \ >>> + awk -F'[: ]' '{print "file " $1 " line " $2 " " $4}') >>> +} >> >> It works for me, though I feel that the >> /sys/kernel/debug/dynamic_debug/control output to input translation is >> brittle. It would be nice to have some kind of mass export/import >> capability for that interface. > > I believe that the format is pretty stable. We could always reconsider > it when it breaks. > > I could confirm that it restores the original state, so: > > Tested-by: Petr Mladek <pmladek@suse.com> > > Best Regards, > Petr > Hi Shuah, Can you review and route this patch through your tree as well? Thanks, -- Joe
On 7/30/19 11:31 AM, Joe Lawrence wrote: > On 7/19/19 6:46 AM, Petr Mladek wrote: >> On Thu 2019-07-18 16:42:25, Joe Lawrence wrote: >>> On 7/18/19 4:29 PM, Joe Lawrence wrote: >>>> The livepatching self-tests tweak the dynamic debug config to verify >>>> the kernel log during the tests. Enhance set_dynamic_debug() so that >>>> the config changes are restored when the script exits. >>>> >>>> diff --git a/tools/testing/selftests/livepatch/functions.sh >>>> b/tools/testing/selftests/livepatch/functions.sh >>>> index de5a504ffdbc..860f27665ebd 100644 >>>> --- a/tools/testing/selftests/livepatch/functions.sh >>>> +++ b/tools/testing/selftests/livepatch/functions.sh >>>> @@ -29,13 +29,27 @@ function die() { >>>> exit 1 >>>> } >>>> -# set_dynamic_debug() - setup kernel dynamic debug >>>> -# TODO - push and pop this config? >>>> +function push_dynamic_debug() { >>>> + DYNAMIC_DEBUG=$(grep '^kernel/livepatch' >>>> /sys/kernel/debug/dynamic_debug/control | \ >>>> + awk -F'[: ]' '{print "file " $1 " line " $2 " " $4}') >>>> +} >>> >>> It works for me, though I feel that the >>> /sys/kernel/debug/dynamic_debug/control output to input translation is >>> brittle. It would be nice to have some kind of mass export/import >>> capability for that interface. >> >> I believe that the format is pretty stable. We could always reconsider >> it when it breaks. >> >> I could confirm that it restores the original state, so: >> >> Tested-by: Petr Mladek <pmladek@suse.com> >> >> Best Regards, >> Petr >> > > Hi Shuah, > > Can you review and route this patch through your tree as well? > Looks good to me. Thanks for doing this. I will pick this up thanks, -- Shuah
On 7/30/19 3:26 PM, shuah wrote: > On 7/30/19 11:31 AM, Joe Lawrence wrote: >> On 7/19/19 6:46 AM, Petr Mladek wrote: >>> On Thu 2019-07-18 16:42:25, Joe Lawrence wrote: >>>> On 7/18/19 4:29 PM, Joe Lawrence wrote: >>>>> The livepatching self-tests tweak the dynamic debug config to verify >>>>> the kernel log during the tests. Enhance set_dynamic_debug() so that >>>>> the config changes are restored when the script exits. >>>>> >>>>> diff --git a/tools/testing/selftests/livepatch/functions.sh >>>>> b/tools/testing/selftests/livepatch/functions.sh >>>>> index de5a504ffdbc..860f27665ebd 100644 >>>>> --- a/tools/testing/selftests/livepatch/functions.sh >>>>> +++ b/tools/testing/selftests/livepatch/functions.sh >>>>> @@ -29,13 +29,27 @@ function die() { >>>>> exit 1 >>>>> } >>>>> -# set_dynamic_debug() - setup kernel dynamic debug >>>>> -# TODO - push and pop this config? >>>>> +function push_dynamic_debug() { >>>>> + DYNAMIC_DEBUG=$(grep '^kernel/livepatch' >>>>> /sys/kernel/debug/dynamic_debug/control | \ >>>>> + awk -F'[: ]' '{print "file " $1 " line " $2 " " $4}') >>>>> +} >>>> >>>> It works for me, though I feel that the >>>> /sys/kernel/debug/dynamic_debug/control output to input translation is >>>> brittle. It would be nice to have some kind of mass export/import >>>> capability for that interface. >>> >>> I believe that the format is pretty stable. We could always reconsider >>> it when it breaks. >>> >>> I could confirm that it restores the original state, so: >>> >>> Tested-by: Petr Mladek <pmladek@suse.com> >>> >>> Best Regards, >>> Petr >>> >> >> Hi Shuah, >> >> Can you review and route this patch through your tree as well? >> > > Looks good to me. Thanks for doing this. I will pick this up > Applied it with minor change to commit log to correct checkpatch error on --- to the following: file kernel/livepatch/transition.c line 530 =_ --- WARNING: Do not use whitespace before To: #72: to: WARNING: Use a single space after To: #72: to: ERROR: Unrecognized email address: '' #72: to: I changed it to: --- to the following: file kernel/livepatch/transition.c line 530 =_ --- I will send this in for rc4 thanks, -- Shuah
diff --git a/tools/testing/selftests/livepatch/functions.sh b/tools/testing/selftests/livepatch/functions.sh index de5a504ffdbc..860f27665ebd 100644 --- a/tools/testing/selftests/livepatch/functions.sh +++ b/tools/testing/selftests/livepatch/functions.sh @@ -29,13 +29,27 @@ function die() { exit 1 } -# set_dynamic_debug() - setup kernel dynamic debug -# TODO - push and pop this config? +function push_dynamic_debug() { + DYNAMIC_DEBUG=$(grep '^kernel/livepatch' /sys/kernel/debug/dynamic_debug/control | \ + awk -F'[: ]' '{print "file " $1 " line " $2 " " $4}') +} + +function pop_dynamic_debug() { + if [[ -n "$DYNAMIC_DEBUG" ]]; then + echo -n "$DYNAMIC_DEBUG" > /sys/kernel/debug/dynamic_debug/control + fi +} + +# set_dynamic_debug() - save the current dynamic debug config and tweak +# it for the self-tests. Set a script exit trap +# that restores the original config. function set_dynamic_debug() { - cat << EOF > /sys/kernel/debug/dynamic_debug/control -file kernel/livepatch/* +p -func klp_try_switch_task -p -EOF + push_dynamic_debug + trap pop_dynamic_debug EXIT INT TERM HUP + cat <<-EOF > /sys/kernel/debug/dynamic_debug/control + file kernel/livepatch/* +p + func klp_try_switch_task -p + EOF } # loop_until(cmd) - loop a command until it is successful or $MAX_RETRIES,
The livepatching self-tests tweak the dynamic debug config to verify the kernel log during the tests. Enhance set_dynamic_debug() so that the config changes are restored when the script exits. Note this functionality needs to keep in sync with: - dynamic_debug input/output formatting - functions affected by set_dynamic_debug() For example, push_dynamic_debug() transforms: kernel/livepatch/transition.c:530 [livepatch]klp_init_transition =_ "'%s': initializing %s transition\012" to: file kernel/livepatch/transition.c line 530 =_ Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com> --- .../testing/selftests/livepatch/functions.sh | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-)