mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 05:31:08 -04:00
arch, mm: remove arch specific show_mem
We have a generic implementation for quite some time already. If there is any arch specific information to be printed then we should add a callback called from the generic code rather than duplicate the whole show_mem. The current code has resulted in the code duplication and the output divergence which is both confusing and adds maintainance costs. Let's just get rid of this mess. Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Michal Hocko <[email protected]> Acked-by: Guan Xuetao <[email protected]> [UniCore32] Acked-by: Helge Deller <[email protected]> [for parisc] Acked-by: Chris Metcalf <[email protected]> [for tile] Acked-by: Mel Gorman <[email protected]> Acked-by: Johannes Weiner <[email protected]> Cc: Tony Luck <[email protected]> Cc: Fenghua Yu <[email protected]> Cc: "James E.J. Bottomley" <[email protected]> Cc: "David S. Miller" <[email protected]> Cc: Hillf Danton <[email protected]> Cc: Vlastimil Babka <[email protected]> Cc: David Rientjes <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
1 parent
a8e99259e7
commit
6d23f8a5d4
5 files changed
-197
No files matched your search
@@ -684,51 +684,3 @@ int arch_remove_memory(u64 start, u64 size)
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* show_mem - give short summary of memory stats
|
||||
*
|
||||
* Shows a simple page count of reserved and used pages in the system.
|
||||
* For discontig machines, it does this on a per-pgdat basis.
|
||||
*/
|
||||
void show_mem(unsigned int filter)
|
||||
{
|
||||
int total_reserved = 0;
|
||||
unsigned long total_present = 0;
|
||||
pg_data_t *pgdat;
|
||||
|
||||
printk(KERN_INFO "Mem-info:\n");
|
||||
show_free_areas(filter);
|
||||
printk(KERN_INFO "Node memory in pages:\n");
|
||||
for_each_online_pgdat(pgdat) {
|
||||
unsigned long present;
|
||||
unsigned long flags;
|
||||
int reserved = 0;
|
||||
int nid = pgdat->node_id;
|
||||
int zoneid;
|
||||
|
||||
if (skip_free_areas_node(filter, nid))
|
||||
continue;
|
||||
pgdat_resize_lock(pgdat, &flags);
|
||||
|
||||
for (zoneid = 0; zoneid < MAX_NR_ZONES; zoneid++) {
|
||||
struct zone *zone = &pgdat->node_zones[zoneid];
|
||||
if (!populated_zone(zone))
|
||||
continue;
|
||||
|
||||
reserved += zone->present_pages - zone->managed_pages;
|
||||
}
|
||||
present = pgdat->node_present_pages;
|
||||
|
||||
pgdat_resize_unlock(pgdat, &flags);
|
||||
total_present += present;
|
||||
total_reserved += reserved;
|
||||
printk(KERN_INFO "Node %4d: RAM: %11ld, rsvd: %8d, ",
|
||||
nid, present, reserved);
|
||||
}
|
||||
printk(KERN_INFO "%ld pages of RAM\n", total_present);
|
||||
printk(KERN_INFO "%d reserved pages\n", total_reserved);
|
||||
printk(KERN_INFO "Total of %ld pages in page table cache\n",
|
||||
quicklist_total_size());
|
||||
printk(KERN_INFO "%ld free buffer pages\n", nr_free_buffer_pages());
|
||||
}
|
||||
@@ -653,55 +653,6 @@ void __init mem_init(void)
|
||||
unsigned long *empty_zero_page __read_mostly;
|
||||
EXPORT_SYMBOL(empty_zero_page);
|
||||
|
||||
void show_mem(unsigned int filter)
|
||||
{
|
||||
int total = 0,reserved = 0;
|
||||
pg_data_t *pgdat;
|
||||
|
||||
printk(KERN_INFO "Mem-info:\n");
|
||||
show_free_areas(filter);
|
||||
|
||||
for_each_online_pgdat(pgdat) {
|
||||
unsigned long flags;
|
||||
int zoneid;
|
||||
|
||||
pgdat_resize_lock(pgdat, &flags);
|
||||
for (zoneid = 0; zoneid < MAX_NR_ZONES; zoneid++) {
|
||||
struct zone *zone = &pgdat->node_zones[zoneid];
|
||||
if (!populated_zone(zone))
|
||||
continue;
|
||||
|
||||
total += zone->present_pages;
|
||||
reserved = zone->present_pages - zone->managed_pages;
|
||||
}
|
||||
pgdat_resize_unlock(pgdat, &flags);
|
||||
}
|
||||
|
||||
printk(KERN_INFO "%d pages of RAM\n", total);
|
||||
printk(KERN_INFO "%d reserved pages\n", reserved);
|
||||
|
||||
#ifdef CONFIG_DISCONTIGMEM
|
||||
{
|
||||
struct zonelist *zl;
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < npmem_ranges; i++) {
|
||||
zl = node_zonelist(i, 0);
|
||||
for (j = 0; j < MAX_NR_ZONES; j++) {
|
||||
struct zoneref *z;
|
||||
struct zone *zone;
|
||||
|
||||
printk("Zone list for zone %d on node %d: ", j, i);
|
||||
for_each_zone_zonelist(zone, z, zl, j)
|
||||
printk("[%d/%s] ", zone_to_nid(zone),
|
||||
zone->name);
|
||||
printk("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* pagetable_init() sets up the page tables
|
||||
*
|
||||
|
||||
@@ -55,17 +55,6 @@ extern unsigned int sparc_ramdisk_size;
|
||||
|
||||
unsigned long highstart_pfn, highend_pfn;
|
||||
|
||||
void show_mem(unsigned int filter)
|
||||
{
|
||||
printk("Mem-info:\n");
|
||||
show_free_areas(filter);
|
||||
printk("Free swap: %6ldkB\n",
|
||||
get_nr_swap_pages() << (PAGE_SHIFT-10));
|
||||
printk("%ld pages of RAM\n", totalram_pages);
|
||||
printk("%ld free pages\n", nr_free_pages());
|
||||
}
|
||||
|
||||
|
||||
unsigned long last_valid_pfn;
|
||||
|
||||
unsigned long calc_highpages(void)
|
||||
|
||||
@@ -36,51 +36,6 @@
|
||||
|
||||
#define K(x) ((x) << (PAGE_SHIFT-10))
|
||||
|
||||
/*
|
||||
* The normal show_free_areas() is too verbose on Tile, with dozens
|
||||
* of processors and often four NUMA zones each with high and lowmem.
|
||||
*/
|
||||
void show_mem(unsigned int filter)
|
||||
{
|
||||
struct zone *zone;
|
||||
|
||||
pr_err("Active:%lu inactive:%lu dirty:%lu writeback:%lu unstable:%lu free:%lu\n slab:%lu mapped:%lu pagetables:%lu bounce:%lu pagecache:%lu swap:%lu\n",
|
||||
(global_node_page_state(NR_ACTIVE_ANON) +
|
||||
global_node_page_state(NR_ACTIVE_FILE)),
|
||||
(global_node_page_state(NR_INACTIVE_ANON) +
|
||||
global_node_page_state(NR_INACTIVE_FILE)),
|
||||
global_node_page_state(NR_FILE_DIRTY),
|
||||
global_node_page_state(NR_WRITEBACK),
|
||||
global_node_page_state(NR_UNSTABLE_NFS),
|
||||
global_page_state(NR_FREE_PAGES),
|
||||
(global_page_state(NR_SLAB_RECLAIMABLE) +
|
||||
global_page_state(NR_SLAB_UNRECLAIMABLE)),
|
||||
global_node_page_state(NR_FILE_MAPPED),
|
||||
global_page_state(NR_PAGETABLE),
|
||||
global_page_state(NR_BOUNCE),
|
||||
global_node_page_state(NR_FILE_PAGES),
|
||||
get_nr_swap_pages());
|
||||
|
||||
for_each_zone(zone) {
|
||||
unsigned long flags, order, total = 0, largest_order = -1;
|
||||
|
||||
if (!populated_zone(zone))
|
||||
continue;
|
||||
|
||||
spin_lock_irqsave(&zone->lock, flags);
|
||||
for (order = 0; order < MAX_ORDER; order++) {
|
||||
int nr = zone->free_area[order].nr_free;
|
||||
total += nr << order;
|
||||
if (nr)
|
||||
largest_order = order;
|
||||
}
|
||||
spin_unlock_irqrestore(&zone->lock, flags);
|
||||
pr_err("Node %d %7s: %lukB (largest %luKb)\n",
|
||||
zone_to_nid(zone), zone->name,
|
||||
K(total), largest_order ? K(1UL) << largest_order : 0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* shatter_huge_page() - ensure a given address is mapped by a small page.
|
||||
*
|
||||
|
||||
@@ -57,50 +57,6 @@ early_param("initrd", early_initrd);
|
||||
*/
|
||||
struct meminfo meminfo;
|
||||
|
||||
void show_mem(unsigned int filter)
|
||||
{
|
||||
int free = 0, total = 0, reserved = 0;
|
||||
int shared = 0, cached = 0, slab = 0, i;
|
||||
struct meminfo *mi = &meminfo;
|
||||
|
||||
printk(KERN_DEFAULT "Mem-info:\n");
|
||||
show_free_areas(filter);
|
||||
|
||||
for_each_bank(i, mi) {
|
||||
struct membank *bank = &mi->bank[i];
|
||||
unsigned int pfn1, pfn2;
|
||||
struct page *page, *end;
|
||||
|
||||
pfn1 = bank_pfn_start(bank);
|
||||
pfn2 = bank_pfn_end(bank);
|
||||
|
||||
page = pfn_to_page(pfn1);
|
||||
end = pfn_to_page(pfn2 - 1) + 1;
|
||||
|
||||
do {
|
||||
total++;
|
||||
if (PageReserved(page))
|
||||
reserved++;
|
||||
else if (PageSwapCache(page))
|
||||
cached++;
|
||||
else if (PageSlab(page))
|
||||
slab++;
|
||||
else if (!page_count(page))
|
||||
free++;
|
||||
else
|
||||
shared += page_count(page) - 1;
|
||||
page++;
|
||||
} while (page < end);
|
||||
}
|
||||
|
||||
printk(KERN_DEFAULT "%d pages of RAM\n", total);
|
||||
printk(KERN_DEFAULT "%d free pages\n", free);
|
||||
printk(KERN_DEFAULT "%d reserved pages\n", reserved);
|
||||
printk(KERN_DEFAULT "%d slab pages\n", slab);
|
||||
printk(KERN_DEFAULT "%d pages shared\n", shared);
|
||||
printk(KERN_DEFAULT "%d pages swap cached\n", cached);
|
||||
}
|
||||
|
||||
static void __init find_limits(unsigned long *min, unsigned long *max_low,
|
||||
unsigned long *max_high)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user