mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 12:57:06 +09:00
ANDROID: vendor_hooks: Add hooks for __alloc_pages_direct_reclaim
Provide a vendor hook to allow drain_all_pages to be skipped during direct reclaim in some cases to avoid delays caused by it in cases when the benefits of draining pcp lists are known to be small. Bug: 220811627 Bug: 234405962 Signed-off-by: Liujie Xie <xieliujie@oppo.com> Change-Id: I0805241f81e0a94afcf62c98e97cff125d4061e2
This commit is contained in:
committed by
Carlos Llamas
parent
6f98ceb358
commit
d1ba6f2de7
@@ -210,6 +210,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpufreq_transition);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_balance_anon_file_reclaim);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_show_max_freq);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_referenced_check_bypass);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_drain_all_pages_bypass);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_task);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_enqueue_task);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_dequeue_task);
|
||||
|
||||
@@ -25,6 +25,11 @@ DECLARE_RESTRICTED_HOOK(android_rvh_set_readahead_gfp_mask,
|
||||
DECLARE_HOOK(android_vh_oom_check_panic,
|
||||
TP_PROTO(struct oom_control *oc, int *ret),
|
||||
TP_ARGS(oc, ret));
|
||||
DECLARE_HOOK(android_vh_drain_all_pages_bypass,
|
||||
TP_PROTO(gfp_t gfp_mask, unsigned int order, unsigned long alloc_flags,
|
||||
int migratetype, unsigned long did_some_progress,
|
||||
bool *bypass),
|
||||
TP_ARGS(gfp_mask, order, alloc_flags, migratetype, did_some_progress, bypass));
|
||||
|
||||
#endif /* _TRACE_HOOK_MM_H */
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
#include <linux/padata.h>
|
||||
#include <linux/khugepaged.h>
|
||||
#include <linux/buffer_head.h>
|
||||
#include <trace/hooks/mm.h>
|
||||
#include <asm/sections.h>
|
||||
#include <asm/tlbflush.h>
|
||||
#include <asm/div64.h>
|
||||
@@ -4725,6 +4726,7 @@ __alloc_pages_direct_reclaim(gfp_t gfp_mask, unsigned int order,
|
||||
struct page *page = NULL;
|
||||
unsigned long pflags;
|
||||
bool drained = false;
|
||||
bool skip_pcp_drain = false;
|
||||
|
||||
psi_memstall_enter(&pflags);
|
||||
*did_some_progress = __perform_reclaim(gfp_mask, order, ac);
|
||||
@@ -4741,7 +4743,10 @@ retry:
|
||||
*/
|
||||
if (!page && !drained) {
|
||||
unreserve_highatomic_pageblock(ac, false);
|
||||
drain_all_pages(NULL);
|
||||
trace_android_vh_drain_all_pages_bypass(gfp_mask, order,
|
||||
alloc_flags, ac->migratetype, *did_some_progress, &skip_pcp_drain);
|
||||
if (!skip_pcp_drain)
|
||||
drain_all_pages(NULL);
|
||||
drained = true;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user