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

Commit 3db7f64d authored by Gilad Broner's avatar Gilad Broner
Browse files

tspp2: Fix event callback deadlock



TSPP2 driver triggers client callback for events.
During the callback tspp2 driver hold the device mutex, which
can cause a deadlock if client calls any TSPP2 driver API
which try to lock this mutex as well.

Change-Id: I9868eb346cb6d332010f5e5bf466adbc537f910f
Signed-off-by: default avatarGilad Broner <gbroner@codeaurora.org>
parent 57387ee5
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -1820,17 +1820,21 @@ static void tspp2_event_work_handler(struct work_struct *work)
{
	struct tspp2_event_work *event_work =
		container_of(work, struct tspp2_event_work, work);
	struct tspp2_event_work cb_info = *event_work;

	if (mutex_lock_interruptible(&event_work->device->mutex))
		return;

	if (event_work->callback)
		event_work->callback(event_work->cookie,
					event_work->event_bitmask);

	list_add_tail(&event_work->link, &event_work->device->free_work_list);

	mutex_unlock(&event_work->device->mutex);

	/*
	 * Must run callback with tspp2 device mutex unlocked,
	 * as callback might call tspp2 driver API and cause a deadlock.
	 */
	if (cb_info.callback)
		cb_info.callback(cb_info.cookie, cb_info.event_bitmask);
}

/**