xref: /linux/mm/shuffle.h (revision e900a918b0984ec8f2eb150b8477a47b75d17692)
1*e900a918SDan Williams // SPDX-License-Identifier: GPL-2.0
2*e900a918SDan Williams // Copyright(c) 2018 Intel Corporation. All rights reserved.
3*e900a918SDan Williams #ifndef _MM_SHUFFLE_H
4*e900a918SDan Williams #define _MM_SHUFFLE_H
5*e900a918SDan Williams #include <linux/jump_label.h>
6*e900a918SDan Williams 
7*e900a918SDan Williams /*
8*e900a918SDan Williams  * SHUFFLE_ENABLE is called from the command line enabling path, or by
9*e900a918SDan Williams  * platform-firmware enabling that indicates the presence of a
10*e900a918SDan Williams  * direct-mapped memory-side-cache. SHUFFLE_FORCE_DISABLE is called from
11*e900a918SDan Williams  * the command line path and overrides any previous or future
12*e900a918SDan Williams  * SHUFFLE_ENABLE.
13*e900a918SDan Williams  */
14*e900a918SDan Williams enum mm_shuffle_ctl {
15*e900a918SDan Williams 	SHUFFLE_ENABLE,
16*e900a918SDan Williams 	SHUFFLE_FORCE_DISABLE,
17*e900a918SDan Williams };
18*e900a918SDan Williams 
19*e900a918SDan Williams #define SHUFFLE_ORDER (MAX_ORDER-1)
20*e900a918SDan Williams 
21*e900a918SDan Williams #ifdef CONFIG_SHUFFLE_PAGE_ALLOCATOR
22*e900a918SDan Williams DECLARE_STATIC_KEY_FALSE(page_alloc_shuffle_key);
23*e900a918SDan Williams extern void page_alloc_shuffle(enum mm_shuffle_ctl ctl);
24*e900a918SDan Williams extern void __shuffle_free_memory(pg_data_t *pgdat);
25*e900a918SDan Williams static inline void shuffle_free_memory(pg_data_t *pgdat)
26*e900a918SDan Williams {
27*e900a918SDan Williams 	if (!static_branch_unlikely(&page_alloc_shuffle_key))
28*e900a918SDan Williams 		return;
29*e900a918SDan Williams 	__shuffle_free_memory(pgdat);
30*e900a918SDan Williams }
31*e900a918SDan Williams 
32*e900a918SDan Williams extern void __shuffle_zone(struct zone *z);
33*e900a918SDan Williams static inline void shuffle_zone(struct zone *z)
34*e900a918SDan Williams {
35*e900a918SDan Williams 	if (!static_branch_unlikely(&page_alloc_shuffle_key))
36*e900a918SDan Williams 		return;
37*e900a918SDan Williams 	__shuffle_zone(z);
38*e900a918SDan Williams }
39*e900a918SDan Williams #else
40*e900a918SDan Williams static inline void shuffle_free_memory(pg_data_t *pgdat)
41*e900a918SDan Williams {
42*e900a918SDan Williams }
43*e900a918SDan Williams 
44*e900a918SDan Williams static inline void shuffle_zone(struct zone *z)
45*e900a918SDan Williams {
46*e900a918SDan Williams }
47*e900a918SDan Williams 
48*e900a918SDan Williams static inline void page_alloc_shuffle(enum mm_shuffle_ctl ctl)
49*e900a918SDan Williams {
50*e900a918SDan Williams }
51*e900a918SDan Williams #endif
52*e900a918SDan Williams #endif /* _MM_SHUFFLE_H */
53