Re: [kvm-unit-tests PATCH v9 06/12] s390x: clock and delays caluculations

Pierre Morel
2020-06-30T16:13:25Z

On 2020-06-22 11:09, Janosch Frank wrote:
> On 6/15/20 11:31 AM, Pierre Morel wrote:
>> The hardware gives us a good definition of the microsecond,
>> let's keep this information and let the routine accessing
>> the hardware keep all the information and return microseconds.
>>
>> Calculate delays in microseconds and take care about wrapping
>> around zero.
>>
>> Define values with macros and use inlines to keep the
>> milliseconds interface.
>>
>> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
>
> Small nit below.

seen, I move it up.

>
>
> Reviewed-by: Janosch Frank <frankja@linux.ibm.com>

Thanks,
Pierre

>
>> ---
>> lib/s390x/asm/time.h | 29 +++++++++++++++++++++++++++--
>> 1 file changed, 27 insertions(+), 2 deletions(-)
>>
>> diff --git a/lib/s390x/asm/time.h b/lib/s390x/asm/time.h
>> index 1791380..7f1d891 100644
>> --- a/lib/s390x/asm/time.h
>> +++ b/lib/s390x/asm/time.h
>> @@ -13,14 +13,39 @@
>> #ifndef ASM_S390X_TIME_H
>> #define ASM_S390X_TIME_H
>>
>> -static inline uint64_t get_clock_ms(void)
>> +#define STCK_SHIFT_US (63 - 51)
>> +#define STCK_MAX ((1UL << 52) - 1)
>> +
>> +static inline uint64_t get_clock_us(void)
>> {
>> uint64_t clk;
>>
>> asm volatile(" stck %0 " : : "Q"(clk) : "memory");
>>
>> /* Bit 51 is incrememented each microsecond */
>> - return (clk >> (63 - 51)) / 1000;
>> + return clk >> STCK_SHIFT_US;
>> +}
>> +
>> +static inline void udelay(unsigned long us)
>> +{
>> + unsigned long startclk = get_clock_us();
>> + unsigned long c;
>> +
>> + do {
>> + c = get_clock_us();
>> + if (c < startclk)
>> + c += STCK_MAX;
>> + } while (c < startclk + us);
>> +}
>> +
>> +static inline void mdelay(unsigned long ms)
>> +{
>> + udelay(ms * 1000);
>> +}
>> +
>> +static inline uint64_t get_clock_ms(void)
>> +{
>> + return get_clock_us() / 1000;
>> }
>
> Why don't you put that below to the get_clock_us()?

right, better.

--
Pierre Morel
IBM Lab Boeblingen