Re: [PATCH] perf record: Conditionally define CLOCK_MONOTONIC_RAW for older OSes

From: Yunlong Song
Date: Wed Apr 08 2015 - 08:49:30 EST


On 2015/4/8 16:55, Peter Zijlstra wrote:
> On Wed, Apr 08, 2015 at 12:02:28PM +0800, Yunlong Song wrote:
>> Commit 31a9883106cc ("perf record: Add clockid parameter") used
>> CLOCK_MONOTONIC_RAW in the struct clockid_map clockids[], but the
>> CLOCK_MONOTONIC_RAW macro is not defined in older releases (e.g., SLES
>> 11 SP2), thus there is a building error when making perf:
>>
>> builtin-record.c:738: error: âCLOCK_MONOTONIC_RAWâ undeclared here (not in a function)
>
> Weird that, CLOCK_MONOTONIC_RAW is said to be in the kernel since
> 2.6.28, SLES11 SP2 is 3.0 based, SP1 is 2.6.32.
>
> Now the original SLES11 started life with 2.6.27, so it looks like
> someone forgot to update their kernel headers when upgrading.
>
>
>
> .
>

Hi, Peter,

SLES 11 SP2 uses linux-kernel-headers-2.6.32-1.4.13, which really defines CLOCK_MONOTONIC_RAW
in <linux/time.h>. But the perf.h which is included in builtin-record.c uses <time.h> rather
than <linux/time.h>, and <time.h> finally includes <bits/time.h>. Both <time.h> and <bits/time.h>
belong to glibc-devel package, which is glibc-devel-2.11.3-17.31.1 for SLES11 SP2, and it does
not define CLOCK_MONOTONIC_RAW indeed. However, for the latest OSes (or say distributions), the
corresponding glibc-devel packages have already defined CLOCK_MONOTONIC_RAW.

--
Thanks,
Yunlong Song

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/