mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
bitkeeper revision 1.1192.1.1 (420d73e1O792fPGDMcGMeH_RVU_ZZQ)
Rename arch.pagetable to arch.guest_table
This commit is contained in:
1 parent
17746278ec
commit
a9064a4eca
11 files changed
+54
-47
No files matched your search
@@ -348,16 +348,21 @@ void arch_getdomaininfo_ctxt(
|
||||
struct exec_domain *ed, full_execution_context_t *c)
|
||||
{
|
||||
int i;
|
||||
unsigned long vmx_domain = ed->arch.arch_vmx.flags;
|
||||
#ifdef __i386__ /* Remove when x86_64 VMX is implemented */
|
||||
unsigned long vmx_domain;
|
||||
extern void save_vmx_execution_context(execution_context_t *);
|
||||
#endif
|
||||
|
||||
c->flags = 0;
|
||||
memcpy(&c->cpu_ctxt,
|
||||
&ed->arch.user_ctxt,
|
||||
sizeof(ed->arch.user_ctxt));
|
||||
|
||||
#ifdef __i386__
|
||||
vmx_domain = ed->arch.arch_vmx.flags;
|
||||
if (vmx_domain)
|
||||
save_vmx_execution_context(&c->cpu_ctxt);
|
||||
#endif
|
||||
|
||||
if ( test_bit(EDF_DONEFPUINIT, &ed->ed_flags) )
|
||||
c->flags |= ECF_I387_VALID;
|
||||
@@ -390,7 +395,7 @@ void arch_getdomaininfo_ctxt(
|
||||
c->kernel_ss = ed->arch.kernel_ss;
|
||||
c->kernel_esp = ed->arch.kernel_sp;
|
||||
c->pt_base =
|
||||
pagetable_val(ed->arch.pagetable);
|
||||
pagetable_val(ed->arch.guest_table);
|
||||
memcpy(c->debugreg,
|
||||
ed->arch.debugreg,
|
||||
sizeof(ed->arch.debugreg));
|
||||
|
||||
@@ -467,8 +467,8 @@ int arch_final_setup_guest(
|
||||
d->arch.failsafe_address = c->failsafe_callback_eip;
|
||||
|
||||
phys_basetab = c->pt_base;
|
||||
d->arch.pagetable = mk_pagetable(phys_basetab);
|
||||
d->arch.phys_table = d->arch.pagetable;
|
||||
d->arch.guest_table = mk_pagetable(phys_basetab);
|
||||
d->arch.phys_table = d->arch.guest_table;
|
||||
if ( !get_page_and_type(&frame_table[phys_basetab>>PAGE_SHIFT], d->domain,
|
||||
PGT_base_page_table) )
|
||||
return -EINVAL;
|
||||
@@ -658,7 +658,7 @@ long do_switch_to_user(void)
|
||||
struct exec_domain *ed = current;
|
||||
|
||||
if ( unlikely(copy_from_user(&stu, (void *)regs->rsp, sizeof(stu))) ||
|
||||
unlikely(pagetable_val(ed->arch.pagetable_user) == 0) )
|
||||
unlikely(pagetable_val(ed->arch.guest_table_user) == 0) )
|
||||
return -EFAULT;
|
||||
|
||||
ed->arch.flags &= ~TF_kernel_mode;
|
||||
@@ -947,19 +947,19 @@ void domain_relinquish_memory(struct domain *d)
|
||||
/* Drop the in-use references to page-table bases. */
|
||||
for_each_exec_domain ( d, ed )
|
||||
{
|
||||
if ( pagetable_val(ed->arch.pagetable) != 0 )
|
||||
if ( pagetable_val(ed->arch.guest_table) != 0 )
|
||||
{
|
||||
put_page_and_type(
|
||||
&frame_table[pagetable_val(ed->arch.pagetable) >> PAGE_SHIFT]);
|
||||
ed->arch.pagetable = mk_pagetable(0);
|
||||
&frame_table[pagetable_val(ed->arch.guest_table) >> PAGE_SHIFT]);
|
||||
ed->arch.guest_table = mk_pagetable(0);
|
||||
}
|
||||
|
||||
if ( pagetable_val(ed->arch.pagetable_user) != 0 )
|
||||
if ( pagetable_val(ed->arch.guest_table_user) != 0 )
|
||||
{
|
||||
put_page_and_type(
|
||||
&frame_table[pagetable_val(ed->arch.pagetable_user) >>
|
||||
&frame_table[pagetable_val(ed->arch.guest_table_user) >>
|
||||
PAGE_SHIFT]);
|
||||
ed->arch.pagetable_user = mk_pagetable(0);
|
||||
ed->arch.guest_table_user = mk_pagetable(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+15
-15
@@ -205,16 +205,16 @@ void write_ptbase(struct exec_domain *ed)
|
||||
pagetable_val(ed->arch.monitor_table) :
|
||||
pagetable_val(ed->arch.shadow_table));
|
||||
else
|
||||
pa = pagetable_val(ed->arch.pagetable);
|
||||
pa = pagetable_val(ed->arch.guest_table);
|
||||
#else
|
||||
if ( unlikely(shadow_mode(d)) )
|
||||
pa = pagetable_val(ed->arch.shadow_table);
|
||||
#ifdef __x86_64__
|
||||
else if ( !(ed->arch.flags & TF_kernel_mode) )
|
||||
pa = pagetable_val(ed->arch.pagetable_user);
|
||||
pa = pagetable_val(ed->arch.guest_table_user);
|
||||
#endif
|
||||
else
|
||||
pa = pagetable_val(ed->arch.pagetable);
|
||||
pa = pagetable_val(ed->arch.guest_table);
|
||||
#endif
|
||||
|
||||
write_cr3(pa);
|
||||
@@ -1249,8 +1249,8 @@ int new_guest_cr3(unsigned long pfn)
|
||||
invalidate_shadow_ldt(ed);
|
||||
|
||||
percpu_info[cpu].deferred_ops &= ~DOP_FLUSH_TLB;
|
||||
old_base_pfn = pagetable_val(ed->arch.pagetable) >> PAGE_SHIFT;
|
||||
ed->arch.pagetable = mk_pagetable(pfn << PAGE_SHIFT);
|
||||
old_base_pfn = pagetable_val(ed->arch.guest_table) >> PAGE_SHIFT;
|
||||
ed->arch.guest_table = mk_pagetable(pfn << PAGE_SHIFT);
|
||||
|
||||
shadow_mk_pagetable(ed);
|
||||
|
||||
@@ -1355,8 +1355,8 @@ static int do_extended_command(unsigned long ptr, unsigned long val)
|
||||
else
|
||||
{
|
||||
unsigned long old_pfn =
|
||||
pagetable_val(ed->arch.pagetable_user) >> PAGE_SHIFT;
|
||||
ed->arch.pagetable_user = mk_pagetable(pfn << PAGE_SHIFT);
|
||||
pagetable_val(ed->arch.guest_table_user) >> PAGE_SHIFT;
|
||||
ed->arch.guest_table_user = mk_pagetable(pfn << PAGE_SHIFT);
|
||||
if ( old_pfn != 0 )
|
||||
put_page_and_type(&frame_table[old_pfn]);
|
||||
}
|
||||
@@ -1676,7 +1676,7 @@ int do_mmu_update(
|
||||
cleanup_writable_pagetable(d);
|
||||
|
||||
if ( unlikely(shadow_mode(d)) )
|
||||
check_pagetable(d, ed->arch.pagetable, "pre-mmu"); /* debug */
|
||||
check_pagetable(d, ed->arch.guest_table, "pre-mmu"); /* debug */
|
||||
|
||||
/*
|
||||
* If we are resuming after preemption, read how much work we have already
|
||||
@@ -1924,7 +1924,7 @@ int do_mmu_update(
|
||||
__put_user(done + i, pdone);
|
||||
|
||||
if ( unlikely(shadow_mode(d)) )
|
||||
check_pagetable(d, ed->arch.pagetable, "post-mmu"); /* debug */
|
||||
check_pagetable(d, ed->arch.guest_table, "post-mmu"); /* debug */
|
||||
|
||||
UNLOCK_BIGLOCK(d);
|
||||
return rc;
|
||||
@@ -1983,7 +1983,7 @@ int do_update_va_mapping(unsigned long va,
|
||||
if ( shadow_mode(d) == SHM_logdirty )
|
||||
mark_dirty(d, va_to_l1mfn(va));
|
||||
|
||||
check_pagetable(d, ed->arch.pagetable, "va"); /* debug */
|
||||
check_pagetable(d, ed->arch.guest_table, "va"); /* debug */
|
||||
}
|
||||
|
||||
deferred_ops = percpu_info[cpu].deferred_ops;
|
||||
@@ -2645,7 +2645,7 @@ void audit_domain(struct domain *d)
|
||||
synchronise_pagetables(~0UL);
|
||||
|
||||
printk("pt base=%lx sh_info=%x\n",
|
||||
pagetable_val(d->exec_domain[0]->arch.pagetable)>>PAGE_SHIFT,
|
||||
pagetable_val(d->exec_domain[0]->arch.guest_table)>>PAGE_SHIFT,
|
||||
virt_to_page(d->shared_info)-frame_table);
|
||||
|
||||
spin_lock(&d->page_alloc_lock);
|
||||
@@ -2694,8 +2694,8 @@ void audit_domain(struct domain *d)
|
||||
|
||||
|
||||
/* PHASE 1 */
|
||||
if ( pagetable_val(d->exec_domain[0]->arch.pagetable) )
|
||||
adjust(&frame_table[pagetable_val(d->exec_domain[0]->arch.pagetable)
|
||||
if ( pagetable_val(d->exec_domain[0]->arch.guest_table) )
|
||||
adjust(&frame_table[pagetable_val(d->exec_domain[0]->arch.guest_table)
|
||||
>>PAGE_SHIFT], -1, 1);
|
||||
|
||||
list_ent = d->page_list.next;
|
||||
@@ -2952,9 +2952,9 @@ void audit_domain(struct domain *d)
|
||||
|
||||
spin_unlock(&d->page_alloc_lock);
|
||||
|
||||
if ( pagetable_val(d->exec_domain[0]->arch.pagetable) )
|
||||
if ( pagetable_val(d->exec_domain[0]->arch.guest_table) )
|
||||
adjust(&frame_table[pagetable_val(
|
||||
d->exec_domain[0]->arch.pagetable)>>PAGE_SHIFT], 1, 1);
|
||||
d->exec_domain[0]->arch.guest_table)>>PAGE_SHIFT], 1, 1);
|
||||
|
||||
printk("Audit %d: Done. pages=%d l1=%d l2=%d ctot=%d ttot=%d\n", d->id, i, l1, l2, ctot, ttot );
|
||||
|
||||
|
||||
@@ -668,7 +668,7 @@ static void __init do_boot_cpu (int apicid)
|
||||
|
||||
set_bit(DF_IDLETASK, &idle->d_flags);
|
||||
|
||||
ed->arch.pagetable = mk_pagetable(__pa(idle_pg_table));
|
||||
ed->arch.guest_table = mk_pagetable(__pa(idle_pg_table));
|
||||
|
||||
map_cpu_to_boot_apicid(cpu, apicid);
|
||||
|
||||
|
||||
@@ -401,7 +401,7 @@ static int emulate_privileged_op(struct xen_regs *regs)
|
||||
break;
|
||||
|
||||
case 3: /* Read CR3 */
|
||||
*reg = pagetable_val(ed->arch.pagetable);
|
||||
*reg = pagetable_val(ed->arch.guest_table);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
+6
-6
@@ -419,13 +419,13 @@ static void mov_to_cr(int gp, int cr, struct xen_regs *regs)
|
||||
d->arch.arch_vmx.cpu_cr3);
|
||||
domain_crash(); /* need to take a clean path */
|
||||
}
|
||||
old_base_pfn = pagetable_val(d->arch.pagetable) >> PAGE_SHIFT;
|
||||
old_base_pfn = pagetable_val(d->arch.guest_table) >> PAGE_SHIFT;
|
||||
/*
|
||||
* Now mm.pagetable points to machine physical.
|
||||
* Now arch.guest_table points to machine physical.
|
||||
*/
|
||||
d->arch.pagetable = mk_pagetable(pfn << PAGE_SHIFT);
|
||||
d->arch.guest_table = mk_pagetable(pfn << PAGE_SHIFT);
|
||||
|
||||
VMX_DBG_LOG(DBG_LEVEL_VMMU, "New mm.pagetable = %lx\n",
|
||||
VMX_DBG_LOG(DBG_LEVEL_VMMU, "New arch.guest_table = %lx\n",
|
||||
(unsigned long) (pfn << PAGE_SHIFT));
|
||||
|
||||
shadow_lock(d->domain);
|
||||
@@ -466,7 +466,7 @@ static void mov_to_cr(int gp, int cr, struct xen_regs *regs)
|
||||
* We simply invalidate the shadow.
|
||||
*/
|
||||
pfn = phys_to_machine_mapping(value >> PAGE_SHIFT);
|
||||
if ((pfn << PAGE_SHIFT) != pagetable_val(d->arch.pagetable))
|
||||
if ((pfn << PAGE_SHIFT) != pagetable_val(d->arch.guest_table))
|
||||
__vmx_bug(regs);
|
||||
vmx_shadow_clear_state(d->domain);
|
||||
shadow_invalidate(d);
|
||||
@@ -484,7 +484,7 @@ static void mov_to_cr(int gp, int cr, struct xen_regs *regs)
|
||||
}
|
||||
pfn = phys_to_machine_mapping(value >> PAGE_SHIFT);
|
||||
vmx_shadow_clear_state(d->domain);
|
||||
d->arch.pagetable = mk_pagetable(pfn << PAGE_SHIFT);
|
||||
d->arch.guest_table = mk_pagetable(pfn << PAGE_SHIFT);
|
||||
shadow_mk_pagetable(d);
|
||||
/*
|
||||
* mm->shadow_table should hold the next CR3 for shadow
|
||||
|
||||
@@ -219,8 +219,8 @@ void vmx_do_launch(struct exec_domain *ed)
|
||||
error |= __vmwrite(GUEST_TR_BASE, 0);
|
||||
error |= __vmwrite(GUEST_TR_LIMIT, 0xff);
|
||||
|
||||
ed->arch.shadow_table = ed->arch.pagetable;
|
||||
__vmwrite(GUEST_CR3, pagetable_val(ed->arch.pagetable));
|
||||
ed->arch.shadow_table = ed->arch.guest_table;
|
||||
__vmwrite(GUEST_CR3, pagetable_val(ed->arch.guest_table));
|
||||
__vmwrite(HOST_CR3, pagetable_val(ed->arch.monitor_table));
|
||||
__vmwrite(HOST_ESP, (unsigned long)get_stack_bottom());
|
||||
|
||||
|
||||
@@ -231,7 +231,7 @@ int construct_dom0(struct domain *d,
|
||||
mk_l2_pgentry((unsigned long)l2start | __PAGE_HYPERVISOR);
|
||||
l2tab[PERDOMAIN_VIRT_START >> L2_PAGETABLE_SHIFT] =
|
||||
mk_l2_pgentry(__pa(d->arch.mm_perdomain_pt) | __PAGE_HYPERVISOR);
|
||||
ed->arch.pagetable = mk_pagetable((unsigned long)l2start);
|
||||
ed->arch.guest_table = mk_pagetable((unsigned long)l2start);
|
||||
|
||||
l2tab += l2_table_offset(dsi.v_start);
|
||||
mfn = alloc_start >> PAGE_SHIFT;
|
||||
|
||||
@@ -239,7 +239,7 @@ int construct_dom0(struct domain *d,
|
||||
mk_l4_pgentry(__pa(l4start) | __PAGE_HYPERVISOR);
|
||||
l4tab[l4_table_offset(PERDOMAIN_VIRT_START)] =
|
||||
mk_l4_pgentry(__pa(d->arch.mm_perdomain_l3) | __PAGE_HYPERVISOR);
|
||||
ed->arch.pagetable = mk_pagetable(__pa(l4start));
|
||||
ed->arch.guest_table = mk_pagetable(__pa(l4start));
|
||||
|
||||
l4tab += l4_table_offset(dsi.v_start);
|
||||
mfn = alloc_start >> PAGE_SHIFT;
|
||||
|
||||
@@ -100,12 +100,14 @@ struct arch_exec_domain
|
||||
* are put in this table (eg. the current GDT is mapped here).
|
||||
*/
|
||||
l1_pgentry_t *perdomain_ptes;
|
||||
pagetable_t pagetable;
|
||||
pagetable_t pagetable_user; /* x86/64: user-space pagetable. */
|
||||
|
||||
pagetable_t monitor_table;
|
||||
pagetable_t phys_table; /* 1:1 pagetable */
|
||||
pagetable_t shadow_table;
|
||||
pagetable_t guest_table_user; /* x86/64: user-space pagetable. */
|
||||
pagetable_t guest_table; /* guest notion of cr3 */
|
||||
pagetable_t shadow_table; /* shadow of guest */
|
||||
pagetable_t monitor_table; /* used in hypervisor */
|
||||
|
||||
pagetable_t phys_table; /* guest 1:1 pagetable */
|
||||
|
||||
l2_pgentry_t *vpagetable; /* virtual address of pagetable */
|
||||
l2_pgentry_t *shadow_vtable; /* virtual address of shadow_table */
|
||||
l2_pgentry_t *guest_pl2e_cache; /* guest page directory cache */
|
||||
@@ -122,7 +124,7 @@ struct arch_exec_domain
|
||||
#define IDLE0_ARCH_EXEC_DOMAIN \
|
||||
{ \
|
||||
perdomain_ptes: 0, \
|
||||
pagetable: mk_pagetable(__pa(idle_pg_table)) \
|
||||
guest_table: mk_pagetable(__pa(idle_pg_table)) \
|
||||
}
|
||||
|
||||
#endif /* __ASM_DOMAIN_H__ */
|
||||
@@ -726,7 +726,7 @@ static inline unsigned long gva_to_gpa(unsigned long gva)
|
||||
static inline void __shadow_mk_pagetable(struct exec_domain *ed)
|
||||
{
|
||||
struct domain *d = ed->domain;
|
||||
unsigned long gpfn = pagetable_val(ed->arch.pagetable) >> PAGE_SHIFT;
|
||||
unsigned long gpfn = pagetable_val(ed->arch.guest_table) >> PAGE_SHIFT;
|
||||
unsigned long smfn = __shadow_status(d, gpfn) & PSH_pfn_mask;
|
||||
|
||||
SH_VVLOG("0: __shadow_mk_pagetable(gpfn=%p, smfn=%p)", gpfn, smfn);
|
||||
@@ -747,7 +747,7 @@ static inline void shadow_mk_pagetable(struct exec_domain *ed)
|
||||
if ( unlikely(shadow_mode(ed->domain)) )
|
||||
{
|
||||
SH_VVLOG("shadow_mk_pagetable( gptbase=%p, mode=%d )",
|
||||
pagetable_val(ed->arch.pagetable),
|
||||
pagetable_val(ed->arch.guest_table),
|
||||
shadow_mode(ed->domain));
|
||||
|
||||
shadow_lock(ed->domain);
|
||||
@@ -756,7 +756,7 @@ static inline void shadow_mk_pagetable(struct exec_domain *ed)
|
||||
|
||||
SH_VVLOG("leaving shadow_mk_pagetable:\n"
|
||||
"( gptbase=%p, mode=%d ) sh=%p",
|
||||
pagetable_val(ed->arch.pagetable),
|
||||
pagetable_val(ed->arch.guest_table),
|
||||
shadow_mode(ed->domain),
|
||||
pagetable_val(ed->arch.shadow_table) );
|
||||
}
|
||||
|
||||