lkml.org 
[lkml]   [2020]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] kernel/trace: Stop and wait for kthread on preempt irq module unload
    On Wed, 29 Apr 2020 19:54:16 +0800
    Xiao Yang <yangx.jy@cn.fujitsu.com> wrote:

    > On 2020/4/28 22:45, Steven Rostedt wrote:
    > > diff --git a/kernel/trace/preemptirq_delay_test.c b/kernel/trace/preemptirq_delay_test.c
    > >> index 1c28ca20e30b..6d9131ae7e8c 100644
    > >> --- a/kernel/trace/preemptirq_delay_test.c
    > >> +++ b/kernel/trace/preemptirq_delay_test.c
    > >> @@ -113,15 +113,27 @@ static int preemptirq_delay_run(void *data)
    > >>
    > >> for (i = 0; i< s; i++)
    > >> (testfuncs[i])(i);
    > >> +
    > >> + while (!kthread_should_stop()) {
    > >> + schedule();
    > >> + set_current_state(TASK_INTERRUPTIBLE);
    > >> + }
    > >> +
    > >> + __set_current_state(TASK_RUNNING);
    > >> +
    > >> return 0;
    > >> }
    > >>
    > Hi Steven,
    >
    > Thanks for your patch.
    >
    > I also used the following steps to do test and didn't get any
    > warning/panic after applying your patch.
    > ---------------------------------
    > for i in $(seq 1 100); do modprobe preemptirq_delay_test test_mode=irq
    > delay=500000; rmmod preemptirq_delay_test; done
    > for i in $(seq 1 100); do modprobe preemptirq_delay_test
    > test_mode=preempt delay=500000; rmmod preemptirq_delay_test; done
    > ---------------------------------
    >
    > But I am not sure which fix(from you and Joel) is better.

    Mine ;-)

    The "kthread_should_stop()" is the normal way to end kernel threads. Using
    get/put is not the orthodox way.

    -- Steve

    \
     
     \ /
      Last update: 2020-04-29 18:32    [W:3.894 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site