mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
Clean up map_domain_page().
Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
1 parent
541b4e900d
commit
55e8bb3f3f
4 files changed
+15
-29
No files matched your search
@@ -918,16 +918,16 @@ int vlapic_init(struct vcpu *v)
|
||||
vlapic->regs_page = alloc_domheap_page(NULL);
|
||||
if ( vlapic->regs_page == NULL )
|
||||
{
|
||||
dprintk(XENLOG_ERR, "malloc vlapic regs_page error for vcpu %x\n",
|
||||
v->vcpu_id);
|
||||
dprintk(XENLOG_ERR, "alloc vlapic regs error: %d/%d\n",
|
||||
v->domain->domain_id, v->vcpu_id);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
vlapic->regs = map_domain_page_global(page_to_mfn(vlapic->regs_page));
|
||||
if ( vlapic->regs == NULL )
|
||||
{
|
||||
dprintk(XENLOG_ERR, "malloc vlapic regs error for vcpu %x\n",
|
||||
v->vcpu_id);
|
||||
dprintk(XENLOG_ERR, "map vlapic regs error: %d/%d\n",
|
||||
v->domain->domain_id, v->vcpu_id);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@@ -935,7 +935,8 @@ int vlapic_init(struct vcpu *v)
|
||||
|
||||
vlapic_reset(vlapic);
|
||||
|
||||
vlapic->hw.apic_base_msr = MSR_IA32_APICBASE_ENABLE | APIC_DEFAULT_PHYS_BASE;
|
||||
vlapic->hw.apic_base_msr = (MSR_IA32_APICBASE_ENABLE |
|
||||
APIC_DEFAULT_PHYS_BASE);
|
||||
if ( v->vcpu_id == 0 )
|
||||
vlapic->hw.apic_base_msr |= MSR_IA32_APICBASE_BSP;
|
||||
|
||||
|
||||
@@ -3487,6 +3487,7 @@ sh_update_cr3(struct vcpu *v, int do_locking)
|
||||
v->arch.paging.shadow.guest_vtable = sh_map_domain_page_global(gmfn);
|
||||
/* PAGING_LEVELS==4 implies 64-bit, which means that
|
||||
* map_domain_page_global can't fail */
|
||||
BUG_ON(v->arch.paging.shadow.guest_vtable == NULL);
|
||||
}
|
||||
else
|
||||
v->arch.paging.shadow.guest_vtable = __linear_l4_table;
|
||||
@@ -3519,7 +3520,7 @@ sh_update_cr3(struct vcpu *v, int do_locking)
|
||||
v->arch.paging.shadow.guest_vtable = sh_map_domain_page_global(gmfn);
|
||||
/* Does this really need map_domain_page_global? Handle the
|
||||
* error properly if so. */
|
||||
ASSERT( v->arch.paging.shadow.guest_vtable );
|
||||
BUG_ON(v->arch.paging.shadow.guest_vtable == NULL); /* XXX */
|
||||
}
|
||||
else
|
||||
v->arch.paging.shadow.guest_vtable = __linear_l2_table;
|
||||
|
||||
@@ -98,7 +98,7 @@ void *map_domain_page(unsigned long mfn)
|
||||
cache->tlbflush_timestamp = tlbflush_current_time();
|
||||
|
||||
idx = find_first_zero_bit(cache->inuse, MAPCACHE_ENTRIES);
|
||||
ASSERT(idx < MAPCACHE_ENTRIES);
|
||||
BUG_ON(idx >= MAPCACHE_ENTRIES);
|
||||
}
|
||||
|
||||
set_bit(idx, cache->inuse);
|
||||
@@ -218,25 +218,21 @@ void *map_domain_page_global(unsigned long mfn)
|
||||
|
||||
idx = find_first_zero_bit(inuse, GLOBALMAP_BITS);
|
||||
va = IOREMAP_VIRT_START + (idx << PAGE_SHIFT);
|
||||
if ( va >= FIXADDR_START )
|
||||
if ( unlikely(va >= FIXADDR_START) )
|
||||
{
|
||||
va = 0;
|
||||
goto fail;
|
||||
spin_unlock(&globalmap_lock);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
set_bit(idx, inuse);
|
||||
inuse_cursor = idx + 1;
|
||||
|
||||
fail:
|
||||
spin_unlock(&globalmap_lock);
|
||||
|
||||
if ( likely(va != 0) )
|
||||
{
|
||||
pl2e = virt_to_xen_l2e(va);
|
||||
pl1e = l2e_to_l1e(*pl2e) + l1_table_offset(va);
|
||||
l1e_write(pl1e, l1e_from_pfn(mfn, __PAGE_HYPERVISOR));
|
||||
}
|
||||
pl2e = virt_to_xen_l2e(va);
|
||||
pl1e = l2e_to_l1e(*pl2e) + l1_table_offset(va);
|
||||
l1e_write(pl1e, l1e_from_pfn(mfn, __PAGE_HYPERVISOR));
|
||||
|
||||
return (void *)va;
|
||||
}
|
||||
|
||||
@@ -48,18 +48,6 @@ hap_unmap_domain_page(void *p)
|
||||
unmap_domain_page(p);
|
||||
}
|
||||
|
||||
static inline void *
|
||||
hap_map_domain_page_global(mfn_t mfn)
|
||||
{
|
||||
return map_domain_page_global(mfn_x(mfn));
|
||||
}
|
||||
|
||||
static inline void
|
||||
hap_unmap_domain_page_global(void *p)
|
||||
{
|
||||
unmap_domain_page_global(p);
|
||||
}
|
||||
|
||||
/************************************************/
|
||||
/* locking for hap code */
|
||||
/************************************************/
|
||||
|
||||