1
  *   5ˆl–Ü4ý( ©³( 	Å€fàB¦-ÿÌƒÍ;_†I|¥�+ÀË 7    5/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _MEMREGION_H_
#define _MEMREGION_H_
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/range.h>
#include <linux/bug.h>

struct memregion_info {
	int target_node;
	struct range range;
};

#ifdef CONFIG_MEMREGION
int memregion_alloc(gfp_t gfp);
void memregion_free(int id);
#else
static inline int memregion_alloc(gfp_t gfp)
{
	return -ENOMEM;
}
static inline void memregion_free(int id)
{
}
#endif

/**
 * cpu_cache_invalidate_memregion - drop any CPU cached data for
 *     memregions described by @res_desc
 * @res_desc: one of the IORES_DESC_* types
 *
 * Perform cache maintenance after a memory event / operation that
 * changes the contents of physical memory in a cache-incoherent manner.
 * For example, device memory technologies like NVDIMM and CXL have
 * device secure erase, and dynamic region provision that can replace
 * the memory mapped to a given physical address.
 *
 * Limit the functionality to architectures that have an efficient way
 * to writeback and invalidate potentially terabytes of address space at
 * once.  Note that this routine may or may not write back any dirty
 * contents while performing the invalidation. It is only exported for
 * the explicit usage of the NVDIMM and CXL modules in the 'DEVMEM'
 * symbol namespace on bare platforms.
 *
 * Returns 0 on success or negative error code on a failure to perform
 * the cache maintenance.
 */
#ifdef CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION
int cpu_cache_invalidate_memregion(int res_desc);
bool cpu_cache_has_invalidate_memregion(void);
#else
static inline bool cpu_cache_has_invalidate_memregion(void)
{
	return false;
}

static inline int cpu_cache_invalidate_memregion(int res_desc)
{
	WARN_ON_ONCE("CPU cache invalidation required");
	return -ENXIO;
}
#endif
#endif /* _MEMREGION_H_ */
  #   7ˆl–Ãa¾”TÂXÔ%õÀ‚ãbS�ÿÎƒ"ÈÁÌ )    7‹     ­VmsÚFþÎ¯Ø2M±Q ;3)	ž:Äf›òÒ}ð!�@‰tRîN¦éï³'À�6ùÍÈÖîí=··/Ïâuº.mž	›„"M·´”JjaeD‹-Mò¨×{#]ú�Kj8q–dE*éÂ¿ì6k~Pç—fV¨Hèˆ
-E¶HeÏ©û?é©ù‘¤YA€|'µs•L!BI�ÍJ*ÚH
…ò,•F’?™À±$&K¾)Èºv’b©æûëÝ‚±^Êe¢h-õ×ÏÈÊ/¶æÇ–ïk¾ŠñJ
‚_;‡M’7Ý¨è¶Lñ7q†	O
2y¿VB‹ÐJMVeRlË•!„‹cÉ8Qˆµ±:QKã�­m’4uPËd-aL¥Z ²ŸBK‘0«s6œŒ�aeT$N÷º~¤”ÊØ: (/yïç2·òÜãé©±N–+{bY948ûÖ!RIˆ+ÎÎ`1Eb‘\w)(1œ…ˆl¤ÿø-ÝÕ’]I-ã\KÚäœ»p×"IÙvwîýÞÑ�GòKÁ`ï=BÚ”ÎãøÜ!©Ü®>ÖZ§%ÀºZØ$vEƒWÈ‹Õ4¿o!•ŽÓ X{-¿³ö‚•×ê^`ZÝ³Ý÷Y`ÚX>ZE	I”PðwPƒoDÀ@šv€;ÒQ$•„zkªá�ú—eó·F'ëwñAþÃ6‡Û-½ãïç)Áýsê´�eÃÕwáÚ?†{V¡àºÇpØ†2©×ÒôDBØ�%�%o¡ƒj¾L¿�À× !³àëqàCq|ÐýýñAžwtÐÑ)û#vŒrcBQH2Èë¾'8MÐKÜþUÇP¬óŒ–œuÏÐ[”eŽNu­†È|—7ÝÒEëú3¼Ÿù"T=;­w8xseÒ�4ØÁpã¢¢¯Úç �[eÇ�ð%’_H*øÏr�"©5—^UÞ‰M±Ððç£æ9­¤À*‹3M¹02¬¨ ªT¸WÆÂ¸hVýépPûC2¡?¡³\QxqÅá˜Ü½Bïb
óRtö6/ÙÍ•@›¢W
�‡Ò¾’ƒÊK[”–­`�Æáh*“B!žq™RŒ6…cþ!"×ë<Á©B³ÅQÀI, ‡ß³Ø!bÞÐ«(süÁq¢Ò¤‡Ôv<¼K¾ Ú­tÜ
—¸ö\¥/ûýv³ùÐonãðAveSáïE›Ñ˜CÖcÎl¨G�­CèÖ�{;@ý¬~¿{
ÇÜyÄ~~£R÷AÇEºÿÏ¯æ+üäqÇ‘ 9×Õgyl~Ùë½í*ƒ�¡–òåì]Àp>¢YP½ÛîvZíg­öïèóBê”ÖOý‹®ß�øÖ0�ç\a‹’Çþ„×_åa™¡ìÜ´ªª`J­8—l©q|,�MbŒc6CP®Ó�Øš‡õÕ¶Àxv«ÏQà(àOÒ84Ø¡<shÔ–2T¯8—áJ¹í|0þ~~‹ˆ0„Xl6¢úíõ››zí7Z4çNÞ‰»uj`‘ÝäA+L	,6+Èw7ÓÙøî¶
þÈµì‘Sßà&Ôö;í‹vç²Úsýv>º›žnÙë¦¸ˆÆœ%K…ë½Ðæ�sÌÏõòªÚ?¸›ü5ÿ9šÓõ-œnng7§pß1™¯ÀLfwf©0/¶Õo„Mê¶;ÏøGÜ©ædRmM˜=¥<@<gZàRhä(1»Šà¼�Žž ýY%ñ–ÜóºÆ<iØ=îŽfªzÊÌ³Ô"Ë˜3R¡–¥XÂz~È€Àäã×þì5;P
       9ˆÂÎƒh¹ÁÌ      90
  #   ;ˆl–Ü4ý(ÈÊ:”+Œ¿q ©‹FÿÏ„qöÛÂÍ ?÷     ;Þ•    Q     ¤    ,%       1     ¡1     º1     Ù1     ð1  $   2  3   (2     \2  %   |2     ¢2  A   ²2  &   ô2     3     43     M3     f3     v3      •3     ¶3     Ö3     í3  *    4  9   +4  6   e4  ;   œ4     Ø4  6   ê4  :   !5  5   \5  J   ’5  )   Ý5  L   6  )   T6  L   ~6     Ë6     á6  D   ø6     =7     \7  4   n7  )   £7  )   Í7     ÷7     8     )8     =8     Y8     r8     8     “8     ¬8     À8     Ñ8     â8  	   ñ8     û8     	9  
   9  
   "9  
   -9     89     M9  
   V9  $   a9  #   †9  %   ª9  
   Ð9     Û9     î9  $   :     +:     I:  	   c:  !   m:     �:     —:     ¬:  	   »:     Å:     Î:  	   ×:     á:     í:     ö:     ÿ:  	   ;  
   ;     