Public bug reported: in "sound/pci/cs46xx/dsp_spos.c" , the function "int cs46xx_dsp_resume(struct snd_cs46xx * chip) " should add a mutex lock .
old: int cs46xx_dsp_resume(struct snd_cs46xx * chip) { struct dsp_spos_instance * ins = chip->dsp_spos_instance; int i, err; /* clear parameter, sample and code areas */ snd_cs46xx_clear_BA1(chip, DSP_PARAMETER_BYTE_OFFSET, DSP_PARAMETER_BYTE_SIZE); snd_cs46xx_clear_BA1(chip, DSP_SAMPLE_BYTE_OFFSET, DSP_SAMPLE_BYTE_SIZE); snd_cs46xx_clear_BA1(chip, DSP_CODE_BYTE_OFFSET, DSP_CODE_BYTE_SIZE); ignore some code here....... if (chip->dsp_spos_instance->spdif_status_in) { cs46xx_poke_via_dsp(chip, SP_ASER_COUNTDOWN, 0x80000005); cs46xx_poke_via_dsp(chip, SP_SPDIN_CONTROL, 0x800003ff); } return 0; } now: int cs46xx_dsp_resume(struct snd_cs46xx * chip) { struct dsp_spos_instance * ins = chip->dsp_spos_instance; int i, err; mutex_lock(&chip->spos_mutex); /* clear parameter, sample and code areas */ snd_cs46xx_clear_BA1(chip, DSP_PARAMETER_BYTE_OFFSET, DSP_PARAMETER_BYTE_SIZE); snd_cs46xx_clear_BA1(chip, DSP_SAMPLE_BYTE_OFFSET, DSP_SAMPLE_BYTE_SIZE); snd_cs46xx_clear_BA1(chip, DSP_CODE_BYTE_OFFSET, DSP_CODE_BYTE_SIZE); ignore some code here....... if (chip->dsp_spos_instance->spdif_status_in) { cs46xx_poke_via_dsp(chip, SP_ASER_COUNTDOWN, 0x80000005); cs46xx_poke_via_dsp(chip, SP_SPDIN_CONTROL, 0x800003ff); } mutex_unlock(&chip->spos_mutex); return 0; } related post: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1157525 ** Affects: alsa-driver (Ubuntu) Importance: Undecided Status: Confirmed ** Changed in: alsa-driver (Ubuntu) Status: New => Confirmed -- You received this bug notification because you are a member of Desktop Packages, which is subscribed to alsa-driver in Ubuntu. https://bugs.launchpad.net/bugs/1177837 Title: snd-cs46xx bug Status in “alsa-driver” package in Ubuntu: Confirmed Bug description: in "sound/pci/cs46xx/dsp_spos.c" , the function "int cs46xx_dsp_resume(struct snd_cs46xx * chip) " should add a mutex lock . old: int cs46xx_dsp_resume(struct snd_cs46xx * chip) { struct dsp_spos_instance * ins = chip->dsp_spos_instance; int i, err; /* clear parameter, sample and code areas */ snd_cs46xx_clear_BA1(chip, DSP_PARAMETER_BYTE_OFFSET, DSP_PARAMETER_BYTE_SIZE); snd_cs46xx_clear_BA1(chip, DSP_SAMPLE_BYTE_OFFSET, DSP_SAMPLE_BYTE_SIZE); snd_cs46xx_clear_BA1(chip, DSP_CODE_BYTE_OFFSET, DSP_CODE_BYTE_SIZE); ignore some code here....... if (chip->dsp_spos_instance->spdif_status_in) { cs46xx_poke_via_dsp(chip, SP_ASER_COUNTDOWN, 0x80000005); cs46xx_poke_via_dsp(chip, SP_SPDIN_CONTROL, 0x800003ff); } return 0; } now: int cs46xx_dsp_resume(struct snd_cs46xx * chip) { struct dsp_spos_instance * ins = chip->dsp_spos_instance; int i, err; mutex_lock(&chip->spos_mutex); /* clear parameter, sample and code areas */ snd_cs46xx_clear_BA1(chip, DSP_PARAMETER_BYTE_OFFSET, DSP_PARAMETER_BYTE_SIZE); snd_cs46xx_clear_BA1(chip, DSP_SAMPLE_BYTE_OFFSET, DSP_SAMPLE_BYTE_SIZE); snd_cs46xx_clear_BA1(chip, DSP_CODE_BYTE_OFFSET, DSP_CODE_BYTE_SIZE); ignore some code here....... if (chip->dsp_spos_instance->spdif_status_in) { cs46xx_poke_via_dsp(chip, SP_ASER_COUNTDOWN, 0x80000005); cs46xx_poke_via_dsp(chip, SP_SPDIN_CONTROL, 0x800003ff); } mutex_unlock(&chip->spos_mutex); return 0; } related post: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1157525 To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1177837/+subscriptions -- Mailing list: https://launchpad.net/~desktop-packages Post to : desktop-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~desktop-packages More help : https://help.launchpad.net/ListHelp