1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright(c) 2018 Intel Corporation. All rights reserved.
3 #ifndef _MM_SHUFFLE_H
4 #define _MM_SHUFFLE_H
5 #include <linux/jump_label.h>
6 
7 #define SHUFFLE_ORDER (MAX_ORDER-1)
8 
9 #ifdef CONFIG_SHUFFLE_PAGE_ALLOCATOR
10 DECLARE_STATIC_KEY_FALSE(page_alloc_shuffle_key);
11 extern void __shuffle_free_memory(pg_data_t *pgdat);
12 extern bool shuffle_pick_tail(void);
shuffle_free_memory(pg_data_t * pgdat)13 static inline void shuffle_free_memory(pg_data_t *pgdat)
14 {
15 	if (!static_branch_unlikely(&page_alloc_shuffle_key))
16 		return;
17 	__shuffle_free_memory(pgdat);
18 }
19 
20 extern void __shuffle_zone(struct zone *z);
shuffle_zone(struct zone * z)21 static inline void shuffle_zone(struct zone *z)
22 {
23 	if (!static_branch_unlikely(&page_alloc_shuffle_key))
24 		return;
25 	__shuffle_zone(z);
26 }
27 
is_shuffle_order(int order)28 static inline bool is_shuffle_order(int order)
29 {
30 	if (!static_branch_unlikely(&page_alloc_shuffle_key))
31 		return false;
32 	return order >= SHUFFLE_ORDER;
33 }
34 #else
shuffle_pick_tail(void)35 static inline bool shuffle_pick_tail(void)
36 {
37 	return false;
38 }
39 
shuffle_free_memory(pg_data_t * pgdat)40 static inline void shuffle_free_memory(pg_data_t *pgdat)
41 {
42 }
43 
shuffle_zone(struct zone * z)44 static inline void shuffle_zone(struct zone *z)
45 {
46 }
47 
is_shuffle_order(int order)48 static inline bool is_shuffle_order(int order)
49 {
50 	return false;
51 }
52 #endif
53 #endif /* _MM_SHUFFLE_H */
54