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

Commit 047ccea1 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: ais: Instead of read_lock use read_lock_irqsave"

parents 67b982de e06958c6
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -292,6 +292,7 @@ void msm_delete_stream(unsigned int session_id, unsigned int stream_id)
		return;

	while (1) {
		unsigned long wl_flags;

		if (try_count > 5) {
			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;
		}

		write_lock(&session->stream_rwlock);
		write_lock_irqsave(&session->stream_rwlock, wl_flags);
		try_count++;
		stream = msm_queue_find(&session->stream_q, struct msm_stream,
			list, __msm_queue_find_stream, &stream_id);

		if (!stream) {
			write_unlock(&session->stream_rwlock);
			write_unlock_irqrestore(&session->stream_rwlock,
				wl_flags);
			return;
		}

		if (msm_vb2_get_stream_state(stream) != 1) {
			write_unlock(&session->stream_rwlock);
			write_unlock_irqrestore(&session->stream_rwlock,
				wl_flags);
			continue;
		}

@@ -320,7 +323,7 @@ void msm_delete_stream(unsigned int session_id, unsigned int stream_id)
		kfree(stream);
		stream = NULL;
		spin_unlock_irqrestore(&(session->stream_q.lock), flags);
		write_unlock(&session->stream_rwlock);
		write_unlock_irqrestore(&session->stream_rwlock, wl_flags);
		break;
	}

+44 −39
Original line number Diff line number Diff line
@@ -46,22 +46,23 @@ int msm_vb2_buf_init(struct vb2_buffer *vb)
	struct msm_stream *stream;
	struct msm_session *session;
	struct msm_vb2_buffer *msm_vb2_buf;
	unsigned long rl_flags;

	session = msm_get_session_from_vb2q(vb->vb2_queue);
	if (IS_ERR_OR_NULL(session))
		return -EINVAL;

	read_lock(&session->stream_rwlock);
	read_lock_irqsave(&session->stream_rwlock, rl_flags);

	stream = msm_get_stream_from_vb2q(vb->vb2_queue);
	if (!stream) {
		pr_err("%s: Couldn't find stream\n", __func__);
		read_unlock(&session->stream_rwlock);
		read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
		return -EINVAL;
	}
	msm_vb2_buf = container_of(vb, struct msm_vb2_buffer, vb2_buf);
	msm_vb2_buf->in_freeq = 0;
	read_unlock(&session->stream_rwlock);
	read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
	return 0;
}

@@ -70,7 +71,7 @@ static void msm_vb2_buf_queue(struct vb2_buffer *vb)
	struct msm_vb2_buffer *msm_vb2;
	struct msm_stream *stream;
	struct msm_session *session;
	unsigned long flags;
	unsigned long flags, rl_flags;

	msm_vb2 = container_of(vb, struct msm_vb2_buffer, vb2_buf);

@@ -83,19 +84,19 @@ static void msm_vb2_buf_queue(struct vb2_buffer *vb)
	if (IS_ERR_OR_NULL(session))
		return;

	read_lock(&session->stream_rwlock);
	read_lock_irqsave(&session->stream_rwlock, rl_flags);

	stream = msm_get_stream_from_vb2q(vb->vb2_queue);
	if (!stream) {
		pr_err("%s:%d] NULL stream", __func__, __LINE__);
		read_unlock(&session->stream_rwlock);
		read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
		return;
	}

	spin_lock_irqsave(&stream->stream_lock, flags);
	list_add_tail(&msm_vb2->list, &stream->queued_list);
	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)
@@ -103,7 +104,7 @@ static void msm_vb2_buf_finish(struct vb2_buffer *vb)
	struct msm_vb2_buffer *msm_vb2;
	struct msm_stream *stream;
	struct msm_session *session;
	unsigned long flags;
	unsigned long flags, rl_flags;
	struct msm_vb2_buffer *msm_vb2_entry, *temp;

	msm_vb2 = container_of(vb, struct msm_vb2_buffer, vb2_buf);
@@ -117,12 +118,12 @@ static void msm_vb2_buf_finish(struct vb2_buffer *vb)
	if (IS_ERR_OR_NULL(session))
		return;

	read_lock(&session->stream_rwlock);
	read_lock_irqsave(&session->stream_rwlock, rl_flags);

	stream = msm_get_stream_from_vb2q(vb->vb2_queue);
	if (!stream) {
		pr_err("%s:%d] NULL stream", __func__, __LINE__);
		read_unlock(&session->stream_rwlock);
		read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
		return;
	}

@@ -135,7 +136,7 @@ static void msm_vb2_buf_finish(struct vb2_buffer *vb)
		}
	}
	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)
@@ -143,19 +144,19 @@ static void msm_vb2_stop_stream(struct vb2_queue *q)
	struct msm_vb2_buffer *msm_vb2, *temp;
	struct msm_stream *stream;
	struct msm_session *session;
	unsigned long flags;
	unsigned long flags, rl_flags;
	struct vb2_buffer *vb2_buf;

	session = msm_get_session_from_vb2q(q);
	if (IS_ERR_OR_NULL(session))
		return;

	read_lock(&session->stream_rwlock);
	read_lock_irqsave(&session->stream_rwlock, rl_flags);

	stream = msm_get_stream_from_vb2q(q);
	if (!stream) {
		pr_err_ratelimited("%s:%d] NULL stream", __func__, __LINE__);
		read_unlock(&session->stream_rwlock);
		read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
		return;
	}

@@ -174,7 +175,7 @@ static void msm_vb2_stop_stream(struct vb2_queue *q)
			msm_vb2->in_freeq = 0;
		}
	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)
@@ -252,17 +253,17 @@ static struct vb2_buffer *msm_vb2_get_buf(int session_id,
	struct vb2_buffer *vb2_buf = NULL;
	struct msm_session *session;
	struct msm_vb2_buffer *msm_vb2 = NULL;
	unsigned long flags;
	unsigned long flags, rl_flags;

	session = msm_get_session(session_id);
	if (IS_ERR_OR_NULL(session))
		return NULL;

	read_lock(&session->stream_rwlock);
	read_lock_irqsave(&session->stream_rwlock, rl_flags);

	stream = msm_get_stream(session, stream_id);
	if (IS_ERR_OR_NULL(stream)) {
		read_unlock(&session->stream_rwlock);
		read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
		return NULL;
	}

@@ -288,7 +289,7 @@ static struct vb2_buffer *msm_vb2_get_buf(int session_id,
	vb2_buf = NULL;
end:
	spin_unlock_irqrestore(&stream->stream_lock, flags);
	read_unlock(&session->stream_rwlock);
	read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
	return vb2_buf;
}

@@ -299,18 +300,18 @@ static struct vb2_buffer *msm_vb2_get_buf_by_idx(int session_id,
	struct vb2_buffer *vb2_buf = NULL;
	struct msm_session *session;
	struct msm_vb2_buffer *msm_vb2 = NULL;
	unsigned long flags;
	unsigned long flags, rl_flags;

	session = msm_get_session(session_id);
	if (IS_ERR_OR_NULL(session))
		return NULL;

	read_lock(&session->stream_rwlock);
	read_lock_irqsave(&session->stream_rwlock, rl_flags);

	stream = msm_get_stream(session, stream_id);

	if (IS_ERR_OR_NULL(stream)) {
		read_unlock(&session->stream_rwlock);
		read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
		return NULL;
	}

@@ -334,7 +335,7 @@ static struct vb2_buffer *msm_vb2_get_buf_by_idx(int session_id,
	vb2_buf = NULL;
end:
	spin_unlock_irqrestore(&stream->stream_lock, flags);
	read_unlock(&session->stream_rwlock);
	read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
	return vb2_buf;
}

@@ -346,17 +347,17 @@ static int msm_vb2_put_buf(struct vb2_buffer *vb, int session_id,
	struct msm_vb2_buffer *msm_vb2;
	struct vb2_buffer *vb2_buf = NULL;
	int rc = 0;
	unsigned long flags;
	unsigned long flags, rl_flags;

	session = msm_get_session(session_id);
	if (IS_ERR_OR_NULL(session))
		return -EINVAL;

	read_lock(&session->stream_rwlock);
	read_lock_irqsave(&session->stream_rwlock, rl_flags);

	stream = msm_get_stream(session, stream_id);
	if (IS_ERR_OR_NULL(stream)) {
		read_unlock(&session->stream_rwlock);
		read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
		return -EINVAL;
	}

@@ -371,6 +372,8 @@ static int msm_vb2_put_buf(struct vb2_buffer *vb, int session_id,
			pr_err("VB buffer is INVALID vb=%pK, ses_id=%d, str_id=%d\n",
					vb, session_id, stream_id);
			spin_unlock_irqrestore(&stream->stream_lock, flags);
			read_unlock_irqrestore(&session->stream_rwlock,
				rl_flags);
			return -EINVAL;
		}
		msm_vb2 =
@@ -386,7 +389,7 @@ static int msm_vb2_put_buf(struct vb2_buffer *vb, int session_id,
		rc = -EINVAL;
	}
	spin_unlock_irqrestore(&stream->stream_lock, flags);
	read_unlock(&session->stream_rwlock);
	read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
	return rc;
}

@@ -394,7 +397,7 @@ static int msm_vb2_buf_done(struct vb2_buffer *vb, int session_id,
				unsigned int stream_id, uint32_t sequence,
				struct timeval *ts, uint32_t reserved)
{
	unsigned long flags;
	unsigned long flags, rl_flags;
	struct msm_vb2_buffer *msm_vb2;
	struct msm_stream *stream;
	struct vb2_buffer *vb2_buf = NULL;
@@ -405,11 +408,11 @@ static int msm_vb2_buf_done(struct vb2_buffer *vb, int session_id,
	if (IS_ERR_OR_NULL(session))
		return -EINVAL;

	read_lock(&session->stream_rwlock);
	read_lock_irqsave(&session->stream_rwlock, rl_flags);

	stream = msm_get_stream(session, stream_id);
	if (IS_ERR_OR_NULL(stream)) {
		read_unlock(&session->stream_rwlock);
		read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
		return -EINVAL;
	}

@@ -424,6 +427,8 @@ static int msm_vb2_buf_done(struct vb2_buffer *vb, int session_id,
			pr_err("VB buffer is INVALID ses_id=%d, str_id=%d, vb=%pK\n",
				    session_id, stream_id, vb);
			spin_unlock_irqrestore(&stream->stream_lock, flags);
			read_unlock_irqrestore(&session->stream_rwlock,
				rl_flags);
			return -EINVAL;
		}
		msm_vb2 =
@@ -444,7 +449,7 @@ static int msm_vb2_buf_done(struct vb2_buffer *vb, int session_id,
		rc = -EINVAL;
	}
	spin_unlock_irqrestore(&stream->stream_lock, flags);
	read_unlock(&session->stream_rwlock);
	read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
	return rc;
}

@@ -455,18 +460,18 @@ long msm_vb2_return_buf_by_idx(int session_id, unsigned int stream_id,
	struct vb2_buffer *vb2_buf = NULL;
	struct msm_session *session;
	struct msm_vb2_buffer *msm_vb2 = NULL;
	unsigned long flags;
	unsigned long flags, rl_flags;
	long rc = -EINVAL;

	session = msm_get_session(session_id);
	if (IS_ERR_OR_NULL(session))
		return rc;

	read_lock(&session->stream_rwlock);
	read_lock_irqsave(&session->stream_rwlock, rl_flags);

	stream = msm_get_stream(session, stream_id);
	if (IS_ERR_OR_NULL(stream)) {
		read_unlock(&session->stream_rwlock);
		read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
		return -EINVAL;
	}

@@ -494,14 +499,14 @@ long msm_vb2_return_buf_by_idx(int session_id, unsigned int stream_id,

end:
	spin_unlock_irqrestore(&stream->stream_lock, flags);
	read_unlock(&session->stream_rwlock);
	read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
	return rc;
}
EXPORT_SYMBOL(msm_vb2_return_buf_by_idx);

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_stream *stream;
	struct vb2_buffer *vb2_buf = NULL;
@@ -511,11 +516,11 @@ static int msm_vb2_flush_buf(int session_id, unsigned int stream_id)
	if (IS_ERR_OR_NULL(session))
		return -EINVAL;

	read_lock(&session->stream_rwlock);
	read_lock_irqsave(&session->stream_rwlock, rl_flags);

	stream = msm_get_stream(session, stream_id);
	if (IS_ERR_OR_NULL(stream)) {
		read_unlock(&session->stream_rwlock);
		read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
		return -EINVAL;
	}

@@ -527,7 +532,7 @@ static int msm_vb2_flush_buf(int session_id, unsigned int stream_id)
		msm_vb2->in_freeq = 0;
	}
	spin_unlock_irqrestore(&stream->stream_lock, flags);
	read_unlock(&session->stream_rwlock);
	read_unlock_irqrestore(&session->stream_rwlock, rl_flags);
	return 0;
}