Skip to content

Commit

Permalink
ALSA: bebob/fireworks: simplify handling of local device entry table
Browse files Browse the repository at this point in the history
In drivers of ALSA firewire stack, bebob and fireworks drivers have
local device entry table. At present, critical section to operate the
table is from the beginning/end of 'do_registration' call. This can be
more narrow and simplify codes.

This commit applies small refactoring for the above purpose.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Takashi Sakamoto authored and Takashi Iwai committed Oct 10, 2018
1 parent 5b14ec2 commit 873608d
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 25 deletions.
17 changes: 6 additions & 11 deletions sound/firewire/bebob/bebob.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,10 @@ name_device(struct snd_bebob *bebob)

static void bebob_free(struct snd_bebob *bebob)
{
mutex_lock(&devices_mutex);
clear_bit(bebob->card_index, devices_used);
mutex_unlock(&devices_mutex);

snd_bebob_stream_destroy_duplex(bebob);
}

Expand All @@ -140,12 +144,6 @@ static void bebob_free(struct snd_bebob *bebob)
static void
bebob_card_free(struct snd_card *card)
{
struct snd_bebob *bebob = card->private_data;

mutex_lock(&devices_mutex);
clear_bit(bebob->card_index, devices_used);
mutex_unlock(&devices_mutex);

bebob_free(card->private_data);
}

Expand Down Expand Up @@ -186,7 +184,6 @@ do_registration(struct work_struct *work)
return;

mutex_lock(&devices_mutex);

for (card_index = 0; card_index < SNDRV_CARDS; card_index++) {
if (!test_bit(card_index, devices_used) && enable[card_index])
break;
Expand All @@ -202,6 +199,8 @@ do_registration(struct work_struct *work)
mutex_unlock(&devices_mutex);
return;
}
set_bit(card_index, devices_used);
mutex_unlock(&devices_mutex);

err = name_device(bebob);
if (err < 0)
Expand Down Expand Up @@ -242,9 +241,6 @@ do_registration(struct work_struct *work)
if (err < 0)
goto error;

set_bit(card_index, devices_used);
mutex_unlock(&devices_mutex);

/*
* After registered, bebob instance can be released corresponding to
* releasing the sound card instance.
Expand All @@ -255,7 +251,6 @@ do_registration(struct work_struct *work)

return;
error:
mutex_unlock(&devices_mutex);
snd_bebob_stream_destroy_duplex(bebob);
snd_card_free(bebob->card);
dev_info(&bebob->unit->device,
Expand Down
21 changes: 7 additions & 14 deletions sound/firewire/fireworks/fireworks.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,10 @@ get_hardware_info(struct snd_efw *efw)

static void efw_free(struct snd_efw *efw)
{
mutex_lock(&devices_mutex);
clear_bit(efw->card_index, devices_used);
mutex_unlock(&devices_mutex);

snd_efw_stream_destroy_duplex(efw);
snd_efw_transaction_remove_instance(efw);
}
Expand All @@ -199,14 +203,6 @@ static void efw_free(struct snd_efw *efw)
static void
efw_card_free(struct snd_card *card)
{
struct snd_efw *efw = card->private_data;

if (efw->card_index >= 0) {
mutex_lock(&devices_mutex);
clear_bit(efw->card_index, devices_used);
mutex_unlock(&devices_mutex);
}

efw_free(card->private_data);
}

Expand All @@ -220,9 +216,8 @@ do_registration(struct work_struct *work)
if (efw->registered)
return;

mutex_lock(&devices_mutex);

/* check registered cards */
mutex_lock(&devices_mutex);
for (card_index = 0; card_index < SNDRV_CARDS; ++card_index) {
if (!test_bit(card_index, devices_used) && enable[card_index])
break;
Expand All @@ -238,6 +233,8 @@ do_registration(struct work_struct *work)
mutex_unlock(&devices_mutex);
return;
}
set_bit(card_index, devices_used);
mutex_unlock(&devices_mutex);

/* prepare response buffer */
snd_efw_resp_buf_size = clamp(snd_efw_resp_buf_size,
Expand Down Expand Up @@ -279,9 +276,6 @@ do_registration(struct work_struct *work)
if (err < 0)
goto error;

set_bit(card_index, devices_used);
mutex_unlock(&devices_mutex);

/*
* After registered, efw instance can be released corresponding to
* releasing the sound card instance.
Expand All @@ -292,7 +286,6 @@ do_registration(struct work_struct *work)

return;
error:
mutex_unlock(&devices_mutex);
snd_efw_transaction_remove_instance(efw);
snd_efw_stream_destroy_duplex(efw);
snd_card_free(efw->card);
Expand Down

0 comments on commit 873608d

Please sign in to comment.