Skip to content

[BUG] pipeline will interact with each other in HDA mode #854

@keqiaozhang

Description

@keqiaozhang

Describe the bug
This issue can occur when 2 pipeline playback are running in different terminals, terminating one of them will cause another pipeline stop with I/O error.

To Reproduce

  1. open two terminals and do playback on each terminal with different pcm device.
    terminal 1 headset playback: aplay -Dhw:0,0 -f dat -c 2 audio.wav
    terminal 2 HDMI playback: aplay -Dhw:0,2 -f dat -c 2 audio.wav
  2. press ctl+c to stop HDMI playback, then check the status of the another one.
  3. At least use one HDA pcm device to do the playback.

Expected behavior
no interaction between each pipeline.

Impact
terminating one of them will cause another pipeline stop with I/O error.

Environment

  1. sof-master: 0c9326
  2. tplg: sof-whl-rt5682.tplg
  3. kernel-sof-dev: 90860
  4. platform: WHL-I2S
  5. Reproducibility Rate: 100%

Screenshots or console output
$ aplay -Dhw:0,0 -f dat -c 2 test.wav
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
underrun!!! (at least 0.047 ms long)
aplay: pcm_write:2011: write error: Input/output error

dmesg
no observes errors.

sof-logger

 CORE  LEVEL      COMP_ID                TIMESTAMP            DELTA                FILE_NAME    CONTENT
    0      1       VOLUME          27044583.385417  27044584.000000   src/audio/volume.c:465    volume_copy() error: source component buffer has not enough data available
    0      1         PIPE          27044804.479167       221.093750 src/audio/pipeline.c:681    pipeline_copy() error: ret = -5, start->comp.id = 1, dir = 1
    0      1         PIPE 1.5      27044811.041667         6.562500 src/audio/pipeline.c:789    pipeline_xrun_recover()
    0      1          DMA          27045177.395833       366.354156 intel/cavs/hda-dma.c:279    hda-dmac: 5 wait for buffer full timeout
    0      1         HOST          27045183.958333         6.562500     src/audio/host.c:792    host_copy() error: dma_copy() failed, ret = 4294967234
    0      1         PIPE          27045189.947917         5.989583 src/audio/pipeline.c:681    pipeline_copy() error: ret = -62, start->comp.id = 4, dir = 1
    0      1         PIPE 1.5      27045196.562500         6.614583 src/audio/pipeline.c:789    pipeline_xrun_recover()
    0      1         COMP          27045209.479167        12.916667 rc/audio/component.c:201    comp_set_state() error: wrong state = 5, COMP_TRIGGER_PREPARE
    0      1         PIPE          27045215.364583         5.885417 src/audio/pipeline.c:365    pipeline_prepare() error: ret = -22,dev->comp.id = 0
    0      1         PIPE 1.5      27045221.614583         6.250000 src/audio/pipeline.c:796    pipeline_xrun_recover() error: pipeline_prepare() failed, ret = -22
    0      1         PIPE 1.5      27045227.239583         5.625000 src/audio/pipeline.c:865    pipeline_task(): xrun recover failed! pipeline will be stopped!

logger-t :

   0      2       BUFFER          27043352.395833      1244.635376   src/audio/buffer.c:127    comp_update_buffer_produce(), no bytes to produce
    0      2          DMA          27043357.031250         4.635417 intel/cavs/hda-dma.c:627    hda-dmac: 5 channel 0 -> stop
    0      1       VOLUME          27044583.385417      1226.354126   src/audio/volume.c:465    volume_copy() error: source component buffer has not enough data available
    0      2         COMP          27044589.270833         5.885417 of/audio/component.h:700    comp_underrun(), ((dev->comp.id << 16) | source->avail) = 65536, ((min_bytes << 16) | copy_bytes) = 0
    0      2         PIPE 1.5      27044593.281250         4.010417 src/audio/pipeline.c:540    pipeline_trigger()
    0      2         HOST          27044597.447917         4.166667     src/audio/host.c:283    host_trigger()
    0      2          DMA          27044602.083333         4.635417 intel/cavs/hda-dma.c:627    hda-dmac: 5 channel 0 -> stop
    0      2       VOLUME          27044606.562500         4.479167   src/audio/volume.c:434    volume_trigger()
    0      2          DAI 1.4      27044610.729167         4.166667      src/audio/dai.c:528    dai_comp_trigger(), command = 8
    0      2          DAI 1.4      27044614.635417         3.906250      src/audio/dai.c:586    dai_comp_trigger(), XRUN
    0      2          DAI 1.4      27044618.125000         3.489583      src/audio/dai.c:592    dai_comp_trigger(), PAUSE/STOP
    0      2          DMA          27044621.770833         3.645833 src/drivers/dw/dma.c:456    dw_dma_stop(): dma 0 channel 0 stop
    0      2          SSP          27044630.520833         8.750000 ers/intel/cavs/ssp.c:812    ssp_trigger() cmd 0
    0      2          SSP          27044793.333333       162.812500 ers/intel/cavs/ssp.c:793    ssp_stop(), TX stop
    0      2          SSP          27044798.177083         4.843750 ers/intel/cavs/ssp.c:802    ssp_stop(), SSP port disabled
    0      1         PIPE          27044804.479167         6.302083 src/audio/pipeline.c:681    pipeline_copy() error: ret = -5, start->comp.id = 1, dir = 1
    0      1         PIPE 1.5      27044811.041667         6.562500 src/audio/pipeline.c:789    pipeline_xrun_recover()
    0      2         PIPE 1.5      27044816.197917         5.156250 src/audio/pipeline.c:358    pipeline_prepare()
    0      2         HOST          27044820.312500         4.114583     src/audio/host.c:635    host_prepare()
    0      2         COMP          27044824.166667         3.854167 rc/audio/component.c:136    comp_set_state(), state already set to 3
    0      2         PIPE 1.5      27044828.333333         4.166667 src/audio/pipeline.c:540    pipeline_trigger()
    0      2         HOST          27044832.395833         4.062500     src/audio/host.c:283    host_trigger()
    0      2          DMA          27044836.562500         4.166667 intel/cavs/hda-dma.c:533    hda-dmac: 5 channel 0 -> start
    0      2          DMA          27044840.625000         4.062500 intel/cavs/hda-dma.c:369    hda-dmac: 5 channel 0 -> enable
    0      2       VOLUME          27044898.958333        58.333332   src/audio/volume.c:434    volume_trigger()
    0      2          DAI 1.4      27044902.916667         3.958333      src/audio/dai.c:528    dai_comp_trigger(), command = 1
    0      2          DAI 1.4      27044906.770833         3.854167      src/audio/dai.c:539    dai_comp_trigger(), START
    0      1          DMA          27045177.395833       270.625000 intel/cavs/hda-dma.c:279    hda-dmac: 5 wait for buffer full timeout
    0      1         HOST          27045183.958333         6.562500     src/audio/host.c:792    host_copy() error: dma_copy() failed, ret = 4294967234
    0      1         PIPE          27045189.947917         5.989583 src/audio/pipeline.c:681    pipeline_copy() error: ret = -62, start->comp.id = 4, dir = 1
    0      1         PIPE 1.5      27045196.562500         6.614583 src/audio/pipeline.c:789    pipeline_xrun_recover()
    0      2         PIPE 1.5      27045201.718750         5.156250 src/audio/pipeline.c:358    pipeline_prepare()
    0      2         HOST          27045205.729167         4.010417     src/audio/host.c:635    host_prepare()
    0      1         COMP          27045209.479167         3.750000 rc/audio/component.c:201    comp_set_state() error: wrong state = 5, COMP_TRIGGER_PREPARE
    0      1         PIPE          27045215.364583         5.885417 src/audio/pipeline.c:365    pipeline_prepare() error: ret = -22,dev->comp.id = 0
    0      1         PIPE 1.5      27045221.614583         6.250000 src/audio/pipeline.c:796    pipeline_xrun_recover() error: pipeline_prepare() failed, ret = -22
    0      1         PIPE 1.5      27045227.239583         5.625000 src/audio/pipeline.c:865    pipeline_task(): xrun recover failed! pipeline will be stopped!
    0      2          IPC          29281219.739583   2235992.500000    src/ipc/handler.c:480    ipc: comp 0 -> trigger cmd 0x50000
    0      2         PIPE 1.5      29281224.739583         5.000000 src/audio/pipeline.c:540    pipeline_trigger()
    0      2         HOST          29281229.322917         4.583333     src/audio/host.c:283    host_trigger()
    0      2          DMA          29281234.010417         4.687500 intel/cavs/hda-dma.c:627    hda-dmac: 5 channel 0 -> stop
    0      2       VOLUME          29281238.854167         4.843750   src/audio/volume.c:434    volume_trigger()
    0      2          DAI 1.4      29281243.177083         4.322917      src/audio/dai.c:528    dai_comp_trigger(), command = 0
    0      2          DAI 1.4      29281247.083333         3.906250      src/audio/dai.c:592    dai_comp_trigger(), PAUSE/STOP
    0      2          DMA          29281251.041667         3.958333 src/drivers/dw/dma.c:456    dw_dma_stop(): dma 0 channel 0 stop
    0      2          SSP          29281257.760417         6.718750 ers/intel/cavs/ssp.c:812    ssp_trigger() cmd 0
    0      2          SSP          29281421.354167       163.593750 ers/intel/cavs/ssp.c:802    ssp_stop(), SSP port disabled
    0      2          IPC          29281749.166667       327.812500    src/ipc/handler.c:369    ipc: comp 0 -> free
    0      2         PIPE 1.5      29281753.802083         4.635417 src/audio/pipeline.c:583    pipeline_reset()
    0      2         HOST          29281757.968750         4.166667     src/audio/host.c:699    host_reset()
    0      2          DMA          29281762.135417         4.166667 intel/cavs/hda-dma.c:627    hda-dmac: 5 channel 0 -> stop
    0      2       VOLUME          29281769.322917         7.187500   src/audio/volume.c:601    volume_reset()

dmesg.log
logger.log
logger-t.log

Metadata

Metadata

Labels

GLKApplies to Gemini LakeWHLApplies to WhiskeyLake platformbugSomething isn't workingduplicateThis issue or pull request already exists

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions