kernel_samsung_a53x/drivers/samsung/debug/sec_debug_softdog.c
roynatech2544 0db070a424 Fix clang 16 errors treewide
- misleading indentation
- strict prototypes [1]

[1]
int foo(void) {...}
instead of
int foo() {...}

drivers: usb: Fix misleading indentation
2024-06-15 16:28:48 -03:00

109 lines
2.2 KiB
C
Executable file

// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2020 Samsung Electronics Co., Ltd.
* http://www.samsung.com
*
* Samsung debugging code
*/
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/smp.h>
#include <linux/sched.h>
#include <linux/sched/debug.h>
#include <linux/sec_debug.h>
#include "../../../kernel/sched/sched.h"
#include "sec_debug_internal.h"
static struct task_struct *suspect;
static inline char get_state(struct task_struct *p)
{
char state_array[] = {'R', 'S', 'D', 'T', 't', 'X', 'Z', 'P', 'x', 'K', 'W', 'I', 'N'};
unsigned char idx = 0;
unsigned long state;
if (!p)
return 0;
state = (p->state | p->exit_state) & (TASK_STATE_MAX - 1);
while (state) {
idx++;
state >>= 1;
}
return state_array[idx];
}
#ifdef MODULE
static void __show_callstack(struct task_struct *task)
{
secdbg_stra_show_callstack_auto(task);
}
#else /* MODULE */
static void __show_callstack(struct task_struct *task)
{
#ifdef CONFIG_SEC_DEBUG_AUTO_COMMENT
show_stack_auto_comment(task, NULL);
#else
show_stack(task, NULL);
#endif
}
#endif /* MODULE */
static void show_callstack(void *info)
{
__show_callstack(NULL);
}
static struct task_struct *secdbg_softdog_find_key_suspect(void)
{
struct task_struct *c, *g;
for_each_process(g) {
if (g->pid == 1)
suspect = g;
else if (!strcmp(g->comm, "system_server")) {
suspect = g;
for_each_thread(g, c) {
if (!strcmp(c->comm, "watchdog")) {
suspect = c;
goto out;
}
}
goto out;
}
}
out:
return suspect;
}
void secdbg_softdog_show_info(void)
{
struct task_struct *p = NULL;
static call_single_data_t csd;
p = secdbg_softdog_find_key_suspect();
if (p) {
pr_auto(ASL5, "[SOFTDOG] %s:%d %c(%d) exec:%lluns\n",
p->comm, p->pid, get_state(p), (int)p->state, p->se.exec_start);
if (task_running(task_rq(p), p)) {
csd.flags = 0;
csd.func = show_callstack;
csd.info = NULL;
smp_call_function_single_async(task_cpu(p), &csd);
} else {
__show_callstack(p);
}
} else {
pr_auto(ASL5, "[SOFTDOG] Init task not exist!\n");
}
}
EXPORT_SYMBOL_GPL(secdbg_softdog_show_info);
MODULE_DESCRIPTION("Samsung Debug softdog info driver");
MODULE_LICENSE("GPL v2");