Commit b5fbe819 authored by Rui Miguel Silva's avatar Rui Miguel Silva Committed by Greg Kroah-Hartman

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: default avatarRui Miguel Silva <rui.silva@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 5f66d62e
......@@ -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 gb_power_supply_status_get(struct gb_power_supply *gbpsy)
static int is_cache_valid(struct gb_power_supply *gbpsy)
{
int ret = 0;
int i;
/* check if cache is good enough or it has expired */
if (gbpsy->cache_invalid) {
gbpsy->cache_invalid = 0;
return 0;
}
/* check if cache is good enough */
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;
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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment