/* * Handling of the special zero page. * * Copyright (C) 2007 Bahadir Balban */ #include #include #include #include #include #include INC_GLUE(memory.h) #include INC_SUBARCH(mm.h) #include #include static void *zpage_p; static struct page *zpage; void init_zero_page(void) { void *zpage_v; zpage_p = alloc_page(1); zpage = phys_to_page(zpage_p); /* Map it to self */ zpage_v = l4_map_helper(zpage_p, 1); /* Zero it */ memset(zpage_v, 0, PAGE_SIZE); /* Unmap it */ l4_unmap_helper(zpage_v, 1); /* Update page struct. All other fields are zero */ zpage->count++; } void *get_zero_page(void) { zpage->count++; return zpage_p; } void put_zero_page(void) { zpage->count--; BUG_ON(zpage->count < 0); }