On Thu, Feb 05, 2015 at 03:55:32PM -0800, Shaohua Li wrote:
> For hardware event, the userspace page of the event gets updated in
> context switch, so if we read time in the page, we get updated info. For
> software event, this is missed currently. This patch makes the behavior
> consistency.
> 
> With this patch, we can implement clock_gettime(THREAD_CPUTIME) with
> PERF_COUNT_SW_DUMMY in userspace as suggested by Andy and Peter. Code
> likes this:
> 
>   if (pc->cap_user_time) {
>       do {
>               seq = pc->lock;
>               barrier();
> 
>               running = pc->time_running;
>               cyc = rdtsc();
>               time_mult = pc->time_mult;
>               time_shift = pc->time_shift;
>               time_offset = pc->time_offset;
> 
>               barrier();
>       } while (pc->lock != seq);
> 
>       quot = (cyc >> time_shift);
>       rem = cyc & ((1 << time_shift) - 1);
>       delta = time_offset + quot * time_mult +
>               ((rem * time_mult) >> time_shift);

You could maybe use:

static inline u64 mul_u64_u32_shr(u64 a, u32 mul, unsigned int shift)
{
        return (u64)(((unsigned __int128)a * mul) >> shift);
}

And save yourself a mult instruction if you have suitable (64bit)
hardware and a recent GCC.

>       running += delta;
>       return running;
>   }
> 

Thanks for poking me. Applied.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to