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

Commit a3589a09 authored by Tejas Prajapati's avatar Tejas Prajapati
Browse files

msm: camera: reqmgr: check link state before taking mutex



In case if the destroy session is processed first it will
as a part of unlink try to drain the work queue. This will
schedule all the enqueued wq. Workqueue when scheduled
try to acquire same mutex destroy session has already acquried
this will lead to dead-lock. To avoid that, check the link
state first if it is in idle state then return from the
workqueue without trying to acquire mutex.

CRs-Fixed: 29763254
Change-Id: I57a53455c69e5f4f38c92413f9d1b7f2d06c9960
Signed-off-by: default avatarTejas Prajapati <tpraja@codeaurora.org>
parent 786e1d8b
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -1714,6 +1714,19 @@ static int __cam_req_mgr_process_req(struct cam_req_mgr_core_link *link,
		return -EINVAL;
	}

	/*
	 * In case if the wq is scheduled while destroying session
	 * the session mutex is already taken and will cause a
	 * dead lock. To avoid further processing check link state
	 * and exit.
	 */
	spin_lock_bh(&link->link_state_spin_lock);
	if (link->state == CAM_CRM_LINK_STATE_IDLE) {
		spin_unlock_bh(&link->link_state_spin_lock);
		return -EPERM;
	}
	spin_unlock_bh(&link->link_state_spin_lock);

	mutex_lock(&session->lock);
	in_q = link->req.in_q;
	/*