On Wed, Dec 05, 2018 at 08:39:29AM +0530, Aneesh Kumar K.V wrote: > +pte_t ptep_modify_prot_start(struct vm_area_struct *vma, unsigned long addr, > + pte_t *ptep) > +{ > + unsigned long pte_val; > + > + /* > + * Clear the _PAGE_PRESENT so that no hardware parallel update is > + * possible. Also keep the pte_present true so that we don't take > + * wrong fault. > + */ > + pte_val = pte_update(vma->vm_mm, addr, ptep, _PAGE_PRESENT, _PAGE_INVALID, 0); > + > + return __pte(pte_val); > + > +} > +EXPORT_SYMBOL(ptep_modify_prot_start); As far as I can tell this is only called from mm/memory.c, mm/mprotect.c and fs/proc/task_mmu.c, so there should be no need to export the function.