Skip to content

Commit

Permalink
ALSA: oxfw: use managed-resource to maintain cache of stream formats
Browse files Browse the repository at this point in the history
ALSA oxfw driver allocates memory objects for cache of stream formats.
The objects are used to maintain packet streaming by components for
ALSA rawMIDI/PCM interface. They can be released as managed-resource
of 'struct snd_card.card_dev'.

This commit uses managed-resource of the sound card device for this
purpose.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
takaswie authored and tiwai committed Oct 4, 2018
1 parent 72bc8c4 commit cd3b711
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 19 deletions.
13 changes: 8 additions & 5 deletions sound/firewire/oxfw/oxfw-stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -517,8 +517,9 @@ assume_stream_formats(struct snd_oxfw *oxfw, enum avc_general_plug_dir dir,
if (err < 0)
goto end;

formats[eid] = kmemdup(buf, *len, GFP_KERNEL);
if (formats[eid] == NULL) {
formats[eid] = devm_kmemdup(&oxfw->card->card_dev, buf, *len,
GFP_KERNEL);
if (!formats[eid]) {
err = -ENOMEM;
goto end;
}
Expand All @@ -535,7 +536,8 @@ assume_stream_formats(struct snd_oxfw *oxfw, enum avc_general_plug_dir dir,
continue;

eid++;
formats[eid] = kmemdup(buf, *len, GFP_KERNEL);
formats[eid] = devm_kmemdup(&oxfw->card->card_dev, buf, *len,
GFP_KERNEL);
if (formats[eid] == NULL) {
err = -ENOMEM;
goto end;
Expand Down Expand Up @@ -597,8 +599,9 @@ static int fill_stream_formats(struct snd_oxfw *oxfw,
if (err < 0)
break;

formats[eid] = kmemdup(buf, len, GFP_KERNEL);
if (formats[eid] == NULL) {
formats[eid] = devm_kmemdup(&oxfw->card->card_dev, buf, len,
GFP_KERNEL);
if (!formats[eid]) {
err = -ENOMEM;
break;
}
Expand Down
14 changes: 0 additions & 14 deletions sound/firewire/oxfw/oxfw.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,17 +115,10 @@ static int name_card(struct snd_oxfw *oxfw)

static void oxfw_free(struct snd_oxfw *oxfw)
{
unsigned int i;

snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->rx_stream);
if (oxfw->has_output)
snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->tx_stream);

for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; i++) {
kfree(oxfw->tx_stream_formats[i]);
kfree(oxfw->rx_stream_formats[i]);
}

mutex_destroy(&oxfw->mutex);
fw_unit_put(oxfw->unit);
}
Expand Down Expand Up @@ -205,7 +198,6 @@ static int detect_quirks(struct snd_oxfw *oxfw)
static void do_registration(struct work_struct *work)
{
struct snd_oxfw *oxfw = container_of(work, struct snd_oxfw, dwork.work);
int i;
int err;

if (oxfw->registered)
Expand Down Expand Up @@ -268,12 +260,6 @@ static void do_registration(struct work_struct *work)
snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->rx_stream);
if (oxfw->has_output)
snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->tx_stream);
for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; ++i) {
kfree(oxfw->tx_stream_formats[i]);
oxfw->tx_stream_formats[i] = NULL;
kfree(oxfw->rx_stream_formats[i]);
oxfw->rx_stream_formats[i] = NULL;
}
snd_card_free(oxfw->card);
dev_info(&oxfw->unit->device,
"Sound card registration failed: %d\n", err);
Expand Down

0 comments on commit cd3b711

Please sign in to comment.