aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/page-flags.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/page-flags.h')
-rw-r--r--include/linux/page-flags.h25
1 files changed, 17 insertions, 8 deletions
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index 2b87acfc5f87..13de789f0a5c 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -158,6 +158,9 @@ static inline int TestSetPage##uname(struct page *page) \
158static inline int TestClearPage##uname(struct page *page) \ 158static inline int TestClearPage##uname(struct page *page) \
159 { return test_and_clear_bit(PG_##lname, &page->flags); } 159 { return test_and_clear_bit(PG_##lname, &page->flags); }
160 160
161#define __TESTCLEARFLAG(uname, lname) \
162static inline int __TestClearPage##uname(struct page *page) \
163 { return __test_and_clear_bit(PG_##lname, &page->flags); }
161 164
162#define PAGEFLAG(uname, lname) TESTPAGEFLAG(uname, lname) \ 165#define PAGEFLAG(uname, lname) TESTPAGEFLAG(uname, lname) \
163 SETPAGEFLAG(uname, lname) CLEARPAGEFLAG(uname, lname) 166 SETPAGEFLAG(uname, lname) CLEARPAGEFLAG(uname, lname)
@@ -184,6 +187,9 @@ static inline void __ClearPage##uname(struct page *page) { }
184#define TESTCLEARFLAG_FALSE(uname) \ 187#define TESTCLEARFLAG_FALSE(uname) \
185static inline int TestClearPage##uname(struct page *page) { return 0; } 188static inline int TestClearPage##uname(struct page *page) { return 0; }
186 189
190#define __TESTCLEARFLAG_FALSE(uname) \
191static inline int __TestClearPage##uname(struct page *page) { return 0; }
192
187struct page; /* forward declaration */ 193struct page; /* forward declaration */
188 194
189TESTPAGEFLAG(Locked, locked) TESTSETFLAG(Locked, locked) 195TESTPAGEFLAG(Locked, locked) TESTSETFLAG(Locked, locked)
@@ -250,11 +256,11 @@ PAGEFLAG(Unevictable, unevictable) __CLEARPAGEFLAG(Unevictable, unevictable)
250#ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT 256#ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT
251#define MLOCK_PAGES 1 257#define MLOCK_PAGES 1
252PAGEFLAG(Mlocked, mlocked) __CLEARPAGEFLAG(Mlocked, mlocked) 258PAGEFLAG(Mlocked, mlocked) __CLEARPAGEFLAG(Mlocked, mlocked)
253 TESTSCFLAG(Mlocked, mlocked) 259 TESTSCFLAG(Mlocked, mlocked) __TESTCLEARFLAG(Mlocked, mlocked)
254#else 260#else
255#define MLOCK_PAGES 0 261#define MLOCK_PAGES 0
256PAGEFLAG_FALSE(Mlocked) 262PAGEFLAG_FALSE(Mlocked) SETPAGEFLAG_NOOP(Mlocked)
257 SETPAGEFLAG_NOOP(Mlocked) TESTCLEARFLAG_FALSE(Mlocked) 263 TESTCLEARFLAG_FALSE(Mlocked) __TESTCLEARFLAG_FALSE(Mlocked)
258#endif 264#endif
259 265
260#ifdef CONFIG_ARCH_USES_PG_UNCACHED 266#ifdef CONFIG_ARCH_USES_PG_UNCACHED
@@ -396,8 +402,8 @@ static inline void __ClearPageTail(struct page *page)
396 */ 402 */
397#define PAGE_FLAGS_CHECK_AT_PREP ((1 << NR_PAGEFLAGS) - 1) 403#define PAGE_FLAGS_CHECK_AT_PREP ((1 << NR_PAGEFLAGS) - 1)
398 404
399#endif /* !__GENERATING_BOUNDS_H */ 405#define PAGE_FLAGS_PRIVATE \
400 406 (1 << PG_private | 1 << PG_private_2)
401/** 407/**
402 * page_has_private - Determine if page has private stuff 408 * page_has_private - Determine if page has private stuff
403 * @page: The page to be checked 409 * @page: The page to be checked
@@ -405,8 +411,11 @@ static inline void __ClearPageTail(struct page *page)
405 * Determine if a page has private stuff, indicating that release routines 411 * Determine if a page has private stuff, indicating that release routines
406 * should be invoked upon it. 412 * should be invoked upon it.
407 */ 413 */
408#define page_has_private(page) \ 414static inline int page_has_private(struct page *page)
409 ((page)->flags & ((1 << PG_private) | \ 415{
410 (1 << PG_private_2))) 416 return !!(page->flags & PAGE_FLAGS_PRIVATE);
417}
418
419#endif /* !__GENERATING_BOUNDS_H */
411 420
412#endif /* PAGE_FLAGS_H */ 421#endif /* PAGE_FLAGS_H */