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

Commit 8fe8b521 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: cvp: Fix a CVP SSR deadlock"

parents 0dcf1779 297ef033
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -2138,16 +2138,19 @@ static int iris_hfi_core_trigger_ssr(void *device,
	}

	dev = device;
	mutex_lock(&dev->lock);

	if (mutex_trylock(&dev->lock)) {
		rc = call_hfi_pkt_op(dev, ssr_cmd, type, &pkt);
		if (rc) {
		dprintk(CVP_ERR, "%s: failed to create packet\n", __func__);
			dprintk(CVP_ERR, "%s: failed to create packet\n",
					__func__);
			goto err_create_pkt;
		}

		if (__iface_cmdq_write(dev, &pkt))
			rc = -ENOTEMPTY;
	} else {
		return -EAGAIN;
	}

err_create_pkt:
	mutex_unlock(&dev->lock);
+8 −0
Original line number Diff line number Diff line
@@ -1397,6 +1397,7 @@ void msm_cvp_ssr_handler(struct work_struct *work)
		return;
	}

send_again:
	mutex_lock(&core->lock);
	if (core->state == CVP_CORE_INIT_DONE) {
		dprintk(CVP_WARN, "%s: ssr type %d\n", __func__,
@@ -1411,6 +1412,13 @@ void msm_cvp_ssr_handler(struct work_struct *work)
		rc = call_hfi_op(hdev, core_trigger_ssr,
				hdev->hfi_device_data, core->ssr_type);
		if (rc) {
			if (rc == -EAGAIN) {
				core->trigger_ssr = false;
				mutex_unlock(&core->lock);
				usleep_range(500, 1000);
				dprintk(CVP_WARN, "Retry ssr\n");
				goto send_again;
			}
			dprintk(CVP_ERR, "%s: trigger_ssr failed\n",
				__func__);
			core->trigger_ssr = false;