From 2b4d88049e652b86f96953ab06f467f2896c4801 Mon Sep 17 00:00:00 2001 From: Marcin Rajwa Date: Mon, 2 Sep 2019 14:31:29 +0200 Subject: [PATCH 1/2] pipeline: don't disable IRQs on params() This patch removes the IRQ disable during pipeline_params() as there is no potential race condition. Also, The disable of IRQs result in long delays in queued interrupts. Signed-off-by: Marcin Rajwa --- src/audio/pipeline.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/audio/pipeline.c b/src/audio/pipeline.c index e970a60ede01..e4eea22e6796 100644 --- a/src/audio/pipeline.c +++ b/src/audio/pipeline.c @@ -336,23 +336,18 @@ int pipeline_params(struct pipeline *p, struct comp_dev *host, { struct pipeline_data data; int ret; - uint32_t flags; trace_pipe_with_ids(p, "pipeline_params()"); data.params = params; data.start = host; - irq_local_disable(flags); - ret = pipeline_comp_params(host, &data, host->params.direction); if (ret < 0) { trace_pipe_error("pipeline_params() error: ret = %d, host->" "comp.id = %u", ret, host->comp.id); } - irq_local_enable(flags); - return ret; } From 579b85f6567d77c72c55c046d945ab574094d71f Mon Sep 17 00:00:00 2001 From: Marcin Rajwa Date: Mon, 2 Sep 2019 14:22:07 +0200 Subject: [PATCH 2/2] pipeline: don't disable IRQs on prepare() This patch removes the IRQ disable during pipeline_prepare() as there is no potential race condition. Also, the disable of IRQs result in long delays in queued interrupts. Signed-off-by: Marcin Rajwa --- src/audio/pipeline.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/audio/pipeline.c b/src/audio/pipeline.c index e4eea22e6796..e62615b3afbc 100644 --- a/src/audio/pipeline.c +++ b/src/audio/pipeline.c @@ -395,19 +395,16 @@ int pipeline_prepare(struct pipeline *p, struct comp_dev *dev) { struct pipeline_data ppl_data; int ret = 0; - uint32_t flags; trace_pipe_with_ids(p, "pipeline_prepare()"); ppl_data.start = dev; - irq_local_disable(flags); - ret = pipeline_comp_prepare(dev, &ppl_data, dev->params.direction); if (ret < 0) { trace_pipe_error("pipeline_prepare() error: ret = %d," "dev->comp.id = %u", ret, dev->comp.id); - goto out; + return ret; } /* pipeline preload needed only for playback streams without active @@ -417,8 +414,6 @@ int pipeline_prepare(struct pipeline *p, struct comp_dev *dev) p->sink_comp->state != COMP_STATE_ACTIVE; p->status = COMP_STATE_PREPARE; -out: - irq_local_enable(flags); return ret; }