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

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

Merge "msm: camera: isp: Fix for sleeping function call inside spinlock"

parents f95294f1 572d126c
Loading
Loading
Loading
Loading
+0 −13
Original line number Diff line number Diff line
@@ -1104,7 +1104,6 @@ int msm_isp_request_axi_stream(struct vfe_device *vfe_dev, void *arg)
	uint32_t io_format = 0;
	struct msm_vfe_axi_stream_request_cmd *stream_cfg_cmd = arg;
	struct msm_vfe_axi_stream *stream_info;
	unsigned long flags;

	if (stream_cfg_cmd->stream_src >= VFE_AXI_SRC_MAX) {
		pr_err("%s:%d invalid stream_src %d\n", __func__, __LINE__,
@@ -1114,12 +1113,9 @@ int msm_isp_request_axi_stream(struct vfe_device *vfe_dev, void *arg)
	stream_info = msm_isp_get_stream_common_data(vfe_dev,
					stream_cfg_cmd->stream_src);

	spin_lock_irqsave(&stream_info->lock, flags);

	rc = msm_isp_axi_create_stream(vfe_dev,
		&vfe_dev->axi_data, stream_cfg_cmd, stream_info);
	if (rc) {
		spin_unlock_irqrestore(&stream_info->lock, flags);
		pr_err("%s: create stream failed\n", __func__);
		return rc;
	}
@@ -1128,7 +1124,6 @@ int msm_isp_request_axi_stream(struct vfe_device *vfe_dev, void *arg)
		vfe_dev, stream_info, stream_cfg_cmd);
	if (rc) {
		msm_isp_axi_destroy_stream(vfe_dev, stream_info);
		spin_unlock_irqrestore(&stream_info->lock, flags);
		pr_err("%s: Request validation failed\n", __func__);
		return rc;
	}
@@ -1236,7 +1231,6 @@ done:
		msm_isp_axi_free_wm(vfe_dev, stream_info);
		msm_isp_axi_destroy_stream(vfe_dev, stream_info);
	}
	spin_unlock_irqrestore(&stream_info->lock, flags);
	return rc;
}

@@ -1247,7 +1241,6 @@ int msm_isp_release_axi_stream(struct vfe_device *vfe_dev, void *arg)
	struct msm_vfe_axi_stream *stream_info;
	struct msm_vfe_axi_stream_cfg_cmd stream_cfg;
	int vfe_idx;
	unsigned long flags;

	if (HANDLE_TO_IDX(stream_release_cmd->stream_handle) >=
		VFE_AXI_SRC_MAX) {
@@ -1257,13 +1250,10 @@ int msm_isp_release_axi_stream(struct vfe_device *vfe_dev, void *arg)
	stream_info = msm_isp_get_stream_common_data(vfe_dev,
		HANDLE_TO_IDX(stream_release_cmd->stream_handle));

	spin_lock_irqsave(&stream_info->lock, flags);

	vfe_idx = msm_isp_get_vfe_idx_for_stream_user(vfe_dev, stream_info);
	if (vfe_idx == -ENOTTY ||
		stream_release_cmd->stream_handle !=
		stream_info->stream_handle[vfe_idx]) {
		spin_unlock_irqrestore(&stream_info->lock, flags);
		pr_err("%s: Invalid stream %p handle %x/%x vfe_idx %d vfe_dev %d num_isp %d\n",
			__func__, stream_info,
			stream_release_cmd->stream_handle,
@@ -1277,9 +1267,7 @@ int msm_isp_release_axi_stream(struct vfe_device *vfe_dev, void *arg)
		stream_cfg.cmd = STOP_STREAM;
		stream_cfg.num_streams = 1;
		stream_cfg.stream_handle[0] = stream_release_cmd->stream_handle;
		spin_unlock_irqrestore(&stream_info->lock, flags);
		msm_isp_cfg_axi_stream(vfe_dev, (void *) &stream_cfg);
		spin_lock_irqsave(&stream_info->lock, flags);
	}

	for (i = 0; i < stream_info->num_planes; i++) {
@@ -1297,7 +1285,6 @@ int msm_isp_release_axi_stream(struct vfe_device *vfe_dev, void *arg)
	msm_isp_axi_free_wm(vfe_dev, stream_info);

	msm_isp_axi_destroy_stream(vfe_dev, stream_info);
	spin_unlock_irqrestore(&stream_info->lock, flags);

	return rc;
}
+0 −12
Original line number Diff line number Diff line
@@ -460,7 +460,6 @@ int msm_isp_request_stats_stream(struct vfe_device *vfe_dev, void *arg)
	struct msm_vfe_stats_stream_request_cmd *stream_req_cmd = arg;
	struct msm_vfe_stats_stream *stream_info = NULL;
	uint32_t stats_idx;
	unsigned long flags;

	stats_idx = vfe_dev->hw_info->vfe_ops.stats_ops.
		get_stats_idx(stream_req_cmd->stats_type);
@@ -472,11 +471,8 @@ int msm_isp_request_stats_stream(struct vfe_device *vfe_dev, void *arg)

	stream_info = msm_isp_get_stats_stream_common_data(vfe_dev, stats_idx);

	spin_lock_irqsave(&stream_info->lock, flags);

	rc = msm_isp_stats_create_stream(vfe_dev, stream_req_cmd, stream_info);
	if (rc < 0) {
		spin_unlock_irqrestore(&stream_info->lock, flags);
		pr_err("%s: create stream failed\n", __func__);
		return rc;
	}
@@ -491,7 +487,6 @@ int msm_isp_request_stats_stream(struct vfe_device *vfe_dev, void *arg)
		msm_isp_stats_cfg_stream_scratch(stream_info,
					VFE_PONG_FLAG);
	}
	spin_unlock_irqrestore(&stream_info->lock, flags);
	return rc;
}

@@ -505,7 +500,6 @@ int msm_isp_release_stats_stream(struct vfe_device *vfe_dev, void *arg)
	int vfe_idx;
	int i;
	int k;
	unsigned long flags;

	if (stats_idx >= vfe_dev->hw_info->stats_hw_info->num_stats_type) {
		pr_err("%s Invalid stats index %d", __func__, stats_idx);
@@ -513,12 +507,10 @@ int msm_isp_release_stats_stream(struct vfe_device *vfe_dev, void *arg)
	}

	stream_info = msm_isp_get_stats_stream_common_data(vfe_dev, stats_idx);
	spin_lock_irqsave(&stream_info->lock, flags);
	vfe_idx = msm_isp_get_vfe_idx_for_stats_stream_user(
					vfe_dev, stream_info);
	if (vfe_idx == -ENOTTY || stream_info->stream_handle[vfe_idx] !=
			stream_release_cmd->stream_handle) {
		spin_unlock_irqrestore(&stream_info->lock, flags);
		pr_err("%s: Invalid stream handle %x, expected %x\n",
			__func__, stream_release_cmd->stream_handle,
			vfe_idx != -ENOTTY ?
@@ -526,7 +518,6 @@ int msm_isp_release_stats_stream(struct vfe_device *vfe_dev, void *arg)
		return -EINVAL;
	}
	if (stream_info->state == STATS_AVAILABLE) {
		spin_unlock_irqrestore(&stream_info->lock, flags);
		pr_err("%s: stream already release\n", __func__);
		return rc;
	}
@@ -537,9 +528,7 @@ int msm_isp_release_stats_stream(struct vfe_device *vfe_dev, void *arg)
		stream_cfg_cmd.num_streams = 1;
		stream_cfg_cmd.stream_handle[0] =
			stream_release_cmd->stream_handle;
		spin_unlock_irqrestore(&stream_info->lock, flags);
		msm_isp_cfg_stats_stream(vfe_dev, &stream_cfg_cmd);
		spin_lock_irqsave(&stream_info->lock, flags);
	}

	for (i = vfe_idx, k = vfe_idx + 1; k < stream_info->num_isp; k++, i++) {
@@ -556,7 +545,6 @@ int msm_isp_release_stats_stream(struct vfe_device *vfe_dev, void *arg)
	if (stream_info->num_isp == 0)
		stream_info->state = STATS_AVAILABLE;

	spin_unlock_irqrestore(&stream_info->lock, flags);
	return 0;
}