From 090c9cbf3250711773ea3962f686796e56d4ce57 Mon Sep 17 00:00:00 2001 From: Keyon Jie Date: Wed, 12 May 2021 09:05:11 +0800 Subject: [PATCH 1/2] mux: remove the wrong error message A wrong error message was added in helper get_stream_index(), remove to fix it. Fixes: 80666b7cc7a9 ("ipc: component: abstract the component creation API") Signed-off-by: Keyon Jie --- src/audio/mux/mux.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/audio/mux/mux.c b/src/audio/mux/mux.c index 99e6587f5a4d..e88114c0fe3b 100644 --- a/src/audio/mux/mux.c +++ b/src/audio/mux/mux.c @@ -213,11 +213,9 @@ static uint8_t get_stream_index(struct comp_data *cd, uint32_t pipe_id) { int i; - for (i = 0; i < MUX_MAX_STREAMS; i++) { - comp_cl_err(&comp_mux, "got %u", cd->config.streams[i].pipeline_id); + for (i = 0; i < MUX_MAX_STREAMS; i++) if (cd->config.streams[i].pipeline_id == pipe_id) return i; - } comp_cl_err(&comp_mux, "get_stream_index(): couldn't find configuration for connected pipeline %u", pipe_id); From b7b1d3816ac23f253a0744b77c33fd04adbab78e Mon Sep 17 00:00:00 2001 From: Keyon Jie Date: Thu, 13 May 2021 10:54:41 +0800 Subject: [PATCH 2/2] mux: stop copy if get_stream_index() fail We should return error if the matching in get_stream_index() fail, add check in the callers, stop using it and return failure when needed. Signed-off-by: Keyon Jie --- src/audio/mux/mux.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/audio/mux/mux.c b/src/audio/mux/mux.c index e88114c0fe3b..a8d538c689c4 100644 --- a/src/audio/mux/mux.c +++ b/src/audio/mux/mux.c @@ -209,18 +209,18 @@ static void mux_free(struct comp_dev *dev) rfree(dev); } -static uint8_t get_stream_index(struct comp_data *cd, uint32_t pipe_id) +static int get_stream_index(struct comp_data *cd, uint32_t pipe_id) { - int i; + int idx; - for (i = 0; i < MUX_MAX_STREAMS; i++) - if (cd->config.streams[i].pipeline_id == pipe_id) - return i; + for (idx = 0; idx < MUX_MAX_STREAMS; idx++) + if (cd->config.streams[idx].pipeline_id == pipe_id) + return idx; comp_cl_err(&comp_mux, "get_stream_index(): couldn't find configuration for connected pipeline %u", pipe_id); - return 0; + return -EINVAL; } static struct mux_look_up *get_lookup_table(struct comp_data *cd, @@ -421,12 +421,12 @@ static int demux_copy(struct comp_dev *dev) struct mux_look_up *look_up; struct list_item *clist; uint32_t num_sinks = 0; - uint32_t i = 0; uint32_t frames = -1; uint32_t source_bytes; uint32_t avail; uint32_t sinks_bytes[MUX_MAX_STREAMS] = { 0 }; uint32_t flags = 0; + int i; comp_dbg(dev, "demux_copy()"); @@ -443,6 +443,9 @@ static int demux_copy(struct comp_dev *dev) if (sink->sink->state == dev->state) { num_sinks++; i = get_stream_index(cd, sink->pipeline_id); + /* return if index wrong */ + if (i < 0) + return i; look_up = get_lookup_table(cd, sink->pipeline_id); sinks[i] = sink; look_ups[i] = look_up; @@ -519,11 +522,11 @@ static int mux_copy(struct comp_dev *dev) const struct audio_stream *sources_stream[MUX_MAX_STREAMS] = { NULL }; struct list_item *clist; uint32_t num_sources = 0; - uint32_t i = 0; uint32_t frames = -1; uint32_t sources_bytes[MUX_MAX_STREAMS] = { 0 }; uint32_t sink_bytes; uint32_t flags = 0; + int i; comp_dbg(dev, "mux_copy()"); @@ -540,6 +543,9 @@ static int mux_copy(struct comp_dev *dev) if (source->source->state == dev->state) { num_sources++; i = get_stream_index(cd, source->pipeline_id); + /* return if index wrong */ + if (i < 0) + return i; sources[i] = source; sources_stream[i] = &source->stream; } else {