Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5de64233 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "workqueue: fix possible livelock with concurrent mod_delayed_work()"

parents deeaf080 df0a8b63
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@
#include <linux/uaccess.h>
#include <linux/sched/isolation.h>
#include <linux/nmi.h>
#include <linux/bug.h>
#include <linux/delay.h>

#include "workqueue_internal.h"

@@ -1274,6 +1276,12 @@ static int try_to_grab_pending(struct work_struct *work, bool is_dwork,
	if (work_is_canceling(work))
		return -ENOENT;
	cpu_relax();
	/*
	 * The queueing is in progress in another context. If we keep
	 * taking the pool->lock in a busy loop, the other context may
	 * never get the lock. Give 1 usec delay to avoid this contention.
	 */
	udelay(1);
	return -EAGAIN;
}