mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-01 00:36:40 +09:00
greybus: power_supply: invalidate cache at update request
When we receive a update request we shall not trust the cache mechanism and for that we need a way to invalidate the cache. Add a field that will control the cache status and refactor the code to check if cache is valid in a helper function. This will fix the scenario where an update request is received within the cache expiration time after a previous update as happened and would be ignored. Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5f66d62e83
commit
b5fbe819af
@@ -45,6 +45,7 @@ struct gb_power_supply {
|
||||
u8 properties_count;
|
||||
u8 properties_count_str;
|
||||
unsigned long last_update;
|
||||
u8 cache_invalid;
|
||||
unsigned int update_interval;
|
||||
bool changed;
|
||||
struct gb_power_supply_prop *props;
|
||||
@@ -636,15 +637,28 @@ static int _gb_power_supply_property_get(struct gb_power_supply *gbpsy,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int is_cache_valid(struct gb_power_supply *gbpsy)
|
||||
{
|
||||
/* check if cache is good enough or it has expired */
|
||||
if (gbpsy->cache_invalid) {
|
||||
gbpsy->cache_invalid = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (gbpsy->last_update &&
|
||||
time_is_after_jiffies(gbpsy->last_update +
|
||||
msecs_to_jiffies(cache_time)))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gb_power_supply_status_get(struct gb_power_supply *gbpsy)
|
||||
{
|
||||
int ret = 0;
|
||||
int i;
|
||||
|
||||
/* check if cache is good enough */
|
||||
if (gbpsy->last_update &&
|
||||
time_is_after_jiffies(gbpsy->last_update +
|
||||
msecs_to_jiffies(cache_time)))
|
||||
if (is_cache_valid(gbpsy))
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < gbpsy->properties_count; i++) {
|
||||
@@ -987,8 +1001,15 @@ static int gb_supplies_request_handler(struct gb_operation *op)
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
if (event & GB_POWER_SUPPLY_UPDATE)
|
||||
if (event & GB_POWER_SUPPLY_UPDATE) {
|
||||
/*
|
||||
* we need to make sure we invalidate cache, if not no new
|
||||
* values for the properties will be fetch and the all propose
|
||||
* of this event is missed
|
||||
*/
|
||||
gbpsy->cache_invalid = 1;
|
||||
gb_power_supply_status_update(gbpsy);
|
||||
}
|
||||
|
||||
out_unlock:
|
||||
mutex_unlock(&supplies->supplies_lock);
|
||||
|
||||
Reference in New Issue
Block a user