Skip to content

Commit

Permalink
ALSA: firewire: release reference count of firewire unit in .remove c…
Browse files Browse the repository at this point in the history
…allback of bus driver

In a previous commit, drivers in ALSA firewire stack blocks .remove
callback of bus driver. This enables to release members of private
data in the callback after releasing device of sound card.

This commit simplifies codes to release the members.

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 61ccc6f commit 5b14ec2
Show file tree
Hide file tree
Showing 9 changed files with 27 additions and 50 deletions.
9 changes: 3 additions & 6 deletions sound/firewire/bebob/bebob.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,6 @@ name_device(struct snd_bebob *bebob)
static void bebob_free(struct snd_bebob *bebob)
{
snd_bebob_stream_destroy_duplex(bebob);

mutex_destroy(&bebob->mutex);
fw_unit_put(bebob->unit);
}

/*
Expand Down Expand Up @@ -376,10 +373,10 @@ static void bebob_remove(struct fw_unit *unit)
if (bebob->registered) {
// Block till all of ALSA character devices are released.
snd_card_free(bebob->card);
} else {
/* Don't forget this case. */
bebob_free(bebob);
}

mutex_destroy(&bebob->mutex);
fw_unit_put(bebob->unit);
}

static const struct snd_bebob_rate_spec normal_rate_spec = {
Expand Down
9 changes: 3 additions & 6 deletions sound/firewire/dice/dice.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,6 @@ static void dice_free(struct snd_dice *dice)
{
snd_dice_stream_destroy_duplex(dice);
snd_dice_transaction_destroy(dice);

mutex_destroy(&dice->mutex);
fw_unit_put(dice->unit);
}

/*
Expand Down Expand Up @@ -261,10 +258,10 @@ static void dice_remove(struct fw_unit *unit)
if (dice->registered) {
/* No need to wait for releasing card object in this context. */
snd_card_free_when_closed(dice->card);
} else {
/* Don't forget this case. */
dice_free(dice);
}

mutex_destroy(&dice->mutex);
fw_unit_put(dice->unit);
}

static void dice_bus_reset(struct fw_unit *unit)
Expand Down
9 changes: 3 additions & 6 deletions sound/firewire/digi00x/digi00x.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,6 @@ static void dg00x_free(struct snd_dg00x *dg00x)
{
snd_dg00x_stream_destroy_duplex(dg00x);
snd_dg00x_transaction_unregister(dg00x);

mutex_destroy(&dg00x->mutex);
fw_unit_put(dg00x->unit);
}

static void dg00x_card_free(struct snd_card *card)
Expand Down Expand Up @@ -174,10 +171,10 @@ static void snd_dg00x_remove(struct fw_unit *unit)
if (dg00x->registered) {
// Block till all of ALSA character devices are released.
snd_card_free(dg00x->card);
} else {
/* Don't forget this case. */
dg00x_free(dg00x);
}

mutex_destroy(&dg00x->mutex);
fw_unit_put(dg00x->unit);
}

static const struct ieee1394_device_id snd_dg00x_id_table[] = {
Expand Down
9 changes: 3 additions & 6 deletions sound/firewire/fireface/ff.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,6 @@ static void ff_free(struct snd_ff *ff)
{
snd_ff_stream_destroy_duplex(ff);
snd_ff_transaction_unregister(ff);

mutex_destroy(&ff->mutex);
fw_unit_put(ff->unit);
}

static void ff_card_free(struct snd_card *card)
Expand Down Expand Up @@ -147,10 +144,10 @@ static void snd_ff_remove(struct fw_unit *unit)
if (ff->registered) {
// Block till all of ALSA character devices are released.
snd_card_free(ff->card);
} else {
/* Don't forget this case. */
ff_free(ff);
}

mutex_destroy(&ff->mutex);
fw_unit_put(ff->unit);
}

static const struct snd_ff_spec spec_ff400 = {
Expand Down
9 changes: 3 additions & 6 deletions sound/firewire/fireworks/fireworks.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,9 +188,6 @@ static void efw_free(struct snd_efw *efw)
{
snd_efw_stream_destroy_duplex(efw);
snd_efw_transaction_remove_instance(efw);

mutex_destroy(&efw->mutex);
fw_unit_put(efw->unit);
}

/*
Expand Down Expand Up @@ -360,10 +357,10 @@ static void efw_remove(struct fw_unit *unit)
if (efw->registered) {
// Block till all of ALSA character devices are released.
snd_card_free(efw->card);
} else {
/* Don't forget this case. */
efw_free(efw);
}

mutex_destroy(&efw->mutex);
fw_unit_put(efw->unit);
}

static const struct ieee1394_device_id efw_id_table[] = {
Expand Down
5 changes: 3 additions & 2 deletions sound/firewire/isight.c
Original file line number Diff line number Diff line change
Expand Up @@ -602,8 +602,6 @@ static void isight_card_free(struct snd_card *card)
struct isight *isight = card->private_data;

fw_iso_resources_destroy(&isight->resources);
fw_unit_put(isight->unit);
mutex_destroy(&isight->mutex);
}

static u64 get_unit_base(struct fw_unit *unit)
Expand Down Expand Up @@ -705,6 +703,9 @@ static void isight_remove(struct fw_unit *unit)

// Block till all of ALSA character devices are released.
snd_card_free(isight->card);

mutex_destroy(&isight->mutex);
fw_unit_put(isight->unit);
}

static const struct ieee1394_device_id isight_id_table[] = {
Expand Down
9 changes: 3 additions & 6 deletions sound/firewire/motu/motu.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,6 @@ static void motu_free(struct snd_motu *motu)
snd_motu_transaction_unregister(motu);

snd_motu_stream_destroy_duplex(motu);

mutex_destroy(&motu->mutex);
fw_unit_put(motu->unit);
}

/*
Expand Down Expand Up @@ -174,10 +171,10 @@ static void motu_remove(struct fw_unit *unit)
if (motu->registered) {
// Block till all of ALSA character devices are released.
snd_card_free(motu->card);
} else {
/* Don't forget this case. */
motu_free(motu);
}

mutex_destroy(&motu->mutex);
fw_unit_put(motu->unit);
}

static void motu_bus_update(struct fw_unit *unit)
Expand Down
9 changes: 3 additions & 6 deletions sound/firewire/oxfw/oxfw.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,6 @@ static void oxfw_free(struct snd_oxfw *oxfw)
snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->rx_stream);
if (oxfw->has_output)
snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->tx_stream);

mutex_destroy(&oxfw->mutex);
fw_unit_put(oxfw->unit);
}

/*
Expand Down Expand Up @@ -329,10 +326,10 @@ static void oxfw_remove(struct fw_unit *unit)
if (oxfw->registered) {
// Block till all of ALSA character devices are released.
snd_card_free(oxfw->card);
} else {
/* Don't forget this case. */
oxfw_free(oxfw);
}

mutex_destroy(&oxfw->mutex);
fw_unit_put(oxfw->unit);
}

static const struct compat_info griffin_firewave = {
Expand Down
9 changes: 3 additions & 6 deletions sound/firewire/tascam/tascam.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,6 @@ static void tscm_free(struct snd_tscm *tscm)
{
snd_tscm_transaction_unregister(tscm);
snd_tscm_stream_destroy_duplex(tscm);

mutex_destroy(&tscm->mutex);
fw_unit_put(tscm->unit);
}

static void tscm_card_free(struct snd_card *card)
Expand Down Expand Up @@ -214,10 +211,10 @@ static void snd_tscm_remove(struct fw_unit *unit)
if (tscm->registered) {
// Block till all of ALSA character devices are released.
snd_card_free(tscm->card);
} else {
/* Don't forget this case. */
tscm_free(tscm);
}

mutex_destroy(&tscm->mutex);
fw_unit_put(tscm->unit);
}

static const struct ieee1394_device_id snd_tscm_id_table[] = {
Expand Down

0 comments on commit 5b14ec2

Please sign in to comment.