Messages in this thread Patches in this message | | | From | Santosh Shilimkar <> | Subject | Re: + softirq-fix-tasklet_kill-and-its-users.patch added to -mm tree | Date | Wed, 21 Sep 2016 10:23:52 -0700 |
| |
On 9/21/2016 1:09 AM, Sergey Senozhatsky wrote: > didn't look into the issue, but this thing > Thanks for reporting Sergey.
>>> tasklet_init() == Init and Enable scheduling > [..] >>> @@ -559,7 +559,7 @@ void tasklet_init(struct tasklet_struct >>> { >>> t->next = NULL; >>> t->state = 0; >>> - atomic_set(&t->count, 0); >>> + atomic_set(&t->count, 1); >
^^^^^^^^ >>> t->func = func; >>> t->data = data; >>> } > > seems to be in conflict with > Static helpers also needs to follow the API.
> #define DECLARE_TASKLET(name, func, data) \ > struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data } > ^^^^^^^ > > #define DECLARE_TASKLET_DISABLED(name, func, data) \ > struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(1), func, data } > ^^^^^^^ >
> > as well as with the tasklet_{disable, enable} helpers > Those are fine since they work like a pair and the use count is always balanced.
Am assuming one of the driver in your test is using the DECLARE_TASKLET to init the tasklet and killed by tasklet_kill() which leaves that tasklet to be still scheduled by tasklet action.
Can you please try below patch and see if you still see the issue ? Attaching the same, just in case mailer eat the tabs.
Regards, Santosh
From e3e676e501a59b2a7de6e9f99ec3917c157e9caf Mon Sep 17 00:00:00 2001 From: Santosh Shilimkar <ssantosh@kernel.org> Date: Wed, 21 Sep 2016 09:58:51 -0700 Subject: [PATCH] softirq: fix DECLARE_TASKLET[_DISABLE] macros init state
In linux-next, commit 1f5e9c3bc47f ("softirq: fix tasklet_kill() and its users") changed the init state of the tasklet but missed to update the macros.
Fix them too.
Reported-by: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Santosh Shilimkar <ssantosh@kernel.org> --- include/linux/interrupt.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 72f0721..cabf575 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -521,10 +521,10 @@ struct tasklet_struct };
#define DECLARE_TASKLET(name, func, data) \ -struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data } +struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(1), func, data }
#define DECLARE_TASKLET_DISABLED(name, func, data) \ -struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(1), func, data } +struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(2), func, data }
enum -- 1.9.1
From e3e676e501a59b2a7de6e9f99ec3917c157e9caf Mon Sep 17 00:00:00 2001 From: Santosh Shilimkar <ssantosh@kernel.org> Date: Wed, 21 Sep 2016 09:58:51 -0700 Subject: [PATCH] softirq: fix DECLARE_TASKLET[_DISABLE] macros init state
In linux-next, commit 1f5e9c3bc47f ("softirq: fix tasklet_kill() and its users") changed the init state of the tasklet but missed to update the macros.
Fix them too.
Reported-by: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Santosh Shilimkar <ssantosh@kernel.org> --- include/linux/interrupt.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 72f0721..cabf575 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -521,10 +521,10 @@ struct tasklet_struct }; #define DECLARE_TASKLET(name, func, data) \ -struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data } +struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(1), func, data } #define DECLARE_TASKLET_DISABLED(name, func, data) \ -struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(1), func, data } +struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(2), func, data } enum -- 1.9.1
| |