diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 29bfdb257cb1..052767110f69 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -347,3 +347,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_fault_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_fault_end); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dma_heap_buffer_alloc_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dma_heap_buffer_alloc_end); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_zs_shrinker_adjust); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_zs_shrinker_bypass); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 96678366b2a5..71499ab8dac3 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -244,6 +244,12 @@ DECLARE_HOOK(android_vh_filemap_fault_start, DECLARE_HOOK(android_vh_filemap_fault_end, TP_PROTO(struct file *file, pgoff_t pgoff), TP_ARGS(file, pgoff)); +DECLARE_HOOK(android_vh_zs_shrinker_adjust, + TP_PROTO(unsigned long *pages_to_free), + TP_ARGS(pages_to_free)); +DECLARE_HOOK(android_vh_zs_shrinker_bypass, + TP_PROTO(bool *bypass), + TP_ARGS(bypass)); #endif /* _TRACE_HOOK_MM_H */ /* This part must be outside protection */ diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index bf6094f67d77..38f1abc0191a 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -65,6 +65,7 @@ #include #include #include +#include #define ZSPAGE_MAGIC 0x58 @@ -2056,6 +2057,11 @@ static unsigned long zs_shrinker_count(struct shrinker *shrinker, struct size_class *class; unsigned long pages_to_free = 0; struct zs_pool *pool = shrinker->private_data; + bool bypass = false; + + trace_android_vh_zs_shrinker_bypass(&bypass); + if (bypass) + return 0; for (i = ZS_SIZE_CLASSES - 1; i >= 0; i--) { class = pool->size_class[i]; @@ -2064,6 +2070,7 @@ static unsigned long zs_shrinker_count(struct shrinker *shrinker, pages_to_free += zs_can_compact(class); } + trace_android_vh_zs_shrinker_adjust(&pages_to_free); return pages_to_free; }