mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 02:50:49 +09:00
ANDROID: vendor_hooks: add hooks in prctl_set_vma
In some special scenarios, some threads are allowed to skip waiting, write the set_anon_name task into the queue and return directly, thus improving the system's response speed and performance. Bug: 349739224 Change-Id: Id3686309da108e242a30cfaf68f859b10215f402 Signed-off-by: Zhifeng Zhu <zhifeng.zhu@vivo.com>
This commit is contained in:
committed by
Treehugger Robot
parent
0468527935
commit
d256bfafa9
@@ -433,3 +433,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_reader_owned);
|
|||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_reader_owned);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_reader_owned);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_writer_owned);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_writer_owned);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_writer_owned);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_writer_owned);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pr_set_vma_name_bypass);
|
||||||
|
|||||||
@@ -11,6 +11,10 @@ struct task_struct;
|
|||||||
DECLARE_HOOK(android_vh_syscall_prctl_finished,
|
DECLARE_HOOK(android_vh_syscall_prctl_finished,
|
||||||
TP_PROTO(int option, struct task_struct *task),
|
TP_PROTO(int option, struct task_struct *task),
|
||||||
TP_ARGS(option, task));
|
TP_ARGS(option, task));
|
||||||
|
DECLARE_RESTRICTED_HOOK(android_rvh_pr_set_vma_name_bypass,
|
||||||
|
TP_PROTO(struct mm_struct *mm, unsigned long addr, unsigned long size,
|
||||||
|
struct anon_vma_name *anon_name, int *error, bool *bypass),
|
||||||
|
TP_ARGS(mm, addr, size, anon_name, error, bypass), 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <trace/define_trace.h>
|
#include <trace/define_trace.h>
|
||||||
|
|||||||
@@ -2330,6 +2330,7 @@ static int prctl_set_vma(unsigned long opt, unsigned long addr,
|
|||||||
struct mm_struct *mm = current->mm;
|
struct mm_struct *mm = current->mm;
|
||||||
const char __user *uname;
|
const char __user *uname;
|
||||||
struct anon_vma_name *anon_name = NULL;
|
struct anon_vma_name *anon_name = NULL;
|
||||||
|
bool bypass = false;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
@@ -2356,6 +2357,10 @@ static int prctl_set_vma(unsigned long opt, unsigned long addr,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace_android_rvh_pr_set_vma_name_bypass(mm, addr, size, anon_name,
|
||||||
|
&error, &bypass);
|
||||||
|
if (bypass)
|
||||||
|
return error;
|
||||||
mmap_write_lock(mm);
|
mmap_write_lock(mm);
|
||||||
error = madvise_set_anon_name(mm, addr, size, anon_name);
|
error = madvise_set_anon_name(mm, addr, size, anon_name);
|
||||||
mmap_write_unlock(mm);
|
mmap_write_unlock(mm);
|
||||||
|
|||||||
Reference in New Issue
Block a user