2008-03-10 07:14:20

by Atsushi Nemoto

[permalink] [raw]
Subject: [PATCH] at73c213: Remove redundant private_free routine

snd_pcm_lib_preallocate_free_for_all() is called from snd_pcm_free()
just after calling the private_free routine. So there should be no
need to call it in driver's private_free routine.

Signed-off-by: Atsushi Nemoto <[email protected]>
---
diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c
index 89d6e9c..024db14 100644
--- a/sound/spi/at73c213.c
+++ b/sound/spi/at73c213.c
@@ -314,15 +314,6 @@ static struct snd_pcm_ops at73c213_playback_ops = {
.pointer = snd_at73c213_pcm_pointer,
};

-static void snd_at73c213_pcm_free(struct snd_pcm *pcm)
-{
- struct snd_at73c213 *chip = snd_pcm_chip(pcm);
- if (chip->pcm) {
- snd_pcm_lib_preallocate_free_for_all(chip->pcm);
- chip->pcm = NULL;
- }
-}
-
static int __devinit snd_at73c213_pcm_new(struct snd_at73c213 *chip, int device)
{
struct snd_pcm *pcm;
@@ -333,8 +324,6 @@ static int __devinit snd_at73c213_pcm_new(struct snd_at73c213 *chip, int device)
if (retval < 0)
goto out;

- pcm->private_data = chip;
- pcm->private_free = snd_at73c213_pcm_free;
pcm->info_flags = SNDRV_PCM_INFO_BLOCK_TRANSFER;
strcpy(pcm->name, "at73c213");
chip->pcm = pcm;


2008-03-10 07:49:57

by Atsushi Nemoto

[permalink] [raw]
Subject: Re: [PATCH] at73c213: Remove redundant private_free routine

On Mon, 10 Mar 2008 16:13:54 +0900 (JST), Atsushi Nemoto <[email protected]> wrote:
> snd_pcm_lib_preallocate_free_for_all() is called from snd_pcm_free()
> just after calling the private_free routine. So there should be no
> need to call it in driver's private_free routine.
...
> - pcm->private_data = chip;
> - pcm->private_free = snd_at73c213_pcm_free;
> pcm->info_flags = SNDRV_PCM_INFO_BLOCK_TRANSFER;
> strcpy(pcm->name, "at73c213");
> chip->pcm = pcm;

Sorry, the patch was wrong. The private_data field should still be
initialized. Revised.

------------------------------------------------------
Subject: [PATCH] at73c213: Remove redundant private_free routine
From: Atsushi Nemoto <[email protected]>

snd_pcm_lib_preallocate_free_for_all() is called from snd_pcm_free()
just after calling the private_free routine. So there should be no
need to call it in driver's private_free routine.

Signed-off-by: Atsushi Nemoto <[email protected]>
---
diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c
index 89d6e9c..bf3ea43 100644
--- a/sound/spi/at73c213.c
+++ b/sound/spi/at73c213.c
@@ -314,15 +314,6 @@ static struct snd_pcm_ops at73c213_playback_ops = {
.pointer = snd_at73c213_pcm_pointer,
};

-static void snd_at73c213_pcm_free(struct snd_pcm *pcm)
-{
- struct snd_at73c213 *chip = snd_pcm_chip(pcm);
- if (chip->pcm) {
- snd_pcm_lib_preallocate_free_for_all(chip->pcm);
- chip->pcm = NULL;
- }
-}
-
static int __devinit snd_at73c213_pcm_new(struct snd_at73c213 *chip, int device)
{
struct snd_pcm *pcm;
@@ -334,7 +325,6 @@ static int __devinit snd_at73c213_pcm_new(struct snd_at73c213 *chip, int device)
goto out;

pcm->private_data = chip;
- pcm->private_free = snd_at73c213_pcm_free;
pcm->info_flags = SNDRV_PCM_INFO_BLOCK_TRANSFER;
strcpy(pcm->name, "at73c213");
chip->pcm = pcm;

2008-03-10 09:43:58

by Hans-Christian Egtvedt

[permalink] [raw]
Subject: Re: [PATCH] at73c213: Remove redundant private_free routine

On Mon, 2008-03-10 at 16:49 +0900, Atsushi Nemoto wrote:
> On Mon, 10 Mar 2008 16:13:54 +0900 (JST), Atsushi Nemoto <[email protected]> wrote:
> > snd_pcm_lib_preallocate_free_for_all() is called from snd_pcm_free()
> > just after calling the private_free routine. So there should be no
> > need to call it in driver's private_free routine.
> ...
> > - pcm->private_data = chip;
> > - pcm->private_free = snd_at73c213_pcm_free;
> > pcm->info_flags = SNDRV_PCM_INFO_BLOCK_TRANSFER;
> > strcpy(pcm->name, "at73c213");
> > chip->pcm = pcm;
>
> Sorry, the patch was wrong. The private_data field should still be
> initialized. Revised.
>

I spun this around, and it works fine on my system (AVR32 AT32AP7000 on
STK1000).

> ------------------------------------------------------
> Subject: [PATCH] at73c213: Remove redundant private_free routine
> From: Atsushi Nemoto <[email protected]>
>
> snd_pcm_lib_preallocate_free_for_all() is called from snd_pcm_free()
> just after calling the private_free routine. So there should be no
> need to call it in driver's private_free routine.
>

Thanks for debugging the driver.

> Signed-off-by: Atsushi Nemoto <[email protected]>

Acked-by: Hans-Christian Egtvedt <[email protected]>

> ---
> diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c
> index 89d6e9c..bf3ea43 100644
> --- a/sound/spi/at73c213.c
> +++ b/sound/spi/at73c213.c
> @@ -314,15 +314,6 @@ static struct snd_pcm_ops at73c213_playback_ops = {
> .pointer = snd_at73c213_pcm_pointer,
> };
>
> -static void snd_at73c213_pcm_free(struct snd_pcm *pcm)
> -{
> - struct snd_at73c213 *chip = snd_pcm_chip(pcm);
> - if (chip->pcm) {
> - snd_pcm_lib_preallocate_free_for_all(chip->pcm);
> - chip->pcm = NULL;
> - }
> -}
> -
> static int __devinit snd_at73c213_pcm_new(struct snd_at73c213 *chip, int device)
> {
> struct snd_pcm *pcm;
> @@ -334,7 +325,6 @@ static int __devinit snd_at73c213_pcm_new(struct snd_at73c213 *chip, int device)
> goto out;
>
> pcm->private_data = chip;
> - pcm->private_free = snd_at73c213_pcm_free;
> pcm->info_flags = SNDRV_PCM_INFO_BLOCK_TRANSFER;
> strcpy(pcm->name, "at73c213");
> chip->pcm = pcm;
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
With kind regards,
Hans-Christian Egtvedt, Applications Engineer