1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _MEMREGION_H_ 3#define _MEMREGION_H_ 4#include <linux/types.h> 5#include <linux/errno.h> 6#include <linux/range.h> 7#include <linux/bug.h> 8 9struct memregion_info { 10 int target_node; 11 struct range range; 12}; 13 14#ifdef CONFIG_MEMREGION 15int memregion_alloc(gfp_t gfp); 16void memregion_free(int id); 17#else 18static inline int memregion_alloc(gfp_t gfp) 19{ 20 return -ENOMEM; 21} 22static inline void memregion_free(int id) 23{ 24} 25#endif 26 27/** 28 * cpu_cache_invalidate_memregion - drop any CPU cached data for 29 * memregions described by @res_desc 30 * @res_desc: one of the IORES_DESC_* types 31 * 32 * Perform cache maintenance after a memory event / operation that 33 * changes the contents of physical memory in a cache-incoherent manner. 34 * For example, device memory technologies like NVDIMM and CXL have 35 * device secure erase, and dynamic region provision that can replace 36 * the memory mapped to a given physical address. 37 * 38 * Limit the functionality to architectures that have an efficient way 39 * to writeback and invalidate potentially terabytes of address space at 40 * once. Note that this routine may or may not write back any dirty 41 * contents while performing the invalidation. It is only exported for 42 * the explicit usage of the NVDIMM and CXL modules in the 'DEVMEM' 43 * symbol namespace on bare platforms. 44 * 45 * Returns 0 on success or negative error code on a failure to perform 46 * the cache maintenance. 47 */ 48#ifdef CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION 49int cpu_cache_invalidate_memregion(int res_desc); 50bool cpu_cache_has_invalidate_memregion(void); 51#else 52static inline bool cpu_cache_has_invalidate_memregion(void) 53{ 54 return false; 55} 56 57static inline int cpu_cache_invalidate_memregion(int res_desc) 58{ 59 WARN_ON_ONCE("CPU cache invalidation required"); 60 return -ENXIO; 61} 62#endif 63#endif /* _MEMREGION_H_ */ 64