From: Hugh Dickins There's usually a good reason when a pte is examined without the lock; but it makes me nervous when the pointer is dereferenced more than once. Signed-off-by: Hugh Dickins Signed-off-by: Andrew Morton --- arch/um/kernel/process_kern.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff -puN arch/um/kernel/process_kern.c~mm-uml-pte-atomicity arch/um/kernel/process_kern.c --- devel/arch/um/kernel/process_kern.c~mm-uml-pte-atomicity 2005-10-23 14:28:12.000000000 -0700 +++ devel-akpm/arch/um/kernel/process_kern.c 2005-10-23 14:28:12.000000000 -0700 @@ -222,6 +222,7 @@ void *um_virt_to_phys(struct task_struct pud_t *pud; pmd_t *pmd; pte_t *pte; + pte_t ptent; if(task->mm == NULL) return(ERR_PTR(-EINVAL)); @@ -238,12 +239,13 @@ void *um_virt_to_phys(struct task_struct return(ERR_PTR(-EINVAL)); pte = pte_offset_kernel(pmd, addr); - if(!pte_present(*pte)) + ptent = *pte; + if(!pte_present(ptent)) return(ERR_PTR(-EINVAL)); if(pte_out != NULL) - *pte_out = *pte; - return((void *) (pte_val(*pte) & PAGE_MASK) + (addr & ~PAGE_MASK)); + *pte_out = ptent; + return((void *) (pte_val(ptent) & PAGE_MASK) + (addr & ~PAGE_MASK)); } char *current_cmd(void) _