Hi Marc, > -----Original Message----- > From: Marc Zyngier <maz@xxxxxxxxxx> > Sent: Monday, November 23, 2020 7:59 PM > To: Jianyong Wu <Jianyong.Wu@xxxxxxx> > Cc: Justin He <Justin.He@xxxxxxx>; kvm@xxxxxxxxxxxxxxx; > netdev@xxxxxxxxxxxxxxx; richardcochran@xxxxxxxxx; linux- > kernel@xxxxxxxxxxxxxxx; sean.j.christopherson@xxxxxxxxx; Steven Price > <Steven.Price@xxxxxxx>; Andre Przywara <Andre.Przywara@xxxxxxx>; > john.stultz@xxxxxxxxxx; yangbo.lu@xxxxxxx; pbonzini@xxxxxxxxxx; > tglx@xxxxxxxxxxxxx; nd <nd@xxxxxxx>; will@xxxxxxxxxx; > kvmarm@xxxxxxxxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > Subject: Re: [PATCH v15 6/9] arm64/kvm: Add hypercall service for kvm ptp. > > On 2020-11-23 10:44, Marc Zyngier wrote: > > On 2020-11-11 06:22, Jianyong Wu wrote: > >> ptp_kvm will get this service through SMCC call. > >> The service offers wall time and cycle count of host to guest. > >> The caller must specify whether they want the host cycle count or the > >> difference between host cycle count and cntvoff. > >> > >> Signed-off-by: Jianyong Wu <jianyong.wu@xxxxxxx> > >> --- > >> arch/arm64/kvm/hypercalls.c | 61 > >> +++++++++++++++++++++++++++++++++++++ > >> include/linux/arm-smccc.h | 17 +++++++++++ > >> 2 files changed, 78 insertions(+) > >> > >> diff --git a/arch/arm64/kvm/hypercalls.c > >> b/arch/arm64/kvm/hypercalls.c index b9d8607083eb..f7d189563f3d > 100644 > >> --- a/arch/arm64/kvm/hypercalls.c > >> +++ b/arch/arm64/kvm/hypercalls.c > >> @@ -9,6 +9,51 @@ > >> #include <kvm/arm_hypercalls.h> > >> #include <kvm/arm_psci.h> > >> > >> +static void kvm_ptp_get_time(struct kvm_vcpu *vcpu, u64 *val) { > >> + struct system_time_snapshot systime_snapshot; > >> + u64 cycles = ~0UL; > >> + u32 feature; > >> + > >> + /* > >> + * system time and counter value must captured in the same > >> + * time to keep consistency and precision. > >> + */ > >> + ktime_get_snapshot(&systime_snapshot); > >> + > >> + // binding ptp_kvm clocksource to arm_arch_counter > >> + if (systime_snapshot.cs_id != CSID_ARM_ARCH_COUNTER) > >> + return; > >> + > >> + val[0] = upper_32_bits(systime_snapshot.real); > >> + val[1] = lower_32_bits(systime_snapshot.real); > > > > What is the endianness of these values? I can't see it defined > > anywhere, and this is likely not to work if guest and hypervisor don't > > align. > > Scratch that. This is all passed via registers, so the endianness of the data is > irrelevant. Please discard any comment about endianness I made in this > review. > Yeah, these data process and transfer are no relationship with endianness. Thanks. > The documentation aspect still requires to be beefed up. So the endianness description will be "no endianness restriction". Thanks Jianyong > > Thanks, > > M. > -- > Jazz is not dead. It just smells funny...