Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0 */ 2 : #ifndef _MM_PAGE_REPORTING_H 3 : #define _MM_PAGE_REPORTING_H 4 : 5 : #include <linux/mmzone.h> 6 : #include <linux/pageblock-flags.h> 7 : #include <linux/page-isolation.h> 8 : #include <linux/jump_label.h> 9 : #include <linux/slab.h> 10 : #include <linux/pgtable.h> 11 : #include <linux/scatterlist.h> 12 : 13 : #define PAGE_REPORTING_MIN_ORDER pageblock_order 14 : 15 : #ifdef CONFIG_PAGE_REPORTING 16 : DECLARE_STATIC_KEY_FALSE(page_reporting_enabled); 17 : void __page_reporting_notify(void); 18 : 19 97243 : static inline bool page_reported(struct page *page) 20 : { 21 97243 : return static_branch_unlikely(&page_reporting_enabled) && 22 0 : PageReported(page); 23 : } 24 : 25 : /** 26 : * page_reporting_notify_free - Free page notification to start page processing 27 : * 28 : * This function is meant to act as a screener for __page_reporting_notify 29 : * which will determine if a give zone has crossed over the high-water mark 30 : * that will justify us beginning page treatment. If we have crossed that 31 : * threshold then it will start the process of pulling some pages and 32 : * placing them in the batch list for treatment. 33 : */ 34 37450 : static inline void page_reporting_notify_free(unsigned int order) 35 : { 36 : /* Called from hot path in __free_one_page() */ 37 37450 : if (!static_branch_unlikely(&page_reporting_enabled)) 38 : return; 39 : 40 : /* Determine if we have crossed reporting threshold */ 41 0 : if (order < PAGE_REPORTING_MIN_ORDER) 42 : return; 43 : 44 : /* This will add a few cycles, but should be called infrequently */ 45 0 : __page_reporting_notify(); 46 : } 47 : #else /* CONFIG_PAGE_REPORTING */ 48 : #define page_reported(_page) false 49 : 50 : static inline void page_reporting_notify_free(unsigned int order) 51 : { 52 : } 53 : #endif /* CONFIG_PAGE_REPORTING */ 54 : #endif /*_MM_PAGE_REPORTING_H */