Commit 8f5cd76c authored by Hugh Dickins's avatar Hugh Dickins Committed by Linus Torvalds

[PATCH] mm: uml pte atomicity

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: default avatarHugh Dickins <hugh@veritas.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent a7e4705b
...@@ -222,6 +222,7 @@ void *um_virt_to_phys(struct task_struct *task, unsigned long addr, ...@@ -222,6 +222,7 @@ void *um_virt_to_phys(struct task_struct *task, unsigned long addr,
pud_t *pud; pud_t *pud;
pmd_t *pmd; pmd_t *pmd;
pte_t *pte; pte_t *pte;
pte_t ptent;
if(task->mm == NULL) if(task->mm == NULL)
return(ERR_PTR(-EINVAL)); return(ERR_PTR(-EINVAL));
...@@ -238,12 +239,13 @@ void *um_virt_to_phys(struct task_struct *task, unsigned long addr, ...@@ -238,12 +239,13 @@ void *um_virt_to_phys(struct task_struct *task, unsigned long addr,
return(ERR_PTR(-EINVAL)); return(ERR_PTR(-EINVAL));
pte = pte_offset_kernel(pmd, addr); pte = pte_offset_kernel(pmd, addr);
if(!pte_present(*pte)) ptent = *pte;
if(!pte_present(ptent))
return(ERR_PTR(-EINVAL)); return(ERR_PTR(-EINVAL));
if(pte_out != NULL) if(pte_out != NULL)
*pte_out = *pte; *pte_out = ptent;
return((void *) (pte_val(*pte) & PAGE_MASK) + (addr & ~PAGE_MASK)); return((void *) (pte_val(ptent) & PAGE_MASK) + (addr & ~PAGE_MASK));
} }
char *current_cmd(void) char *current_cmd(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment