weiming
2008-Mar-31 06:41 UTC
[Xen-devel] what''s the purpose of line page table (PML4 entry 258)
Hi,
When I read the code of do_update_va_mapping, I find that it update the pte
entry in the line page table by looking up the line page table via
guest_map_l1e() :
2998
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L2998>
int do_update_va_mapping
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=do_update_va_mapping>(unsigned
long va, u64 <http://lxr.xensource.com/lxr/ident?a=x86_64;i=u64>
val64,
2999
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L2999>
unsigned long flags
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=flags>)
3000
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3000> {
3001
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3001>
l1_pgentry_t
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=l1_pgentry_t> val
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=val> = l1e_from_intpte
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=l1e_from_intpte>(val64);
3002
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3002>
struct vcpu <http://lxr.xensource.com/lxr/ident?a=x86_64;i=vcpu>
*v <http://lxr.xensource.com/lxr/ident?a=x86_64;i=v> = current
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=current>;
3003
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3003>
struct domain
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=domain> *d = v
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=v>->domain
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=domain>;
3004
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3004>
l1_pgentry_t
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=l1_pgentry_t> *pl1e;
3005
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3005>
unsigned long vmask, bmap_ptr, gl1mfn;
3006
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3006>
cpumask_t <http://lxr.xensource.com/lxr/ident?a=x86_64;i=cpumask_t>
pmask;
3007
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3007>
int rc
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=rc> = 0;
3008
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3008>
3009
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3009>
perfc_incr
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=perfc_incr>(calls_to_update_va);
3010
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3010>
3011
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3011>
if ( unlikely
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=unlikely>(!__addr_ok
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=__addr_ok>(va) &&
!paging_mode_external
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=paging_mode_external>(d))
)
3012
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3012>
return -EINVAL
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=EINVAL>;
3013
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3013>
3014
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3014>
rc <http://lxr.xensource.com/lxr/ident?a=x86_64;i=rc>
xsm_update_va_mapping
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=xsm_update_va_mapping>(current
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=current>->domain
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=domain>, val
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=val>);
3015
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3015>
if ( rc <http://lxr.xensource.com/lxr/ident?a=x86_64;i=rc> )
3016
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3016>
return rc <http://lxr.xensource.com/lxr/ident?a=x86_64;i=rc>;
3017
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3017>
3018
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3018>
LOCK_BIGLOCK
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=LOCK_BIGLOCK>(d);
3019
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3019>
3020
<http://lxr.xensource.com/lxr/source/xen/arch/x86/mm.c?a=x86_64#L3020>
pl1e = guest_map_l1e
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=guest_map_l1e>(v
<http://lxr.xensource.com/lxr/ident?a=x86_64;i=v>, va, &gl1mfn);
...
...
what''s the purpose of this table?
Thanks
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
