arch, mm: filter disallowed nodes from arch specific show_mem functions

Architectures that implement their own show_mem() function did not pass
the filter argument to show_free_areas() to appropriately avoid emitting
the state of nodes that are disallowed in the current context.  This patch
now passes the filter argument to show_free_areas() so those nodes are now
avoided.

This patch also removes the show_free_areas() wrapper around
__show_free_areas() and converts existing callers to pass an empty filter.

ia64 emits additional information for each node, so skip_free_areas_zone()
must be made global to filter disallowed nodes and it is converted to use
a nid argument rather than a zone for this use case.

Signed-off-by: David Rientjes <rientjes@google.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Cc: Helge Deller <deller@gmx.de>
Cc: James Bottomley <jejb@parisc-linux.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
David Rientjes 2011-05-24 17:11:16 -07:00 committed by Linus Torvalds
parent 851cc856d7
commit 7bf02ea22c
13 changed files with 34 additions and 36 deletions

View file

@ -2473,10 +2473,10 @@ void si_meminfo_node(struct sysinfo *val, int nid)
#endif
/*
* Determine whether the zone's node should be displayed or not, depending on
* whether SHOW_MEM_FILTER_NODES was passed to __show_free_areas().
* Determine whether the node should be displayed or not, depending on whether
* SHOW_MEM_FILTER_NODES was passed to show_free_areas().
*/
static bool skip_free_areas_zone(unsigned int flags, const struct zone *zone)
bool skip_free_areas_node(unsigned int flags, int nid)
{
bool ret = false;
@ -2484,8 +2484,7 @@ static bool skip_free_areas_zone(unsigned int flags, const struct zone *zone)
goto out;
get_mems_allowed();
ret = !node_isset(zone->zone_pgdat->node_id,
cpuset_current_mems_allowed);
ret = !node_isset(nid, cpuset_current_mems_allowed);
put_mems_allowed();
out:
return ret;
@ -2500,13 +2499,13 @@ out:
* Suppresses nodes that are not allowed by current's cpuset if
* SHOW_MEM_FILTER_NODES is passed.
*/
void __show_free_areas(unsigned int filter)
void show_free_areas(unsigned int filter)
{
int cpu;
struct zone *zone;
for_each_populated_zone(zone) {
if (skip_free_areas_zone(filter, zone))
if (skip_free_areas_node(filter, zone_to_nid(zone)))
continue;
show_node(zone);
printk("%s per-cpu:\n", zone->name);
@ -2549,7 +2548,7 @@ void __show_free_areas(unsigned int filter)
for_each_populated_zone(zone) {
int i;
if (skip_free_areas_zone(filter, zone))
if (skip_free_areas_node(filter, zone_to_nid(zone)))
continue;
show_node(zone);
printk("%s"
@ -2618,7 +2617,7 @@ void __show_free_areas(unsigned int filter)
for_each_populated_zone(zone) {
unsigned long nr[MAX_ORDER], flags, order, total = 0;
if (skip_free_areas_zone(filter, zone))
if (skip_free_areas_node(filter, zone_to_nid(zone)))
continue;
show_node(zone);
printk("%s: ", zone->name);
@ -2639,11 +2638,6 @@ void __show_free_areas(unsigned int filter)
show_swap_cache_info();
}
void show_free_areas(void)
{
__show_free_areas(0);
}
static void zoneref_set_zone(struct zone *zone, struct zoneref *zoneref)
{
zoneref->zone = zone;