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