From f571d0bdaaf646036f73ce3155a447c6ba04bd37 Mon Sep 17 00:00:00 2001 From: "karam.lee" Date: Thu, 25 Jul 2024 15:35:02 +0900 Subject: [PATCH] ANDROID: power: add vendor hook to handle hibernate failures The driver or external module may need handling due to hibernate failure. This error cannot be detected outside of the hibernate() function. so Add a vendor hook to receive and handle errors in hibernate(). Bug: 342523877 Change-Id: I221e26f571d94e5d5c5aae19937945bb8981f85b Signed-off-by: karam.lee --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/power.h | 4 ++++ kernel/power/main.c | 3 +++ 3 files changed, 8 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 79127e704342..0d33ee078bd6 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -440,3 +440,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_folio_trylock_result); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_folio_trylock_clear); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_folio_trylock_set); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_handle_trylock_failed_folio); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_hibernate_state); diff --git a/include/trace/hooks/power.h b/include/trace/hooks/power.h index e845d0ef6025..fcbba69b3f24 100644 --- a/include/trace/hooks/power.h +++ b/include/trace/hooks/power.h @@ -33,6 +33,10 @@ DECLARE_HOOK(android_vh_freq_qos_remove_request, TP_PROTO(struct freq_qos_request *req), TP_ARGS(req)); +DECLARE_HOOK(android_vh_hibernate_state, + TP_PROTO(int error), + TP_ARGS(error)); + #endif /* _TRACE_HOOK_POWER_H */ /* This part must be outside protection */ #include diff --git a/kernel/power/main.c b/kernel/power/main.c index 31ec4a9b9d70..31547d847d06 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -16,6 +16,8 @@ #include #include #include +#include +#include #include "power.h" @@ -639,6 +641,7 @@ static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, error = pm_suspend(state); } else if (state == PM_SUSPEND_MAX) { error = hibernate(); + trace_android_vh_hibernate_state(error); } else { error = -EINVAL; }