2005-04-17 02:20:36 +04: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 11:08:33 +03:00
# ifndef __MM_INTERNAL_H
# define __MM_INTERNAL_H
# include <linux/mm.h>
2005-04-17 02:20:36 +04:00
2006-03-22 11:08:40 +03:00
static inline void set_page_count ( struct page * page , int v )
2006-01-06 11:10:57 +03:00
{
2006-03-22 11:08:40 +03: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-05 09:29:27 +03:00
VM_BUG_ON ( PageTail ( page ) ) ;
2006-09-26 10:30:55 +04:00
VM_BUG_ON ( atomic_read ( & page - > _count ) ) ;
2006-01-06 11:10:57 +03:00
set_page_count ( page , 1 ) ;
}
2006-03-22 11:08:33 +03:00
static inline void __put_page ( struct page * page )
{
atomic_dec ( & page - > _count ) ;
}
2008-04-28 13:13:34 +04:00
extern void __free_pages_bootmem ( struct page * page , unsigned int order ) ;
2006-03-22 11:08:33 +03:00
2007-10-16 12:26:10 +04: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-24 02:24:06 +03: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 11:08:33 +03:00
# endif