Sfoglia il codice sorgente

ANDROID: freezer: Add vendor hook to freezer for GKI purpose.

Add the vendor hook to freezer.c, because of some special cases related to our feature, we do not want the process to be frozen immediately, so we add the hook at __refrigerator to make sure we can go to our own freeze logic when the process is about to be frozen.

Bug: 187458531

Signed-off-by: heshuai1 <[email protected]>
Change-Id: Iea42fd9604d6b33ccd6502425416f0dd28eecebb
heshuai1 4 anni fa
parent
commit
a1580311c3
3 ha cambiato i file con 8 aggiunte e 0 eliminazioni
  1. 1 0
      drivers/android/vendor_hooks.c
  2. 3 0
      include/trace/hooks/cgroup.h
  3. 4 0
      kernel/freezer.c

+ 1 - 0
drivers/android/vendor_hooks.c

@@ -68,6 +68,7 @@
 EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_fair);
 EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_rt);
 EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_fallback_rq);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_refrigerator);
 EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_scheduler_tick);
 EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_enqueue_task);
 EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dequeue_task);

+ 3 - 0
include/trace/hooks/cgroup.h

@@ -18,6 +18,9 @@ DECLARE_RESTRICTED_HOOK(android_rvh_cpuset_fork,
 DECLARE_RESTRICTED_HOOK(android_rvh_cgroup_force_kthread_migration,
 	TP_PROTO(struct task_struct *tsk, struct cgroup *dst_cgrp, bool *force_migration),
 	TP_ARGS(tsk, dst_cgrp, force_migration), 1);
+DECLARE_RESTRICTED_HOOK(android_rvh_refrigerator,
+	TP_PROTO(bool f),
+	TP_ARGS(f), 1);
 
 struct cgroup_subsys;
 struct cgroup_taskset;

+ 4 - 0
kernel/freezer.c

@@ -13,6 +13,9 @@
 #include <linux/kthread.h>
 #include <linux/mmu_context.h>
 
+#undef CREATE_TRACE_POINT
+#include <trace/hooks/cgroup.h>
+
 /* total number of freezing conditions in effect */
 atomic_t system_freezing_cnt = ATOMIC_INIT(0);
 EXPORT_SYMBOL(system_freezing_cnt);
@@ -71,6 +74,7 @@ bool __refrigerator(bool check_kthr_stop)
 		if (!freezing(current) ||
 		    (check_kthr_stop && kthread_should_stop()))
 			current->flags &= ~PF_FROZEN;
+		trace_android_rvh_refrigerator(pm_nosig_freezing);
 		spin_unlock_irq(&freezer_lock);
 
 		if (!(current->flags & PF_FROZEN))