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

Commit d5d368c7 authored by Jeyaprakash Soundrapandian's avatar Jeyaprakash Soundrapandian Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera: isp: Use a lock when getting a payload for bus IRQs" into dev/msm-4.9-camx

parents ecf8df86 cce99b62
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ struct cam_vfe_bus_ver2_common_data {
	struct cam_vfe_bus_irq_evt_payload          evt_payload[
		CAM_VFE_BUS_VER2_PAYLOAD_MAX];
	struct list_head                            free_payload_list;
	spinlock_t                                  spin_lock;
	struct mutex                                bus_mutex;
	uint32_t                                    secure_mode;
	uint32_t                                    num_sec_out;
@@ -214,16 +215,23 @@ static int cam_vfe_bus_get_evt_payload(
	struct cam_vfe_bus_ver2_common_data  *common_data,
	struct cam_vfe_bus_irq_evt_payload  **evt_payload)
{
	int rc;

	spin_lock(&common_data->spin_lock);
	if (list_empty(&common_data->free_payload_list)) {
		*evt_payload = NULL;
		CAM_ERR_RATE_LIMIT(CAM_ISP, "No free payload");
		return -ENODEV;
		rc = -ENODEV;
		goto done;
	}

	*evt_payload = list_first_entry(&common_data->free_payload_list,
		struct cam_vfe_bus_irq_evt_payload, list);
	list_del_init(&(*evt_payload)->list);
	return 0;
	rc = 0;
done:
	spin_unlock(&common_data->spin_lock);
	return rc;
}

static enum cam_vfe_bus_comp_grp_id
@@ -254,6 +262,7 @@ static int cam_vfe_bus_put_evt_payload(void *core_info,
	struct cam_vfe_bus_ver2_common_data *common_data = NULL;
	uint32_t  *ife_irq_regs = NULL;
	uint32_t   status_reg0, status_reg1, status_reg2;
	unsigned long flags;

	if (!core_info) {
		CAM_ERR(CAM_ISP, "Invalid param core_info NULL");
@@ -276,8 +285,12 @@ static int cam_vfe_bus_put_evt_payload(void *core_info,
	}

	common_data = core_info;

	spin_lock_irqsave(&common_data->spin_lock, flags);
	list_add_tail(&(*evt_payload)->list,
		&common_data->free_payload_list);
	spin_unlock_irqrestore(&common_data->spin_lock, flags);

	*evt_payload = NULL;

	return 0;
@@ -2975,6 +2988,7 @@ int cam_vfe_bus_ver2_init(
		}
	}

	spin_lock_init(&bus_priv->common_data.spin_lock);
	INIT_LIST_HEAD(&bus_priv->common_data.free_payload_list);
	for (i = 0; i < CAM_VFE_BUS_VER2_PAYLOAD_MAX; i++) {
		INIT_LIST_HEAD(&bus_priv->common_data.evt_payload[i].list);