[5.6,09/71] ALSA: firewire: Use managed buffer allocation
diff mbox series

Message ID 20191209094943.14984-10-tiwai@suse.de
State New
Headers show
Series
  • ALSA: Use managed buffer allocation
Related show

Commit Message

Takashi Iwai Dec. 9, 2019, 9:48 a.m. UTC
Clean up the drivers with the new managed buffer allocation API.
The superfluous snd_pcm_lib_malloc_pages() and
snd_pcm_lib_free_pages() calls are dropped.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/firewire/bebob/bebob_pcm.c         | 11 +++--------
 sound/firewire/dice/dice-pcm.c           | 13 ++++---------
 sound/firewire/digi00x/digi00x-pcm.c     | 11 +++--------
 sound/firewire/fireface/ff-pcm.c         |  9 ++-------
 sound/firewire/fireworks/fireworks_pcm.c | 11 +++--------
 sound/firewire/isight.c                  | 10 ++--------
 sound/firewire/motu/motu-pcm.c           | 11 +++--------
 sound/firewire/oxfw/oxfw-pcm.c           | 17 ++++-------------
 sound/firewire/tascam/tascam-pcm.c       | 11 +++--------
 9 files changed, 27 insertions(+), 77 deletions(-)

Comments

Takashi Sakamoto Dec. 9, 2019, 3:16 p.m. UTC | #1
Hi,

I'm not opposed to this patchset. The direction is preferable.

However changes in this patchset brings bugs in error path of
each implementation for pcm.hw_params.

On Mon, Dec 09, 2019 at 10:48:41AM +0100, Takashi Iwai wrote:
> diff --git a/sound/firewire/bebob/bebob_pcm.c b/sound/firewire/bebob/bebob_pcm.c
> index d4edd06d32cf..2ee91ff6891e 100644
> --- a/sound/firewire/bebob/bebob_pcm.c
> +++ b/sound/firewire/bebob/bebob_pcm.c
> @@ -214,10 +214,6 @@ static int pcm_hw_params(struct snd_pcm_substream *substream,
>  	struct snd_bebob *bebob = substream->private_data;
>  	int err;
>  
> -	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
> -	if (err < 0)
> -		return err;
> -
>  	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
>  		unsigned int rate = params_rate(hw_params);
>  		unsigned int frames_per_period = params_period_size(hw_params);
> @@ -231,7 +227,7 @@ static int pcm_hw_params(struct snd_pcm_substream *substream,
>  		mutex_unlock(&bebob->mutex);
>  	}
>  
> -	return err;
> +	return 0;
>  }
  
This should return the err variable to report failure of isochronous
resources reservation.

However I found that ALSA oxfw/fireface drivers returns 0 even if it
fails. This is bug since v5.3 kernel.

Would you please apply below two patches into your three, then modify
your patch for all firewire drivers to return error correctly?

======== 8< --------

From a2cddad1c74e8e825739db63c17c0efabed1c93d Mon Sep 17 00:00:00 2001
From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Date: Tue, 10 Dec 2019 00:03:04 +0900
Subject: [PATCH 1/2] ALSA: oxfw: fix return value in error path of isochronous
 resources reservation

Even if isochronous resources reservation fails, error code doesn't return
in pcm.hw_params callback.

Cc: <stable@vger.kernel.org> #5.3+
Fixes: 4f380d007052 ("ALSA: oxfw: configure packet format in pcm.hw_params callback")
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
---
 sound/firewire/oxfw/oxfw-pcm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/firewire/oxfw/oxfw-pcm.c b/sound/firewire/oxfw/oxfw-pcm.c
index 9124603edabe..67fd3e844dd6 100644
--- a/sound/firewire/oxfw/oxfw-pcm.c
+++ b/sound/firewire/oxfw/oxfw-pcm.c
@@ -285,7 +285,7 @@ static int pcm_playback_hw_params(struct snd_pcm_substream *substream,
 		mutex_unlock(&oxfw->mutex);
 	}
 
-	return 0;
+	return err;
 }
 
 static int pcm_capture_hw_free(struct snd_pcm_substream *substream)
Takashi Iwai Dec. 9, 2019, 3:58 p.m. UTC | #2
On Mon, 09 Dec 2019 16:16:56 +0100,
Takashi Sakamoto wrote:
> 
> Hi,
> 
> I'm not opposed to this patchset. The direction is preferable.
> 
> However changes in this patchset brings bugs in error path of
> each implementation for pcm.hw_params.
> 
> On Mon, Dec 09, 2019 at 10:48:41AM +0100, Takashi Iwai wrote:
> > diff --git a/sound/firewire/bebob/bebob_pcm.c b/sound/firewire/bebob/bebob_pcm.c
> > index d4edd06d32cf..2ee91ff6891e 100644
> > --- a/sound/firewire/bebob/bebob_pcm.c
> > +++ b/sound/firewire/bebob/bebob_pcm.c
> > @@ -214,10 +214,6 @@ static int pcm_hw_params(struct snd_pcm_substream *substream,
> >  	struct snd_bebob *bebob = substream->private_data;
> >  	int err;
> >  
> > -	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
> > -	if (err < 0)
> > -		return err;
> > -
> >  	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
> >  		unsigned int rate = params_rate(hw_params);
> >  		unsigned int frames_per_period = params_period_size(hw_params);
> > @@ -231,7 +227,7 @@ static int pcm_hw_params(struct snd_pcm_substream *substream,
> >  		mutex_unlock(&bebob->mutex);
> >  	}
> >  
> > -	return err;
> > +	return 0;
> >  }
>   
> This should return the err variable to report failure of isochronous
> resources reservation.
> 
> However I found that ALSA oxfw/fireface drivers returns 0 even if it
> fails. This is bug since v5.3 kernel.
> 
> Would you please apply below two patches into your three, then modify
> your patch for all firewire drivers to return error correctly?

Yes, that sounds like a correct fix.  Thank you for spotting out.

So, please go ahead, submit these two patches, then I'll update the
fix containing your correction above and submit as v2 (maybe only for
this, as the whole series is too big to re-submit).


Takashi
Takashi Iwai Dec. 9, 2019, 7:08 p.m. UTC | #3
On Mon, 09 Dec 2019 16:58:02 +0100,
Takashi Iwai wrote:
> 
> On Mon, 09 Dec 2019 16:16:56 +0100,
> Takashi Sakamoto wrote:
> > 
> > Hi,
> > 
> > I'm not opposed to this patchset. The direction is preferable.
> > 
> > However changes in this patchset brings bugs in error path of
> > each implementation for pcm.hw_params.
> > 
> > On Mon, Dec 09, 2019 at 10:48:41AM +0100, Takashi Iwai wrote:
> > > diff --git a/sound/firewire/bebob/bebob_pcm.c b/sound/firewire/bebob/bebob_pcm.c
> > > index d4edd06d32cf..2ee91ff6891e 100644
> > > --- a/sound/firewire/bebob/bebob_pcm.c
> > > +++ b/sound/firewire/bebob/bebob_pcm.c
> > > @@ -214,10 +214,6 @@ static int pcm_hw_params(struct snd_pcm_substream *substream,
> > >  	struct snd_bebob *bebob = substream->private_data;
> > >  	int err;
> > >  
> > > -	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
> > > -	if (err < 0)
> > > -		return err;
> > > -
> > >  	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
> > >  		unsigned int rate = params_rate(hw_params);
> > >  		unsigned int frames_per_period = params_period_size(hw_params);
> > > @@ -231,7 +227,7 @@ static int pcm_hw_params(struct snd_pcm_substream *substream,
> > >  		mutex_unlock(&bebob->mutex);
> > >  	}
> > >  
> > > -	return err;
> > > +	return 0;
> > >  }
> >   
> > This should return the err variable to report failure of isochronous
> > resources reservation.
> > 
> > However I found that ALSA oxfw/fireface drivers returns 0 even if it
> > fails. This is bug since v5.3 kernel.
> > 
> > Would you please apply below two patches into your three, then modify
> > your patch for all firewire drivers to return error correctly?
> 
> Yes, that sounds like a correct fix.  Thank you for spotting out.
> 
> So, please go ahead, submit these two patches, then I'll update the
> fix containing your correction above and submit as v2 (maybe only for
> this, as the whole series is too big to re-submit).

Never mind, the patches there were already good enough, so I applied
these two now.  Will resend v2 fix for this patch.


thanks,

Takashi

Patch
diff mbox series

diff --git a/sound/firewire/bebob/bebob_pcm.c b/sound/firewire/bebob/bebob_pcm.c
index d4edd06d32cf..2ee91ff6891e 100644
--- a/sound/firewire/bebob/bebob_pcm.c
+++ b/sound/firewire/bebob/bebob_pcm.c
@@ -214,10 +214,6 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 	struct snd_bebob *bebob = substream->private_data;
 	int err;
 
-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-	if (err < 0)
-		return err;
-
 	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
 		unsigned int rate = params_rate(hw_params);
 		unsigned int frames_per_period = params_period_size(hw_params);
@@ -231,7 +227,7 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 		mutex_unlock(&bebob->mutex);
 	}
 
-	return err;
+	return 0;
 }
 
 static int pcm_hw_free(struct snd_pcm_substream *substream)
@@ -247,7 +243,7 @@  static int pcm_hw_free(struct snd_pcm_substream *substream)
 
 	mutex_unlock(&bebob->mutex);
 
-	return snd_pcm_lib_free_pages(substream);
+	return 0;
 }
 
 static int
@@ -377,8 +373,7 @@  int snd_bebob_create_pcm_devices(struct snd_bebob *bebob)
 		 "%s PCM", bebob->card->shortname);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &playback_ops);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &capture_ops);
-	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_VMALLOC,
-					      NULL, 0, 0);
+	snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_VMALLOC, NULL, 0, 0);
 end:
 	return err;
 }
diff --git a/sound/firewire/dice/dice-pcm.c b/sound/firewire/dice/dice-pcm.c
index be79d659eedf..122f95068170 100644
--- a/sound/firewire/dice/dice-pcm.c
+++ b/sound/firewire/dice/dice-pcm.c
@@ -266,10 +266,6 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 	struct snd_dice *dice = substream->private_data;
 	int err;
 
-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-	if (err < 0)
-		return err;
-
 	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
 		unsigned int rate = params_rate(hw_params);
 		unsigned int events_per_period = params_period_size(hw_params);
@@ -288,7 +284,7 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 		mutex_unlock(&dice->mutex);
 	}
 
-	return err;
+	return 0;
 }
 
 static int pcm_hw_free(struct snd_pcm_substream *substream)
@@ -304,7 +300,7 @@  static int pcm_hw_free(struct snd_pcm_substream *substream)
 
 	mutex_unlock(&dice->mutex);
 
-	return snd_pcm_lib_free_pages(substream);
+	return 0;
 }
 
 static int capture_prepare(struct snd_pcm_substream *substream)
@@ -457,9 +453,8 @@  int snd_dice_create_pcm(struct snd_dice *dice)
 			snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK,
 					&playback_ops);
 
-		snd_pcm_lib_preallocate_pages_for_all(pcm,
-						      SNDRV_DMA_TYPE_VMALLOC,
-						      NULL, 0, 0);
+		snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_VMALLOC,
+					       NULL, 0, 0);
 	}
 
 	return 0;
diff --git a/sound/firewire/digi00x/digi00x-pcm.c b/sound/firewire/digi00x/digi00x-pcm.c
index 57cbce4fd836..3c0566d78b56 100644
--- a/sound/firewire/digi00x/digi00x-pcm.c
+++ b/sound/firewire/digi00x/digi00x-pcm.c
@@ -190,10 +190,6 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 	struct snd_dg00x *dg00x = substream->private_data;
 	int err;
 
-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-	if (err < 0)
-		return err;
-
 	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
 		unsigned int rate = params_rate(hw_params);
 		unsigned int frames_per_period = params_period_size(hw_params);
@@ -207,7 +203,7 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 		mutex_unlock(&dg00x->mutex);
 	}
 
-	return err;
+	return 0;
 }
 
 static int pcm_hw_free(struct snd_pcm_substream *substream)
@@ -223,7 +219,7 @@  static int pcm_hw_free(struct snd_pcm_substream *substream)
 
 	mutex_unlock(&dg00x->mutex);
 
-	return snd_pcm_lib_free_pages(substream);
+	return 0;
 }
 
 static int pcm_capture_prepare(struct snd_pcm_substream *substream)
@@ -360,8 +356,7 @@  int snd_dg00x_create_pcm_devices(struct snd_dg00x *dg00x)
 		 "%s PCM", dg00x->card->shortname);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &playback_ops);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &capture_ops);
-	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_VMALLOC,
-					      NULL, 0, 0);
+	snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_VMALLOC, NULL, 0, 0);
 
 	return 0;
 }
diff --git a/sound/firewire/fireface/ff-pcm.c b/sound/firewire/fireface/ff-pcm.c
index 4e3bd9a2bec0..2ffa12fd44f8 100644
--- a/sound/firewire/fireface/ff-pcm.c
+++ b/sound/firewire/fireface/ff-pcm.c
@@ -230,10 +230,6 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 	struct snd_ff *ff = substream->private_data;
 	int err;
 
-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-	if (err < 0)
-		return err;
-
 	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
 		unsigned int rate = params_rate(hw_params);
 		unsigned int frames_per_period = params_period_size(hw_params);
@@ -263,7 +259,7 @@  static int pcm_hw_free(struct snd_pcm_substream *substream)
 
 	mutex_unlock(&ff->mutex);
 
-	return snd_pcm_lib_free_pages(substream);
+	return 0;
 }
 
 static int pcm_capture_prepare(struct snd_pcm_substream *substream)
@@ -400,8 +396,7 @@  int snd_ff_create_pcm_devices(struct snd_ff *ff)
 		 "%s PCM", ff->card->shortname);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &pcm_playback_ops);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &pcm_capture_ops);
-	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_VMALLOC,
-					      NULL, 0, 0);
+	snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_VMALLOC, NULL, 0, 0);
 
 	return 0;
 }
diff --git a/sound/firewire/fireworks/fireworks_pcm.c b/sound/firewire/fireworks/fireworks_pcm.c
index e69896d748df..09d6bc98647c 100644
--- a/sound/firewire/fireworks/fireworks_pcm.c
+++ b/sound/firewire/fireworks/fireworks_pcm.c
@@ -250,10 +250,6 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 	struct snd_efw *efw = substream->private_data;
 	int err;
 
-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-	if (err < 0)
-		return err;
-
 	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
 		unsigned int rate = params_rate(hw_params);
 		unsigned int frames_per_period = params_period_size(hw_params);
@@ -267,7 +263,7 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 		mutex_unlock(&efw->mutex);
 	}
 
-	return err;
+	return 0;
 }
 
 static int pcm_hw_free(struct snd_pcm_substream *substream)
@@ -283,7 +279,7 @@  static int pcm_hw_free(struct snd_pcm_substream *substream)
 
 	mutex_unlock(&efw->mutex);
 
-	return snd_pcm_lib_free_pages(substream);
+	return 0;
 }
 
 static int pcm_capture_prepare(struct snd_pcm_substream *substream)
@@ -406,8 +402,7 @@  int snd_efw_create_pcm_devices(struct snd_efw *efw)
 	snprintf(pcm->name, sizeof(pcm->name), "%s PCM", efw->card->shortname);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &playback_ops);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &capture_ops);
-	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_VMALLOC,
-					      NULL, 0, 0);
+	snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_VMALLOC, NULL, 0, 0);
 end:
 	return err;
 }
diff --git a/sound/firewire/isight.c b/sound/firewire/isight.c
index d9f1b962bfef..214f77b0e8b7 100644
--- a/sound/firewire/isight.c
+++ b/sound/firewire/isight.c
@@ -286,11 +286,6 @@  static int isight_hw_params(struct snd_pcm_substream *substream,
 			    struct snd_pcm_hw_params *hw_params)
 {
 	struct isight *isight = substream->private_data;
-	int err;
-
-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-	if (err < 0)
-		return err;
 
 	WRITE_ONCE(isight->pcm_active, true);
 
@@ -336,7 +331,7 @@  static int isight_hw_free(struct snd_pcm_substream *substream)
 	isight_stop_streaming(isight);
 	mutex_unlock(&isight->mutex);
 
-	return snd_pcm_lib_free_pages(substream);
+	return 0;
 }
 
 static int isight_start_streaming(struct isight *isight)
@@ -463,8 +458,7 @@  static int isight_create_pcm(struct isight *isight)
 	strcpy(pcm->name, "iSight");
 	isight->pcm = pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream;
 	isight->pcm->ops = &ops;
-	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_VMALLOC,
-					      NULL, 0, 0);
+	snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_VMALLOC, NULL, 0, 0);
 
 	return 0;
 }
diff --git a/sound/firewire/motu/motu-pcm.c b/sound/firewire/motu/motu-pcm.c
index 349b4d09e84f..d95a8b3cc03f 100644
--- a/sound/firewire/motu/motu-pcm.c
+++ b/sound/firewire/motu/motu-pcm.c
@@ -218,10 +218,6 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 	struct snd_motu *motu = substream->private_data;
 	int err;
 
-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-	if (err < 0)
-		return err;
-
 	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
 		unsigned int rate = params_rate(hw_params);
 		unsigned int frames_per_period = params_period_size(hw_params);
@@ -235,7 +231,7 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 		mutex_unlock(&motu->mutex);
 	}
 
-	return err;
+	return 0;
 }
 
 static int pcm_hw_free(struct snd_pcm_substream *substream)
@@ -251,7 +247,7 @@  static int pcm_hw_free(struct snd_pcm_substream *substream)
 
 	mutex_unlock(&motu->mutex);
 
-	return snd_pcm_lib_free_pages(substream);
+	return 0;
 }
 
 static int capture_prepare(struct snd_pcm_substream *substream)
@@ -378,8 +374,7 @@  int snd_motu_create_pcm_devices(struct snd_motu *motu)
 
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &capture_ops);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &playback_ops);
-	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_VMALLOC,
-					      NULL, 0, 0);
+	snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_VMALLOC, NULL, 0, 0);
 
 	return 0;
 }
diff --git a/sound/firewire/oxfw/oxfw-pcm.c b/sound/firewire/oxfw/oxfw-pcm.c
index 9124603edabe..6ea08300b49e 100644
--- a/sound/firewire/oxfw/oxfw-pcm.c
+++ b/sound/firewire/oxfw/oxfw-pcm.c
@@ -239,10 +239,6 @@  static int pcm_capture_hw_params(struct snd_pcm_substream *substream,
 	struct snd_oxfw *oxfw = substream->private_data;
 	int err;
 
-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-	if (err < 0)
-		return err;
-
 	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
 		unsigned int rate = params_rate(hw_params);
 		unsigned int channels = params_channels(hw_params);
@@ -258,7 +254,7 @@  static int pcm_capture_hw_params(struct snd_pcm_substream *substream,
 		mutex_unlock(&oxfw->mutex);
 	}
 
-	return err;
+	return 0;
 }
 static int pcm_playback_hw_params(struct snd_pcm_substream *substream,
 				  struct snd_pcm_hw_params *hw_params)
@@ -266,10 +262,6 @@  static int pcm_playback_hw_params(struct snd_pcm_substream *substream,
 	struct snd_oxfw *oxfw = substream->private_data;
 	int err;
 
-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-	if (err < 0)
-		return err;
-
 	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
 		unsigned int rate = params_rate(hw_params);
 		unsigned int channels = params_channels(hw_params);
@@ -301,7 +293,7 @@  static int pcm_capture_hw_free(struct snd_pcm_substream *substream)
 
 	mutex_unlock(&oxfw->mutex);
 
-	return snd_pcm_lib_free_pages(substream);
+	return 0;
 }
 static int pcm_playback_hw_free(struct snd_pcm_substream *substream)
 {
@@ -316,7 +308,7 @@  static int pcm_playback_hw_free(struct snd_pcm_substream *substream)
 
 	mutex_unlock(&oxfw->mutex);
 
-	return snd_pcm_lib_free_pages(substream);
+	return 0;
 }
 
 static int pcm_capture_prepare(struct snd_pcm_substream *substream)
@@ -454,8 +446,7 @@  int snd_oxfw_create_pcm(struct snd_oxfw *oxfw)
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &playback_ops);
 	if (cap > 0)
 		snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &capture_ops);
-	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_VMALLOC,
-					      NULL, 0, 0);
+	snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_VMALLOC, NULL, 0, 0);
 
 	return 0;
 }
diff --git a/sound/firewire/tascam/tascam-pcm.c b/sound/firewire/tascam/tascam-pcm.c
index 8e9b444c8bff..9f86c2d7e79e 100644
--- a/sound/firewire/tascam/tascam-pcm.c
+++ b/sound/firewire/tascam/tascam-pcm.c
@@ -119,10 +119,6 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 	struct snd_tscm *tscm = substream->private_data;
 	int err;
 
-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-	if (err < 0)
-		return err;
-
 	if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
 		unsigned int rate = params_rate(hw_params);
 		unsigned int frames_per_period = params_period_size(hw_params);
@@ -136,7 +132,7 @@  static int pcm_hw_params(struct snd_pcm_substream *substream,
 		mutex_unlock(&tscm->mutex);
 	}
 
-	return err;
+	return 0;
 }
 
 static int pcm_hw_free(struct snd_pcm_substream *substream)
@@ -152,7 +148,7 @@  static int pcm_hw_free(struct snd_pcm_substream *substream)
 
 	mutex_unlock(&tscm->mutex);
 
-	return snd_pcm_lib_free_pages(substream);
+	return 0;
 }
 
 static int pcm_capture_prepare(struct snd_pcm_substream *substream)
@@ -289,8 +285,7 @@  int snd_tscm_create_pcm_devices(struct snd_tscm *tscm)
 		 "%s PCM", tscm->card->shortname);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &playback_ops);
 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &capture_ops);
-	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_VMALLOC,
-					      NULL, 0, 0);
+	snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_VMALLOC, NULL, 0, 0);
 
 	return 0;
 }