kernel-brax3-ubuntu-touch/drivers/misc/mediatek/locking/locking_aee_main.c
erascape f319b992b1 kernel-5.15: Initial import brax3 UT kernel
* halium configs enabled

Signed-off-by: erascape <erascape@proton.me>
2025-09-23 15:17:10 +00:00

72 lines
1.4 KiB
C

// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2020 MediaTek Inc.
*/
#undef pr_fmt
#define pr_fmt(fmt) KBUILD_MODNAME ": %s: " fmt, __func__
#include <linux/atomic.h>
#include <linux/debug_locks.h>
#include <linux/delay.h>
#include <linux/kprobes.h>
#include <linux/kthread.h>
#include <linux/lockdep.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <mt-plat/aee.h>
//lockdep_test.c
int lockdep_test_init(void);
static atomic_t warned;
static int locking_aee_thread(void *data)
{
u32 val_warned = 0;
for (;;) {
msleep(2000);
/* is lockdep disabled? */
if (likely(debug_locks))
continue;
/* Have we called the AEE? */
val_warned = atomic_read(&warned);
if (likely(val_warned))
break;
if (likely(atomic_try_cmpxchg(&warned, &val_warned, 1U)))
break;
}
WARN_ON(debug_locks);
if (!val_warned) {
char aee_str[40];
pr_info("LockProve Warning, AEE!\n");
scnprintf(aee_str, 40, "[%s]LockProve Warning", current->comm);
aee_kernel_warning_api(__FILE__, __LINE__,
DB_OPT_DUMMY_DUMP | DB_OPT_FTRACE,
aee_str, "LockProve Debug\n");
}
return 0;
}
static void ldt_disable_aee(void)
{
atomic_set(&warned, 1);
}
static int __init locking_aee_init(void)
{
monitor_hang_regist_ldt(ldt_disable_aee);
kthread_run(locking_aee_thread, NULL, "locking_aee");
lockdep_test_init();
return 0;
}
module_init(locking_aee_init);
MODULE_DESCRIPTION("MEDIATEK LOCKING AEE TOOL");
MODULE_LICENSE("GPL v2");