![Atsushi Nemoto](/assets/img/avatar_default.png)
With sparsemem, pfn should be checked by pfn_valid() before pfn_to_page(). Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
38 lines
885 B
C
38 lines
885 B
C
#include <linux/kernel.h>
|
|
#include <linux/mm.h>
|
|
#include <linux/swap.h>
|
|
|
|
void show_mem(void)
|
|
{
|
|
#ifndef CONFIG_NEED_MULTIPLE_NODES /* XXX(hch): later.. */
|
|
int pfn, total = 0, reserved = 0;
|
|
int shared = 0, cached = 0;
|
|
int highmem = 0;
|
|
struct page *page;
|
|
|
|
printk("Mem-info:\n");
|
|
show_free_areas();
|
|
printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
|
|
pfn = max_mapnr;
|
|
while (pfn-- > 0) {
|
|
if (!pfn_valid(pfn))
|
|
continue;
|
|
page = pfn_to_page(pfn);
|
|
total++;
|
|
if (PageHighMem(page))
|
|
highmem++;
|
|
if (PageReserved(page))
|
|
reserved++;
|
|
else if (PageSwapCache(page))
|
|
cached++;
|
|
else if (page_count(page))
|
|
shared += page_count(page) - 1;
|
|
}
|
|
printk("%d pages of RAM\n", total);
|
|
printk("%d pages of HIGHMEM\n",highmem);
|
|
printk("%d reserved pages\n",reserved);
|
|
printk("%d pages shared\n",shared);
|
|
printk("%d pages swap cached\n",cached);
|
|
#endif
|
|
}
|