ANDROID: vendor hook to control bh_lru and lru_cache_disable
Add vendor hook for bh_lru and lru_cache_disable Bug: 238728493 Signed-off-by: Minchan Kim <minchan@google.com> Change-Id: I81bfad317cf6e8633186ebb3238644306d7a102d Signed-off-by: Richard Chang <richardycc@google.com> (cherry picked from commit 74e2ea264cd1895c493b9008b62bfea98dacf3f6)
This commit is contained in:
committed by
Richard Chang
parent
243f54dd3a
commit
ba005d6032
@@ -30,6 +30,7 @@
|
||||
#include <trace/hooks/ftrace_dump.h>
|
||||
#include <trace/hooks/ufshcd.h>
|
||||
#include <trace/hooks/block.h>
|
||||
#include <trace/hooks/buffer.h>
|
||||
#include <trace/hooks/cgroup.h>
|
||||
#include <trace/hooks/sys.h>
|
||||
#include <trace/hooks/iommu.h>
|
||||
@@ -282,3 +283,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_pagevec_drain);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_zap_pte_range_tlb_start);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_zap_pte_range_tlb_force_flush);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_zap_pte_range_tlb_end);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_bh_lru_install);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_skip_lru_disable);
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
#include <trace/hooks/buffer.h>
|
||||
|
||||
static int fsync_buffers_list(spinlock_t *lock, struct list_head *list);
|
||||
static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh,
|
||||
enum rw_hint hint, struct writeback_control *wbc);
|
||||
@@ -1233,6 +1235,7 @@ static void bh_lru_install(struct buffer_head *bh)
|
||||
struct buffer_head *evictee = bh;
|
||||
struct bh_lru *b;
|
||||
int i;
|
||||
bool skip = false;
|
||||
|
||||
check_irqs_on();
|
||||
bh_lru_lock();
|
||||
@@ -1248,6 +1251,12 @@ static void bh_lru_install(struct buffer_head *bh)
|
||||
return;
|
||||
}
|
||||
|
||||
trace_android_vh_bh_lru_install(bh->b_page, &skip);
|
||||
if (skip) {
|
||||
bh_lru_unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
b = this_cpu_ptr(&bh_lrus);
|
||||
for (i = 0; i < BH_LRU_SIZE; i++) {
|
||||
swap(evictee, b->bhs[i]);
|
||||
|
||||
22
include/trace/hooks/buffer.h
Normal file
22
include/trace/hooks/buffer.h
Normal file
@@ -0,0 +1,22 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM buffer
|
||||
|
||||
#define TRACE_INCLUDE_PATH trace/hooks
|
||||
|
||||
#if !defined(_TRACE_HOOK_BUFFER_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_HOOK_BUFFER_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <trace/hooks/vendor_hooks.h>
|
||||
|
||||
DECLARE_HOOK(android_vh_bh_lru_install,
|
||||
TP_PROTO(struct page *page, bool *flush),
|
||||
TP_ARGS(page, flush));
|
||||
|
||||
/* macro versions of hooks are no longer required */
|
||||
|
||||
#endif /* _TRACE_HOOK_BUFFER_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
@@ -89,6 +89,9 @@ DECLARE_HOOK(android_vh_zap_pte_range_tlb_force_flush,
|
||||
DECLARE_HOOK(android_vh_zap_pte_range_tlb_end,
|
||||
TP_PROTO(void *ret),
|
||||
TP_ARGS(ret));
|
||||
DECLARE_HOOK(android_vh_skip_lru_disable,
|
||||
TP_PROTO(bool *skip),
|
||||
TP_ARGS(skip));
|
||||
struct mem_cgroup;
|
||||
DECLARE_HOOK(android_vh_mem_cgroup_alloc,
|
||||
TP_PROTO(struct mem_cgroup *memcg),
|
||||
|
||||
@@ -9153,6 +9153,7 @@ static int __alloc_contig_migrate_range(struct compact_control *cc,
|
||||
unsigned int tries = 0;
|
||||
unsigned int max_tries = 5;
|
||||
int ret = 0;
|
||||
bool skip = false;
|
||||
struct page *page;
|
||||
struct migration_target_control mtc = {
|
||||
.nid = zone_to_nid(cc->zone),
|
||||
@@ -9162,7 +9163,9 @@ static int __alloc_contig_migrate_range(struct compact_control *cc,
|
||||
if (cc->alloc_contig && cc->mode == MIGRATE_ASYNC)
|
||||
max_tries = 1;
|
||||
|
||||
lru_cache_disable();
|
||||
trace_android_vh_skip_lru_disable(&skip);
|
||||
if (!skip)
|
||||
lru_cache_disable();
|
||||
|
||||
while (pfn < end || !list_empty(&cc->migratepages)) {
|
||||
if (fatal_signal_pending(current)) {
|
||||
@@ -9204,7 +9207,8 @@ static int __alloc_contig_migrate_range(struct compact_control *cc,
|
||||
break;
|
||||
}
|
||||
|
||||
lru_cache_enable();
|
||||
if (!skip)
|
||||
lru_cache_enable();
|
||||
if (ret < 0) {
|
||||
if (ret == -EBUSY) {
|
||||
struct page *page;
|
||||
|
||||
Reference in New Issue
Block a user