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

Reply via email to