From 904aa6c75fba3f150ce57a6c8471fe93b603478b Mon Sep 17 00:00:00 2001 From: Sai Charan Gurrappadi Date: Tue, 10 Jul 2012 17:33:58 -0700 Subject: [PATCH] ARM: tegra: cpuquiet: Notify the cpuquiet governor when the driver is busy Added generic busy/free notifiers that the driver can invoke to let the governor know that it cannot process further core online/offline requests (invoked in our case whenever we switch to the LP cluster). Change-Id: I5e3f7f28f38806a7f87050e8d0c8d2f2cf7521aa Signed-off-by: Sai Charan Gurrappadi Reviewed-on: http://git-master/r/114807 Reviewed-by: Lokesh Pathak Tested-by: Lokesh Pathak --- drivers/cpuquiet/governor.c | 14 ++++++++++++++ include/linux/cpuquiet.h | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/drivers/cpuquiet/governor.c b/drivers/cpuquiet/governor.c index 7895fccc7f42..176ba3bd705f 100644 --- a/drivers/cpuquiet/governor.c +++ b/drivers/cpuquiet/governor.c @@ -100,3 +100,17 @@ void cpuquiet_unregister_governor(struct cpuquiet_governor *gov) list_del(&gov->governor_list); mutex_unlock(&cpuquiet_lock); } + +void cpuquiet_device_busy(void) +{ + if (cpuquiet_curr_governor && + cpuquiet_curr_governor->device_busy_notification) + cpuquiet_curr_governor->device_busy_notification(); +} + +void cpuquiet_device_free(void) +{ + if (cpuquiet_curr_governor && + cpuquiet_curr_governor->device_free_notification) + cpuquiet_curr_governor->device_free_notification(); +} diff --git a/include/linux/cpuquiet.h b/include/linux/cpuquiet.h index fe5a03727739..5558c015bb50 100644 --- a/include/linux/cpuquiet.h +++ b/include/linux/cpuquiet.h @@ -30,6 +30,8 @@ struct cpuquiet_governor { int (*start) (void); void (*stop) (void); int (*store_active) (unsigned int cpu, bool active); + void (*device_free_notification) (void); + void (*device_busy_notification) (void); struct module *owner; }; @@ -47,6 +49,8 @@ extern int cpuquiet_register_driver(struct cpuquiet_driver *drv); extern void cpuquiet_unregister_driver(struct cpuquiet_driver *drv); extern int cpuquiet_add_group(struct attribute_group *attrs); extern void cpuquiet_remove_group(struct attribute_group *attrs); +extern void cpuquiet_device_busy(void); +extern void cpuquiet_device_free(void); int cpuquiet_kobject_init(struct kobject *kobj, struct kobj_type *type, char *name); extern unsigned int nr_cluster_ids; -- 2.34.1