ANDROID: madvise: add vendor hook to bypass madvise

We'd like to let custom vendor module does madvise instead and
bypass original madvise.

Bug: 400476002
Change-Id: I793478f975cceaa0aad0ec009249352a5cb06358
Signed-off-by: Tangquan Zheng <zhengtangquan@oppo.com>
This commit is contained in:
zhengtangquan
2025-03-03 17:54:47 +08:00
committed by Treehugger Robot
parent 08ca8785d3
commit 26c67c4430
3 changed files with 14 additions and 1 deletions

View File

@@ -543,6 +543,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_smap_swap_shared);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_armv8pmu_counter_overflowed);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_perf_rotate_context);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_process_madvise_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_madvise_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages_prepare_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages_ok_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_unref_page_list_bypass);

View File

@@ -11,6 +11,10 @@ DECLARE_RESTRICTED_HOOK(android_rvh_process_madvise_bypass,
TP_PROTO(int pidfd, const struct iovec __user *vec, size_t vlen,
int behavior, unsigned int flags, ssize_t *ret, bool *bypass),
TP_ARGS(pidfd, vec, vlen, behavior, flags, ret, bypass), 1);
DECLARE_RESTRICTED_HOOK(android_rvh_do_madvise_bypass,
TP_PROTO(struct mm_struct *mm, unsigned long start,
size_t len_in, int behavior, int *ret, bool *bypass),
TP_ARGS(mm, start, len_in, behavior, ret, bypass), 1);
struct vm_area_struct;
DECLARE_HOOK(android_vh_update_vma_flags,
TP_PROTO(struct vm_area_struct *vma),
@@ -27,4 +31,4 @@ DECLARE_HOOK(android_vh_madvise_pageout_bypass,
#endif
#include <trace/define_trace.h>
#include <trace/define_trace.h>

View File

@@ -1544,6 +1544,14 @@ int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int beh
SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
{
bool bypass = false;
int ret;
trace_android_rvh_do_madvise_bypass(current->mm, start,
len_in, behavior, &ret, &bypass);
if (bypass)
return ret;
return do_madvise(current->mm, start, len_in, behavior);
}