video: driver: Limit secure sessions allowed by max supported
Check for max supported secure sessions before allowing any new secure session to limit secure sessions count by max supported value. Change-Id: I72d22c5e592eeb662d18018f6d880104992d570b Signed-off-by: Akshata Sahukar <asahukar@codeaurora.org>
This commit is contained in:
@@ -693,6 +693,44 @@ static int msm_vidc_update_buffer_count_if_needed(struct msm_vidc_inst* inst,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int msm_vidc_allow_secure_session(struct msm_vidc_inst *inst)
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
struct msm_vidc_inst *i;
|
||||||
|
struct msm_vidc_core *core;
|
||||||
|
u32 count = 0;
|
||||||
|
|
||||||
|
if (!inst || !inst->core) {
|
||||||
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
core = inst->core;
|
||||||
|
|
||||||
|
if (!core->capabilities) {
|
||||||
|
i_vpr_e(inst, "%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
core_lock(core, __func__);
|
||||||
|
list_for_each_entry(i, &core->instances, list) {
|
||||||
|
if (i->capabilities) {
|
||||||
|
if (i->capabilities->cap[SECURE_MODE].value)
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count > core->capabilities[MAX_SECURE_SESSION_COUNT].value) {
|
||||||
|
i_vpr_e(inst,
|
||||||
|
"%s: total secure sessions %d exceeded max limit %d\n",
|
||||||
|
__func__, count,
|
||||||
|
core->capabilities[MAX_SECURE_SESSION_COUNT].value);
|
||||||
|
rc = -EINVAL;
|
||||||
|
}
|
||||||
|
core_unlock(core, __func__);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
int msm_v4l2_op_s_ctrl(struct v4l2_ctrl *ctrl)
|
int msm_v4l2_op_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
@@ -731,6 +769,14 @@ int msm_v4l2_op_s_ctrl(struct v4l2_ctrl *ctrl)
|
|||||||
if (!inst->vb2q[OUTPUT_PORT].streaming) {
|
if (!inst->vb2q[OUTPUT_PORT].streaming) {
|
||||||
msm_vidc_update_cap_value(inst, cap_id, ctrl->val, __func__);
|
msm_vidc_update_cap_value(inst, cap_id, ctrl->val, __func__);
|
||||||
|
|
||||||
|
if (ctrl->id == V4L2_CID_MPEG_VIDC_SECURE) {
|
||||||
|
if (ctrl->val) {
|
||||||
|
rc = msm_vidc_allow_secure_session(inst);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ctrl->id == V4L2_CID_ROTATE) {
|
if (ctrl->id == V4L2_CID_ROTATE) {
|
||||||
if (ctrl->val == 90 || ctrl->val == 270) {
|
if (ctrl->val == 90 || ctrl->val == 270) {
|
||||||
struct v4l2_format *output_fmt;
|
struct v4l2_format *output_fmt;
|
||||||
|
Reference in New Issue
Block a user