On 10/15/21 1:24 AM, Sameer Pujar wrote:
On 10/13/2021 8:00 PM, Pierre-Louis Bossart wrote:
The D in DPCM stands for 'dynamic', which means that connections between FE and BE can evolve.
Commit a97648697790 ("ASoC: dpcm: prevent snd_soc_dpcm use after free") started to protect some of the for_each_dpcm_be() loops, but there are still many cases that were not modified.
This patch adds protection for all the remaining loops, with the notable exception of the dpcm_be_dai_trigger(), where the lock is already taken at a higher level, e.g. in snd_pcm_period_elapsed().
Signed-off-by: Pierre-Louis Bossart
pierre-louis.bossart@linux.intel.com
sound/soc/soc-pcm.c | 86 ++++++++++++++++++++------------------------- 1 file changed, 39 insertions(+), 47 deletions(-)
After this, once I load sound card there are warning prints and failure:
[ 71.224324] WARNING: CPU: 3 PID: 574 at drivers/firmware/tegra/bpmp.c:362 tegra_bpmp_transfer+0x2d0/0x328 [ 71.238032] ---[ end trace 88d978f78a82134f ]--- [ 71.243033] WARNING: CPU: 3 PID: 574 at drivers/firmware/tegra/bpmp.c:362 tegra_bpmp_transfer+0x2d0/0x328 [ 71.257022] ---[ end trace 88d978f78a821350 ]--- [ 71.261965] tegra-audio-graph-card sound: Can't set plla rate for 270950400, err: -22 ...
This happens because, now the atomicity is propagated to BE callbacks where the clock settings are done in hw_param(). On Tegra, the clock APIs are served by BPMP and warning is seen because of below.
Sorry, I don't understand this part.
if the FEs used on Tegra have the nonatomic property set to zero, nothing will be propagated really.
This patch was required on the Intel side, because ALL FEs are nonatomic but some BEs are not, so I had issues when connecting a nonatomic FE to an atomic BE. See e.g. https://github.com/thesofproject/linux/pull/3209#issuecomment-941229502