ALSA: emu10k1: remove now superfluous mixer locking
authorOswald Buddenhagen <oswald.buddenhagen@gmx.de>
Fri, 28 Apr 2023 09:59:41 +0000 (11:59 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 8 May 2023 07:31:00 +0000 (09:31 +0200)
Since commit 5bbb1ab5bd ("control: use counting semaphore as write lock
for ELEM_WRITE operation"), mixer values have been fully read-write
locked. This means that it is now unnecessary to apply any additional
locks to values that are accessed solely by mixer callbacks. Values that
are read outside mixer callbacks still need write locking. There are no
cases of mixer values being written outside mixer callbacks, so no read
locks remain in mixer callbacks.

Note that the removed locks refer only to the emu data structure, not
the card's registers as the lock's name suggests.

Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Link: https://lore.kernel.org/r/20230428095941.1706278-7-oswald.buddenhagen@gmx.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/emu10k1/emufx.c
sound/pci/emu10k1/emumixer.c
sound/pci/emu10k1/emupcm.c

index 3f64cca..9878511 100644 (file)
@@ -318,16 +318,12 @@ static int snd_emu10k1_gpr_ctl_info(struct snd_kcontrol *kcontrol, struct snd_ct
 
 static int snd_emu10k1_gpr_ctl_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
 {
-       struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        struct snd_emu10k1_fx8010_ctl *ctl =
                (struct snd_emu10k1_fx8010_ctl *) kcontrol->private_value;
-       unsigned long flags;
        unsigned int i;
        
-       spin_lock_irqsave(&emu->reg_lock, flags);
        for (i = 0; i < ctl->vcount; i++)
                ucontrol->value.integer.value[i] = ctl->value[i];
-       spin_unlock_irqrestore(&emu->reg_lock, flags);
        return 0;
 }
 
@@ -336,12 +332,10 @@ static int snd_emu10k1_gpr_ctl_put(struct snd_kcontrol *kcontrol, struct snd_ctl
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        struct snd_emu10k1_fx8010_ctl *ctl =
                (struct snd_emu10k1_fx8010_ctl *) kcontrol->private_value;
-       unsigned long flags;
        unsigned int nval, val;
        unsigned int i, j;
        int change = 0;
        
-       spin_lock_irqsave(&emu->reg_lock, flags);
        for (i = 0; i < ctl->vcount; i++) {
                nval = ucontrol->value.integer.value[i];
                if (nval < ctl->min)
@@ -380,7 +374,6 @@ static int snd_emu10k1_gpr_ctl_put(struct snd_kcontrol *kcontrol, struct snd_ctl
                }
        }
       __error:
-       spin_unlock_irqrestore(&emu->reg_lock, flags);
        return change;
 }
 
index 24052f1..ab04f8b 100644 (file)
@@ -41,17 +41,14 @@ static int snd_emu10k1_spdif_get(struct snd_kcontrol *kcontrol,
 {
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
-       unsigned long flags;
 
        /* Limit: emu->spdif_bits */
        if (idx >= 3)
                return -EINVAL;
-       spin_lock_irqsave(&emu->reg_lock, flags);
        ucontrol->value.iec958.status[0] = (emu->spdif_bits[idx] >> 0) & 0xff;
        ucontrol->value.iec958.status[1] = (emu->spdif_bits[idx] >> 8) & 0xff;
        ucontrol->value.iec958.status[2] = (emu->spdif_bits[idx] >> 16) & 0xff;
        ucontrol->value.iec958.status[3] = (emu->spdif_bits[idx] >> 24) & 0xff;
-       spin_unlock_irqrestore(&emu->reg_lock, flags);
        return 0;
 }
 
@@ -1070,10 +1067,7 @@ static int snd_audigy_spdif_output_rate_get(struct snd_kcontrol *kcontrol,
 {
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        unsigned int tmp;
-       unsigned long flags;
-       
 
-       spin_lock_irqsave(&emu->reg_lock, flags);
        tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0);
        switch (tmp & A_SPDIF_RATE_MASK) {
        case A_SPDIF_44100:
@@ -1088,7 +1082,6 @@ static int snd_audigy_spdif_output_rate_get(struct snd_kcontrol *kcontrol,
        default:
                ucontrol->value.enumerated.item[0] = 1;
        }
-       spin_unlock_irqrestore(&emu->reg_lock, flags);
        return 0;
 }
 
@@ -1146,7 +1139,6 @@ static int snd_emu10k1_spdif_put(struct snd_kcontrol *kcontrol,
        unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
        int change;
        unsigned int val;
-       unsigned long flags;
 
        /* Limit: emu->spdif_bits */
        if (idx >= 3)
@@ -1155,13 +1147,11 @@ static int snd_emu10k1_spdif_put(struct snd_kcontrol *kcontrol,
              (ucontrol->value.iec958.status[1] << 8) |
              (ucontrol->value.iec958.status[2] << 16) |
              (ucontrol->value.iec958.status[3] << 24);
-       spin_lock_irqsave(&emu->reg_lock, flags);
        change = val != emu->spdif_bits[idx];
        if (change) {
                snd_emu10k1_ptr_write(emu, SPCS0 + idx, 0, val);
                emu->spdif_bits[idx] = val;
        }
-       spin_unlock_irqrestore(&emu->reg_lock, flags);
        return change;
 }
 
@@ -1229,7 +1219,6 @@ static int snd_emu10k1_send_routing_info(struct snd_kcontrol *kcontrol, struct s
 static int snd_emu10k1_send_routing_get(struct snd_kcontrol *kcontrol,
                                         struct snd_ctl_elem_value *ucontrol)
 {
-       unsigned long flags;
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        struct snd_emu10k1_pcm_mixer *mix =
                &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
@@ -1237,12 +1226,10 @@ static int snd_emu10k1_send_routing_get(struct snd_kcontrol *kcontrol,
        int num_efx = emu->audigy ? 8 : 4;
        int mask = emu->audigy ? 0x3f : 0x0f;
 
-       spin_lock_irqsave(&emu->reg_lock, flags);
        for (voice = 0; voice < 3; voice++)
                for (idx = 0; idx < num_efx; idx++)
                        ucontrol->value.integer.value[(voice * num_efx) + idx] = 
                                mix->send_routing[voice][idx] & mask;
-       spin_unlock_irqrestore(&emu->reg_lock, flags);
        return 0;
 }
 
@@ -1305,17 +1292,14 @@ static int snd_emu10k1_send_volume_info(struct snd_kcontrol *kcontrol, struct sn
 static int snd_emu10k1_send_volume_get(struct snd_kcontrol *kcontrol,
                                        struct snd_ctl_elem_value *ucontrol)
 {
-       unsigned long flags;
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        struct snd_emu10k1_pcm_mixer *mix =
                &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
        int idx;
        int num_efx = emu->audigy ? 8 : 4;
 
-       spin_lock_irqsave(&emu->reg_lock, flags);
        for (idx = 0; idx < 3*num_efx; idx++)
                ucontrol->value.integer.value[idx] = mix->send_volume[idx/num_efx][idx%num_efx];
-       spin_unlock_irqrestore(&emu->reg_lock, flags);
        return 0;
 }
 
@@ -1378,13 +1362,10 @@ static int snd_emu10k1_attn_get(struct snd_kcontrol *kcontrol,
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        struct snd_emu10k1_pcm_mixer *mix =
                &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
-       unsigned long flags;
        int idx;
 
-       spin_lock_irqsave(&emu->reg_lock, flags);
        for (idx = 0; idx < 3; idx++)
                ucontrol->value.integer.value[idx] = mix->attn[idx];
-       spin_unlock_irqrestore(&emu->reg_lock, flags);
        return 0;
 }
 
@@ -1443,7 +1424,6 @@ static int snd_emu10k1_efx_send_routing_info(struct snd_kcontrol *kcontrol, stru
 static int snd_emu10k1_efx_send_routing_get(struct snd_kcontrol *kcontrol,
                                         struct snd_ctl_elem_value *ucontrol)
 {
-       unsigned long flags;
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        struct snd_emu10k1_pcm_mixer *mix =
                &emu->efx_pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
@@ -1451,11 +1431,9 @@ static int snd_emu10k1_efx_send_routing_get(struct snd_kcontrol *kcontrol,
        int num_efx = emu->audigy ? 8 : 4;
        int mask = emu->audigy ? 0x3f : 0x0f;
 
-       spin_lock_irqsave(&emu->reg_lock, flags);
        for (idx = 0; idx < num_efx; idx++)
                ucontrol->value.integer.value[idx] = 
                        mix->send_routing[0][idx] & mask;
-       spin_unlock_irqrestore(&emu->reg_lock, flags);
        return 0;
 }
 
@@ -1513,17 +1491,14 @@ static int snd_emu10k1_efx_send_volume_info(struct snd_kcontrol *kcontrol, struc
 static int snd_emu10k1_efx_send_volume_get(struct snd_kcontrol *kcontrol,
                                        struct snd_ctl_elem_value *ucontrol)
 {
-       unsigned long flags;
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        struct snd_emu10k1_pcm_mixer *mix =
                &emu->efx_pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
        int idx;
        int num_efx = emu->audigy ? 8 : 4;
 
-       spin_lock_irqsave(&emu->reg_lock, flags);
        for (idx = 0; idx < num_efx; idx++)
                ucontrol->value.integer.value[idx] = mix->send_volume[0][idx];
-       spin_unlock_irqrestore(&emu->reg_lock, flags);
        return 0;
 }
 
@@ -1582,11 +1557,8 @@ static int snd_emu10k1_efx_attn_get(struct snd_kcontrol *kcontrol,
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        struct snd_emu10k1_pcm_mixer *mix =
                &emu->efx_pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)];
-       unsigned long flags;
 
-       spin_lock_irqsave(&emu->reg_lock, flags);
        ucontrol->value.integer.value[0] = mix->attn[0];
-       spin_unlock_irqrestore(&emu->reg_lock, flags);
        return 0;
 }
 
index e8d2f0f..5ed404e 100644 (file)
@@ -1433,10 +1433,8 @@ static int snd_emu10k1_pcm_efx_voices_mask_get(struct snd_kcontrol *kcontrol, st
        int nefx = emu->audigy ? 64 : 32;
        int idx;
        
-       spin_lock_irq(&emu->reg_lock);
        for (idx = 0; idx < nefx; idx++)
                ucontrol->value.integer.value[idx] = (emu->efx_voices_mask[idx / 32] & (1 << (idx % 32))) ? 1 : 0;
-       spin_unlock_irq(&emu->reg_lock);
        return 0;
 }