Linux Internal/mm

PageReserved source

neodelicious 2012. 7. 16. 21:16

./arch/arm/mm/init.c 파일을 보다 보니 PageReserved(page) 와 같은 code 가 있어서

PageReserved() 함수를 찾고자 했는데 찾는데 아무리 grep 을 해도 찾을 수 없었다.


그런데 알고 보니 원래 아래와 같은 직관적인 define 이었는데,

#define PageReserved(page)    test_bit(PG_reserved, &(page)->flags)

kernel 2.6.26 에서 (6a1e7f7 pageflags: convert to the use of new macros) 삭제하고,

아래와 같이 다른 define 으로 변경하였다.

PAGEFLAG(Reserved, reserved) __CLEARPAGEFLAG(Reserved, reserved)

define 을 대입해서 풀어보니 아래와 같이 기존과 거의 같았다.

PAGEFLAG(Reserved, reserved) __CLEARPAGEFLAG(Reserved, reserved)
---------------
TESTPAGEFLAG(Reserved, reserved) SETPAGEFLAG(Reserved, reserved) CLEARPAGEFLAG(Reserved, reserved) __CLEARPAGEFLAG(Reserved, reserved)
---------------
static inline int PageReserved(const struct page *page)   
                        { return test_bit(PG_reserved, &page->flags); }

static inline void SetPageReserved(struct page *page)                   \
                        { set_bit(PG_reserved, &page->flags); }                    
static inline void ClearPageReserved(struct page *page)    \
                        { clear_bit(PG_reserved, &page->flags); }
static inline void __ClearPageReserved(struct page *page)               \
                        { __clear_bit(PG_reserved, &page->flags); }