question about alsa tracepoints and alsa debugging
Bert Schiettecatte
bert at bertschiettecatte.com
Thu Dec 24 21:40:19 CET 2020
Hi Lars-Peter
> > occurs. The moment I start arecord, the console output from
> > speaker-test stops, so it's locked up by starting arecord.
> Are these implemented as two separate sound cards? If so I don't see how
> they could interfere with each other. There should not be any shared
> resources or locks between them at least on the ALSA side.
here are the definitions I've used in my driver - I had to translate
my old code from kernel 4.11 to using the new macros so not sure if
something got broken while doing that. I want my DAC and ADCs to be
one sound card device.
SND_SOC_DAILINK_DEFS(ak4458,
DAILINK_COMP_ARRAY(COMP_CPU("ff890000.i2s")),
DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "ak4458")),
DAILINK_COMP_ARRAY(COMP_PLATFORM("ff890000.i2s")));
SND_SOC_DAILINK_DEFS(ak5558,
DAILINK_COMP_ARRAY(COMP_CPU("audio-cpld")),
DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "ak5558")),
DAILINK_COMP_ARRAY(COMP_PLATFORM("audio-cpld")));
enum {
DAILINK_AK4458,
DAILINK_AK5558,
};
static struct snd_soc_dai_link rockchip_ak4458_ak5558_dai[] = {
[DAILINK_AK4458] = {
.name = "Audio out",
.ops = &rockchip_ak4458_dai_ops,
SND_SOC_DAILINK_REG(ak4458),
},
[DAILINK_AK5558] = {
.name = "Audio in",
.ops = &rockchip_ak5558_dai_ops,
SND_SOC_DAILINK_REG(ak5558),
},
};
static struct snd_soc_card rockchip_ak4458_ak5558 = {
.name = "ak4458-ak5558-audio",
.dai_link = rockchip_ak4458_ak5558_dai,
.num_links = ARRAY_SIZE(rockchip_ak4458_ak5558_dai),
};
> If possible try to narrow this down a bit more, this will help to track
> this down. If this is a more general issue it is quite likely that this
> is a more recently introduced problem, otherwise others would have
> already run into it. Maybe try one of the stable kernels like v5.4.
I will play around with a few different versions to see what happens.
> To check if there is a locking issue somewhere compile your kernel with
> CONFIG_PROVE_LOCKING=y
do I need PROVE_RAW_LOCK_NESTING as well? what about PROVE_RCU and
PROVE_RCU_LIST ?
> Do both devices I2S and MMC use the same DMA? If so I could see things
> going wrong there since that would be shared resources in the DMA
> driver. If possible try to run the MMC driver without DMA and see what
> happens.
I think they both use DMA but I don't think the resources are shared,
from what I can tell. My version of dw_mmc.c is 99% the same code but
I just directly call my own callbacks in dw_mci_interrupt
instead of dealing with the tasklet or work stuff.
Thanks for helping!
Bert
More information about the Alsa-devel
mailing list