mirror of https://github.com/thesofproject/sof.git
ipc: remove buffer_acquire from ipc helpers
remove buffer_acquire / release from ipc helpers
this is a continuation of changes
from commit 4a03699911
Signed-off-by: Marcin Szkudlinski <marcin.szkudlinski@intel.com>
This commit is contained in:
parent
dcc41ffac6
commit
7ca691dd24
|
@ -104,7 +104,6 @@ int comp_verify_params(struct comp_dev *dev, uint32_t flag,
|
|||
struct list_item *clist;
|
||||
struct comp_buffer *sinkb;
|
||||
struct comp_buffer *buf;
|
||||
struct comp_buffer *buf_c;
|
||||
int dir = dev->direction;
|
||||
|
||||
if (!params) {
|
||||
|
@ -128,22 +127,18 @@ int comp_verify_params(struct comp_dev *dev, uint32_t flag,
|
|||
struct comp_buffer,
|
||||
source_list);
|
||||
|
||||
buf_c = buffer_acquire(buf);
|
||||
|
||||
/* update specific pcm parameter with buffer parameter if
|
||||
* specific flag is set.
|
||||
*/
|
||||
comp_update_params(flag, params, buf_c);
|
||||
comp_update_params(flag, params, buf);
|
||||
|
||||
/* overwrite buffer parameters with modified pcm
|
||||
* parameters
|
||||
*/
|
||||
buffer_set_params(buf_c, params, BUFFER_UPDATE_FORCE);
|
||||
buffer_set_params(buf, params, BUFFER_UPDATE_FORCE);
|
||||
|
||||
/* set component period frames */
|
||||
component_set_nearest_period_frames(dev, audio_stream_get_rate(&buf_c->stream));
|
||||
|
||||
buffer_release(buf_c);
|
||||
component_set_nearest_period_frames(dev, audio_stream_get_rate(&buf->stream));
|
||||
} else {
|
||||
/* for other components we iterate over all downstream buffers
|
||||
* (for playback) or upstream buffers (for capture).
|
||||
|
@ -152,19 +147,15 @@ int comp_verify_params(struct comp_dev *dev, uint32_t flag,
|
|||
|
||||
list_for_item(clist, buffer_list) {
|
||||
buf = buffer_from_list(clist, dir);
|
||||
buf_c = buffer_acquire(buf);
|
||||
comp_update_params(flag, params, buf_c);
|
||||
buffer_set_params(buf_c, params, BUFFER_UPDATE_FORCE);
|
||||
buffer_release(buf_c);
|
||||
comp_update_params(flag, params, buf);
|
||||
buffer_set_params(buf, params, BUFFER_UPDATE_FORCE);
|
||||
}
|
||||
|
||||
/* fetch sink buffer in order to calculate period frames */
|
||||
sinkb = list_first_item(&dev->bsink_list, struct comp_buffer,
|
||||
source_list);
|
||||
|
||||
buf_c = buffer_acquire(sinkb);
|
||||
component_set_nearest_period_frames(dev, audio_stream_get_rate(&buf_c->stream));
|
||||
buffer_release(buf_c);
|
||||
component_set_nearest_period_frames(dev, audio_stream_get_rate(&sinkb->stream));
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -291,10 +282,8 @@ int ipc_comp_free(struct ipc *ipc, uint32_t comp_id)
|
|||
irq_local_disable(flags);
|
||||
list_for_item_safe(clist, tmp, &icd->cd->bsource_list) {
|
||||
struct comp_buffer *buffer = container_of(clist, struct comp_buffer, sink_list);
|
||||
struct comp_buffer *buffer_c = buffer_acquire(buffer);
|
||||
|
||||
buffer_c->sink = NULL;
|
||||
buffer_release(buffer_c);
|
||||
buffer->sink = NULL;
|
||||
/* Also if it isn't shared - we are about to modify uncached data */
|
||||
dcache_writeback_invalidate_region(uncache_to_cache(buffer),
|
||||
sizeof(*buffer));
|
||||
|
@ -304,10 +293,8 @@ int ipc_comp_free(struct ipc *ipc, uint32_t comp_id)
|
|||
|
||||
list_for_item_safe(clist, tmp, &icd->cd->bsink_list) {
|
||||
struct comp_buffer *buffer = container_of(clist, struct comp_buffer, source_list);
|
||||
struct comp_buffer *buffer_c = buffer_acquire(buffer);
|
||||
|
||||
buffer_c->source = NULL;
|
||||
buffer_release(buffer_c);
|
||||
buffer->source = NULL;
|
||||
/* Also if it isn't shared - we are about to modify uncached data */
|
||||
dcache_writeback_invalidate_region(uncache_to_cache(buffer),
|
||||
sizeof(*buffer));
|
||||
|
|
|
@ -487,7 +487,6 @@ int ipc_buffer_free(struct ipc *ipc, uint32_t buffer_id)
|
|||
unsigned int core;
|
||||
bool sink_active = false;
|
||||
bool source_active = false;
|
||||
struct comp_buffer *buffer_c;
|
||||
|
||||
/* check whether buffer exists */
|
||||
ibd = ipc_get_buffer_by_id(ipc, buffer_id);
|
||||
|
@ -498,8 +497,6 @@ int ipc_buffer_free(struct ipc *ipc, uint32_t buffer_id)
|
|||
if (!cpu_is_me(ibd->core))
|
||||
return ipc_process_on_core(ibd->core, false);
|
||||
|
||||
buffer_c = buffer_acquire(ibd->cb);
|
||||
|
||||
/* try to find sink/source components to check if they still exists */
|
||||
list_for_item(clist, &ipc->comp_list) {
|
||||
icd = container_of(clist, struct ipc_comp_dev, list);
|
||||
|
@ -507,21 +504,19 @@ int ipc_buffer_free(struct ipc *ipc, uint32_t buffer_id)
|
|||
continue;
|
||||
|
||||
/* check comp state if sink and source are valid */
|
||||
if (buffer_c->sink == icd->cd) {
|
||||
sink = buffer_c->sink;
|
||||
if (buffer_c->sink->state != COMP_STATE_READY)
|
||||
if (ibd->cb->sink == icd->cd) {
|
||||
sink = ibd->cb->sink;
|
||||
if (ibd->cb->sink->state != COMP_STATE_READY)
|
||||
sink_active = true;
|
||||
}
|
||||
|
||||
if (buffer_c->source == icd->cd) {
|
||||
source = buffer_c->source;
|
||||
if (buffer_c->source->state != COMP_STATE_READY)
|
||||
if (ibd->cb->source == icd->cd) {
|
||||
source = ibd->cb->source;
|
||||
if (ibd->cb->source->state != COMP_STATE_READY)
|
||||
source_active = true;
|
||||
}
|
||||
}
|
||||
|
||||
buffer_release(buffer_c);
|
||||
|
||||
/*
|
||||
* A buffer could be connected to 2 different pipelines. When one pipeline is freed, the
|
||||
* buffer comp that belongs in this pipeline will need to be freed even when the other
|
||||
|
|
|
@ -241,14 +241,11 @@ static int ipc_pipeline_module_free(uint32_t pipeline_id)
|
|||
|
||||
/* free sink buffer allocated by current component in bind function */
|
||||
list_for_item_safe(list, _list, &icd->cd->bsink_list) {
|
||||
struct comp_buffer *buffer_c;
|
||||
struct comp_dev *sink;
|
||||
|
||||
buffer = container_of(list, struct comp_buffer, source_list);
|
||||
pipeline_disconnect(icd->cd, buffer, PPL_CONN_DIR_COMP_TO_BUFFER);
|
||||
buffer_c = buffer_acquire(buffer);
|
||||
sink = buffer_c->sink;
|
||||
buffer_release(buffer_c);
|
||||
sink = buffer->sink;
|
||||
|
||||
/* free the buffer only when the sink module has also been disconnected */
|
||||
if (!sink)
|
||||
|
@ -257,14 +254,11 @@ static int ipc_pipeline_module_free(uint32_t pipeline_id)
|
|||
|
||||
/* free source buffer allocated by current component in bind function */
|
||||
list_for_item_safe(list, _list, &icd->cd->bsource_list) {
|
||||
struct comp_buffer *buffer_c;
|
||||
struct comp_dev *source;
|
||||
|
||||
buffer = container_of(list, struct comp_buffer, sink_list);
|
||||
pipeline_disconnect(icd->cd, buffer, PPL_CONN_DIR_BUFFER_TO_COMP);
|
||||
buffer_c = buffer_acquire(buffer);
|
||||
source = buffer_c->source;
|
||||
buffer_release(buffer_c);
|
||||
source = buffer->source;
|
||||
|
||||
/* free the buffer only when the source module has also been disconnected */
|
||||
if (!source)
|
||||
|
@ -337,7 +331,6 @@ int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *_connect)
|
|||
{
|
||||
struct ipc4_module_bind_unbind *bu;
|
||||
struct comp_buffer *buffer;
|
||||
struct comp_buffer *buffer_c;
|
||||
struct comp_dev *source;
|
||||
struct comp_dev *sink;
|
||||
struct ipc4_base_module_cfg source_src_cfg;
|
||||
|
@ -388,10 +381,8 @@ int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *_connect)
|
|||
* OBS of a buffer is IBS of destination component
|
||||
*/
|
||||
|
||||
buffer_c = buffer_acquire(buffer);
|
||||
source_set_ibs(audio_stream_get_source(&buffer_c->stream), source_src_cfg.obs);
|
||||
sink_set_obs(audio_stream_get_sink(&buffer_c->stream), sink_src_cfg.ibs);
|
||||
buffer_release(buffer_c);
|
||||
source_set_ibs(audio_stream_get_source(&buffer->stream), source_src_cfg.obs);
|
||||
sink_set_obs(audio_stream_get_sink(&buffer->stream), sink_src_cfg.ibs);
|
||||
|
||||
/*
|
||||
* Connect and bind the buffer to both source and sink components with the interrupts
|
||||
|
@ -490,10 +481,7 @@ int ipc_comp_disconnect(struct ipc *ipc, ipc_pipe_comp_connect *_connect)
|
|||
buffer_id = IPC4_COMP_ID(bu->extension.r.src_queue, bu->extension.r.dst_queue);
|
||||
list_for_item(sink_list, &src->bsink_list) {
|
||||
struct comp_buffer *buf = container_of(sink_list, struct comp_buffer, source_list);
|
||||
struct comp_buffer *buf_c = buffer_acquire(buf);
|
||||
bool found = buf_c->id == buffer_id;
|
||||
|
||||
buffer_release(buf_c);
|
||||
bool found = buf->id == buffer_id;
|
||||
|
||||
if (found) {
|
||||
buffer = buf;
|
||||
|
|
Loading…
Reference in New Issue