linux/mm/internal.h
<<
>>
Prefs
   1/* internal.h: mm/ internal definitions
   2 *
   3 * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
   4 * Written by David Howells (dhowells@redhat.com)
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License
   8 * as published by the Free Software Foundation; either version
   9 * 2 of the License, or (at your option) any later version.
  10 */
  11#ifndef __MM_INTERNAL_H
  12#define __MM_INTERNAL_H
  13
  14#include <linux/mm.h>
  15
  16static inline void set_page_count(struct page *page, int v)
  17{
  18        atomic_set(&page->_count, v);
  19}
  20
  21/*
  22 * Turn a non-refcounted page (->_count == 0) into refcounted with
  23 * a count of one.
  24 */
  25static inline void set_page_refcounted(struct page *page)
  26{
  27        VM_BUG_ON(PageCompound(page) && PageTail(page));
  28        VM_BUG_ON(atomic_read(&page->_count));
  29        set_page_count(page, 1);
  30}
  31
  32static inline void __put_page(struct page *page)
  33{
  34        atomic_dec(&page->_count);
  35}
  36
  37extern void fastcall __init __free_pages_bootmem(struct page *page,
  38                                                unsigned int order);
  39
  40/*
  41 * function for dealing with page's order in buddy system.
  42 * zone->lock is already acquired when we use these.
  43 * So, we don't need atomic page->flags operations here.
  44 */
  45static inline unsigned long page_order(struct page *page)
  46{
  47        VM_BUG_ON(!PageBuddy(page));
  48        return page_private(page);
  49}
  50#endif
  51