else if (!page_count(page))
free++;
else
- shared += atomic_read(&page->count) - 1;
+ shared += page_count(page) - 1;
page++;
} while (page < end);
}
bootmem_pages += np[i].bootmap_pages;
}
+ high_memory = __va(memend_pfn << PAGE_SHIFT);
+
/*
* This doesn't seem to be used by the Linux memory
* manager any more. If we can get rid of it, we
*/
max_low_pfn = memend_pfn - O_PFN_DOWN(PHYS_OFFSET);
max_pfn = memend_pfn - O_PFN_DOWN(PHYS_OFFSET);
- mi->end = memend_pfn << PAGE_SHIFT;
return bootmem_pages;
}
static __init void reserve_node_zero(unsigned int bootmap_pfn, unsigned int bootmap_pages)
{
pg_data_t *pgdat = NODE_DATA(0);
+ unsigned long res_size = 0;
/*
* Register the kernel text and data with bootmem.
bootmap_pages << PAGE_SHIFT);
/*
- * Hmm... This should go elsewhere, but we really really
- * need to stop things allocating the low memory; we need
- * a better implementation of GFP_DMA which does not assume
- * that DMA-able memory starts at zero.
+ * Hmm... This should go elsewhere, but we really really need to
+ * stop things allocating the low memory; ideally we need a better
+ * implementation of GFP_DMA which does not assume that DMA-able
+ * memory starts at zero.
*/
- if (machine_is_integrator())
- reserve_bootmem_node(pgdat, 0, __pa(swapper_pg_dir));
+ if (machine_is_integrator() || machine_is_cintegrator())
+ res_size = __pa(swapper_pg_dir) - PHYS_OFFSET;
+
/*
- * These should likewise go elsewhere. They pre-reserve
- * the screen memory region at the start of main system
- * memory.
+ * These should likewise go elsewhere. They pre-reserve the
+ * screen memory region at the start of main system memory.
*/
- if (machine_is_archimedes() || machine_is_a5k())
- reserve_bootmem_node(pgdat, 0x02000000, 0x00080000);
if (machine_is_edb7211())
- reserve_bootmem_node(pgdat, 0xc0000000, 0x00020000);
+ res_size = 0x00020000;
if (machine_is_p720t())
- reserve_bootmem_node(pgdat, PHYS_OFFSET, 0x00014000);
+ res_size = 0x00014000;
+
#ifdef CONFIG_SA1111
/*
- * Because of the SA1111 DMA bug, we want to preserve
- * our precious DMA-able memory...
+ * Because of the SA1111 DMA bug, we want to preserve our
+ * precious DMA-able memory...
*/
- reserve_bootmem_node(pgdat, PHYS_OFFSET, __pa(swapper_pg_dir)-PHYS_OFFSET);
+ res_size = __pa(swapper_pg_dir) - PHYS_OFFSET;
#endif
+ if (res_size)
+ reserve_bootmem_node(pgdat, PHYS_OFFSET, res_size);
}
/*
datapages = &_end - &_etext;
initpages = &__init_end - &__init_begin;
- high_memory = (void *)__va(meminfo.end);
#ifndef CONFIG_DISCONTIGMEM
max_mapnr = virt_to_page(high_memory) - mem_map;
#endif
void free_initmem(void)
{
- if (!machine_is_integrator()) {
+ if (!machine_is_integrator() && !machine_is_cintegrator()) {
free_area((unsigned long)(&__init_begin),
(unsigned long)(&__init_end),
"init");