Re: [kvm-unit-tests PATCH v1 1/2] lib/s390x: time: add wrapper for stckf

Nico Boehr
2022-09-01T10:03:15Z

Quoting Thomas Huth (2022-08-30 14:27:30)
[...]
> > diff --git a/lib/s390x/asm/time.h b/lib/s390x/asm/time.h
> > index 7652a151e87a..d7c2bcb4f306 100644
> > --- a/lib/s390x/asm/time.h
> > +++ b/lib/s390x/asm/time.h
> > @@ -14,6 +14,15 @@
> > #define STCK_SHIFT_US (63 - 51)
> > #define STCK_MAX ((1UL << 52) - 1)
> >
> > +static inline uint64_t get_clock_fast(void)
> > +{
> > + uint64_t clk;
> > +
> > + asm volatile(" stckf %0 " : : "Q"(clk) : "memory");
> > +
> > + return clk;
> > +}
>
> Using clk as input parameter together with memory clobbing sounds like a bad
> solution to me here. The Linux kernel properly uses it as output parameter
> instead:
>
> static inline unsigned long get_tod_clock_fast(void)
> {
> unsigned long clk;
>
> asm volatile("stckf %0" : "=Q" (clk) : : "cc");
> return clk;
> }

Yes, thanks, it is a better solution. get_clock_us() also does it this way, so while at it let's fix that, too...