Merge "msm: ais: Instead of read_lock use read_lock_irqsave"
This commit is contained in:
commit
f76f194117
2 changed files with 51 additions and 43 deletions
|
@ -292,6 +292,7 @@ void msm_delete_stream(unsigned int session_id, unsigned int stream_id)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
unsigned long wl_flags;
|
||||||
|
|
||||||
if (try_count > 5) {
|
if (try_count > 5) {
|
||||||
pr_err("%s : not able to delete stream %d\n",
|
pr_err("%s : not able to delete stream %d\n",
|
||||||
|
@ -299,18 +300,20 @@ void msm_delete_stream(unsigned int session_id, unsigned int stream_id)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
write_lock(&session->stream_rwlock);
|
write_lock_irqsave(&session->stream_rwlock, wl_flags);
|
||||||
try_count++;
|
try_count++;
|
||||||
stream = msm_queue_find(&session->stream_q, struct msm_stream,
|
stream = msm_queue_find(&session->stream_q, struct msm_stream,
|
||||||
list, __msm_queue_find_stream, &stream_id);
|
list, __msm_queue_find_stream, &stream_id);
|
||||||
|
|
||||||
if (!stream) {
|
if (!stream) {
|
||||||
write_unlock(&session->stream_rwlock);
|
write_unlock_irqrestore(&session->stream_rwlock,
|
||||||
|
wl_flags);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msm_vb2_get_stream_state(stream) != 1) {
|
if (msm_vb2_get_stream_state(stream) != 1) {
|
||||||
write_unlock(&session->stream_rwlock);
|
write_unlock_irqrestore(&session->stream_rwlock,
|
||||||
|
wl_flags);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,7 +323,7 @@ void msm_delete_stream(unsigned int session_id, unsigned int stream_id)
|
||||||
kfree(stream);
|
kfree(stream);
|
||||||
stream = NULL;
|
stream = NULL;
|
||||||
spin_unlock_irqrestore(&(session->stream_q.lock), flags);
|
spin_unlock_irqrestore(&(session->stream_q.lock), flags);
|
||||||
write_unlock(&session->stream_rwlock);
|
write_unlock_irqrestore(&session->stream_rwlock, wl_flags);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,22 +47,23 @@ static int msm_vb2_buf_init(struct vb2_buffer *vb)
|
||||||
struct msm_session *session;
|
struct msm_session *session;
|
||||||
struct msm_vb2_buffer *msm_vb2_buf;
|
struct msm_vb2_buffer *msm_vb2_buf;
|
||||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||||
|
unsigned long rl_flags;
|
||||||
|
|
||||||
session = msm_get_session_from_vb2q(vb->vb2_queue);
|
session = msm_get_session_from_vb2q(vb->vb2_queue);
|
||||||
if (IS_ERR_OR_NULL(session))
|
if (IS_ERR_OR_NULL(session))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
read_lock(&session->stream_rwlock);
|
read_lock_irqsave(&session->stream_rwlock, rl_flags);
|
||||||
|
|
||||||
stream = msm_get_stream_from_vb2q(vb->vb2_queue);
|
stream = msm_get_stream_from_vb2q(vb->vb2_queue);
|
||||||
if (!stream) {
|
if (!stream) {
|
||||||
pr_err("%s: Couldn't find stream\n", __func__);
|
pr_err("%s: Couldn't find stream\n", __func__);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
msm_vb2_buf = container_of(vbuf, struct msm_vb2_buffer, vb2_v4l2_buf);
|
msm_vb2_buf = container_of(vbuf, struct msm_vb2_buffer, vb2_v4l2_buf);
|
||||||
msm_vb2_buf->in_freeq = 0;
|
msm_vb2_buf->in_freeq = 0;
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +72,7 @@ static void msm_vb2_buf_queue(struct vb2_buffer *vb)
|
||||||
struct msm_vb2_buffer *msm_vb2;
|
struct msm_vb2_buffer *msm_vb2;
|
||||||
struct msm_stream *stream;
|
struct msm_stream *stream;
|
||||||
struct msm_session *session;
|
struct msm_session *session;
|
||||||
unsigned long flags;
|
unsigned long flags, rl_flags;
|
||||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||||
|
|
||||||
msm_vb2 = container_of(vbuf, struct msm_vb2_buffer, vb2_v4l2_buf);
|
msm_vb2 = container_of(vbuf, struct msm_vb2_buffer, vb2_v4l2_buf);
|
||||||
|
@ -84,19 +85,19 @@ static void msm_vb2_buf_queue(struct vb2_buffer *vb)
|
||||||
if (IS_ERR_OR_NULL(session))
|
if (IS_ERR_OR_NULL(session))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
read_lock(&session->stream_rwlock);
|
read_lock_irqsave(&session->stream_rwlock, rl_flags);
|
||||||
|
|
||||||
stream = msm_get_stream_from_vb2q(vb->vb2_queue);
|
stream = msm_get_stream_from_vb2q(vb->vb2_queue);
|
||||||
if (!stream) {
|
if (!stream) {
|
||||||
pr_err("%s:%d] NULL stream", __func__, __LINE__);
|
pr_err("%s:%d] NULL stream", __func__, __LINE__);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&stream->stream_lock, flags);
|
spin_lock_irqsave(&stream->stream_lock, flags);
|
||||||
list_add_tail(&msm_vb2->list, &stream->queued_list);
|
list_add_tail(&msm_vb2->list, &stream->queued_list);
|
||||||
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void msm_vb2_buf_finish(struct vb2_buffer *vb)
|
static void msm_vb2_buf_finish(struct vb2_buffer *vb)
|
||||||
|
@ -104,7 +105,7 @@ static void msm_vb2_buf_finish(struct vb2_buffer *vb)
|
||||||
struct msm_vb2_buffer *msm_vb2;
|
struct msm_vb2_buffer *msm_vb2;
|
||||||
struct msm_stream *stream;
|
struct msm_stream *stream;
|
||||||
struct msm_session *session;
|
struct msm_session *session;
|
||||||
unsigned long flags;
|
unsigned long flags, rl_flags;
|
||||||
struct msm_vb2_buffer *msm_vb2_entry, *temp;
|
struct msm_vb2_buffer *msm_vb2_entry, *temp;
|
||||||
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
||||||
|
|
||||||
|
@ -118,12 +119,12 @@ static void msm_vb2_buf_finish(struct vb2_buffer *vb)
|
||||||
if (IS_ERR_OR_NULL(session))
|
if (IS_ERR_OR_NULL(session))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
read_lock(&session->stream_rwlock);
|
read_lock_irqsave(&session->stream_rwlock, rl_flags);
|
||||||
|
|
||||||
stream = msm_get_stream_from_vb2q(vb->vb2_queue);
|
stream = msm_get_stream_from_vb2q(vb->vb2_queue);
|
||||||
if (!stream) {
|
if (!stream) {
|
||||||
pr_err("%s:%d] NULL stream", __func__, __LINE__);
|
pr_err("%s:%d] NULL stream", __func__, __LINE__);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +137,7 @@ static void msm_vb2_buf_finish(struct vb2_buffer *vb)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void msm_vb2_stop_stream(struct vb2_queue *q)
|
static void msm_vb2_stop_stream(struct vb2_queue *q)
|
||||||
|
@ -144,19 +145,19 @@ static void msm_vb2_stop_stream(struct vb2_queue *q)
|
||||||
struct msm_vb2_buffer *msm_vb2, *temp;
|
struct msm_vb2_buffer *msm_vb2, *temp;
|
||||||
struct msm_stream *stream;
|
struct msm_stream *stream;
|
||||||
struct msm_session *session;
|
struct msm_session *session;
|
||||||
unsigned long flags;
|
unsigned long flags, rl_flags;
|
||||||
struct vb2_v4l2_buffer *vb2_v4l2_buf;
|
struct vb2_v4l2_buffer *vb2_v4l2_buf;
|
||||||
|
|
||||||
session = msm_get_session_from_vb2q(q);
|
session = msm_get_session_from_vb2q(q);
|
||||||
if (IS_ERR_OR_NULL(session))
|
if (IS_ERR_OR_NULL(session))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
read_lock(&session->stream_rwlock);
|
read_lock_irqsave(&session->stream_rwlock, rl_flags);
|
||||||
|
|
||||||
stream = msm_get_stream_from_vb2q(q);
|
stream = msm_get_stream_from_vb2q(q);
|
||||||
if (!stream) {
|
if (!stream) {
|
||||||
pr_err_ratelimited("%s:%d] NULL stream", __func__, __LINE__);
|
pr_err_ratelimited("%s:%d] NULL stream", __func__, __LINE__);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +177,7 @@ static void msm_vb2_stop_stream(struct vb2_queue *q)
|
||||||
msm_vb2->in_freeq = 0;
|
msm_vb2->in_freeq = 0;
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
int msm_vb2_get_stream_state(struct msm_stream *stream)
|
int msm_vb2_get_stream_state(struct msm_stream *stream)
|
||||||
|
@ -255,17 +256,17 @@ static struct vb2_v4l2_buffer *msm_vb2_get_buf(int session_id,
|
||||||
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
||||||
struct msm_session *session;
|
struct msm_session *session;
|
||||||
struct msm_vb2_buffer *msm_vb2 = NULL;
|
struct msm_vb2_buffer *msm_vb2 = NULL;
|
||||||
unsigned long flags;
|
unsigned long flags, rl_flags;
|
||||||
|
|
||||||
session = msm_get_session(session_id);
|
session = msm_get_session(session_id);
|
||||||
if (IS_ERR_OR_NULL(session))
|
if (IS_ERR_OR_NULL(session))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
read_lock(&session->stream_rwlock);
|
read_lock_irqsave(&session->stream_rwlock, rl_flags);
|
||||||
|
|
||||||
stream = msm_get_stream(session, stream_id);
|
stream = msm_get_stream(session, stream_id);
|
||||||
if (IS_ERR_OR_NULL(stream)) {
|
if (IS_ERR_OR_NULL(stream)) {
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,7 +292,7 @@ static struct vb2_v4l2_buffer *msm_vb2_get_buf(int session_id,
|
||||||
vb2_v4l2_buf = NULL;
|
vb2_v4l2_buf = NULL;
|
||||||
end:
|
end:
|
||||||
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return vb2_v4l2_buf;
|
return vb2_v4l2_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,18 +303,18 @@ static struct vb2_v4l2_buffer *msm_vb2_get_buf_by_idx(int session_id,
|
||||||
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
||||||
struct msm_session *session;
|
struct msm_session *session;
|
||||||
struct msm_vb2_buffer *msm_vb2 = NULL;
|
struct msm_vb2_buffer *msm_vb2 = NULL;
|
||||||
unsigned long flags;
|
unsigned long flags, rl_flags;
|
||||||
|
|
||||||
session = msm_get_session(session_id);
|
session = msm_get_session(session_id);
|
||||||
if (IS_ERR_OR_NULL(session))
|
if (IS_ERR_OR_NULL(session))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
read_lock(&session->stream_rwlock);
|
read_lock_irqsave(&session->stream_rwlock, rl_flags);
|
||||||
|
|
||||||
stream = msm_get_stream(session, stream_id);
|
stream = msm_get_stream(session, stream_id);
|
||||||
|
|
||||||
if (IS_ERR_OR_NULL(stream)) {
|
if (IS_ERR_OR_NULL(stream)) {
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +338,7 @@ static struct vb2_v4l2_buffer *msm_vb2_get_buf_by_idx(int session_id,
|
||||||
vb2_v4l2_buf = NULL;
|
vb2_v4l2_buf = NULL;
|
||||||
end:
|
end:
|
||||||
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return vb2_v4l2_buf;
|
return vb2_v4l2_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,17 +350,17 @@ static int msm_vb2_put_buf(struct vb2_v4l2_buffer *vb, int session_id,
|
||||||
struct msm_vb2_buffer *msm_vb2;
|
struct msm_vb2_buffer *msm_vb2;
|
||||||
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
unsigned long flags;
|
unsigned long flags, rl_flags;
|
||||||
|
|
||||||
session = msm_get_session(session_id);
|
session = msm_get_session(session_id);
|
||||||
if (IS_ERR_OR_NULL(session))
|
if (IS_ERR_OR_NULL(session))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
read_lock(&session->stream_rwlock);
|
read_lock_irqsave(&session->stream_rwlock, rl_flags);
|
||||||
|
|
||||||
stream = msm_get_stream(session, stream_id);
|
stream = msm_get_stream(session, stream_id);
|
||||||
if (IS_ERR_OR_NULL(stream)) {
|
if (IS_ERR_OR_NULL(stream)) {
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -374,6 +375,8 @@ static int msm_vb2_put_buf(struct vb2_v4l2_buffer *vb, int session_id,
|
||||||
pr_err("VB buffer is INVALID vb=%pK, ses_id=%d, str_id=%d\n",
|
pr_err("VB buffer is INVALID vb=%pK, ses_id=%d, str_id=%d\n",
|
||||||
vb, session_id, stream_id);
|
vb, session_id, stream_id);
|
||||||
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
||||||
|
read_unlock_irqrestore(&session->stream_rwlock,
|
||||||
|
rl_flags);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
msm_vb2 =
|
msm_vb2 =
|
||||||
|
@ -390,7 +393,7 @@ static int msm_vb2_put_buf(struct vb2_v4l2_buffer *vb, int session_id,
|
||||||
rc = -EINVAL;
|
rc = -EINVAL;
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,7 +401,7 @@ static int msm_vb2_buf_done(struct vb2_v4l2_buffer *vb, int session_id,
|
||||||
unsigned int stream_id, uint32_t sequence,
|
unsigned int stream_id, uint32_t sequence,
|
||||||
struct timeval *ts, uint32_t reserved)
|
struct timeval *ts, uint32_t reserved)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags, rl_flags;
|
||||||
struct msm_vb2_buffer *msm_vb2;
|
struct msm_vb2_buffer *msm_vb2;
|
||||||
struct msm_stream *stream;
|
struct msm_stream *stream;
|
||||||
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
||||||
|
@ -409,11 +412,11 @@ static int msm_vb2_buf_done(struct vb2_v4l2_buffer *vb, int session_id,
|
||||||
if (IS_ERR_OR_NULL(session))
|
if (IS_ERR_OR_NULL(session))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
read_lock(&session->stream_rwlock);
|
read_lock_irqsave(&session->stream_rwlock, rl_flags);
|
||||||
|
|
||||||
stream = msm_get_stream(session, stream_id);
|
stream = msm_get_stream(session, stream_id);
|
||||||
if (IS_ERR_OR_NULL(stream)) {
|
if (IS_ERR_OR_NULL(stream)) {
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -428,6 +431,8 @@ static int msm_vb2_buf_done(struct vb2_v4l2_buffer *vb, int session_id,
|
||||||
pr_err("VB buffer is INVALID ses_id=%d, str_id=%d, vb=%pK\n",
|
pr_err("VB buffer is INVALID ses_id=%d, str_id=%d, vb=%pK\n",
|
||||||
session_id, stream_id, vb);
|
session_id, stream_id, vb);
|
||||||
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
||||||
|
read_unlock_irqrestore(&session->stream_rwlock,
|
||||||
|
rl_flags);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
msm_vb2 = container_of(vb2_v4l2_buf,
|
msm_vb2 = container_of(vb2_v4l2_buf,
|
||||||
|
@ -448,7 +453,7 @@ static int msm_vb2_buf_done(struct vb2_v4l2_buffer *vb, int session_id,
|
||||||
rc = -EINVAL;
|
rc = -EINVAL;
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -459,18 +464,18 @@ long msm_vb2_return_buf_by_idx(int session_id, unsigned int stream_id,
|
||||||
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
||||||
struct msm_session *session;
|
struct msm_session *session;
|
||||||
struct msm_vb2_buffer *msm_vb2 = NULL;
|
struct msm_vb2_buffer *msm_vb2 = NULL;
|
||||||
unsigned long flags;
|
unsigned long flags, rl_flags;
|
||||||
long rc = -EINVAL;
|
long rc = -EINVAL;
|
||||||
|
|
||||||
session = msm_get_session(session_id);
|
session = msm_get_session(session_id);
|
||||||
if (IS_ERR_OR_NULL(session))
|
if (IS_ERR_OR_NULL(session))
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
read_lock(&session->stream_rwlock);
|
read_lock_irqsave(&session->stream_rwlock, rl_flags);
|
||||||
|
|
||||||
stream = msm_get_stream(session, stream_id);
|
stream = msm_get_stream(session, stream_id);
|
||||||
if (IS_ERR_OR_NULL(stream)) {
|
if (IS_ERR_OR_NULL(stream)) {
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -499,14 +504,14 @@ long msm_vb2_return_buf_by_idx(int session_id, unsigned int stream_id,
|
||||||
|
|
||||||
end:
|
end:
|
||||||
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(msm_vb2_return_buf_by_idx);
|
EXPORT_SYMBOL(msm_vb2_return_buf_by_idx);
|
||||||
|
|
||||||
static int msm_vb2_flush_buf(int session_id, unsigned int stream_id)
|
static int msm_vb2_flush_buf(int session_id, unsigned int stream_id)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags, rl_flags;
|
||||||
struct msm_vb2_buffer *msm_vb2;
|
struct msm_vb2_buffer *msm_vb2;
|
||||||
struct msm_stream *stream;
|
struct msm_stream *stream;
|
||||||
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
struct vb2_v4l2_buffer *vb2_v4l2_buf = NULL;
|
||||||
|
@ -516,11 +521,11 @@ static int msm_vb2_flush_buf(int session_id, unsigned int stream_id)
|
||||||
if (IS_ERR_OR_NULL(session))
|
if (IS_ERR_OR_NULL(session))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
read_lock(&session->stream_rwlock);
|
read_lock_irqsave(&session->stream_rwlock, rl_flags);
|
||||||
|
|
||||||
stream = msm_get_stream(session, stream_id);
|
stream = msm_get_stream(session, stream_id);
|
||||||
if (IS_ERR_OR_NULL(stream)) {
|
if (IS_ERR_OR_NULL(stream)) {
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -532,7 +537,7 @@ static int msm_vb2_flush_buf(int session_id, unsigned int stream_id)
|
||||||
msm_vb2->in_freeq = 0;
|
msm_vb2->in_freeq = 0;
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
spin_unlock_irqrestore(&stream->stream_lock, flags);
|
||||||
read_unlock(&session->stream_rwlock);
|
read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue