2013-05-24 11 views
2

를 사용하여 메모리를 할당 할 때 경고 메시지를 얻기 나는 128K 메모리4K64 덩어리의 정렬에 할당 할 필요가있다. pci_alloc_consistent()을 할당하여 사용하는 Currentyl은 phy_addr 일 필요가 있고, DMA 능력은 일 필요가있다. 내가 이것을 할 때, 나는 아래의 경고 메시지를 받는다. 내 요청이 실패했다는 의미입니까? 내가 읽으면서는 pci_alloc_conssitent

------------[ cut here ]------------ 
WARNING: at mm/page_alloc.c:2045 __alloc_pages_nodemask+0x8d9/0x940() (Tainted: P   ---------------- ) 
Hardware name: ProLiant DL165 G5 
Modules linked in: vgchal(P+)(U) vgcport(P)(U) autofs4 sunrpc cpufreq_ondemand powernow_k8 freq_table mperf ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4 iptable_filter ip_tables ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 xt_state nf_conntrack ip6table_filter ip6_tables ipv6 uinput tg3 vgcinit(P)(U) vgcdebug(P)(U) sg microcode k10temp amd64_edac_mod edac_core edac_mce_amd i2c_piix4 i2c_core shpchp ext3 jbd mbcache hpsa cciss sr_mod cdrom ata_generic pata_acpi pata_serverworks sata_svw dm_mirror dm_region_hash dm_log dm_mod [last unloaded: scsi_wait_scan] 
Pid: 2448, comm: insmod Tainted: P   ---------------- 2.6.32-220.el6.x86_64 #1 
Call Trace: 
[<ffffffff81069b77>] ? warn_slowpath_common+0x87/0xc0 
[<ffffffff81069bca>] ? warn_slowpath_null+0x1a/0x20 
[<ffffffff81124069>] ? __alloc_pages_nodemask+0x8d9/0x940 
[<ffffffff81147fc9>] ? vmap_page_range_noflush+0x279/0x370 
[<ffffffff811474da>] ? __insert_vmap_area+0x7a/0xd0 
[<ffffffff81010f46>] ? dma_generic_alloc_coherent+0xa6/0x160 
[<ffffffff8103bb89>] ? gart_alloc_coherent+0x49/0x140 
[<ffffffffa00ee5e5>] ? dbh_hal_init+0x105/0x410 [vgchal] 
[<ffffffffa00ee805>] ? dbh_hal_init+0x325/0x410 [vgchal] 
[<ffffffffa0113095>] ? hal_module_init+0x95/0xa0 [vgchal] 
[<ffffffff81096e75>] ? __blocking_notifier_call_chain+0x65/0x80 
[<ffffffffa0113000>] ? hal_module_init+0x0/0xa0 [vgchal] 
[<ffffffff8100204c>] ? do_one_initcall+0x3c/0x1d0 
[<ffffffff810af641>] ? sys_init_module+0xe1/0x250 
[<ffffffff8100b0f2>] ? system_call_fastpath+0x16/0x1b 

, pci_alloc_consistent() 이상 128K 메모리를 할당 할 수 있어야하지만이 할 수있는 최대 무엇인지 찾을 수 없습니다. 여기에 무슨 일이 일어나고 있는지 알려주세요.

+0

커널 버전을 지정하십시오. 이런 식으로 커널 소스에서 경고를 찾고 무슨 일이 일어나는지 더 쉽게 알 수 있습니다. – Eugene

+0

커널이 실행되는 커널 버전은 2.6.32-71.el6.x86_64입니다. 이 말은 pci_alloc_consistent()에 실패 했습니까? – pkumarn

+0

IIRC가 실패하면 pci_alloc_consistent()는 NULL을 반환해야합니다. 경고는 다른 것에 관한 것일 수 있습니다. 불행히도, 나는 바로 그 커널을위한 소스를 가지고 있지 않으며 바닐라 커널 2.6.32는 당신과 다르다. – Eugene

답변

0

가능한 경우 커널 업그레이드를 권장합니다.

2.6.32-220.el6은 RHEL 6.2 (은 EL6.3 및 6.4으로 대체 됨)와 함께 제공되는 초기 (버그가 많은) 커널 릴리스입니다. 가능한 경우 6.2 커널 릴리스의 마지막 릴리스 인 kernel-2.6.32-220.23.1.el6으로 이동하여 6.2 OS 릴리스를 유지해야한다고 가정합니다.