|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.13] x86/tsc: update vcpu time info on guest TSC adjustments
On Wed, Oct 23, 2019 at 10:57:39AM +0200, Roger Pau Monne wrote:
> If a HVM/PVH guest writes to MSR_IA32_TSC{_ADJUST} and thus changes
> the value of the time stamp counter the vcpu time info must also be
> updated, or the time calculated by the guest using the Xen PV clock
> interface will be skewed.
>
> Update the vcpu time info when the guest writes to either MSR_IA32_TSC
> or MSR_IA32_TSC_ADJUST. This fixes lockups seen when running the
> pv-shim on AMD hardware, since the shim will aggressively try to keep
> TSCs in sync by periodically writing to MSR_IA32_TSC if the TSC is not
> reliable.
>
> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> ---
> Cc: Jürgen Groß <jgross@xxxxxxxx>
> ---
> xen/arch/x86/hvm/hvm.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
> index 9acd359c99..e4c0425330 100644
> --- a/xen/arch/x86/hvm/hvm.c
> +++ b/xen/arch/x86/hvm/hvm.c
> @@ -442,6 +442,8 @@ static void hvm_set_guest_tsc_msr(struct vcpu *v, u64
> guest_tsc)
>
> hvm_set_guest_tsc(v, guest_tsc);
> v->arch.hvm.msr_tsc_adjust += v->arch.hvm.cache_tsc_offset - tsc_offset;
> + if ( v == current )
> + update_vcpu_system_time(v);
Why not get rid of the test and always call update_vcpu_system_time(v)?
Wei.
> }
>
> static void hvm_set_guest_tsc_adjust(struct vcpu *v, u64 tsc_adjust)
> @@ -449,6 +451,8 @@ static void hvm_set_guest_tsc_adjust(struct vcpu *v, u64
> tsc_adjust)
> v->arch.hvm.cache_tsc_offset += tsc_adjust - v->arch.hvm.msr_tsc_adjust;
> hvm_set_tsc_offset(v, v->arch.hvm.cache_tsc_offset, 0);
> v->arch.hvm.msr_tsc_adjust = tsc_adjust;
> + if ( v == current )
> + update_vcpu_system_time(v);
> }
>
> u64 hvm_get_guest_tsc_fixed(struct vcpu *v, uint64_t at_tsc)
> --
> 2.23.0
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |