diff mbox series

selftests/livepatch: push and pop dynamic debug config

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

Commit Message

Joe Lawrence July 18, 2019, 8:29 p.m. UTC
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(-)

Comments

Joe Lawrence July 18, 2019, 8:42 p.m. UTC | #1
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
Petr Mladek July 19, 2019, 10:46 a.m. UTC | #2
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
Joe Lawrence July 30, 2019, 5:31 p.m. UTC | #3
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
Shuah July 30, 2019, 9:26 p.m. UTC | #4
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
Shuah July 30, 2019, 9:52 p.m. UTC | #5
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 mbox series

Patch

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,