Skip to content

Commit

Permalink
ALSA: firewire: block .remove callback of bus driver till all of ALSA…
Browse files Browse the repository at this point in the history
… character devices are released

At present, in .remove callback of bus driver just decrease reference
count of device for ALSA card instance. This delegates release of the
device to a process in which the last of ALSA character device is
released.

On the other hand, the other drivers such as for devices on PCIe are
programmed to block .remove callback of bus driver till all of ALSA
character devices are released.

For consistency of behaviour for whole drivers, this probably confuses
users. This commit takes drivers in ALSA firewire stack to imitate the
above behaviour.

Signed-off-by: Takashi Sakamoto <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
takaswie authored and tiwai committed Oct 10, 2018
1 parent d06fb56 commit 61ccc6f
Show file tree
Hide file tree
Showing 8 changed files with 16 additions and 15 deletions.
4 changes: 2 additions & 2 deletions sound/firewire/bebob/bebob.c
Original file line number Diff line number Diff line change
Expand Up @@ -374,8 +374,8 @@ static void bebob_remove(struct fw_unit *unit)
cancel_delayed_work_sync(&bebob->dwork);

if (bebob->registered) {
/* No need to wait for releasing card object in this context. */
snd_card_free_when_closed(bebob->card);
// Block till all of ALSA character devices are released.
snd_card_free(bebob->card);
} else {
/* Don't forget this case. */
bebob_free(bebob);
Expand Down
4 changes: 2 additions & 2 deletions sound/firewire/digi00x/digi00x.c
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,8 @@ static void snd_dg00x_remove(struct fw_unit *unit)
cancel_delayed_work_sync(&dg00x->dwork);

if (dg00x->registered) {
/* No need to wait for releasing card object in this context. */
snd_card_free_when_closed(dg00x->card);
// Block till all of ALSA character devices are released.
snd_card_free(dg00x->card);
} else {
/* Don't forget this case. */
dg00x_free(dg00x);
Expand Down
4 changes: 2 additions & 2 deletions sound/firewire/fireface/ff.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,8 @@ static void snd_ff_remove(struct fw_unit *unit)
cancel_work_sync(&ff->dwork.work);

if (ff->registered) {
/* No need to wait for releasing card object in this context. */
snd_card_free_when_closed(ff->card);
// Block till all of ALSA character devices are released.
snd_card_free(ff->card);
} else {
/* Don't forget this case. */
ff_free(ff);
Expand Down
4 changes: 2 additions & 2 deletions sound/firewire/fireworks/fireworks.c
Original file line number Diff line number Diff line change
Expand Up @@ -358,8 +358,8 @@ static void efw_remove(struct fw_unit *unit)
cancel_delayed_work_sync(&efw->dwork);

if (efw->registered) {
/* No need to wait for releasing card object in this context. */
snd_card_free_when_closed(efw->card);
// Block till all of ALSA character devices are released.
snd_card_free(efw->card);
} else {
/* Don't forget this case. */
efw_free(efw);
Expand Down
3 changes: 2 additions & 1 deletion sound/firewire/isight.c
Original file line number Diff line number Diff line change
Expand Up @@ -703,7 +703,8 @@ static void isight_remove(struct fw_unit *unit)
isight_stop_streaming(isight);
mutex_unlock(&isight->mutex);

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

static const struct ieee1394_device_id isight_id_table[] = {
Expand Down
4 changes: 2 additions & 2 deletions sound/firewire/motu/motu.c
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,8 @@ static void motu_remove(struct fw_unit *unit)
cancel_delayed_work_sync(&motu->dwork);

if (motu->registered) {
/* No need to wait for releasing card object in this context. */
snd_card_free_when_closed(motu->card);
// Block till all of ALSA character devices are released.
snd_card_free(motu->card);
} else {
/* Don't forget this case. */
motu_free(motu);
Expand Down
4 changes: 2 additions & 2 deletions sound/firewire/oxfw/oxfw.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,8 +327,8 @@ static void oxfw_remove(struct fw_unit *unit)
cancel_delayed_work_sync(&oxfw->dwork);

if (oxfw->registered) {
/* No need to wait for releasing card object in this context. */
snd_card_free_when_closed(oxfw->card);
// Block till all of ALSA character devices are released.
snd_card_free(oxfw->card);
} else {
/* Don't forget this case. */
oxfw_free(oxfw);
Expand Down
4 changes: 2 additions & 2 deletions sound/firewire/tascam/tascam.c
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,8 @@ static void snd_tscm_remove(struct fw_unit *unit)
cancel_delayed_work_sync(&tscm->dwork);

if (tscm->registered) {
/* No need to wait for releasing card object in this context. */
snd_card_free_when_closed(tscm->card);
// Block till all of ALSA character devices are released.
snd_card_free(tscm->card);
} else {
/* Don't forget this case. */
tscm_free(tscm);
Expand Down

0 comments on commit 61ccc6f

Please sign in to comment.