video: driver: access buffers list under lock only
Do not access buffers list of an instance without acquiring its instance lock in msm_vidc_set_clocks() and msm_vidc_set_buses(). Change-Id: Ic7e8e15eaddca3b77bd4eccc6b728de20d3bcc78 Signed-off-by: Maheshwar Ajja <majja@codeaurora.org>
This commit is contained in:

committed by
Mihir Ganu

parent
4a6b6797e5
commit
e1af4fd098
@@ -140,6 +140,7 @@ struct msm_vidc_inst {
|
|||||||
bool active;
|
bool active;
|
||||||
u64 last_qbuf_time_ns;
|
u64 last_qbuf_time_ns;
|
||||||
bool vb2q_init;
|
bool vb2q_init;
|
||||||
|
u32 max_input_data_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _MSM_VIDC_INST_H_
|
#endif // _MSM_VIDC_INST_H_
|
||||||
|
@@ -162,13 +162,8 @@ static int msm_vidc_set_buses(struct msm_vidc_inst* inst)
|
|||||||
mutex_lock(&core->lock);
|
mutex_lock(&core->lock);
|
||||||
curr_time_ns = ktime_get_ns();
|
curr_time_ns = ktime_get_ns();
|
||||||
list_for_each_entry(temp, &core->instances, list) {
|
list_for_each_entry(temp, &core->instances, list) {
|
||||||
struct msm_vidc_buffer *vbuf, *next;
|
/* skip no input data sessions */
|
||||||
u32 data_size = 0;
|
if (!temp->max_input_data_size)
|
||||||
|
|
||||||
/* TODO: accessing temp without lock */
|
|
||||||
list_for_each_entry_safe(vbuf, next, &temp->buffers.input.list, list)
|
|
||||||
data_size = max(data_size, vbuf->data_size);
|
|
||||||
if (!data_size)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* skip inactive session bus bandwidth */
|
/* skip inactive session bus bandwidth */
|
||||||
@@ -223,6 +218,7 @@ int msm_vidc_scale_buses(struct msm_vidc_inst *inst)
|
|||||||
|
|
||||||
list_for_each_entry(vbuf, &inst->buffers.input.list, list)
|
list_for_each_entry(vbuf, &inst->buffers.input.list, list)
|
||||||
data_size = max(data_size, vbuf->data_size);
|
data_size = max(data_size, vbuf->data_size);
|
||||||
|
inst->max_input_data_size = data_size;
|
||||||
if (!data_size)
|
if (!data_size)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -326,7 +322,6 @@ int msm_vidc_set_clocks(struct msm_vidc_inst* inst)
|
|||||||
struct msm_vidc_inst* temp;
|
struct msm_vidc_inst* temp;
|
||||||
u64 freq;
|
u64 freq;
|
||||||
u64 rate = 0;
|
u64 rate = 0;
|
||||||
u32 data_size;
|
|
||||||
bool increment, decrement;
|
bool increment, decrement;
|
||||||
u64 curr_time_ns;
|
u64 curr_time_ns;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@@ -347,12 +342,8 @@ int msm_vidc_set_clocks(struct msm_vidc_inst* inst)
|
|||||||
freq = 0;
|
freq = 0;
|
||||||
curr_time_ns = ktime_get_ns();
|
curr_time_ns = ktime_get_ns();
|
||||||
list_for_each_entry(temp, &core->instances, list) {
|
list_for_each_entry(temp, &core->instances, list) {
|
||||||
struct msm_vidc_buffer* vbuf, *next;
|
/* skip no input data sessions */
|
||||||
|
if (!temp->max_input_data_size)
|
||||||
data_size = 0;
|
|
||||||
list_for_each_entry_safe(vbuf, next, &temp->buffers.input.list, list)
|
|
||||||
data_size = max(data_size, vbuf->data_size);
|
|
||||||
if (!data_size)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* skip inactive session clock rate */
|
/* skip inactive session clock rate */
|
||||||
@@ -507,6 +498,7 @@ int msm_vidc_scale_clocks(struct msm_vidc_inst *inst)
|
|||||||
|
|
||||||
list_for_each_entry(vbuf, &inst->buffers.input.list, list)
|
list_for_each_entry(vbuf, &inst->buffers.input.list, list)
|
||||||
data_size = max(data_size, vbuf->data_size);
|
data_size = max(data_size, vbuf->data_size);
|
||||||
|
inst->max_input_data_size = data_size;
|
||||||
if (!data_size)
|
if (!data_size)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user