On Tue, 12 Aug 2025 12:50:57 +0200 Christophe Leroy <christophe.le...@csgroup.eu> wrote:
> In non-interleaved mode, several QMC channels are used in sync. > More details can be found in commit 188d9cae5438 ("ASoC: fsl: > fsl_qmc_audio: Add support for non-interleaved mode.") > At the time being, an interrupt is requested on each channel to > perform capture/playback completion, allthough the completion is > really performed only once all channels have completed their work. > > This leads to a lot more interrupts than really needed. Looking at > /proc/interrupts shows ~3800 interrupts per second when using > 4 capture and 4 playback devices with 5ms periods while > only 1600 (200 x 4 + 200 x 4) periods are processed during one second. > > The QMC channels work in sync, the one started first is the one > finishing first and the one started last is the one finishing last, > so when the last one finishes it is guaranteed that the other ones are > finished as well. Therefore only request completion processing on the > last QMC channel. > > On my board with the above exemple, on a kernel started with > 'threadirqs' option, the QMC irq thread uses 16% CPU time with this > patch while it uses 26% CPU time without this patch. > > Signed-off-by: Christophe Leroy <christophe.le...@csgroup.eu> > --- > sound/soc/fsl/fsl_qmc_audio.c | 46 +++++------------------------------ > 1 file changed, 6 insertions(+), 40 deletions(-) > Acked-by: Herve Codina <herve.cod...@bootlin.com> Best regards, Hervé -- Hervé Codina, Bootlin Embedded Linux and Kernel engineering https://bootlin.com