• Kuninori Morimoto's avatar
    ASoC: rsnd: protect mod->status · b43b8ae8
    Kuninori Morimoto authored
    Renesas Sound uses many modules (SSI/SSIU/SRC/CTU/MIX/DVC/DMA),
    and supports complex connections/path.
    Thus each modules needs to save its status to correctly control it.
    This status is updated when by .trigger, and .hw_params/.hw_free.
    
    Renesas Sound is protecting modules by using lock when .trigger,
    but it was not enough to protecting each modules "status" if it was
    used from many paths.
    
    1) .hw_params/.hw_free update status
    2) another doesn't update status, but overwrites by same value
    
    This patch do
    1) protects .hw_params/.hw_free by lock
    2) do nothing if no status update
    
    Without this patch, protected mod->status (= .trigger) might be
    overwrote by non protected mod->status (= .hw_params / .hw_free),
    and in such case, CTU/MIX/DVC/SSIU/SSI which are used from
    many paths might get damage.
    
    If above issue happens, Renesas Sound will be hung (= silence)
    and never be recoverd.
    I could reproduce this issue by continue playing very short sound
    with loop very long term (3-4 hours) through 2 inputs (= MIXer).
    
    For updating rsnd_status_update(), this patch removes rsnd_dai_call()
    debug message. Because we already have debugfs support, and is not
    good match to new code.
    Reported-by: default avatarLinh Phung T. Y <linh.phung.jy@renesas.com>
    Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
    Message-Id: <87wnrklwyh.wl-kuninori.morimoto.gx@renesas.com>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    b43b8ae8
rsnd.h 25.3 KB