Re: [PATCH linux-next] debug:kdb: fix unsigned int win compared to less than zero

From: Christophe JAILLET
Date: Sat Aug 21 2021 - 01:41:04 EST


Hi,

Le 20/08/2021 à 04:24, jing yangyang a écrit :
Fix coccicheck warning:
./kernel/debug/kdb/kdb_support.c:575:3-10:
WARNING:Unsigned expression compared with zero p_state < 0

Reported-by: Zeal Robot <zealci@xxxxxxxxxx>
Signed-off-by: jing yangyang <jing.yangyang@xxxxxxxxxx>
---
kernel/debug/kdb/kdb_support.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/debug/kdb/kdb_support.c b/kernel/debug/kdb/kdb_support.c
index c605b17..fb30801 100644
--- a/kernel/debug/kdb/kdb_support.c
+++ b/kernel/debug/kdb/kdb_support.c
@@ -560,7 +560,7 @@ unsigned long kdb_task_state_string(const char *s)
*/
char kdb_task_state_char (const struct task_struct *p)
{
- unsigned int p_state;
+ int p_state;

When you make changes in variables which are written in the reverse Christmas tree style (i.e. long lines at the top, shorter ones below), you should keep this style. Many people prefer it that way.

Also, should your fix be correct, it is likely a bugfix, and a "Fixes:" would be needed to help backport.


However, I don't think that your patch is correct here.

Unless I missed something, 'p_state' really needs to be an 'unsigned int' because 'p->__state' is an 'unsigned int' since 2f064a59a11f ("sched: Change task_struct::state")

My *guess* is that:
(p_state < 0) ? 'U' :
should be turned in:
(p_state & UNRUNNABLE) ? 'U' :

to match the code in 'kdb_task_state_string(()'.

The 'R' case looks also spurious to me, but I've not looked at it deeper.


Should I be right, comment at line 545 ("/* unrunnable is < 0 */") looks somewhat misleading or useless. I would drop it.


Finally, you have the same kind of code in 'show_task()' (arch/powerpc/xmon/xmon.c). I also guess that whatever the fix it, it should be updated the same way here.

CJ

unsigned long tmp;
char state;
int cpu;