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/ftrace_dump.h>
|
||||||
#include <trace/hooks/ufshcd.h>
|
#include <trace/hooks/ufshcd.h>
|
||||||
#include <trace/hooks/block.h>
|
#include <trace/hooks/block.h>
|
||||||
|
#include <trace/hooks/buffer.h>
|
||||||
#include <trace/hooks/cgroup.h>
|
#include <trace/hooks/cgroup.h>
|
||||||
#include <trace/hooks/sys.h>
|
#include <trace/hooks/sys.h>
|
||||||
#include <trace/hooks/iommu.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_start);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_zap_pte_range_tlb_force_flush);
|
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_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 "internal.h"
|
||||||
|
|
||||||
|
#include <trace/hooks/buffer.h>
|
||||||
|
|
||||||
static int fsync_buffers_list(spinlock_t *lock, struct list_head *list);
|
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,
|
static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh,
|
||||||
enum rw_hint hint, struct writeback_control *wbc);
|
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 buffer_head *evictee = bh;
|
||||||
struct bh_lru *b;
|
struct bh_lru *b;
|
||||||
int i;
|
int i;
|
||||||
|
bool skip = false;
|
||||||
|
|
||||||
check_irqs_on();
|
check_irqs_on();
|
||||||
bh_lru_lock();
|
bh_lru_lock();
|
||||||
@@ -1248,6 +1251,12 @@ static void bh_lru_install(struct buffer_head *bh)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace_android_vh_bh_lru_install(bh->b_page, &skip);
|
||||||
|
if (skip) {
|
||||||
|
bh_lru_unlock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
b = this_cpu_ptr(&bh_lrus);
|
b = this_cpu_ptr(&bh_lrus);
|
||||||
for (i = 0; i < BH_LRU_SIZE; i++) {
|
for (i = 0; i < BH_LRU_SIZE; i++) {
|
||||||
swap(evictee, b->bhs[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,
|
DECLARE_HOOK(android_vh_zap_pte_range_tlb_end,
|
||||||
TP_PROTO(void *ret),
|
TP_PROTO(void *ret),
|
||||||
TP_ARGS(ret));
|
TP_ARGS(ret));
|
||||||
|
DECLARE_HOOK(android_vh_skip_lru_disable,
|
||||||
|
TP_PROTO(bool *skip),
|
||||||
|
TP_ARGS(skip));
|
||||||
struct mem_cgroup;
|
struct mem_cgroup;
|
||||||
DECLARE_HOOK(android_vh_mem_cgroup_alloc,
|
DECLARE_HOOK(android_vh_mem_cgroup_alloc,
|
||||||
TP_PROTO(struct mem_cgroup *memcg),
|
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 tries = 0;
|
||||||
unsigned int max_tries = 5;
|
unsigned int max_tries = 5;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
bool skip = false;
|
||||||
struct page *page;
|
struct page *page;
|
||||||
struct migration_target_control mtc = {
|
struct migration_target_control mtc = {
|
||||||
.nid = zone_to_nid(cc->zone),
|
.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)
|
if (cc->alloc_contig && cc->mode == MIGRATE_ASYNC)
|
||||||
max_tries = 1;
|
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)) {
|
while (pfn < end || !list_empty(&cc->migratepages)) {
|
||||||
if (fatal_signal_pending(current)) {
|
if (fatal_signal_pending(current)) {
|
||||||
@@ -9204,7 +9207,8 @@ static int __alloc_contig_migrate_range(struct compact_control *cc,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
lru_cache_enable();
|
if (!skip)
|
||||||
|
lru_cache_enable();
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (ret == -EBUSY) {
|
if (ret == -EBUSY) {
|
||||||
struct page *page;
|
struct page *page;
|
||||||
|
|||||||
Reference in New Issue
Block a user