platform/chrome: cros_ec_typec: Flush pending work
authorPrashant Malani <pmalani@chromium.org>
Thu, 11 Feb 2021 19:32:21 +0000 (11:32 -0800)
committerBenson Leung <bleung@chromium.org>
Thu, 11 Feb 2021 21:18:46 +0000 (13:18 -0800)
When a PD notifier event arrives, a new work event won't be enqueued if
the current one hasn't completed. This could lead to dropped events.

So, flush any pending work before scheduling the new instance.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
Link: https://lore.kernel.org/r/20210211193221.610867-1-pmalani@chromium.org
Signed-off-by: Benson Leung <bleung@chromium.org>
drivers/platform/chrome/cros_ec_typec.c

index db83c03ae5cda7ca309a3175ac85ec3576b0e474..2fac95e7a455177e6e4117b192a19724baf65fa3 100644 (file)
@@ -1031,6 +1031,7 @@ static int cros_ec_typec_event(struct notifier_block *nb,
 {
        struct cros_typec_data *typec = container_of(nb, struct cros_typec_data, nb);
 
+       flush_work(&typec->port_work);
        schedule_work(&typec->port_work);
 
        return NOTIFY_OK;