resources: introduce generic page_is_ram()
It's based on walk_system_ram_range(), for archs that don't have their own page_is_ram(). The static verions in MIPS and SCORE are also made global. v4: prefer plain 1 instead of PAGE_IS_RAM (H. Peter Anvin) v3: add comment (KAMEZAWA Hiroyuki) "AFAIK, this "System RAM" information has been used for kdump to grab valid memory area and seems good for the kernel itself." v2: add PAGE_IS_RAM macro (Américo Wang) Cc: Chen Liqin <liqin.chen@sunplusct.com> Cc: Lennox Wu <lennox.wu@gmail.com> Cc: Américo Wang <xiyou.wangcong@gmail.com> Cc: linux-mips@linux-mips.org Cc: Yinghai Lu <yinghai@kernel.org> Acked-by: Ralf Baechle <ralf@linux-mips.org> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> LKML-Reference: <20100122081619.GA6431@localhost> Cc: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
Родитель
ccef086454
Коммит
61ef2489db
|
@ -294,7 +294,7 @@ void __init fixrange_init(unsigned long start, unsigned long end,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_NEED_MULTIPLE_NODES
|
#ifndef CONFIG_NEED_MULTIPLE_NODES
|
||||||
static int __init page_is_ram(unsigned long pagenr)
|
int page_is_ram(unsigned long pagenr)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ static unsigned long setup_zero_page(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_NEED_MULTIPLE_NODES
|
#ifndef CONFIG_NEED_MULTIPLE_NODES
|
||||||
static int __init page_is_ram(unsigned long pagenr)
|
int page_is_ram(unsigned long pagenr)
|
||||||
{
|
{
|
||||||
if (pagenr >= min_low_pfn && pagenr < max_low_pfn)
|
if (pagenr >= min_low_pfn && pagenr < max_low_pfn)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -188,5 +188,7 @@ extern int
|
||||||
walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
|
walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
|
||||||
void *arg, int (*func)(unsigned long, unsigned long, void *));
|
void *arg, int (*func)(unsigned long, unsigned long, void *));
|
||||||
|
|
||||||
|
extern int page_is_ram(unsigned long pfn);
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
#endif /* _LINUX_IOPORT_H */
|
#endif /* _LINUX_IOPORT_H */
|
||||||
|
|
|
@ -297,6 +297,19 @@ int walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int __is_ram(unsigned long pfn, unsigned long nr_pages, void *arg)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* This generic page_is_ram() returns true if specified address is
|
||||||
|
* registered as "System RAM" in iomem_resource list.
|
||||||
|
*/
|
||||||
|
int __attribute__((weak)) page_is_ram(unsigned long pfn)
|
||||||
|
{
|
||||||
|
return walk_system_ram_range(pfn, 1, NULL, __is_ram) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find empty slot in the resource tree given range and alignment.
|
* Find empty slot in the resource tree given range and alignment.
|
||||||
*/
|
*/
|
||||||
|
|
Загрузка…
Ссылка в новой задаче