page_reporting.h (1635B)
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#ifdef CONFIG_PAGE_REPORTING 14DECLARE_STATIC_KEY_FALSE(page_reporting_enabled); 15extern unsigned int page_reporting_order; 16void __page_reporting_notify(void); 17 18static inline bool page_reported(struct page *page) 19{ 20 return static_branch_unlikely(&page_reporting_enabled) && 21 PageReported(page); 22} 23 24/** 25 * page_reporting_notify_free - Free page notification to start page processing 26 * 27 * This function is meant to act as a screener for __page_reporting_notify 28 * which will determine if a give zone has crossed over the high-water mark 29 * that will justify us beginning page treatment. If we have crossed that 30 * threshold then it will start the process of pulling some pages and 31 * placing them in the batch list for treatment. 32 */ 33static inline void page_reporting_notify_free(unsigned int order) 34{ 35 /* Called from hot path in __free_one_page() */ 36 if (!static_branch_unlikely(&page_reporting_enabled)) 37 return; 38 39 /* Determine if we have crossed reporting threshold */ 40 if (order < page_reporting_order) 41 return; 42 43 /* This will add a few cycles, but should be called infrequently */ 44 __page_reporting_notify(); 45} 46#else /* CONFIG_PAGE_REPORTING */ 47#define page_reported(_page) false 48 49static inline void page_reporting_notify_free(unsigned int order) 50{ 51} 52#endif /* CONFIG_PAGE_REPORTING */ 53#endif /*_MM_PAGE_REPORTING_H */