* Query regarding snd_pcm_lib_preallocate_pages_for_all()
@ 2007-11-13 18:42 Pharaoh .
2007-11-13 20:31 ` Mitac 8252D hda_intel glv
2007-11-14 8:14 ` Query regarding snd_pcm_lib_preallocate_pages_for_all() Takashi Iwai
0 siblings, 2 replies; 5+ messages in thread
From: Pharaoh . @ 2007-11-13 18:42 UTC (permalink / raw)
To: alsa-devel
Hi,
I am trying to use snd_pcm_lib_preallocate_pages_for_all() on an arm based
platform for preallocating the DMA buffer.
I am using it as
snd_pcm_lib_preallocate_pages_for_all(pcm,
SNDRV_DMA_TYPE_DEV,
NULL,
64 * 1024, 64 * 1024);
since I dont know what should be passed as the 3'rd param. I tried passing
my device pointer i.e. card->dev after
correctly populating it but I get an error as 'DMA coherent mask in not set'
and buffer is not allocated.
If I pass NULL as shown above, which I think is appropriate, the allocation
is done well and I can play some samples too
using aplay, but when I do a rmmod all hell breaks free.
I am thinking this is corrupting memory some where, since when I preallocate
using SNDRV_DMA_TYPE_CONTINUOUS,
everything works well but I since I need to mmap the buffer I dont use it.
I get following:
c001f7e0 c001f7e0 c001f814 c03b3040 0000000b c34c1c98 c34c1c88
1c80: c003642c c0071978 c34c0000 c34c1cb8 c34c1c9c c003b780 c00363fc
c34c0000
1ca0: c34c0000 c03b3040 00000001 c34c1cd4 c34c1cbc c003bd94 c003b690
c34c1ce8
1cc0: 60000093 00000001 c34c1ce8 c34c1cd8 c002908c c003bbe8 bf000000
c34c1d08
1ce0: c34c1cec c002b2ac c0028d84 ffffffec c03b3040 c34733c8 c001f7e0
c34c1d40
1d00: c34c1d0c c002b588 c002b250 c03a7060 c34c1d94 00000017 ffffffff
c026dd40
1d20: 00000017 c34c1dec 00000004 00000093 40130000 c34c1de8 c34c1d44
c002b688
1d40: c002b3a0 0000007e 00000000 00000000 00000000 00000000 00000000
00000000
1d60: 00000000 c03a7060 c34c1e14 c03b3040 c022eef4 c34c1f14 00000000
00000a00
1d80: c34c1e80 c34c1d90 c019ee84 c01bb390 00000000 7a035438 00000005
00000000
1da0: 00000a00 c03a7060 c0271cdc c34c1d50 00000000 c34c1e08 c34c1dc4
c0063a94
1dc0: c0063984 00000044 ffffffff c34c1e20 00000000 c02eabe0 c347317c
c34c1e44
1de0: c34c1dec c00249a0 c002b65c c02eabe0 00000000 00000013 00000093
c34c0000
1e00: c0306200 00000000 c02eabe0 c347317c c001f7e0 40130000 c34c1e44
c02eabe0
1e20: c34c1e34 c02c0bfc c0067478 00000093 ffffffff 10d5f0ff c34c1e7c
c34c1e48
1e40: c006d658 c0067444 c3541cc0 00000000 00000002 11b100df 000004c0
c347317c
1e60: c34c0000 00000001 c001f7e0 40130000 c34c1ecc c34c1e80 c006e61c
c006d1b8
1e80: c3545000 c001f820 11b100df 0000007e 00000000 00000010 c3545000
00000800
1ea0: c34c0000 ffffffeb c03b3040 c347317c c001f7e0 c001f814 c34c1fb0
40130958
1ec0: c34c1f04 c34c1ed0 c002b470 c006dedc c004822c c03b307c 0000081f
ffffffff
1ee0: c026ddc0 0000081f c34c1fb0 40130958 00000055 4012f000 c34c1fac
c34c1f08
1f00: c002b688 c002b3a0 c34c1f14 c0222148 c0221a50 c34c1e94 0000000c
c34c1e84
1f20: 00000001 00000000 00000000 c1b01040 00000000 00000009 0001d2b4
00000066
1f40: c0024fe4 00000001 c34c1f6c c34c1f58 c01a02c0 c01a01c0 00000000
00000000
1f60: c34c1fa4 c34c1f70 c01a09d0 c01a02b0 c34c1e70 c34c1e74 00000004
0001d2b4
1f80: 00000a00 00000000 0000008e ffffffff 00000115 0001d2dd 00000000
00000000
1fa0: 00000000 c34c1fb0 c0024de8 c002b65c 00000000 0000b05c 54434100
00000001
1fc0: 40130958 00000115 0001d2dd 00000000 00000000 00000055 4012f000
00000007
1fe0: 0001d150 be8ba5ec 0000b05c 40082fbc 60000010 ffffffff 00000000
00000000
Backtrace:
[<c0073880>] (page_remove_rmap+0x0/0x118) from [<c006c628>]
(unmap_vmas+0x3c4/0x60c)
r4 = C02EABE0
[<c006c264>] (unmap_vmas+0x0/0x60c) from [<c00719e8>] (exit_mmap+0x80/0x150)
[<c0071968>] (exit_mmap+0x0/0x150) from [<c003642c>] (mmput+0x40/0xe4)
r8 = 0000000B r7 = C03B3040 r6 = C001F814 r5 = C001F7E0
r4 = C001F7E0
[<c00363ec>] (mmput+0x0/0xe4) from [<c003b780>] (exit_mm+0x100/0x10c)
r4 = C34C0000
[<c003b680>] (exit_mm+0x0/0x10c) from [<c003bd94>] (do_exit+0x1bc/0x9c4)
r7 = 00000001 r6 = C03B3040 r5 = C34C0000 r4 = C34C0000
[<c003bbd8>] (do_exit+0x0/0x9c4) from [<c002908c>] (die+0x318/0x36c)
[<c0028d74>] (die+0x0/0x36c) from [<c002b2ac>] (__do_kernel_fault+0x6c/0x7c)
[<c002b240>] (__do_kernel_fault+0x0/0x7c) from [<c002b588>]
(do_page_fault+0x1f8/0x210)
r7 = C001F7E0 r6 = C34733C8 r5 = C03B3040 r4 = FFFFFFEC
[<c002b390>] (do_page_fault+0x0/0x210) from [<c002b688>]
(do_DataAbort+0x3c/0xa0)
[<c002b64c>] (do_DataAbort+0x0/0xa0) from [<c00249a0>]
(__dabt_svc+0x40/0x60)
r8 = C347317C r7 = C02EABE0 r6 = 00000000 r5 = C34C1E20
r4 = FFFFFFFF
[<c0067434>] (lru_cache_add_active+0x0/0xa0) from [<c006d658>]
(do_wp_page+0x4b0/0x574)
r4 = 10D5F0FF
[<c006d1a8>] (do_wp_page+0x0/0x574) from [<c006e61c>]
(__handle_mm_fault+0x750/0x824)
[<c006decc>] (__handle_mm_fault+0x0/0x824) from [<c002b470>]
(do_page_fault+0xe0/0x210)
[<c002b390>] (do_page_fault+0x0/0x210) from [<c002b688>]
(do_DataAbort+0x3c/0xa0)
[<c002b64c>] (do_DataAbort+0x0/0xa0) from [<c0024de8>]
(ret_from_exception+0x0/0x10)
r8 = 00000000 r7 = 00000000 r6 = 0001D2DD r5 = 00000115
r4 = FFFFFFFF
Code: e3130901 e1a03004 1594300c e59f008c (e5931004)
<1>Fixing recursive fault but reboot is needed!
BUG: scheduling while atomic: udevd/0x00000004/245
Bad page state in process 'exe'
page:c02eaa60 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eaa60 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eaa80 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eaa80 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eaaa0 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eaaa0 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eaac0 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eaac0 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eaae0 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eaae0 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eab00 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eab00 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eab20 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eab20 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eab40 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eab40 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eab60 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eab60 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eab80 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eab80 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eaba0 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eaba0 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eabc0 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
Bad page state in process 'exe'
page:c02eabc0 flags:0x00004000 mapping:00000000 mapcount:0 count:0
Trying to fix it up, but a reboot is needed
Backtrace:
so on
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Mitac 8252D hda_intel
2007-11-13 18:42 Query regarding snd_pcm_lib_preallocate_pages_for_all() Pharaoh .
@ 2007-11-13 20:31 ` glv
2007-11-14 8:14 ` Query regarding snd_pcm_lib_preallocate_pages_for_all() Takashi Iwai
1 sibling, 0 replies; 5+ messages in thread
From: glv @ 2007-11-13 20:31 UTC (permalink / raw)
To: alsa-devel
Hello,
I have a Mitac 8252D computer with hda_intel, it has 3 sockets in front:
microphone, audio(headphones)and S/PDIF.
When using 5.1 the manual says:
Microphone: rear speakers
Audio: front speakers
S/PDIF: center and subwoofer
Modprobing without any options gives me sound to the headphone and digital
socket and
Modprobing with model=6stack-hp gives me sound to the speakers to but they
stay on when headph. are pluged in
Output from alsa-info.sh:
http://pastebin.ca/772406
Output from lspci -vv:
00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio
Controller (rev 03)
Subsystem: Mitac Unknown device 8253
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR+ FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 22
Region 0: Memory at fc200000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=55mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [60] Message Signalled Interrupts: Mask- 64bit+
Queue=0/0 Enable-
Address: 0000000000000000 Data: 0000
Capabilities: [70] Express Unknown type IRQ 0
Device: Supported: MaxPayload 128 bytes, PhantFunc 0, ExtTag-
Device: Latency L0s <64ns, L1 <1us
Device: Errors: Correctable- Non-Fatal- Fatal- Unsupported-
Device: RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+
Device: MaxPayload 128 bytes, MaxReadReq 128 bytes
Link: Supported Speed unknown, Width x0, ASPM unknown, Port 0
Link: Latency L0s <64ns, L1 <1us
Link: ASPM Disabled CommClk- ExtSynch-
Link: Speed unknown, Width x0
Capabilities: [100] Virtual Channel
Capabilities: [130] Unknown (5)
thank you.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Query regarding snd_pcm_lib_preallocate_pages_for_all()
2007-11-13 18:42 Query regarding snd_pcm_lib_preallocate_pages_for_all() Pharaoh .
2007-11-13 20:31 ` Mitac 8252D hda_intel glv
@ 2007-11-14 8:14 ` Takashi Iwai
2007-11-14 12:13 ` Pharaoh .
1 sibling, 1 reply; 5+ messages in thread
From: Takashi Iwai @ 2007-11-14 8:14 UTC (permalink / raw)
To: Pharaoh .; +Cc: alsa-devel
At Wed, 14 Nov 2007 00:12:07 +0530,
Pharaoh . wrote:
>
> Hi,
>
> I am trying to use snd_pcm_lib_preallocate_pages_for_all() on an arm based
> platform for preallocating the DMA buffer.
> I am using it as
>
> snd_pcm_lib_preallocate_pages_for_all(pcm,
> SNDRV_DMA_TYPE_DEV,
> NULL,
> 64 * 1024, 64 * 1024);
>
> since I dont know what should be passed as the 3'rd param. I tried passing
> my device pointer i.e. card->dev after
> correctly populating it but I get an error as 'DMA coherent mask in not set'
> and buffer is not allocated.
For ARM, avoid the present buffer-preallocation and mmap functions in
ALSA core. Instead you can allocate the buffers directly via normal
dma_alloc_coherent() in your driver. And, mmap it via
dma_mmap_coherent() by defining the own mmap callback for PCM ops.
See other arm/* drivers for rerecence.
Takashi
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Query regarding snd_pcm_lib_preallocate_pages_for_all()
2007-11-14 12:13 ` Pharaoh .
@ 2007-11-14 9:10 ` Takashi Iwai
0 siblings, 0 replies; 5+ messages in thread
From: Takashi Iwai @ 2007-11-14 9:10 UTC (permalink / raw)
To: Pharaoh .; +Cc: alsa-devel
At Wed, 14 Nov 2007 17:43:21 +0530,
Pharaoh . wrote:
>
> On Nov 14, 2007 1:44 PM, Takashi Iwai <tiwai@suse.de> wrote:
>
> > At Wed, 14 Nov 2007 00:12:07 +0530,
> > Pharaoh . wrote:
> > >
> > > Hi,
> > >
> > > I am trying to use snd_pcm_lib_preallocate_pages_for_all() on an arm
> > based
> > > platform for preallocating the DMA buffer.
> > > I am using it as
> > >
> > > snd_pcm_lib_preallocate_pages_for_all(pcm,
> > > SNDRV_DMA_TYPE_DEV,
> > > NULL,
> > > 64 * 1024, 64 * 1024);
> > >
> > > since I dont know what should be passed as the 3'rd param. I tried
> > passing
> > > my device pointer i.e. card->dev after
> > > correctly populating it but I get an error as 'DMA coherent mask in not
> > set'
> > > and buffer is not allocated.
> >
> > For ARM, avoid the present buffer-preallocation and mmap functions in
> > ALSA core. Instead you can allocate the buffers directly via normal
> > dma_alloc_coherent() in your driver. And, mmap it via
> > dma_mmap_coherent() by defining the own mmap callback for PCM ops.
> >
> > See other arm/* drivers for rerecence.
> >
> >
> > Takashi
> >
>
> Yes, I am using my own buffer preallocation scheme now. I allocate a 128K
> buffer using dma_alloc_coherent in probe and free it only in remove i.e. at
> rmmod time.
>
> I dont think keeping a huge buffer like this till driver removal is a good
> idea but when I allocate/deallocate it in hw_params/hw_free respectively, it
> is causing fragmentation and sometimes the allocation fails. Do you think
> anything better can
> be done?
Unfortuantely, no other way, so far. It's the only way that a driver
can do -- keeping the large chunk as long as it needs.
Takashi
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Query regarding snd_pcm_lib_preallocate_pages_for_all()
2007-11-14 8:14 ` Query regarding snd_pcm_lib_preallocate_pages_for_all() Takashi Iwai
@ 2007-11-14 12:13 ` Pharaoh .
2007-11-14 9:10 ` Takashi Iwai
0 siblings, 1 reply; 5+ messages in thread
From: Pharaoh . @ 2007-11-14 12:13 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
On Nov 14, 2007 1:44 PM, Takashi Iwai <tiwai@suse.de> wrote:
> At Wed, 14 Nov 2007 00:12:07 +0530,
> Pharaoh . wrote:
> >
> > Hi,
> >
> > I am trying to use snd_pcm_lib_preallocate_pages_for_all() on an arm
> based
> > platform for preallocating the DMA buffer.
> > I am using it as
> >
> > snd_pcm_lib_preallocate_pages_for_all(pcm,
> > SNDRV_DMA_TYPE_DEV,
> > NULL,
> > 64 * 1024, 64 * 1024);
> >
> > since I dont know what should be passed as the 3'rd param. I tried
> passing
> > my device pointer i.e. card->dev after
> > correctly populating it but I get an error as 'DMA coherent mask in not
> set'
> > and buffer is not allocated.
>
> For ARM, avoid the present buffer-preallocation and mmap functions in
> ALSA core. Instead you can allocate the buffers directly via normal
> dma_alloc_coherent() in your driver. And, mmap it via
> dma_mmap_coherent() by defining the own mmap callback for PCM ops.
>
> See other arm/* drivers for rerecence.
>
>
> Takashi
>
Yes, I am using my own buffer preallocation scheme now. I allocate a 128K
buffer using dma_alloc_coherent in probe and free it only in remove i.e. at
rmmod time.
I dont think keeping a huge buffer like this till driver removal is a good
idea but when I allocate/deallocate it in hw_params/hw_free respectively, it
is causing fragmentation and sometimes the allocation fails. Do you think
anything better can
be done?
-pharaoh.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-11-14 13:04 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-13 18:42 Query regarding snd_pcm_lib_preallocate_pages_for_all() Pharaoh .
2007-11-13 20:31 ` Mitac 8252D hda_intel glv
2007-11-14 8:14 ` Query regarding snd_pcm_lib_preallocate_pages_for_all() Takashi Iwai
2007-11-14 12:13 ` Pharaoh .
2007-11-14 9:10 ` Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).