FILE
page-states.h
File preview with syntax highlighting.
linux-6.19.14/arch/s390/include/asm/page-states.h
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright IBM Corp. 2017 4 * Author(s): Claudio Imbrenda <imbrenda@linux.vnet.ibm.com> 5 */ 6 7#ifndef PAGE_STATES_H 8#define PAGE_STATES_H 9 10#include <asm/page.h> 11 12#define ESSA_GET_STATE 0 13#define ESSA_SET_STABLE 1 14#define ESSA_SET_UNUSED 2 15#define ESSA_SET_VOLATILE 3 16#define ESSA_SET_POT_VOLATILE 4 17#define ESSA_SET_STABLE_RESIDENT 5 18#define ESSA_SET_STABLE_IF_RESIDENT 6 19#define ESSA_SET_STABLE_NODAT 7 20 21#define ESSA_MAX ESSA_SET_STABLE_NODAT 22 23extern int cmma_flag; 24 25static __always_inline unsigned long essa(unsigned long paddr, unsigned char cmd) 26{ 27 unsigned long rc; 28 29 asm volatile( 30 " .insn rrf,0xb9ab0000,%[rc],%[paddr],%[cmd],0" 31 : [rc] "=d" (rc) 32 : [paddr] "d" (paddr), 33 [cmd] "i" (cmd)); 34 return rc; 35} 36 37static __always_inline void __set_page_state(void *addr, unsigned long num_pages, unsigned char cmd) 38{ 39 unsigned long paddr = __pa(addr) & PAGE_MASK; 40 41 while (num_pages--) { 42 essa(paddr, cmd); 43 paddr += PAGE_SIZE; 44 } 45} 46 47static inline void __set_page_unused(void *addr, unsigned long num_pages) 48{ 49 __set_page_state(addr, num_pages, ESSA_SET_UNUSED); 50} 51 52static inline void __set_page_stable_dat(void *addr, unsigned long num_pages) 53{ 54 __set_page_state(addr, num_pages, ESSA_SET_STABLE); 55} 56 57static inline void __set_page_stable_nodat(void *addr, unsigned long num_pages) 58{ 59 __set_page_state(addr, num_pages, ESSA_SET_STABLE_NODAT); 60} 61 62static inline void __arch_set_page_nodat(void *addr, unsigned long num_pages) 63{ 64 if (!cmma_flag) 65 return; 66 if (cmma_flag < 2) 67 __set_page_stable_dat(addr, num_pages); 68 else 69 __set_page_stable_nodat(addr, num_pages); 70} 71 72static inline void __arch_set_page_dat(void *addr, unsigned long num_pages) 73{ 74 if (!cmma_flag) 75 return; 76 __set_page_stable_dat(addr, num_pages); 77} 78 79#endif
~/
Read-only file preview.