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

Commit 0329ebad authored by Manish Poddar's avatar Manish Poddar Committed by Gerrit - the friendly Code Review server
Browse files

msm: camera: add different mutex lock for QBUF/DQBUF



In liveshot case stream on is in progress and
it take ~90msecs on 8952. DQBUF/QBUF is stuck
at mutex lock as same mutex lock is used
in msm_post_event,it leads to framedrop.
To avoid this create a separate mutex lock for
QBUF/DQBUF.

Change-Id: I86348313416500c9f75d9920df100d24c7d9fa5b
Signed-off-by: default avatarManish Poddar <mpoddar@codeaurora.org>
parent 4ecf6fb5
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -208,9 +208,9 @@ static int camera_v4l2_reqbufs(struct file *filep, void *fh,
	session = msm_session_find(session_id);
	if (WARN_ON(!session))
		return -EIO;
	mutex_lock(&session->lock);
	mutex_lock(&session->lock_q);
	ret = vb2_reqbufs(&sp->vb2_q, req);
	mutex_unlock(&session->lock);
	mutex_unlock(&session->lock_q);
	return ret;
}

@@ -231,9 +231,9 @@ static int camera_v4l2_qbuf(struct file *filep, void *fh,
	session = msm_session_find(session_id);
	if (WARN_ON(!session))
		return -EIO;
	mutex_lock(&session->lock);
	mutex_lock(&session->lock_q);
	ret = vb2_qbuf(&sp->vb2_q, pb);
	mutex_unlock(&session->lock);
	mutex_unlock(&session->lock_q);
	return ret;
}

@@ -248,9 +248,9 @@ static int camera_v4l2_dqbuf(struct file *filep, void *fh,
	session = msm_session_find(session_id);
	if (WARN_ON(!session))
		return -EIO;
	mutex_lock(&session->lock);
	mutex_lock(&session->lock_q);
	ret = vb2_dqbuf(&sp->vb2_q, pb, filep->f_flags & O_NONBLOCK);
	mutex_unlock(&session->lock);
	mutex_unlock(&session->lock_q);
	return ret;
}

+2 −0
Original line number Diff line number Diff line
@@ -389,6 +389,7 @@ int msm_create_session(unsigned int session_id, struct video_device *vdev)
	msm_init_queue(&session->stream_q);
	msm_enqueue(msm_session_q, &session->list);
	mutex_init(&session->lock);
	mutex_init(&session->lock_q);
	return 0;
}

@@ -546,6 +547,7 @@ int msm_destroy_session(unsigned int session_id)
	msm_destroy_session_streams(session);
	msm_remove_session_cmd_ack_q(session);
	mutex_destroy(&session->lock);
	mutex_destroy(&session->lock_q);
	msm_delete_entry(msm_session_q, struct msm_session,
		list, session);
	buf_mgr_subdev = msm_buf_mngr_get_subdev();
+1 −0
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ struct msm_session {
	 * session struct msm_stream */
	struct msm_queue_head stream_q;
	struct mutex lock;
	struct mutex lock_q;
};

void msm_pm_qos_update_request(int val);