[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Merge
# HG changeset patch # User Tom Wilkie <tom.wilkie@xxxxxxxxx> # Date 1175000537 -3600 # Node ID 7eff43986c3abd4aaa9d8b9429fb8fd74c3bde90 # Parent c815f6553816731f6b797dc23dd3d000b4e8e8de # Parent 79449efbdd80b77b0c89d2c499ec6d4fc383800f Merge --- linux-2.6-xen-sparse/drivers/xen/core/machine_reboot.c | 2 - xen/acm/acm_policy.c | 24 ++++++++++------- xen/arch/x86/hvm/svm/svm.c | 22 ++++++++------- xen/arch/x86/time.c | 22 ++++++++------- xen/common/domain.c | 4 ++ xen/common/schedule.c | 7 +--- 6 files changed, 45 insertions(+), 36 deletions(-) diff -r c815f6553816 -r 7eff43986c3a linux-2.6-xen-sparse/drivers/xen/core/machine_reboot.c --- a/linux-2.6-xen-sparse/drivers/xen/core/machine_reboot.c Tue Mar 27 13:45:30 2007 +0100 +++ b/linux-2.6-xen-sparse/drivers/xen/core/machine_reboot.c Tue Mar 27 14:02:17 2007 +0100 @@ -123,7 +123,7 @@ static int take_machine_down(void *p_fas static int take_machine_down(void *p_fast_suspend) { int fast_suspend = *(int *)p_fast_suspend; - int suspend_cancelled, err, cpu; + int suspend_cancelled, err; extern void time_resume(void); if (fast_suspend) { diff -r c815f6553816 -r 7eff43986c3a xen/acm/acm_policy.c --- a/xen/acm/acm_policy.c Tue Mar 27 13:45:30 2007 +0100 +++ b/xen/acm/acm_policy.c Tue Mar 27 14:02:17 2007 +0100 @@ -62,6 +62,7 @@ do_acm_set_policy(void *buf, u32 buf_siz do_acm_set_policy(void *buf, u32 buf_size) { struct acm_policy_buffer *pol = (struct acm_policy_buffer *)buf; + uint32_t offset, length; /* some sanity checking */ if ((be32_to_cpu(pol->magic) != ACM_MAGIC) || (buf_size != be32_to_cpu(pol->len)) || @@ -92,22 +93,27 @@ do_acm_set_policy(void *buf, u32 buf_siz /* get bin_policy lock and rewrite policy (release old one) */ write_lock(&acm_bin_pol_rwlock); + offset = be32_to_cpu(pol->policy_reference_offset); + length = be32_to_cpu(pol->primary_buffer_offset) - offset; + /* set label reference name */ - if (acm_set_policy_reference(buf + be32_to_cpu(pol->policy_reference_offset), - be32_to_cpu(pol->primary_buffer_offset) - - be32_to_cpu(pol->policy_reference_offset))) + if ( (offset + length) > buf_size || + acm_set_policy_reference(buf + offset, length)) goto error_lock_free; /* set primary policy data */ - if (acm_primary_ops->set_binary_policy(buf + be32_to_cpu(pol->primary_buffer_offset), - be32_to_cpu(pol->secondary_buffer_offset) - - be32_to_cpu(pol->primary_buffer_offset))) + offset = be32_to_cpu(pol->primary_buffer_offset); + length = be32_to_cpu(pol->secondary_buffer_offset) - offset; + + if ( (offset + length) > buf_size || + acm_primary_ops->set_binary_policy(buf + offset, length)) goto error_lock_free; /* set secondary policy data */ - if (acm_secondary_ops->set_binary_policy(buf + be32_to_cpu(pol->secondary_buffer_offset), - be32_to_cpu(pol->len) - - be32_to_cpu(pol->secondary_buffer_offset))) + offset = be32_to_cpu(pol->secondary_buffer_offset); + length = be32_to_cpu(pol->len) - offset; + if ( (offset + length) > buf_size || + acm_secondary_ops->set_binary_policy(buf + offset, length)) goto error_lock_free; write_unlock(&acm_bin_pol_rwlock); diff -r c815f6553816 -r 7eff43986c3a xen/arch/x86/hvm/svm/svm.c --- a/xen/arch/x86/hvm/svm/svm.c Tue Mar 27 13:45:30 2007 +0100 +++ b/xen/arch/x86/hvm/svm/svm.c Tue Mar 27 14:02:17 2007 +0100 @@ -64,8 +64,8 @@ extern int svm_dbg_on; extern int svm_dbg_on; void svm_dump_regs(const char *from, struct cpu_user_regs *regs); -static int svm_do_vmmcall_reset_to_realmode(struct vcpu *v, - struct cpu_user_regs *regs); +static int svm_reset_to_realmode(struct vcpu *v, + struct cpu_user_regs *regs); /* va of hardware host save area */ static void *hsa[NR_CPUS] __read_mostly; @@ -749,19 +749,21 @@ static void svm_init_ap_context( struct vcpu_guest_context *ctxt, int vcpuid, int trampoline_vector) { struct vcpu *v; + struct vmcb_struct *vmcb; cpu_user_regs_t *regs; u16 cs_sel; /* We know this is safe because hvm_bringup_ap() does it */ v = current->domain->vcpu[vcpuid]; + vmcb = v->arch.hvm_svm.vmcb; regs = &v->arch.guest_context.user_regs; memset(ctxt, 0, sizeof(*ctxt)); /* * We execute the trampoline code in real mode. The trampoline vector - * passed to us is page alligned and is the physicall frame number for - * the code. We will execute this code in real mode. + * passed to us is page alligned and is the physical frame number for + * the code. We will execute this code in real mode. */ cs_sel = trampoline_vector << 8; ctxt->user_regs.eip = 0x0; @@ -771,11 +773,11 @@ static void svm_init_ap_context( * This is the launch of an AP; set state so that we begin executing * the trampoline code in real-mode. */ - svm_do_vmmcall_reset_to_realmode(v, regs); + svm_reset_to_realmode(v, regs); /* Adjust the vmcb's hidden register state. */ - v->arch.hvm_svm.vmcb->rip = 0; - v->arch.hvm_svm.vmcb->cs.sel = cs_sel; - v->arch.hvm_svm.vmcb->cs.base = (cs_sel << 4); + vmcb->rip = 0; + vmcb->cs.sel = cs_sel; + vmcb->cs.base = (cs_sel << 4); } static void svm_init_hypercall_page(struct domain *d, void *hypercall_page) @@ -2494,8 +2496,8 @@ void svm_handle_invlpg(const short invlp * * returns 0 on success, non-zero otherwise */ -static int svm_do_vmmcall_reset_to_realmode(struct vcpu *v, - struct cpu_user_regs *regs) +static int svm_reset_to_realmode(struct vcpu *v, + struct cpu_user_regs *regs) { struct vmcb_struct *vmcb; diff -r c815f6553816 -r 7eff43986c3a xen/arch/x86/time.c --- a/xen/arch/x86/time.c Tue Mar 27 13:45:30 2007 +0100 +++ b/xen/arch/x86/time.c Tue Mar 27 14:02:17 2007 +0100 @@ -670,13 +670,19 @@ static inline void version_update_end(u3 (*version)++; } -static inline void __update_vcpu_system_time(struct vcpu *v) +void update_vcpu_system_time(struct vcpu *v) { struct cpu_time *t; struct vcpu_time_info *u; + if ( v->vcpu_info == NULL ) + return; + t = &this_cpu(cpu_time); u = &vcpu_info(v, time); + + if ( u->tsc_timestamp == t->local_tsc_stamp ) + return; version_update_begin(&u->version); @@ -686,13 +692,6 @@ static inline void __update_vcpu_system_ u->tsc_shift = (s8)t->tsc_scale.shift; version_update_end(&u->version); -} - -void update_vcpu_system_time(struct vcpu *v) -{ - if ( vcpu_info(v, time.tsc_timestamp) != - this_cpu(cpu_time).local_tsc_stamp ) - __update_vcpu_system_time(v); } void update_domain_wallclock_time(struct domain *d) @@ -771,9 +770,10 @@ static void local_time_calibration(void local_irq_enable(); #if 0 - printk("PRE%d: tsc=%lld stime=%lld master=%lld\n", + printk("PRE%d: tsc=%"PRIu64" stime=%"PRIu64" master=%"PRIu64"\n", smp_processor_id(), prev_tsc, prev_local_stime, prev_master_stime); - printk("CUR%d: tsc=%lld stime=%lld master=%lld -> %lld\n", + printk("CUR%d: tsc=%"PRIu64" stime=%"PRIu64" master=%"PRIu64 + " -> %"PRId64"\n", smp_processor_id(), curr_tsc, curr_local_stime, curr_master_stime, curr_master_stime - curr_local_stime); #endif @@ -854,6 +854,8 @@ static void local_time_calibration(void t->local_tsc_stamp = curr_tsc; t->stime_local_stamp = curr_local_stime; t->stime_master_stamp = curr_master_stime; + + update_vcpu_system_time(current); out: set_timer(&t->calibration_timer, NOW() + EPOCH); diff -r c815f6553816 -r 7eff43986c3a xen/common/domain.c --- a/xen/common/domain.c Tue Mar 27 13:45:30 2007 +0100 +++ b/xen/common/domain.c Tue Mar 27 14:02:17 2007 +0100 @@ -96,14 +96,16 @@ struct vcpu *alloc_vcpu( v->domain = d; v->vcpu_id = vcpu_id; - v->vcpu_info = shared_info_addr(d, vcpu_info[vcpu_id]); spin_lock_init(&v->pause_lock); v->runstate.state = is_idle_vcpu(v) ? RUNSTATE_running : RUNSTATE_offline; v->runstate.state_entry_time = NOW(); if ( !is_idle_domain(d) ) + { set_bit(_VCPUF_down, &v->vcpu_flags); + v->vcpu_info = shared_info_addr(d, vcpu_info[vcpu_id]); + } if ( sched_init_vcpu(v, cpu_id) != 0 ) { diff -r c815f6553816 -r 7eff43986c3a xen/common/schedule.c --- a/xen/common/schedule.c Tue Mar 27 13:45:30 2007 +0100 +++ b/xen/common/schedule.c Tue Mar 27 14:02:17 2007 +0100 @@ -659,11 +659,8 @@ static void schedule(void) stop_timer(&prev->periodic_timer); /* Ensure that the domain has an up-to-date time base. */ - if ( !is_idle_vcpu(next) ) - { - update_vcpu_system_time(next); - vcpu_periodic_timer_work(next); - } + update_vcpu_system_time(next); + vcpu_periodic_timer_work(next); TRACE_4D(TRC_SCHED_SWITCH, prev->domain->domain_id, prev->vcpu_id, _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |