From 77d420684b8fbcaed658ec06a5f7c82eaecb84bb Mon Sep 17 00:00:00 2001 From: Serhiy Katsyuba Date: Wed, 26 Aug 2026 17:15:04 +0200 Subject: [PATCH] ipc4: honor pipeline pause requests The no_pause flag should not be used with IPC4. An IPC4 module must not silently ignore a pipeline pause request without sending an error response. This fixes a crash during pipeline deletion when a pipeline containing a MUX ignored a prior PAUSE request and remained active during teardown. Signed-off-by: Serhiy Katsyuba --- src/audio/module_adapter/module_adapter.c | 2 ++ src/audio/mux/mux.c | 2 ++ src/include/module/module/base.h | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/audio/module_adapter/module_adapter.c b/src/audio/module_adapter/module_adapter.c index 995501bfbe0a..085d339af1b7 100644 --- a/src/audio/module_adapter/module_adapter.c +++ b/src/audio/module_adapter/module_adapter.c @@ -1361,6 +1361,7 @@ int module_adapter_trigger(struct comp_dev *dev, int cmd) if (dev->ipc_config.type == SOF_COMP_HOST || dev->ipc_config.type == SOF_COMP_DAI) return interface->endpoint_ops->trigger(dev, cmd); +#if CONFIG_IPC_MAJOR_3 /* * If the module doesn't support pause, keep it active along with the rest of the * downstream modules @@ -1369,6 +1370,7 @@ int module_adapter_trigger(struct comp_dev *dev, int cmd) dev->state = COMP_STATE_ACTIVE; return PPL_STATUS_PATH_STOP; } +#endif if (interface->trigger) { #if CONFIG_SOF_USERSPACE_APPLICATION diff --git a/src/audio/mux/mux.c b/src/audio/mux/mux.c index 1476779e7324..c651f772a598 100644 --- a/src/audio/mux/mux.c +++ b/src/audio/mux/mux.c @@ -112,7 +112,9 @@ static int mux_demux_common_init(struct processing_module *mod, enum sof_comp_ty } mod->verify_params_flags = BUFF_PARAMS_CHANNELS; +#if CONFIG_IPC_MAJOR_3 mod->no_pause = true; +#endif cd->comp_type = type; return 0; diff --git a/src/include/module/module/base.h b/src/include/module/module/base.h index 8818ffb9f212..5d41d2d8a6b4 100644 --- a/src/include/module/module/base.h +++ b/src/include/module/module/base.h @@ -168,8 +168,10 @@ struct processing_module { */ bool dp_startup_delay; +#if CONFIG_IPC_MAJOR_3 /* flag to indicate module does not pause */ bool no_pause; +#endif /* * flag to indicate that the sink buffer writeback should be skipped. It will be handled