From d70f124deacecf238120135d8939a722e5ca44e0 Mon Sep 17 00:00:00 2001 From: Amit Pundir Date: Thu, 23 Feb 2017 16:02:45 -0800 Subject: [PATCH] ANDROID: idle_notifier: Add generic idle notifiers AOSP Change-ID: Idf29cda15be151f494ff245933c12462643388d5 moved x86_64 idle notifiers as generic so that they can be used in interactive governor. Upstream change 8e7a7ee9ddd5 ("x86/idle: Remove idle_notifier") removed x86_64 idle notifiers altogether. This patch add generic idle notifiers again. Fixes: android-4.9 commit bfd2a547fc17 ("ANDROID: ARM: Call idle notifiers") Change-Id: I94a66c74616a4108f4ed49f9afb2447079599f90 Signed-off-by: Amit Pundir Signed-off-by: Liang Chen (cherry picked from https://android.googlesource.com/kernel/msm commit c2461bc0a4001a35cc3876c62ff27220467efe66) --- include/linux/cpu.h | 7 +++++++ kernel/cpu.c | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 006f69f9277b..6fb1f807f394 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h @@ -217,4 +217,11 @@ static inline bool cpu_mitigations_auto_nosmt(void) return cpu_mitigations == CPU_MITIGATIONS_AUTO_NOSMT; } +#define IDLE_START 1 +#define IDLE_END 2 + +void idle_notifier_register(struct notifier_block *n); +void idle_notifier_unregister(struct notifier_block *n); +void idle_notifier_call_chain(unsigned long val); + #endif /* _LINUX_CPU_H_ */ diff --git a/kernel/cpu.c b/kernel/cpu.c index 6ebbdf5c8bf5..c31b02aae6db 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -2306,3 +2306,23 @@ static int __init mitigations_parse_cmdline(char *arg) return 0; } early_param("mitigations", mitigations_parse_cmdline); + +static ATOMIC_NOTIFIER_HEAD(idle_notifier); + +void idle_notifier_register(struct notifier_block *n) +{ + atomic_notifier_chain_register(&idle_notifier, n); +} +EXPORT_SYMBOL_GPL(idle_notifier_register); + +void idle_notifier_unregister(struct notifier_block *n) +{ + atomic_notifier_chain_unregister(&idle_notifier, n); +} +EXPORT_SYMBOL_GPL(idle_notifier_unregister); + +void idle_notifier_call_chain(unsigned long val) +{ + atomic_notifier_call_chain(&idle_notifier, val, NULL); +} +EXPORT_SYMBOL_GPL(idle_notifier_call_chain);