Skip to content

(sd_revalidate_disk:) Memory allocation failure. #149

@GoogleCodeExporter

Description

@GoogleCodeExporter
在drivers/scsi/sd.c中的函数sd_revalidate_disk就分配一个只有512字节
的缓冲就失败。
 buffer = kmalloc(512, GFP_KERNEL | __GFP_DMA);
 if (!buffer) {
   printk(KERN_WARNING "(sd_revalidate_disk:) Memory allocation "
        "failure.\n");
    goto out;
 }

原因:
在arch/trimedia/mm/init.c中,目前设置ZONE_DMA的size是为0
zones_size[ZONE_DMA] = 0 >> PAGE_SHIFT;
现修改成:

zones_size[ZONE_DMA] = (end_mem - PAGE_OFFSET) >> PAGE_SHIFT;
zones_size[ZONE_NORMAL] = 0 >> PAGE_SHIFT;

对于有的平台,并不是整个内存段都可以进行DMA传输,X86是��
�存的前16M(0~16M),而对于PNX
平台来说,ZONE_DMA是不限制在哪个内存段。
所以把内存都设为ZONE_DMA,有两个原因:
1、PNX无所谓ZONE_DMA和ZONE_NORMAL
2、kmalloc的分配如果没有带__GFP_DMA,即只是指定从分配ZONE_NORM
AL分配的,但如果
ZONE_NORMAL为0,它是会从ZONE_DMA上分配的。
这样做有个好处,我们不用去考虑这两个段到底各要分多少��
�如果ZONE_DMA分少了,以后还是会
出现这个问题,还不如全部给它算了。

不知是否有考虑不周?

Original issue reported on code.google.com by wenyong...@gmail.com on 10 Jul 2009 at 1:54

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions