diff mbox series

selftests/vDSO: Fix undefined CLONE_NEWTIME by including

Message ID 20250126105932.63762-1-purvayeshi550@gmail.com
State New
Headers show
Series selftests/vDSO: Fix undefined CLONE_NEWTIME by including | expand

Commit Message

Purva Yeshi Jan. 26, 2025, 10:59 a.m. UTC
Fix the build failure caused by the undefined `CLONE_NEWTIME`.  
Include the `linux/sched.h` header file where the function is defined to 
ensure successful compilation of the selftests.

Signed-off-by: Purva Yeshi <purvayeshi550@gmail.com>
---
 tools/testing/selftests/vDSO/vdso_test_getrandom.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Purva Yeshi Jan. 29, 2025, 6:17 p.m. UTC | #1
On 27/01/25 13:32, Christophe Leroy wrote:
> 
> 
> Le 26/01/2025 à 11:59, Purva Yeshi a écrit :
>> [Vous ne recevez pas souvent de courriers de purvayeshi550@gmail.com. 
>> Découvrez pourquoi ceci est important à 
>> https://aka.ms/LearnAboutSenderIdentification ]
>>
>> Fix the build failure caused by the undefined `CLONE_NEWTIME`.
>> Include the `linux/sched.h` header file where the function is defined to
>> ensure successful compilation of the selftests.
> 
> This is supposed to be already fixed by commit 34d5b600172b ("selftests: 
> vDSO: Explicitly include sched.h")
> 
> Can you explain what is the exact problem still ? And why linux/sched.h ?

Yes, I noticed that sched.h is already included, but I still encountered 
an "undeclared CLONE_NEWTIME" error during compilation.

Error I got:
CC       vdso_test_getrandom
vdso_test_getrandom.c: In function ‘kselftest’:
vdso_test_getrandom.c:257:29: error: ‘CLONE_NEWTIME’ undeclared (first 
use in this function); did you mean ‘CLONE_NEWPID’?
   257 |         ksft_assert(unshare(CLONE_NEWTIME) == 0);
       |                             ^~~~~
vdso_test_getrandom.c:47:20: note: in definition of macro ‘ksft_assert’
    47 |         do { if (!(condition)) ksft_exit_fail_msg("Assertion 
failed: %s\n", #condition); } while (0)
       |                    ^~~~~
vdso_test_getrandom.c:257:29: note: each undeclared identifier is 
reported only once for each function it appears in
   257 |         ksft_assert(unshare(CLONE_NEWTIME) == 0);
       |                             ^~~~~
vdso_test_getrandom.c:47:20: note: in definition of macro ‘ksft_assert’
    47 |         do { if (!(condition)) ksft_exit_fail_msg("Assertion 
failed: %s\n", #condition); } while (0)
       |                    ^~~~~
make[1]: * [../lib.mk:222: 
/home/purva/linux/tools/testing/selftests/vDSO/vdso_test_getrandom] Error 1
make[1]: Leaving directory '/home/purva/linux/tools/testing/selftests/vDSO'

I found that CLONE_NEWTIME is declared in both sched.h and 
linux/sched.h. Since sched.h was already included, it was surprising 
that the error persisted. Adding linux/sched.h as a header resolved the 
issue, and the selftests compiled successfully after that.

> 
> Did you properly build kernel headers before building selftests ?

Yes, I ensured that I properly built the kernel headers before building 
the selftests by following the documentation provided here 
(https://docs.kernel.org/dev-tools/kselftest.html#running-the-selftests-hotplug-tests-are-run-in-limited-mode). 
I used the 'make headers' command as part of the process.

> 
> 
>>
>> Signed-off-by: Purva Yeshi <purvayeshi550@gmail.com>
>> ---
>>   tools/testing/selftests/vDSO/vdso_test_getrandom.c | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/tools/testing/selftests/vDSO/vdso_test_getrandom.c 
>> b/tools/testing/selftests/vDSO/vdso_test_getrandom.c
>> index 95057f7567db..b2c9cf15878b 100644
>> --- a/tools/testing/selftests/vDSO/vdso_test_getrandom.c
>> +++ b/tools/testing/selftests/vDSO/vdso_test_getrandom.c
>> @@ -29,6 +29,8 @@
>>   #include "vdso_config.h"
>>   #include "vdso_call.h"
>>
>> +#include <linux/sched.h>
>> +
>>   #ifndef timespecsub
>>   #define        timespecsub(tsp, usp, 
>> vsp)                                      \
>>          do 
>> {                                                            \
>> -- 
>> 2.34.1
>>
> 

Let me know if there’s anything further you'd like me to verify or adjust.

Thank you for your time and feedback!

Best regards,
Purva Yeshi
Purva Yeshi Jan. 29, 2025, 6:24 p.m. UTC | #2
On 27/01/25 13:32, Christophe Leroy wrote:
>
>
> Le 26/01/2025 à 11:59, Purva Yeshi a écrit :
>> [Vous ne recevez pas souvent de courriers de purvayeshi550@gmail.com.
>> Découvrez pourquoi ceci est important à
>> https://aka.ms/LearnAboutSenderIdentification ]
>>
>> Fix the build failure caused by the undefined `CLONE_NEWTIME`.
>> Include the `linux/sched.h` header file where the function is defined to
>> ensure successful compilation of the selftests.
>
> This is supposed to be already fixed by commit 34d5b600172b ("selftests:
> vDSO: Explicitly include sched.h")
>
> Can you explain what is the exact problem still ? And why linux/sched.h ?

Yes, I noticed that sched.h is already included, but I still encountered
an "undeclared CLONE_NEWTIME" error during compilation.

Error I got:
CC       vdso_test_getrandom
vdso_test_getrandom.c: In function ‘kselftest’:
vdso_test_getrandom.c:257:29: error: ‘CLONE_NEWTIME’ undeclared (first
use in this function); did you mean ‘CLONE_NEWPID’?
   257 |         ksft_assert(unshare(CLONE_NEWTIME) == 0);
       |                             ^~~~~
vdso_test_getrandom.c:47:20: note: in definition of macro ‘ksft_assert’
    47 |         do { if (!(condition)) ksft_exit_fail_msg("Assertion
failed: %s\n", #condition); } while (0)
       |                    ^~~~~
vdso_test_getrandom.c:257:29: note: each undeclared identifier is
reported only once for each function it appears in
   257 |         ksft_assert(unshare(CLONE_NEWTIME) == 0);
       |                             ^~~~~
vdso_test_getrandom.c:47:20: note: in definition of macro ‘ksft_assert’
    47 |         do { if (!(condition)) ksft_exit_fail_msg("Assertion
failed: %s\n", #condition); } while (0)
       |                    ^~~~~
make[1]: * [../lib.mk:222:
/home/purva/linux/tools/testing/selftests/vDSO/vdso_test_getrandom] Error 1
make[1]: Leaving directory '/home/purva/linux/tools/testing/selftests/vDSO'


>
> Did you properly build kernel headers before building selftests ?
>
>
>>
>> Signed-off-by: Purva Yeshi <purvayeshi550@gmail.com>
>> ---
>>   tools/testing/selftests/vDSO/vdso_test_getrandom.c | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/tools/testing/selftests/vDSO/vdso_test_getrandom.c
>> b/tools/testing/selftests/vDSO/vdso_test_getrandom.c
>> index 95057f7567db..b2c9cf15878b 100644
>> --- a/tools/testing/selftests/vDSO/vdso_test_getrandom.c
>> +++ b/tools/testing/selftests/vDSO/vdso_test_getrandom.c
>> @@ -29,6 +29,8 @@
>>   #include "vdso_config.h"
>>   #include "vdso_call.h"
>>
>> +#include <linux/sched.h>
>> +
>>   #ifndef timespecsub
>>   #define        timespecsub(tsp, usp,
>> vsp)                                      \
>>          do
>> {                                                            \
>> --
>> 2.34.1
>>
>
Christophe Leroy Jan. 30, 2025, 7:02 a.m. UTC | #3
Le 29/01/2025 à 19:17, Purva Yeshi a écrit :
> 
> On 27/01/25 13:32, Christophe Leroy wrote:
>>
>>
>> Le 26/01/2025 à 11:59, Purva Yeshi a écrit :
>>> [Vous ne recevez pas souvent de courriers de purvayeshi550@gmail.com.
>>> Découvrez pourquoi ceci est important à
>>> https://aka.ms/LearnAboutSenderIdentification ]
>>>
>>> Fix the build failure caused by the undefined `CLONE_NEWTIME`.
>>> Include the `linux/sched.h` header file where the function is defined to
>>> ensure successful compilation of the selftests.
>>
>> This is supposed to be already fixed by commit 34d5b600172b ("selftests:
>> vDSO: Explicitly include sched.h")
>>
>> Can you explain what is the exact problem still ? And why linux/sched.h ?
> 
> Yes, I noticed that sched.h is already included, but I still encountered
> an "undeclared CLONE_NEWTIME" error during compilation.

Must be that your sched.h is not up-to-date I guess. On my side I have:

/usr/include/linux/sched.h:#define CLONE_NEWTIME	0x00000080	/* New time 
namespace */
/usr/include/bits/sched.h:#define CLONE_NEWTIME	0x00000080      /* New 
time namespace */

And

/usr/include/sched.h:#include <bits/sched.h>


> 
> Error I got:
> CC       vdso_test_getrandom
> vdso_test_getrandom.c: In function ‘kselftest’:
> vdso_test_getrandom.c:257:29: error: ‘CLONE_NEWTIME’ undeclared (first
> use in this function); did you mean ‘CLONE_NEWPID’?
>    257 |         ksft_assert(unshare(CLONE_NEWTIME) == 0);
>        |                             ^~~~~
> vdso_test_getrandom.c:47:20: note: in definition of macro ‘ksft_assert’
>     47 |         do { if (!(condition)) ksft_exit_fail_msg("Assertion
> failed: %s\n", #condition); } while (0)
>        |                    ^~~~~
> vdso_test_getrandom.c:257:29: note: each undeclared identifier is
> reported only once for each function it appears in
>    257 |         ksft_assert(unshare(CLONE_NEWTIME) == 0);
>        |                             ^~~~~
> vdso_test_getrandom.c:47:20: note: in definition of macro ‘ksft_assert’
>     47 |         do { if (!(condition)) ksft_exit_fail_msg("Assertion
> failed: %s\n", #condition); } while (0)
>        |                    ^~~~~
> make[1]: * [../lib.mk:222:
> /home/purva/linux/tools/testing/selftests/vDSO/vdso_test_getrandom] Error 1
> make[1]: Leaving directory '/home/purva/linux/tools/testing/selftests/vDSO'
> 
> I found that CLONE_NEWTIME is declared in both sched.h and
> linux/sched.h. Since sched.h was already included, it was surprising
> that the error persisted. Adding linux/sched.h as a header resolved the
> issue, and the selftests compiled successfully after that.

Can you recheck that the sched.h that contains CLONE_NEWTIME is really 
the one used by your compiler ?

> 
>>
>> Did you properly build kernel headers before building selftests ?
> 
> Yes, I ensured that I properly built the kernel headers before building
> the selftests by following the documentation provided here


At the end we should probably wonder if we want selftests to build with 
old libc's that do not include latest defines. If we want to, then you 
should probably replace sched.h by linux/sched.h . I'm not sure about 
what to do really.
Purva Yeshi Feb. 1, 2025, 11:20 a.m. UTC | #4
On 30/01/25 12:32, Christophe Leroy wrote:
> 
> 
> Le 29/01/2025 à 19:17, Purva Yeshi a écrit :
>>
>> On 27/01/25 13:32, Christophe Leroy wrote:
>>>
>>>
>>> Le 26/01/2025 à 11:59, Purva Yeshi a écrit :
>>>> [Vous ne recevez pas souvent de courriers de purvayeshi550@gmail.com.
>>>> Découvrez pourquoi ceci est important à
>>>> https://aka.ms/LearnAboutSenderIdentification ]
>>>>
>>>> Fix the build failure caused by the undefined `CLONE_NEWTIME`.
>>>> Include the `linux/sched.h` header file where the function is 
>>>> defined to
>>>> ensure successful compilation of the selftests.
>>>
>>> This is supposed to be already fixed by commit 34d5b600172b ("selftests:
>>> vDSO: Explicitly include sched.h")
>>>
>>> Can you explain what is the exact problem still ? And why 
>>> linux/sched.h ?
>>
>> Yes, I noticed that sched.h is already included, but I still encountered
>> an "undeclared CLONE_NEWTIME" error during compilation.
> 
> Must be that your sched.h is not up-to-date I guess. On my side I have:
> 
> /usr/include/linux/sched.h:#define CLONE_NEWTIME    0x00000080    /* New 
> time namespace */
> /usr/include/bits/sched.h:#define CLONE_NEWTIME    0x00000080      /* 
> New time namespace */
> 
> And
> 
> /usr/include/sched.h:#include <bits/sched.h>
> 
> 
>>
>> Error I got:
>> CC       vdso_test_getrandom
>> vdso_test_getrandom.c: In function ‘kselftest’:
>> vdso_test_getrandom.c:257:29: error: ‘CLONE_NEWTIME’ undeclared (first
>> use in this function); did you mean ‘CLONE_NEWPID’?
>>    257 |         ksft_assert(unshare(CLONE_NEWTIME) == 0);
>>        |                             ^~~~~
>> vdso_test_getrandom.c:47:20: note: in definition of macro ‘ksft_assert’
>>     47 |         do { if (!(condition)) ksft_exit_fail_msg("Assertion
>> failed: %s\n", #condition); } while (0)
>>        |                    ^~~~~
>> vdso_test_getrandom.c:257:29: note: each undeclared identifier is
>> reported only once for each function it appears in
>>    257 |         ksft_assert(unshare(CLONE_NEWTIME) == 0);
>>        |                             ^~~~~
>> vdso_test_getrandom.c:47:20: note: in definition of macro ‘ksft_assert’
>>     47 |         do { if (!(condition)) ksft_exit_fail_msg("Assertion
>> failed: %s\n", #condition); } while (0)
>>        |                    ^~~~~
>> make[1]: * [../lib.mk:222:
>> /home/purva/linux/tools/testing/selftests/vDSO/vdso_test_getrandom] 
>> Error 1
>> make[1]: Leaving directory 
>> '/home/purva/linux/tools/testing/selftests/vDSO'
>>
>> I found that CLONE_NEWTIME is declared in both sched.h and
>> linux/sched.h. Since sched.h was already included, it was surprising
>> that the error persisted. Adding linux/sched.h as a header resolved the
>> issue, and the selftests compiled successfully after that.
> 
> Can you recheck that the sched.h that contains CLONE_NEWTIME is really 
> the one used by your compiler ?

I rechecked the header files on my system and got the following output:

purva@purva-IdeaPad-Gaming-3-15IHU6:~/linux$ grep -r "CLONE_NEWTIME" 
/usr/include/linux/sched.h /usr/include/bits/sched.h /usr/include/sched.h
/usr/include/linux/sched.h:#define CLONE_NEWTIME	0x00000080	/* New time 
namespace */

This shows that the definition of CLONE_NEWTIME exists only in 
/usr/include/linux/sched.h

> 
>>
>>>
>>> Did you properly build kernel headers before building selftests ?
>>
>> Yes, I ensured that I properly built the kernel headers before building
>> the selftests by following the documentation provided here
> 
> 
> At the end we should probably wonder if we want selftests to build with 
> old libc's that do not include latest defines. If we want to, then you 
> should probably replace sched.h by linux/sched.h . I'm not sure about 
> what to do really.

Since sched.h from libc may not define CLONE_NEWTIME on older systems, 
should we explicitly include linux/sched.h to ensure compatibility with 
older libc versions?

Thank you for your time and feedback!

Best regards,
Purva Yeshi
diff mbox series

Patch

diff --git a/tools/testing/selftests/vDSO/vdso_test_getrandom.c b/tools/testing/selftests/vDSO/vdso_test_getrandom.c
index 95057f7567db..b2c9cf15878b 100644
--- a/tools/testing/selftests/vDSO/vdso_test_getrandom.c
+++ b/tools/testing/selftests/vDSO/vdso_test_getrandom.c
@@ -29,6 +29,8 @@ 
 #include "vdso_config.h"
 #include "vdso_call.h"
 
+#include <linux/sched.h>
+
 #ifndef timespecsub
 #define	timespecsub(tsp, usp, vsp)					\
 	do {								\