vlapic_init alloc memory for struct vlapic, so it should do a memset on

it, not vlapic_reset.

Signed-off-by: Xin Li <xin.b.li@intel.com>
This commit is contained in:
kaf24@firebug.cl.cam.ac.uk committed 2005-11-05 11:23:02 +01:00
1 parent 6054f20239
commit efb5f15669
1 file changed
+28 -18
+28 -18
View File
@@ -659,7 +659,7 @@ unsigned long vlapic_write(struct vcpu *v, unsigned long address,
vlapic->spurious_vec = val & 0x1ff;
if (!(vlapic->spurious_vec & 0x100)) {
int i = 0;
for (i=0; i < VLAPIC_LVT_NUM; i++)
for (i = 0; i < VLAPIC_LVT_NUM; i++)
vlapic->lvt[i] |= 0x10000;
vlapic->status |= VLAPIC_SOFTWARE_DISABLE_MASK;
}
@@ -723,10 +723,12 @@ unsigned long vlapic_write(struct vcpu *v, unsigned long address,
vlapic->timer_current = val;
vlapic->timer_current_update = NOW();
VMX_DBG_LOG(DBG_LEVEL_VLAPIC,
"timer_init %x timer_current %x timer_current_update %08x%08x",
vlapic->timer_initial, vlapic->timer_current, (uint32_t)(vlapic->timer_current_update>>32), (uint32_t)vlapic->timer_current_update);
vlapic_begin_timer(vlapic);
VMX_DBG_LOG(DBG_LEVEL_VLAPIC, "timer_init %x timer_current %x"
"timer_current_update %08x%08x",
vlapic->timer_initial, vlapic->timer_current,
(uint32_t)(vlapic->timer_current_update >> 32),
(uint32_t)vlapic->timer_current_update);
vlapic_begin_timer(vlapic);
break;
case APIC_TDCR:
@@ -920,26 +922,30 @@ void vlapic_post_injection(struct vcpu *v, int vector, int deliver_mode) {
static int vlapic_reset(struct vlapic *vlapic)
{
struct vcpu *v = vlapic->vcpu;
int apic_id = v->vcpu_id, i;
struct vcpu *v;
int apic_id, i;
if (!v || !vlapic)
return 0;
ASSERT( vlapic != NULL );
memset(vlapic, 0,sizeof(struct vlapic));
v = vlapic->vcpu;
v->arch.arch_vmx.vlapic = vlapic;
ASSERT( v != NULL );
apic_id = v->vcpu_id;
vlapic->domain = v->domain;
vlapic->id = apic_id;
vlapic->vcpu_id = v->vcpu_id;
vlapic->version = VLAPIC_VERSION;
vlapic->apic_base_msr = VLAPIC_BASE_MSR_INIT_VALUE;
if (apic_id == 0)
vlapic->apic_base_msr |= MSR_IA32_APICBASE_BSP;
vlapic->base_address = vlapic_get_base_address(vlapic);
for (i = 0; i < VLAPIC_LVT_NUM; i++)
@@ -949,9 +955,8 @@ static int vlapic_reset(struct vlapic *vlapic)
vlapic->spurious_vec = 0xff;
init_ac_timer(&vlapic->vlapic_timer,
vlapic_timer_fn, vlapic, v->processor);
vlapic_timer_fn, vlapic, v->processor);
#ifdef VLAPIC_NO_BIOS
/*
@@ -966,10 +971,10 @@ static int vlapic_reset(struct vlapic *vlapic)
#endif
VMX_DBG_LOG(DBG_LEVEL_VLAPIC, "vlapic_reset: "
"vcpu=%p id=%d vlapic_apic_base_msr=%08x%08x "
"vlapic_base_address=%0lx",
v, vlapic->id, (uint32_t)(vlapic->apic_base_msr >> 32),
(uint32_t)vlapic->apic_base_msr, vlapic->base_address);
"vcpu=%p id=%d vlapic_apic_base_msr=%08x%08x "
"vlapic_base_address=%0lx",
v, vlapic->id, (uint32_t)(vlapic->apic_base_msr >> 32),
(uint32_t)vlapic->apic_base_msr, vlapic->base_address);
return 1;
}
@@ -978,15 +983,20 @@ int vlapic_init(struct vcpu *v)
{
struct vlapic *vlapic = NULL;
ASSERT( v != NULL );
VMX_DBG_LOG(DBG_LEVEL_VLAPIC, "vlapic_init %d", v->vcpu_id);
vlapic = xmalloc_bytes(sizeof(struct vlapic));
if (!vlapic) {
printk("malloc vlapic error for vcpu %x\n", v->vcpu_id);
return -ENOMEM;
}
memset(vlapic, 0, sizeof(struct vlapic));
VLAPIC(v) = vlapic;
vlapic->vcpu = v;
vlapic_reset(vlapic);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.