kernel_samsung_a53x/drivers/soc/samsung/cpif/hook.c
2024-06-15 16:02:09 -03:00

54 lines
1.3 KiB
C
Executable file

// SPDX-License-Identifier: GPL-2.0
/*
* tracepoint hook handling
*
* Copyright (C) 2021 Samsung Electronics Co., Ltd
*
*/
#include <trace/hooks/sched.h>
#include "../../../kernel/sched/sched.h"
#define TASK_VENDOR 0x2000
/******************************************************************************
* tracepoint of Android vendor hook *
******************************************************************************/
static void cpif_hook_do_wake_up_sync(void *data,
struct wait_queue_head *wq_head, int *done)
{
#ifdef WF_ANDROID_VENDOR
*done = 1;
__wake_up_sync_key(wq_head, TASK_INTERRUPTIBLE | TASK_VENDOR,
poll_to_key(EPOLLIN | EPOLLPRI | EPOLLRDNORM | EPOLLRDBAND));
#endif
}
static void cpif_hook_set_wake_flags(void *data,
int *wake_flags, unsigned int *mode)
{
#ifdef WF_ANDROID_VENDOR
if (*mode & TASK_VENDOR) {
*mode &= ~TASK_VENDOR;
*wake_flags = WF_ANDROID_VENDOR;
}
#endif
}
int hook_init(void)
{
int ret;
ret = register_trace_android_vh_do_wake_up_sync(cpif_hook_do_wake_up_sync, NULL);
if (ret)
return ret;
ret = register_trace_android_vh_set_wake_flags(cpif_hook_set_wake_flags, NULL);
if (ret)
return ret;
return 0;
}
EXPORT_SYMBOL(hook_init);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Samsung CPIF vendor hook driver");