[alsa-devel] ESI Juli@ crash with external clock switch - patch
Takashi Iwai
tiwai at suse.de
Sun Jan 11 16:52:16 CET 2015
At Sun, 11 Jan 2015 14:58:12 +0100,
Pavel Hofman wrote:
>
> Hi,
>
> I have investigated a crash/kernel thread lockup when Juli@ is switched
> to external SPDIF clock and the incoming SPDIF stream changes
> samplerate. The problem appears to occur in the timed thread in charge
> of reading incoming samplerate and acting upon its change.
>
> The problem disappears with the following patch:
>
> diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c
> index c7f5633..68bb326 100644
> --- a/sound/i2c/other/ak4114.c
> +++ b/sound/i2c/other/ak4114.c
> @@ -154,7 +154,7 @@ void snd_ak4114_reinit(struct ak4114 *chip)
> {
> chip->init = 1;
> mb();
> - flush_delayed_work(&chip->work);
> + //flush_delayed_work(&chip->work);
> ak4114_init_regs(chip);
> /* bring up statistics / event queing */
> chip->init = 0;
>
> I am afraid I do not know enough about kernel workqueues to determine
> whether this "fix" is OK.
>
> Interestingly, the almost identical driver ak4113.c for a very similar
> card Infrasonic Quartet (ice1724/quartet.c) does not suffer from this
> problem (tested now).
Does the patch below work instead? The reason it appears only on
Juli@ is that juli@ is the only board using this function.
thanks,
Takashi
---
diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c
index c7f56339415d..fd7ed9b42e48 100644
--- a/sound/i2c/other/ak4114.c
+++ b/sound/i2c/other/ak4114.c
@@ -612,10 +612,10 @@ static void ak4114_stats(struct work_struct *work)
{
struct ak4114 *chip = container_of(work, struct ak4114, work.work);
- if (!chip->init)
+ if (!chip->init) {
snd_ak4114_check_rate_and_errors(chip, chip->check_flags);
-
- schedule_delayed_work(&chip->work, HZ / 10);
+ schedule_delayed_work(&chip->work, HZ / 10);
+ }
}
EXPORT_SYMBOL(snd_ak4114_create);
More information about the Alsa-devel
mailing list