145051539SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
21355e2a6SCatalin Marinas /*
31355e2a6SCatalin Marinas  * arch/arm/include/asm/hugetlb-3level.h
41355e2a6SCatalin Marinas  *
51355e2a6SCatalin Marinas  * Copyright (C) 2012 ARM Ltd.
61355e2a6SCatalin Marinas  *
71355e2a6SCatalin Marinas  * Based on arch/x86/include/asm/hugetlb.h.
81355e2a6SCatalin Marinas  */
91355e2a6SCatalin Marinas 
101355e2a6SCatalin Marinas #ifndef _ASM_ARM_HUGETLB_3LEVEL_H
111355e2a6SCatalin Marinas #define _ASM_ARM_HUGETLB_3LEVEL_H
121355e2a6SCatalin Marinas 
131355e2a6SCatalin Marinas 
141355e2a6SCatalin Marinas /*
151355e2a6SCatalin Marinas  * If our huge pte is non-zero then mark the valid bit.
161355e2a6SCatalin Marinas  * This allows pte_present(huge_ptep_get(ptep)) to return true for non-zero
171355e2a6SCatalin Marinas  * ptes.
181355e2a6SCatalin Marinas  * (The valid bit is automatically cleared by set_pte_at for PROT_NONE ptes).
191355e2a6SCatalin Marinas  */
20544db759SAlexandre Ghiti #define __HAVE_ARCH_HUGE_PTEP_GET
huge_ptep_get(pte_t * ptep)211355e2a6SCatalin Marinas static inline pte_t huge_ptep_get(pte_t *ptep)
221355e2a6SCatalin Marinas {
231355e2a6SCatalin Marinas 	pte_t retval = *ptep;
241355e2a6SCatalin Marinas 	if (pte_val(retval))
251355e2a6SCatalin Marinas 		pte_val(retval) |= L_PTE_VALID;
261355e2a6SCatalin Marinas 	return retval;
271355e2a6SCatalin Marinas }
281355e2a6SCatalin Marinas 
291355e2a6SCatalin Marinas #endif /* _ASM_ARM_HUGETLB_3LEVEL_H */
30