summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJett Rink <jettrink@chromium.org>2019-06-13 13:27:38 -0600
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-05-17 01:20:04 +0000
commitb2b4b5ed760e69c560558d3031d1e272742b334e (patch)
tree291096542307e93c131169032256d53792ab61b8
parent77989be08c17cf6a703d34ac59d6ad424d05487b (diff)
downloadchrome-ec-b2b4b5ed760e69c560558d3031d1e272742b334e.tar.gz
motionsense: prevent loop after missing events
We don't need to loop to figure out when to schedule the next sensor collection event, just schedule it as soon as possible. This eliminates a watchdog reset when we miss scheduling the sensor task and get really far behind. BRANCH=none BUG=b:133190570 TEST=normal operation is fine, based on longs of failing results in bug, this should prevent the watch reset. Change-Id: I3001028ba393b51d1958f0136ba040eaee5e52d1 Signed-off-by: Jett Rink <jettrink@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1658521 Reviewed-by: Yuval Peress <peress@chromium.org> Reviewed-by: Jack Rosenthal <jrosenth@chromium.org> (cherry picked from commit 8374923a60c8b63b7bb2c1823e4f5b6078544e44) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3649255 Reviewed-by: Gwendal Grignou <gwendal@chromium.org> Tested-by: Boris Mittelberg <bmbm@google.com> Commit-Queue: Boris Mittelberg <bmbm@google.com> Reviewed-by: Ricardo Quesada <ricardoq@chromium.org>
-rw-r--r--common/motion_sense.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/common/motion_sense.c b/common/motion_sense.c
index 25b3211759..6b5df3f74e 100644
--- a/common/motion_sense.c
+++ b/common/motion_sense.c
@@ -697,19 +697,21 @@ static inline void increment_sensor_collection(struct motion_sensor_t *sensor,
{
sensor->next_collection += sensor->collection_rate;
- while (time_after(ts->le.lo, sensor->next_collection)) {
+ if (time_after(ts->le.lo, sensor->next_collection)) {
/*
* If we get here it means that we completely missed a sensor
- * collection time and we attempt to recover by incrementing
- * the next collection time until we recover. This should not
- * happen and if it does it means that the ec cannot handle the
- * requested data rate.
+ * collection time and we attempt to recover by scheduling as
+ * soon as possible. This should not happen and if it does it
+ * means that the ec cannot handle the requested data rate.
*/
+ int missed_events =
+ time_until(sensor->next_collection, ts->le.lo) /
+ sensor->collection_rate;
- CPRINTS("%s Missed data collection at %u - rate: %d",
- sensor->name, sensor->next_collection,
+ CPRINTS("%s Missed %d data collections at %u - rate: %d",
+ sensor->name, missed_events, sensor->next_collection,
sensor->collection_rate);
- sensor->next_collection += sensor->collection_rate;
+ sensor->next_collection = ts->le.lo + motion_min_interval;
}
}