2005-04-16 15:20:36 -07:00
/* internal.h: mm/ internal definitions
*
* Copyright ( C ) 2004 Red Hat , Inc . All Rights Reserved .
* Written by David Howells ( dhowells @ redhat . com )
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version
* 2 of the License , or ( at your option ) any later version .
*/
2006-03-22 00:08:33 -08:00
# ifndef __MM_INTERNAL_H
# define __MM_INTERNAL_H
# include <linux/mm.h>
2005-04-16 15:20:36 -07:00
2006-03-22 00:08:40 -08:00
static inline void set_page_count ( struct page * page , int v )
2006-01-06 00:10:57 -08:00
{
2006-03-22 00:08:40 -08:00
atomic_set ( & page - > _count , v ) ;
}
/*
* Turn a non - refcounted page ( - > _count = = 0 ) into refcounted with
* a count of one .
*/
static inline void set_page_refcounted ( struct page * page )
{
2008-02-04 22:29:27 -08:00
VM_BUG_ON ( PageTail ( page ) ) ;
2006-09-25 23:30:55 -07:00
VM_BUG_ON ( atomic_read ( & page - > _count ) ) ;
2006-01-06 00:10:57 -08:00
set_page_count ( page , 1 ) ;
}
2006-03-22 00:08:33 -08:00
static inline void __put_page ( struct page * page )
{
atomic_dec ( & page - > _count ) ;
}
2008-02-04 22:29:26 -08:00
extern void __init __free_pages_bootmem ( struct page * page ,
2006-01-06 00:11:08 -08:00
unsigned int order ) ;
2006-03-22 00:08:33 -08:00
2007-10-16 01:26:10 -07:00
/*
* function for dealing with page ' s order in buddy system .
* zone - > lock is already acquired when we use these .
* So , we don ' t need atomic page - > flags operations here .
*/
static inline unsigned long page_order ( struct page * page )
{
VM_BUG_ON ( ! PageBuddy ( page ) ) ;
return page_private ( page ) ;
}
2008-02-23 15:24:06 -08:00
/*
* FLATMEM and DISCONTIGMEM configurations use alloc_bootmem_node ,
* so all functions starting at paging_init should be marked __init
* in those cases . SPARSEMEM , however , allows for memory hotplug ,
* and alloc_bootmem_node is not used .
*/
# ifdef CONFIG_SPARSEMEM
# define __paginginit __meminit
# else
# define __paginginit __init
# endif
2006-03-22 00:08:33 -08:00
# endif