[alsa-devel] mapping externally allocated Scatter Gather DMA buffers

Manu Abraham abraham.manu at gmail.com
Thu Nov 11 08:45:15 CET 2010


On Wed, Nov 10, 2010 at 11:35 PM, Jaroslav Kysela <perex at perex.cz> wrote:
> On Wed, 10 Nov 2010, Manu Abraham wrote:
>
>> On Wed, Nov 10, 2010 at 8:35 PM, Jaroslav Kysela <perex at perex.cz> wrote:
>>>
>>> On Wed, 10 Nov 2010, Manu Abraham wrote:
>>>>
>>>>        /* enable stream */
>>>>        /* initializing 8 buffer with "pages" pages each .. */
>>>>        stream = saa7231_stream_init(saa7231, AUDIO_CAPTURE, ADAPTER_INT,
>>>> 0, pages);
>>>>        if (!stream) {
>>>>                dprintk(SAA7231_ERROR, 1, "ERROR: Registering stream");
>>>>                return -ENOMEM;
>>>>        }
>>>>        audio->stream = stream;
>>>>        buffer = stream->dmabuf;
>>>>        saa7231_add_irqevent(saa7231, 43, SAA7231_EDGE_RISING,
>>>> saa7231_audio_evhandler, "AS2D_AVIS");
>>>>        dprintk(SAA7231_DEBUG, 1, "Mapping %d buffers with %d pages
>>>> each",
>>>> XS2D_BUFFERS, pages);
>>>
>>> Unfortunately, I don't understand the role of XS2D_BUFFERS. The ALSA
>>> bufsize
>>> is the whole DMA area (you should use params_buffer_bytes() to get this
>>> value instead of calculating this using periods * period_size).
>>>
>>> It means: Just allocate number of pages required for buffer_bytes. Don't
>>> play with periods (except the interrupts).
>>
>>
>> There are 8 SG buffers for the hardware; the maximum size of each
>> buffer can be 512 pages,
>> the minimum can be a single page.
>
> Could you describe more the whole DMA layout, including IRQ acks?
>
> It seems to me:
>
> SG PAGE 1 points to 1 - 512 data pages (4096 bytes long)
> SG PAGE 2 .....
>    ....
> SG PAGE 8 .....


I adapted the whole thing to make the buffersize divided amongst the
XS2D_BUFFERS (8):
I hope the mapping of the buffers is okay ? It looks thus, now ..




static struct snd_pcm_hardware saa7231_capture_info = {
	.info			= (SNDRV_PCM_INFO_MMAP		|
				  SNDRV_PCM_INFO_INTERLEAVED	|
				  SNDRV_PCM_INFO_BLOCK_TRANSFER	|
				  SNDRV_PCM_INFO_MMAP_VALID),

	.formats		= (SNDRV_PCM_FMTBIT_S16_LE	|
				  SNDRV_PCM_FMTBIT_S16_BE	|
				  SNDRV_PCM_FMTBIT_S8		|
				  SNDRV_PCM_FMTBIT_U8		|
				  SNDRV_PCM_FMTBIT_U16_LE	|
				  SNDRV_PCM_FMTBIT_U16_BE),

	.rates			= SNDRV_PCM_RATE_32000,

	.rate_min		= 32000,
	.rate_max		= 32000,

	.channels_min		= 1,
	.channels_max		= 2,

//	.buffer_bytes_max	= 512 * 4096,
	.buffer_bytes_max	= 256 * 1024,
#if 0
	.period_bytes_min	= 192,
	.period_bytes_max	= 1536,
	.periods_min		= 2,
	.periods_max		= 1024,
#endif
#if 0
	.period_bytes_min	= 1920,    /* 10mS @ 48khz */
	.period_bytes_max	= 768000,  /* 4S   @ 48kHz */

	.periods_min		= 10,      /* 10mS */
	.periods_max		= 4000000, /* 4S */
#endif

	.period_bytes_min	= 64,
	.period_bytes_max	= 256 * 1024,

	.periods_min		= 4,
	.periods_max		= 1024,
};

/*
 * 10mS Buffer lengths
 * @48kHz	1920 bytes
 * @44.1kHz	1764 bytes
 * @32kHz	1280 bytes
 *
 *
 * period min = 10mS @48k:  1920 bytes @44.1k:  1764 bytes @32k:  1280 bytes
 * period max = 1S   @48k:192000 bytes @44.1k:176400 bytes @32k:128000 bytes
 * period     = 4S   @48k:768000 bytes @44.1k:705600 bytes @32k:512000 bytes
 */
static int saa7231_capture_open(struct snd_pcm_substream *pcm)
{
        struct saa7231_audio *audio	= snd_pcm_substream_chip(pcm);
        struct snd_pcm_runtime *rt	= pcm->runtime;
	struct saa7231_dev *saa7231	= audio->saa7231;
        int err;

	dprintk(SAA7231_DEBUG, 1, "()");
	rt->hw = saa7231_capture_info;
	snd_pcm_hw_constraint_list(rt, 0, SNDRV_PCM_HW_PARAM_RATE,
&hw_constraint_rates);
	err = snd_pcm_hw_constraint_integer(rt, SNDRV_PCM_HW_PARAM_PERIODS);
        if (err < 0) {
		dprintk(SAA7231_ERROR, 1, "snd_pcm_hw_constraint_integer() failed.
ret=%d", err);
                return err;
	}
#if 0
	err = snd_pcm_hw_constraint_minmax(rt,
SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 10, 4000000);
	if (err < 0) {
		dprintk(SAA7231_ERROR, 1, "snd_pcm_hw_constraint_minmax() failed.
ret=%d", err);
		return err;
	}
	err = snd_pcm_hw_constraint_minmax(rt,
SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 1920, 768000);
	if (err < 0) {
		dprintk(SAA7231_ERROR, 1, "snd_pcm_hw_constraint_minmax() failed.
ret=%d", err);
		return err;
	}
#endif
        return 0;
}

/*
 * saa7231_hw_params()
 *
 * This callback is called when the hardware parameter (hw_params) is setup
 * by the application, ie., once when the buffer size, the period size,
 * the format etc are defined for the PCM substream.
 */
static int saa7231_hw_params(struct snd_pcm_substream *pcm, struct
snd_pcm_hw_params *params)
{
	struct saa7231_audio *audio	= snd_pcm_substream_chip(pcm);
	struct saa7231_dev *saa7231	= audio->saa7231;
	struct snd_pcm_runtime *rt	= pcm->runtime;

	struct saa7231_dmabuf *buffer;
	struct saa7231_stream *stream;
	struct saa7231_dmabuf *dmabuf;

	struct page **ptable;

	void *mem;
	void *dma_area;

	int i, j, pages, bytes, periods, bufsiz, pt_size, idx;

#define MAX_ENTRIES_PER_PAGE		(PAGE_SIZE / 8)
#define PAGES_PER_XS2D(__pages)		(__pages / XS2D_BUFFERS)

	dprintk(SAA7231_DEBUG, 1, "DEBUG: ()");

	periods = params_periods(params);
	bytes   = params_period_bytes(params);
	bufsiz  = params_buffer_bytes(params);
	pages   = (bufsiz + PAGE_SIZE - 1) / PAGE_SIZE;

	dprintk(SAA7231_DEBUG, 1, "bufsiz=%d periods=%d bytes=%d pages=%d",
		bufsiz,
		periods,
		bytes,
		pages);

	/* enable stream */
	/* initializing 8 buffer with "pages" pages each .. */
	stream = saa7231_stream_init(saa7231, AUDIO_CAPTURE, ADAPTER_INT, 0,
(pages / XS2D_BUFFERS));
	if (!stream) {
		dprintk(SAA7231_ERROR, 1, "ERROR: Registering stream");
		return -ENOMEM;
	}
	audio->stream = stream;
	buffer = stream->dmabuf;
	saa7231_add_irqevent(saa7231, 43, SAA7231_EDGE_RISING,
saa7231_audio_evhandler, "AS2D_AVIS");
	dprintk(SAA7231_DEBUG, 1, "Mapping %d buffers with %d pages each",
XS2D_BUFFERS, PAGES_PER_XS2D(pages));

	/*
	 * For a single DMA buffer:
	 * each page takes a u64 size in a page table
	 * number of entries a single page can hold = PAGE_SIZE / entry size
	 * ie entries.max = PAGE_SIZE / 8 => 4096/8 = 512
	 * Now, we have entries.req = 7 ("pages") per buffer
	 *
	 * For all in XS2D_BUFFERS:
	 * page table should be large enough to hold all the pages in each DMA buffer
	 * total number of pages = pages * XS2D_BUFFERS
	 * max buffers that we need to consider = 512 * 8, this needs 8 pages
for a page table
	 *
	 * On a general note, we can calculate pages for page table as
	 * page_table_size = total_pages / 512, with a minimum of a single page
	 */

	pt_size = (pages * XS2D_BUFFERS) / MAX_ENTRIES_PER_PAGE;
	/* minimum 1 page required for the table */
	if (pt_size < 1)
		pt_size = 1;

	dprintk(SAA7231_DEBUG, 1, "Page Table array size=%d", pt_size);
	ptable = kzalloc((sizeof (struct page) * pt_size), GFP_KERNEL);
	if (!ptable) {
		dprintk(SAA7231_ERROR, 1, "ERROR: No memory to allocate virtual map");
		return -ENOMEM;
	}
	audio->ptable = ptable;
	idx = 0;

	for (i = 0; i < XS2D_BUFFERS; i ++) {
		dmabuf = &buffer[i];
		mem = dmabuf->vmalloc;
		for (j = 0; j < PAGES_PER_XS2D(pages); j++) {
			BUG_ON(idx > pages);
			dprintk(SAA7231_DEBUG, 1, "Mapping Page:%d from XS2D_BUFFER:%d to
PTA Offset:%d", j, i, idx);
			ptable[idx] = virt_to_page(mem);
			mem += PAGE_SIZE;
			idx += 1;
		}
	}

	dma_area = vmap(ptable, pages, VM_MAP, PAGE_KERNEL);
	rt->dma_area	= dma_area;
	rt->dma_bytes	= pages * PAGE_SIZE;
	rt->dma_addr	= 0;

	return 0;
}

/*
 * saa7231_hw_free()
 *
 * This callback is called to release the resources allocated via hw_params.
 * For eg: releasing the buffer via snd_pcm_lib_malloc_pages() is done by
 * snd_pcm_lib_free_pages(substream)
 * This function is always called before the close callback is called. Also,
 * the callback maybe called multiple times.
 */
static int saa7231_hw_free(struct snd_pcm_substream *pcm)
{
	struct saa7231_audio *audio	= snd_pcm_substream_chip(pcm);
	struct saa7231_dev *saa7231	= audio->saa7231;
	struct saa7231_stream *stream	= audio->stream;
	struct page **ptable		= audio->ptable;
	struct snd_pcm_runtime *rt	= pcm->runtime;
	void *dma_area			= rt->dma_area;

	dprintk(SAA7231_DEBUG, 1, "DEBUG: Removing IRQ event ..");
	saa7231_remove_irqevent(saa7231, 43);

	if (dma_area) {
		dprintk(SAA7231_DEBUG, 1, "DEBUG: Unmap Virtual memory region ..");
		vunmap(dma_area);
	}
	dprintk(SAA7231_DEBUG, 1, "DEBUG: Stream exiting ..");
	saa7231_stream_exit(stream);

	dprintk(SAA7231_DEBUG, 1, "DEBUG: Freeing ptable ...");
	kfree(ptable);
	return 0;
}

testbox ~ # arecord -D plughw:2,0 --format S16_LE --rate=32000 -c 2 >
~/test_capture.wav
Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 32000 Hz, Stereo
arecord: pcm_read:1617: read error: Input/output error


[  114.326533] SAA7231 0000:05:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[  114.326541] SAA7231 0000:05:00.0: setting latency timer to 64
[  114.326564] saa7231_pci_init (0): BAR 0 Offset: 04 BAR 2 Offset: 04
[  114.326567] saa7231_pci_init (0): BAR0 Start=fc800000 length=4M
[  114.326569] saa7231_pci_init (0): BAR2 Start=fc400000 length=4M
[  114.328217]     SAA7231GE [14c7:3595], irq: 16,
[  114.328219]     mmio(0): 0xf8800000 mmio(2): 0xf9e00000
[  114.328232]     SAA7231 64Bit, MSI Disabled, MSI-X=1 msgs
[  114.328239] saa7231_get_version (0): SAA7231 PCI Express V1A found
[  114.328241] saa7231_cgu_init (0): Initializing CGU
[  114.328243] saa7231_cgu_init (0): Using 54MHz RootClock
[  114.328264] saa7231_cgu_init (0): PLL Status CDEC160: 00 REF550: 00
ADPLL: 00 DSP: 00
[  114.328266] saa7231_set_clk (0): clk_output=0   clk_frequency=2
[  114.328268] saa7231_set_clk (0): clk_output=1   clk_frequency=2
[  114.328270] saa7231_set_clk (0): clk_output=2   clk_frequency=2
[  114.328272] saa7231_set_clk (0): clk_output=3   clk_frequency=2
[  114.328273] saa7231_set_clk (0): clk_output=4   clk_frequency=2
[  114.328275] saa7231_set_clk (0): clk_output=5   clk_frequency=2
[  114.328277] saa7231_set_clk (0): clk_output=6   clk_frequency=2
[  114.328278] saa7231_set_clk (0): clk_output=7   clk_frequency=2
[  114.328280] saa7231_set_clk (0): clk_output=8   clk_frequency=2
[  114.328282] saa7231_set_clk (0): clk_output=9   clk_frequency=2
[  114.328283] saa7231_set_clk (0): clk_output=10   clk_frequency=2
[  114.328285] saa7231_set_clk (0): clk_output=11   clk_frequency=2
[  114.328287] saa7231_set_clk (0): clk_output=12   clk_frequency=2
[  114.328288] saa7231_set_clk (0): clk_output=13   clk_frequency=2
[  114.328290] saa7231_set_clk (0): clk_output=14   clk_frequency=2
[  114.328292] saa7231_set_clk (0): clk_output=15   clk_frequency=2
[  114.328294] saa7231_set_clk (0): clk_output=16   clk_frequency=2
[  114.328295] saa7231_set_clk (0): clk_output=17   clk_frequency=2
[  114.328297] saa7231_set_clk (0): clk_output=18   clk_frequency=2
[  114.379027] saa7231_cgu_init (0): DEBUG: RGU_RESET_ACTIVE0 7c02001f
[  114.481027] saa7231_cgu_init (0): DEBUG: RGU_RESET_ACTIVE0 ffffffff
[  114.481032] saa7231_cgu_init (0): DEBUG: RGU_RESET_ACTIVE1 2e1f
[  114.481034] saa7231_set_clk (0): clk_output=17   clk_frequency=0
[  114.487053] saa7231_i2c_init (0): Initializing SAA7231 I2C Core
[  114.487057] saa7231_i2c_init (0): Initializing adapter (0) SAA7231 I2C:0
[  114.487328] saa7231_i2c_hwinit (0): Adapter (109000) SAA7231 I2C:0 RESET
[  114.487330] saa7231_i2c_hwinit (0): Initializing Adapter SAA7231 I2C:0 @ 100k
[  114.487338] saa7231_i2c_init (0): Initializing adapter (1) SAA7231 12C:1
[  114.487556] saa7231_i2c_hwinit (0): Adapter (10a000) SAA7231 12C:1 RESET
[  114.487559] saa7231_i2c_hwinit (0): Initializing Adapter SAA7231 12C:1 @ 100k
[  114.487568] saa7231_i2c_init (0): Initializing adapter (2) SAA7231 I2C:2
[  114.487643] saa7231_i2c_hwinit (0): Adapter (10b000) SAA7231 I2C:2 RESET
[  114.487645] saa7231_i2c_hwinit (0): Initializing Adapter SAA7231 I2C:2 @ 100k
[  114.487653] saa7231_i2c_init (0): Initializing adapter (3) SAA7231 I2C:3
[  114.488079] saa7231_i2c_hwinit (0): Adapter (10c000) SAA7231 I2C:3 RESET
[  114.488082] saa7231_i2c_hwinit (0): Initializing Adapter SAA7231 I2C:3 @ 100k
[  114.488089] saa7231_i2c_init (0): SAA7231 I2C Core succesfully initialized
[  114.488091] saa7231_alsa_init (0): Initializing Audio ..
[  114.495634] saa7231_pci_probe (0): SAA7231 device:0 initialized
[  124.166016] saa7231_capture_open (0): ()
[  124.166546] saa7231_hw_params (0): DEBUG: ()
[  124.166548] saa7231_hw_params (0): bufsiz=64000 periods=4
bytes=16000 pages=16
[  124.166551] saa7231_stream_init (0): DEBUG: Initializing Stream
with MODE=0x01
[  124.166554] saa7231_xs2dtl_init (0): XS2DTL engine Initializing .....
[  124.166557] saa7231_xs2dtl_init (0): Allocated 8 XS2DTL Buffer @0xf52a1200
[  124.166559] saa7231_xs2dtl_init (0): Allocating DMA Buffers ...
[  124.166561] saa7231_xs2dtl_init (0): Allocating DMA buffer:0 @0xf52a1200..
[  124.166571] saa7231_allocate_ptable (0): Virtual 0xf460f000 to Phys
0x3460f000 mapped page
[  124.166588] saa7231_dmabuf_sgalloc (0): Virtual contiguous 8192
byte region with 2 4k pages
[  124.166603]       6c48c000 6c487000
[  124.166608] saa7231_xs2dtl_init (0): Allocating DMA buffer:1 @0xf52a1228..
[  124.166616] saa7231_allocate_ptable (0): Virtual 0xf4611000 to Phys
0x34611000 mapped page
[  124.166622] saa7231_dmabuf_sgalloc (0): Virtual contiguous 8192
byte region with 2 4k pages
[  124.166633]       6f95e000 6c291000
[  124.166638] saa7231_xs2dtl_init (0): Allocating DMA buffer:2 @0xf52a1250..
[  124.166645] saa7231_allocate_ptable (0): Virtual 0xf64ab000 to Phys
0x364ab000 mapped page
[  124.166651] saa7231_dmabuf_sgalloc (0): Virtual contiguous 8192
byte region with 2 4k pages
[  124.166662]       6c2a9000 6c468000
[  124.166666] saa7231_xs2dtl_init (0): Allocating DMA buffer:3 @0xf52a1278..
[  124.166674] saa7231_allocate_ptable (0): Virtual 0xf5dad000 to Phys
0x35dad000 mapped page
[  124.166679] saa7231_dmabuf_sgalloc (0): Virtual contiguous 8192
byte region with 2 4k pages
[  124.166690]       6c463000 6c464000
[  124.166694] saa7231_xs2dtl_init (0): Allocating DMA buffer:4 @0xf52a12a0..
[  124.166702] saa7231_allocate_ptable (0): Virtual 0xf5e01000 to Phys
0x35e01000 mapped page
[  124.166707] saa7231_dmabuf_sgalloc (0): Virtual contiguous 8192
byte region with 2 4k pages
[  124.166719]       6c466000 6c467000
[  124.166723] saa7231_xs2dtl_init (0): Allocating DMA buffer:5 @0xf52a12c8..
[  124.166731] saa7231_allocate_ptable (0): Virtual 0xf53e9000 to Phys
0x353e9000 mapped page
[  124.166736] saa7231_dmabuf_sgalloc (0): Virtual contiguous 8192
byte region with 2 4k pages
[  124.166748]       6c221000 6c222000
[  124.166752] saa7231_xs2dtl_init (0): Allocating DMA buffer:6 @0xf52a12f0..
[  124.166760] saa7231_allocate_ptable (0): Virtual 0xf45ea000 to Phys
0x345ea000 mapped page
[  124.166765] saa7231_dmabuf_sgalloc (0): Virtual contiguous 8192
byte region with 2 4k pages
[  124.166776]       6c374000 6c375000
[  124.166780] saa7231_xs2dtl_init (0): Allocating DMA buffer:7 @0xf52a1318..
[  124.166788] saa7231_allocate_ptable (0): Virtual 0xf46e7000 to Phys
0x346e7000 mapped page
[  124.166793] saa7231_dmabuf_sgalloc (0): Virtual contiguous 8192
byte region with 2 4k pages
[  124.166804]       6c377000 6c358000
[  124.166808] saa7231_xs2dtl_init (0): Initializing PTA ...
[  124.166810] saa7231_init_ptables (0): DEBUG: Initializing PORT:6
DMA_CH:7 with 8 Buffers
[  124.166812] saa7231_xs2dtl_init (0): Setting up PORT Gates ...
[  124.166815] saa7231_stream_init (0): INFO: Initialized MODE:0x01 for PORT:6
[  124.166817] saa7231_add_irqevent (0): Adding AS2D_AVIS IRQ Event:43 ...
[  124.166819] saa7231_setup_vector (0): Adding Vector:43
[  124.166823] saa7231_setup_vector (0): Enabling Vector:43
[  124.166827] saa7231_add_irqevent (0): Succesfully added AS2D_AVIS
as Event handler:43
[  124.166829] saa7231_hw_params (0): Mapping 8 buffers with 2 pages each
[  124.166830] saa7231_hw_params (0): Page Table array size=1
[  124.166832] saa7231_hw_params (0): Mapping Page:0 from
XS2D_BUFFER:0 to PTA Offset:0
[  124.166834] saa7231_hw_params (0): Mapping Page:1 from
XS2D_BUFFER:0 to PTA Offset:1
[  124.166836] saa7231_hw_params (0): Mapping Page:0 from
XS2D_BUFFER:1 to PTA Offset:2
[  124.166838] saa7231_hw_params (0): Mapping Page:1 from
XS2D_BUFFER:1 to PTA Offset:3
[  124.166840] saa7231_hw_params (0): Mapping Page:0 from
XS2D_BUFFER:2 to PTA Offset:4
[  124.166842] saa7231_hw_params (0): Mapping Page:1 from
XS2D_BUFFER:2 to PTA Offset:5
[  124.166844] saa7231_hw_params (0): Mapping Page:0 from
XS2D_BUFFER:3 to PTA Offset:6
[  124.166846] saa7231_hw_params (0): Mapping Page:1 from
XS2D_BUFFER:3 to PTA Offset:7
[  124.166848] saa7231_hw_params (0): Mapping Page:0 from
XS2D_BUFFER:4 to PTA Offset:8
[  124.166850] saa7231_hw_params (0): Mapping Page:1 from
XS2D_BUFFER:4 to PTA Offset:9
[  124.166852] saa7231_hw_params (0): Mapping Page:0 from
XS2D_BUFFER:5 to PTA Offset:10
[  124.166854] saa7231_hw_params (0): Mapping Page:1 from
XS2D_BUFFER:5 to PTA Offset:11
[  124.166856] saa7231_hw_params (0): Mapping Page:0 from
XS2D_BUFFER:6 to PTA Offset:12
[  124.166858] saa7231_hw_params (0): Mapping Page:1 from
XS2D_BUFFER:6 to PTA Offset:13
[  124.166860] saa7231_hw_params (0): Mapping Page:0 from
XS2D_BUFFER:7 to PTA Offset:14
[  124.166862] saa7231_hw_params (0): Mapping Page:1 from
XS2D_BUFFER:7 to PTA Offset:15
[  124.166884] saa7231_capture_prepare (0): ()
[  124.166974] saa7231_capture_trigger (0): () cmd=1
[  124.166978] saa7231_capture_pointer (0): DEBUG:()
[  134.166232] saa7231_capture_trigger (0): () cmd=0
[  134.166248] saa7231_hw_free (0): DEBUG: Removing IRQ event ..
[  134.166251] saa7231_remove_irqevent (0): Removing IRQ Event:43 ......
[  134.166254] saa7231_remove_irqevent (0): IRQ Event 43 <AS2D_AVIS> removed
[  134.166258] saa7231_hw_free (0): DEBUG: Unmap Virtual memory region ..
[  134.166323] saa7231_hw_free (0): DEBUG: Stream exiting ..
[  134.166325] saa7231_stream_exit (0): INFO: Freeing MODE:0x01 for PORT=0x06
[  134.166327] saa7231_xs2dtl_exit (0): Free XS2DTL engine ..
[  134.166329] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped
[  134.166366] saa7231_dmabuf_free (0): INFO: Scatterlist free
[  134.166368] saa7231_dmabuf_sgfree (0): SG free
[  134.166375] saa7231_dmabuf_free (0): INFO: Page table free
[  134.166376] saa7231_free_ptable (0): SG Page table free
[  134.166380] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped
[  134.166384] saa7231_dmabuf_free (0): INFO: Scatterlist free
[  134.166386] saa7231_dmabuf_sgfree (0): SG free
[  134.166392] saa7231_dmabuf_free (0): INFO: Page table free
[  134.166394] saa7231_free_ptable (0): SG Page table free
[  134.166398] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped
[  134.166401] saa7231_dmabuf_free (0): INFO: Scatterlist free
[  134.166403] saa7231_dmabuf_sgfree (0): SG free
[  134.166409] saa7231_dmabuf_free (0): INFO: Page table free
[  134.166410] saa7231_free_ptable (0): SG Page table free
[  134.166414] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped
[  134.166417] saa7231_dmabuf_free (0): INFO: Scatterlist free
[  134.166419] saa7231_dmabuf_sgfree (0): SG free
[  134.166424] saa7231_dmabuf_free (0): INFO: Page table free
[  134.166426] saa7231_free_ptable (0): SG Page table free
[  134.166429] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped
[  134.166432] saa7231_dmabuf_free (0): INFO: Scatterlist free
[  134.166434] saa7231_dmabuf_sgfree (0): SG free
[  134.166440] saa7231_dmabuf_free (0): INFO: Page table free
[  134.166441] saa7231_free_ptable (0): SG Page table free
[  134.166445] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped
[  134.166448] saa7231_dmabuf_free (0): INFO: Scatterlist free
[  134.166450] saa7231_dmabuf_sgfree (0): SG free
[  134.166455] saa7231_dmabuf_free (0): INFO: Page table free
[  134.166457] saa7231_free_ptable (0): SG Page table free
[  134.166460] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped
[  134.166463] saa7231_dmabuf_free (0): INFO: Scatterlist free
[  134.166465] saa7231_dmabuf_sgfree (0): SG free
[  134.166471] saa7231_dmabuf_free (0): INFO: Page table free
[  134.166473] saa7231_free_ptable (0): SG Page table free
[  134.166476] saa7231_dmabuf_free (0): INFO: Scatterlist unmapped
[  134.166479] saa7231_dmabuf_free (0): INFO: Scatterlist free
[  134.166480] saa7231_dmabuf_sgfree (0): SG free
[  134.166486] saa7231_dmabuf_free (0): INFO: Page table free
[  134.166488] saa7231_free_ptable (0): SG Page table free
[  134.166492] saa7231_hw_free (0): DEBUG: Freeing ptable ...
[  134.166494] saa7231_capture_close (0): DEBUG: Closing stream


Regards,
Manu


More information about the Alsa-devel mailing list