Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Torsten Schenk <torsten.schenk@zoho.com>
Cc: alsa-devel@alsa-project.org
Subject: Re: [PATCH 1/2] 6fire: make buffers DMA-able (pcm)
Date: Mon, 12 Aug 2013 11:37:58 +0200	[thread overview]
Message-ID: <s5h38qf1c7d.wl%tiwai@suse.de> (raw)
In-Reply-To: <20130811111119.fdcc2d884cb4ca71a08d56b3@zoho.com>

At Sun, 11 Aug 2013 11:11:19 +0200,
Torsten Schenk wrote:
> 
> Patch makes pcm buffers DMA-able by allocating each one separately.
> 
> Signed-off-by: Torsten Schenk <torsten.schenk@zoho.com>

Thanks, applied.


Takashi

> ---
> diff -Nur a/sound/usb/6fire/pcm.c b/sound/usb/6fire/pcm.c
> --- a/sound/usb/6fire/pcm.c	2013-08-04 22:46:46.000000000 +0200
> +++ b/sound/usb/6fire/pcm.c	2013-08-11 11:02:38.305774934 +0200
> @@ -582,6 +582,33 @@
>  	urb->instance.number_of_packets = PCM_N_PACKETS_PER_URB;
>  }
>  
> +static int usb6fire_pcm_buffers_init(struct pcm_runtime *rt)
> +{
> +	int i;
> +
> +	for (i = 0; i < PCM_N_URBS; i++) {
> +		rt->out_urbs[i].buffer = kzalloc(PCM_N_PACKETS_PER_URB
> +				* PCM_MAX_PACKET_SIZE, GFP_KERNEL);
> +		if (!rt->out_urbs[i].buffer)
> +			return -ENOMEM;
> +		rt->in_urbs[i].buffer = kzalloc(PCM_N_PACKETS_PER_URB
> +				* PCM_MAX_PACKET_SIZE, GFP_KERNEL);
> +		if (!rt->in_urbs[i].buffer)
> +			return -ENOMEM;
> +	}
> +	return 0;
> +}
> +
> +static void usb6fire_pcm_buffers_destroy(struct pcm_runtime *rt)
> +{
> +	int i;
> +
> +	for (i = 0; i < PCM_N_URBS; i++) {
> +		kfree(rt->out_urbs[i].buffer);
> +		kfree(rt->in_urbs[i].buffer);
> +	}
> +}
> +
>  int usb6fire_pcm_init(struct sfire_chip *chip)
>  {
>  	int i;
> @@ -593,6 +620,13 @@
>  	if (!rt)
>  		return -ENOMEM;
>  
> +	ret = usb6fire_pcm_buffers_init(rt);
> +	if (ret) {
> +		usb6fire_pcm_buffers_destroy(rt);
> +		kfree(rt);
> +		return ret;
> +	}
> +
>  	rt->chip = chip;
>  	rt->stream_state = STREAM_DISABLED;
>  	rt->rate = ARRAY_SIZE(rates);
> @@ -614,6 +648,7 @@
>  
>  	ret = snd_pcm_new(chip->card, "DMX6FireUSB", 0, 1, 1, &pcm);
>  	if (ret < 0) {
> +		usb6fire_pcm_buffers_destroy(rt);
>  		kfree(rt);
>  		snd_printk(KERN_ERR PREFIX "cannot create pcm instance.\n");
>  		return ret;
> @@ -625,6 +660,7 @@
>  	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &pcm_ops);
>  
>  	if (ret) {
> +		usb6fire_pcm_buffers_destroy(rt);
>  		kfree(rt);
>  		snd_printk(KERN_ERR PREFIX
>  				"error preallocating pcm buffers.\n");
> @@ -669,6 +705,9 @@
>  
>  void usb6fire_pcm_destroy(struct sfire_chip *chip)
>  {
> -	kfree(chip->pcm);
> +	struct pcm_runtime *rt = chip->pcm;
> +
> +	usb6fire_pcm_buffers_destroy(rt);
> +	kfree(rt);
>  	chip->pcm = NULL;
>  }
> diff -Nur a/sound/usb/6fire/pcm.h b/sound/usb/6fire/pcm.h
> --- a/sound/usb/6fire/pcm.h	2013-08-04 22:46:46.000000000 +0200
> +++ b/sound/usb/6fire/pcm.h	2013-08-11 10:49:28.779700620 +0200
> @@ -32,7 +32,7 @@
>  	struct urb instance;
>  	struct usb_iso_packet_descriptor packets[PCM_N_PACKETS_PER_URB];
>  	/* END DO NOT SEPARATE */
> -	u8 buffer[PCM_N_PACKETS_PER_URB * PCM_MAX_PACKET_SIZE];
> +	u8 *buffer;
>  
>  	struct pcm_urb *peer;
>  };
> 

      reply	other threads:[~2013-08-12  9:36 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-07 14:51 [PATCH] 6fire: fix URB transfer buffer for midi output Torsten Schenk
     [not found] ` <20130807165149.188c4b16297be52c0630a18f-ytc+IHgoah0@public.gmane.org>
2013-08-07 16:34   ` Takashi Iwai
     [not found]     ` <s5hli4d5uj7.wl%tiwai-l3A5Bk7waGM@public.gmane.org>
2013-08-07 17:38       ` Alan Stern
     [not found]         ` <Pine.LNX.4.44L0.1308071334590.886-100000-IYeN2dnnYyZXsRXLowluHWD2FQJk+8+b@public.gmane.org>
2013-08-08  6:03           ` Takashi Iwai
2013-08-08  7:16             ` Clemens Ladisch
     [not found]               ` <520345CB.3030307-P6GI/4k7KOmELgA04lAiVw@public.gmane.org>
2013-08-08  7:28                 ` [alsa-devel] " Takashi Iwai
2013-08-11  9:11             ` [PATCH 1/2] 6fire: make buffers DMA-able (pcm) Torsten Schenk
2013-08-12  9:37               ` Takashi Iwai [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s5h38qf1c7d.wl%tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=torsten.schenk@zoho.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox