Re: [PATCH] convert uses of ZONE_HIGHMEM to is_highmem

From: Andrew Morton
Date: Fri Jun 25 2004 - 17:25:49 EST


Andy Whitcroft <apw@xxxxxxxxxxxx> wrote:
>
> As the comments in mmzone.h indicate is_highmem() is designed to
> reduce the proliferation of the constant ZONE_HIGHMEM. This patch
> updates three references to ZONE_HIGHMEM to use is_highmem().
> None appear to be on critical paths.
>
> Revision: $Rev: 305 $
>
> void __init set_highmem_pages_init(int bad_ppro)
> {
> #ifdef CONFIG_HIGHMEM
> - int nid;
> + struct zone *zone;
>
> - for (nid = 0; nid < numnodes; nid++) {
> + for_each_zone(zone) {
> unsigned long node_pfn, node_high_size, zone_start_pfn;
> struct page * zone_mem_map;
>
> - node_high_size = NODE_DATA(nid)->node_zones[ZONE_HIGHMEM].spanned_pages;
> - zone_mem_map = NODE_DATA(nid)->node_zones[ZONE_HIGHMEM].zone_mem_map;
> - zone_start_pfn = NODE_DATA(nid)->node_zones[ZONE_HIGHMEM].zone_start_pfn;
> + if (!is_highmem(zone))
> + continue;
> +
> + printk("Initializing %s for node %d\n", zone->name,
> + zone->zone_pgdat->node_id);
> +
> + node_high_size = zone->spanned_pages;
> + zone_mem_map = zone->zone_mem_map;
> + zone_start_pfn = zone->zone_start_pfn;
>
> - printk("Initializing highpages for node %d\n", nid);
> for (node_pfn = 0; node_pfn < node_high_size; node_pfn++) {
> one_highpage_init((struct page *)(zone_mem_map + node_pfn),
> zone_start_pfn + node_pfn, bad_ppro);

Fair enough.

> @@ -930,11 +930,12 @@ unsigned int nr_free_pagecache_pages(voi
> #ifdef CONFIG_HIGHMEM
> unsigned int nr_free_highpages (void)
> {
> - pg_data_t *pgdat;
> + struct zone *zone;
> unsigned int pages = 0;
>
> - for_each_pgdat(pgdat)
> - pages += pgdat->node_zones[ZONE_HIGHMEM].free_pages;
> + for_each_zone(zone)
> + if (is_highmem(zone))
> + pages += zone->free_pages;

but that's slower.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/