X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=include%2Flinux%2Fpage-flags.h;h=6ab9cc46640fabaf456af34a532a7064f00345f4;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=97325175d93bd219203a3e78bcd6319c5f2f52d2;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 97325175d..6ab9cc466 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -74,6 +74,7 @@ #define PG_swapcache 16 /* Swap page: swp_entry_t in private */ #define PG_mappedtodisk 17 /* Has blocks allocated on-disk */ #define PG_reclaim 18 /* To be reclaimed asap */ +#define PG_nosave_free 19 /* Free, should not be written */ /* @@ -132,40 +133,32 @@ struct page_state { unsigned long pgrotated; /* pages rotated to tail of the LRU */ }; -DECLARE_PER_CPU(struct page_state, page_states); - extern void get_page_state(struct page_state *ret); extern void get_full_page_state(struct page_state *ret); extern unsigned long __read_page_state(unsigned offset); +extern void __mod_page_state(unsigned offset, unsigned long delta); #define read_page_state(member) \ __read_page_state(offsetof(struct page_state, member)) -#define mod_page_state(member, delta) \ - do { \ - unsigned long flags; \ - local_irq_save(flags); \ - __get_cpu_var(page_states).member += (delta); \ - local_irq_restore(flags); \ - } while (0) - +#define mod_page_state(member, delta) \ + __mod_page_state(offsetof(struct page_state, member), (delta)) #define inc_page_state(member) mod_page_state(member, 1UL) #define dec_page_state(member) mod_page_state(member, 0UL - 1) #define add_page_state(member,delta) mod_page_state(member, (delta)) #define sub_page_state(member,delta) mod_page_state(member, 0UL - (delta)) -#define mod_page_state_zone(zone, member, delta) \ - do { \ - unsigned long flags; \ - local_irq_save(flags); \ - if (is_highmem(zone)) \ - __get_cpu_var(page_states).member##_high += (delta);\ - else if (is_normal(zone)) \ - __get_cpu_var(page_states).member##_normal += (delta);\ - else \ - __get_cpu_var(page_states).member##_dma += (delta);\ - local_irq_restore(flags); \ +#define mod_page_state_zone(zone, member, delta) \ + do { \ + unsigned offset; \ + if (is_highmem(zone)) \ + offset = offsetof(struct page_state, member##_high); \ + else if (is_normal(zone)) \ + offset = offsetof(struct page_state, member##_normal); \ + else \ + offset = offsetof(struct page_state, member##_dma); \ + __mod_page_state(offset, (delta)); \ } while (0) /* @@ -238,6 +231,8 @@ extern unsigned long __read_page_state(unsigned offset); #define SetPagePrivate(page) set_bit(PG_private, &(page)->flags) #define ClearPagePrivate(page) clear_bit(PG_private, &(page)->flags) #define PagePrivate(page) test_bit(PG_private, &(page)->flags) +#define __SetPagePrivate(page) __set_bit(PG_private, &(page)->flags) +#define __ClearPagePrivate(page) __clear_bit(PG_private, &(page)->flags) #define PageWriteback(page) test_bit(PG_writeback, &(page)->flags) #define SetPageWriteback(page) \ @@ -277,6 +272,10 @@ extern unsigned long __read_page_state(unsigned offset); #define ClearPageNosave(page) clear_bit(PG_nosave, &(page)->flags) #define TestClearPageNosave(page) test_and_clear_bit(PG_nosave, &(page)->flags) +#define PageNosaveFree(page) test_bit(PG_nosave_free, &(page)->flags) +#define SetPageNosaveFree(page) set_bit(PG_nosave_free, &(page)->flags) +#define ClearPageNosaveFree(page) clear_bit(PG_nosave_free, &(page)->flags) + #define PageMappedToDisk(page) test_bit(PG_mappedtodisk, &(page)->flags) #define SetPageMappedToDisk(page) set_bit(PG_mappedtodisk, &(page)->flags) #define ClearPageMappedToDisk(page) clear_bit(PG_mappedtodisk, &(page)->flags) @@ -286,7 +285,11 @@ extern unsigned long __read_page_state(unsigned offset); #define ClearPageReclaim(page) clear_bit(PG_reclaim, &(page)->flags) #define TestClearPageReclaim(page) test_and_clear_bit(PG_reclaim, &(page)->flags) +#ifdef CONFIG_HUGETLB_PAGE #define PageCompound(page) test_bit(PG_compound, &(page)->flags) +#else +#define PageCompound(page) 0 +#endif #define SetPageCompound(page) set_bit(PG_compound, &(page)->flags) #define ClearPageCompound(page) clear_bit(PG_compound, &(page)->flags)