Should I do anything about this warning?
Hi, I am new at kernel programming. I have written a driver for a custom device, running on arm board. It works well (for last few months). I happen to look at kernel logs and I seen, [231250.894334] [ cut here ] [231250.899146] WARNING: at kernel/workqueue.c:1953 process_one_work+0x398/0x52c() [231250.906491] Modules linked in: bcmdhd cfg80211 XYZ [231250.911885] [c0016450] (unwind_backtrace+0x0/0x144) from [c05c04f0] (dump_stack+0x20/0x24) [231250.920672] [c05c04f0] (dump_stack+0x20/0x24) from [c006c330] (warn_slowpath_common+0x5c/0x74) [231250.929757] [c006c330] (warn_slowpath_common+0x5c/0x74) from [c006c374] (warn_slowpath_null+0x2c/0x34) [231250.939581] [c006c374] (warn_slowpath_null+0x2c/0x34) from [c0088f08] (process_one_work+0x398/0x52c) [231250.949232] [c0088f08] (process_one_work+0x398/0x52c) from [c00895c8] (rescuer_thread+0x184/0x230) [231250.958708] [c00895c8] (rescuer_thread+0x184/0x230) from [c008dd60] (kthread+0xac/0xb4) [231250.967236] [c008dd60] (kthread+0xac/0xb4) from [c000fd4c] (kernel_thread_exit+0x0/0x8) [231250.975755] ---[ end trace 9f9c2187c0bee21b ]--- The device is still working after this. No issues in operation. I am just sceptical about analyzing this issue? Do I need to check more? If yes how? with this trace? Thanks, Sagar ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Re: Should I do anything about this warning?
On Wed, Oct 08, 2014 at 11:33:57AM +0200, Kristof Provost wrote: On 2014-10-08 12:43:58 (+0530), Sagar Padhye sgr.m@gmail.com wrote: I am new at kernel programming. I have written a driver for a custom device, running on arm board. It works well (for last few months). I happen to look at kernel logs and I seen, [231250.899146] WARNING: at kernel/workqueue.c:1953 process_one_work+0x398/0x52c() You triggered a warning in the code. Yes, I got that The device is still working after this. No issues in operation. I am just sceptical about analyzing this issue? Do I need to check more? If yes how? with this trace? Yes, this indicates a potential problem. The issue is not reproducible. Haven't seen in over 6 months. And the module is working just fine after the log. Is there a way I can get more info on this e.g. more stacktrace that will end up in module's work function (if this occurs again)? You start my looking at line 1953 in kernel/workqueue.c, where you'll see which specific warning you're triggering. It's probably this one: /* ensure we're on the correct CPU */ WARN_ON_ONCE(!(pool-flags POOL_DISASSOCIATED) raw_smp_processor_id() != pool-cpu); They are, 1952 WARN_ON_ONCE(!(worker-flags (WORKER_UNBOUND | WORKER_REBIND)) 1953 raw_smp_processor_id() != gcwq-cpu); But I am not sure what they signify :( Thanks, Sagar ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Re: [PATCH] FIXED sparse warning : drivers/cpuidle/cpuidle.c:27:1: warning: symbol 'cpuidle_dev' was not declared. Should it be static?
I checked that cpuidle_devices is only being used in cpuidle.c - hence thought that it can be made static and be removed from header. cpuidle_devices is actually used in drivers/cpuidle/coupled.c as well so this breaks the build. Darn! I forgot 'clean build' part. sorry. Even for cpuidle_dev the patch isn't right. It doesn't fix the warning, for me. The DEFINE_PER_CPU() macro defines several variables actually. Per CPU variables are a bit complicated and they have to have globally unique names. So just ignore the Sparse warning for per CPU variables. Ok, let me look at my sparse log once again, will pick some other problem (any suggestions?) There are several other process problems with the patch submission. 1) Incorrect subject. It should be: [PATCH] cpuidle: make a variable static This is based on `git log --oneline drivers/cpuidle/cpuidle.c` output. 2) No blank line between subject and body of commit message. 3) Line wrap the body of the email at 72 characters. 4) No Signed-off-by line. Ok, will keep this in mind Thanks and Regards, Sagar ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
[PATCH] FIXED sparse warning : drivers/cpuidle/cpuidle.c:27:1: warning: symbol 'cpuidle_dev' was not declared. Should it be static?
--- This is the first (and minor) patch I am sending out, hope this is ok. I checked that cpuidle_devices is only being used in cpuidle.c - hence thought that it can be made static and be removed from header. drivers/cpuidle/cpuidle.c | 4 ++-- include/linux/cpuidle.h | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index d75040d..4826506 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -23,8 +23,8 @@ #include cpuidle.h -DEFINE_PER_CPU(struct cpuidle_device *, cpuidle_devices); -DEFINE_PER_CPU(struct cpuidle_device, cpuidle_dev); +static DEFINE_PER_CPU(struct cpuidle_device *, cpuidle_devices); +static DEFINE_PER_CPU(struct cpuidle_device, cpuidle_dev); DEFINE_MUTEX(cpuidle_lock); LIST_HEAD(cpuidle_detected_devices); diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index 781addc..96c8ed8 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h @@ -83,7 +83,6 @@ struct cpuidle_device { #endif }; -DECLARE_PER_CPU(struct cpuidle_device *, cpuidle_devices); /** * cpuidle_get_last_residency - retrieves the last state's residency time -- 1.8.1.2 ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies