fault.c (73e86cb03cf2ec0aa3789dc8621c6d53619cac5e) fault.c (af29678fe785ad79e7386e97b57093482f0dd7c4)
1/*
2 * Based on arch/arm/mm/fault.c
3 *
4 * Copyright (C) 1995 Linus Torvalds
5 * Copyright (C) 1995-2004 Russell King
6 * Copyright (C) 2012 ARM Ltd.
7 *
8 * This program is free software; you can redistribute it and/or modify

--- 169 unchanged lines hidden (view full) ---

178 pte = pte_offset_map(pmd, addr);
179 pr_cont(", *pte=%016llx", pte_val(*pte));
180 pte_unmap(pte);
181 } while(0);
182
183 pr_cont("\n");
184}
185
1/*
2 * Based on arch/arm/mm/fault.c
3 *
4 * Copyright (C) 1995 Linus Torvalds
5 * Copyright (C) 1995-2004 Russell King
6 * Copyright (C) 2012 ARM Ltd.
7 *
8 * This program is free software; you can redistribute it and/or modify

--- 169 unchanged lines hidden (view full) ---

178 pte = pte_offset_map(pmd, addr);
179 pr_cont(", *pte=%016llx", pte_val(*pte));
180 pte_unmap(pte);
181 } while(0);
182
183 pr_cont("\n");
184}
185
186#ifdef CONFIG_ARM64_HW_AFDBM
187/*
188 * This function sets the access flags (dirty, accessed), as well as write
189 * permission, and only to a more permissive setting.
190 *
191 * It needs to cope with hardware update of the accessed/dirty state by other
192 * agents in the system and can safely skip the __sync_icache_dcache() call as,
193 * like set_pte_at(), the PTE is never changed from no-exec to exec here.
194 *

--- 25 unchanged lines hidden (view full) ---

220 pteval |= pte_val(entry);
221 pteval ^= PTE_RDONLY;
222 pteval = cmpxchg_relaxed(&pte_val(*ptep), old_pteval, pteval);
223 } while (pteval != old_pteval);
224
225 flush_tlb_fix_spurious_fault(vma, address);
226 return 1;
227}
186/*
187 * This function sets the access flags (dirty, accessed), as well as write
188 * permission, and only to a more permissive setting.
189 *
190 * It needs to cope with hardware update of the accessed/dirty state by other
191 * agents in the system and can safely skip the __sync_icache_dcache() call as,
192 * like set_pte_at(), the PTE is never changed from no-exec to exec here.
193 *

--- 25 unchanged lines hidden (view full) ---

219 pteval |= pte_val(entry);
220 pteval ^= PTE_RDONLY;
221 pteval = cmpxchg_relaxed(&pte_val(*ptep), old_pteval, pteval);
222 } while (pteval != old_pteval);
223
224 flush_tlb_fix_spurious_fault(vma, address);
225 return 1;
226}
228#endif
229
230static bool is_el1_instruction_abort(unsigned int esr)
231{
232 return ESR_ELx_EC(esr) == ESR_ELx_EC_IABT_CUR;
233}
234
235static inline bool is_permission_fault(unsigned int esr, struct pt_regs *regs,
236 unsigned long addr)

--- 620 unchanged lines hidden ---
227
228static bool is_el1_instruction_abort(unsigned int esr)
229{
230 return ESR_ELx_EC(esr) == ESR_ELx_EC_IABT_CUR;
231}
232
233static inline bool is_permission_fault(unsigned int esr, struct pt_regs *regs,
234 unsigned long addr)

--- 620 unchanged lines hidden ---