login
Login
/
Register
Search
Forums
News
Blogs
Features
Site
Home
»
Mailing list archives
»
linux-kernel
»
2007
»
November
»
17
Re: [PATCH 7/8] UML - add virt_to_pte
view
thread
!MAILaRCHIVE_VOTE_RePLACE
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
[view in full thread]
From:
Roel Kluin <12o3l@...>
To: Jeff Dike <jdike@...>
Cc: Andrew Morton <akpm@...>, LKML <linux-kernel@...>, uml-devel <user-mode-linux-devel@...>
Subject:
Re: [PATCH 7/8] UML - add virt_to_pte
Date: Saturday, November 17, 2007 - 6:50 am
Jeff Dike wrote:
quoted text
> Turn um_virt_to_phys into virt_to_pte, cleaning up a horrid interface. > > It's also made non-static and declared in pgtable.h because it'll be > needed when the stubs get a vma. > > Signed-off-by: Jeff Dike <jdike@linux.intel.com> > --- > arch/um/kernel/skas/uaccess.c | 56 +++++++++++++++++------------------------- > include/asm-um/pgtable.h | 3 ++ > 2 files changed, 26 insertions(+), 33 deletions(-) > > Index: linux-2.6.22/arch/um/kernel/skas/uaccess.c > =================================================================== > --- linux-2.6.22.orig/arch/um/kernel/skas/uaccess.c 2007-11-16 15:16:54.000000000 -0500 > +++ linux-2.6.22/arch/um/kernel/skas/uaccess.c 2007-11-16 15:40:25.000000000 -0500 > @@ -13,70 +13,60 @@ > #include "kern_util.h" > #include "os.h" > > -static void *um_virt_to_phys(struct task_struct *task, unsigned long addr, > - pte_t *pte_out) > +pte_t *virt_to_pte(struct mm_struct *mm, unsigned long addr) > { > pgd_t *pgd; > pud_t *pud; > pmd_t *pmd; > - pte_t *pte; > - pte_t ptent; > > - if (task->mm == NULL) > - return ERR_PTR(-EINVAL); > - pgd = pgd_offset(task->mm, addr); > + if (mm == NULL) > + return NULL; > + > + pgd = pgd_offset(mm, addr); > if (!pgd_present(*pgd)) > - return ERR_PTR(-EINVAL); > + return NULL; > > pud = pud_offset(pgd, addr); > if (!pud_present(*pud)) > - return ERR_PTR(-EINVAL); > + return NULL; > > pmd = pmd_offset(pud, addr); > if (!pmd_present(*pmd)) > - return ERR_PTR(-EINVAL); > - > - pte = pte_offset_kernel(pmd, addr); > - ptent = *pte; > - if (!pte_present(ptent)) > - return ERR_PTR(-EINVAL); > + return NULL; > > - if (pte_out != NULL) > - *pte_out = ptent; > - return (void *) (pte_val(ptent) & PAGE_MASK) + (addr & ~PAGE_MASK); > + return pte_offset_kernel(pmd, addr); > } > > -static unsigned long maybe_map(unsigned long virt, int is_write) > +static pte_t *maybe_map(unsigned long virt, int is_write) > { > - pte_t pte; > - int err; > + pte_t *pte = virt_to_pte(current->mm, virt); > + int err, dummy_code; > > - void *phys = um_virt_to_phys(current, virt, &pte); > - int dummy_code; > - > - if (IS_ERR(phys) || (is_write && !pte_write(pte))) { > + if ((pte == NULL) || !pte_present(*pte) || > + (is_write && !pte_write(*pte))) { > err = handle_page_fault(virt, 0, is_write, 1, &dummy_code); > if (err) > - return -1UL; > - phys = um_virt_to_phys(current, virt, NULL); > + return NULL; > + pte = virt_to_pte(current->mm, virt); > } > - if (IS_ERR(phys)) > - phys = (void *) -1; > + if (!pte_present(*pte)) > + pte = NULL;
shouldn't you check again for (pte == NULL)?
quoted text
> > - return (unsigned long) phys; > + return pte; > }
-
unsubscribe notice
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to
majordomo@vger.kernel.org
More majordomo info at
http://vger.kernel.org/majordomo-info.html
Please read the FAQ at
http://www.tux.org/lkml/
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
Messages in current thread:
[PATCH 7/8] UML - add virt_to_pte
, Jeff Dike
, (Fri Nov 16, 5:42 pm)
Re: [PATCH 7/8] UML - add virt_to_pte
, Roel Kluin
, (Sat Nov 17, 6:50 am)
Re: [PATCH 7/8] UML - add virt_to_pte
, Jeff Dike
, (Sat Nov 17, 2:49 pm)
Navigation
Create content
Mailing list archives
Recent posts
Popular discussions
linux-kernel
:
Tarkan Erimer
Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3
Andrew Morton
-mm merge plans for 2.6.23
Greg KH
[GIT PATCH] driver core patches against 2.6.24
Vu Pham
Re: [Scst-devel] Integration of SCST in the mainstream Linux kernel
git
:
linux-netdev
:
David Miller
[GIT]: Networking
David Miller
Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock().
Gerrit Renker
[PATCH 33/37] dccp: Initialisation framework for feature negotiation
Frans Pop
svc: failed to register lockdv1 RPC service (errno 97).
openbsd-misc
:
Colocation donated by:
Who's online
There are currently
4 users
and
573 guests
online.
Online users
orkstompa15
learncpr
sreejithc
brenda99
Syndicate