[6/7] linux: Refactor sched_getcpu in terms of getcpu
Commit Message
Checked on x86_64-linux-gnu.
---
sysdeps/unix/sysv/linux/sched_getcpu.c | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
Comments
* Adhemerval Zanella:
> diff --git a/sysdeps/unix/sysv/linux/sched_getcpu.c b/sysdeps/unix/sysv/linux/sched_getcpu.c
> index 65dd9fdda7..3646c8b713 100644
> --- a/sysdeps/unix/sysv/linux/sched_getcpu.c
> +++ b/sysdeps/unix/sysv/linux/sched_getcpu.c
> @@ -17,23 +17,11 @@
>
> #include <errno.h>
> #include <sched.h>
> -#include <sysdep.h>
> -
> -#ifdef HAVE_GETCPU_VSYSCALL
> -# define HAVE_VSYSCALL
> -#endif
> -#include <sysdep-vdso.h>
>
> int
> sched_getcpu (void)
> {
> -#ifdef __NR_getcpu
> unsigned int cpu;
> - int r = INLINE_VSYSCALL (getcpu, 3, &cpu, NULL, NULL);
> -
> + int r = __getcpu (&cpu, NULL);
> return r == -1 ? r : cpu;
> -#else
> - __set_errno (ENOSYS);
> - return -1;
> -#endif
> }
I wonder if the current state is a useful performance optimization.
On 01/12/2019 11:22, Florian Weimer wrote:
> * Adhemerval Zanella:
>
>> diff --git a/sysdeps/unix/sysv/linux/sched_getcpu.c b/sysdeps/unix/sysv/linux/sched_getcpu.c
>> index 65dd9fdda7..3646c8b713 100644
>> --- a/sysdeps/unix/sysv/linux/sched_getcpu.c
>> +++ b/sysdeps/unix/sysv/linux/sched_getcpu.c
>> @@ -17,23 +17,11 @@
>>
>> #include <errno.h>
>> #include <sched.h>
>> -#include <sysdep.h>
>> -
>> -#ifdef HAVE_GETCPU_VSYSCALL
>> -# define HAVE_VSYSCALL
>> -#endif
>> -#include <sysdep-vdso.h>
>>
>> int
>> sched_getcpu (void)
>> {
>> -#ifdef __NR_getcpu
>> unsigned int cpu;
>> - int r = INLINE_VSYSCALL (getcpu, 3, &cpu, NULL, NULL);
>> -
>> + int r = __getcpu (&cpu, NULL);
>> return r == -1 ? r : cpu;
>> -#else
>> - __set_errno (ENOSYS);
>> - return -1;
>> -#endif
>> }
>
> I wonder if the current state is a useful performance optimization.
>
I thought about that, another option would be to create an internal
header with a static inline implementation where both sched_getcpu
and getcpu will use and thus removing the function call overhead
while continuing to provide only one code that issue the vDSO/syscall.
@@ -17,23 +17,11 @@
#include <errno.h>
#include <sched.h>
-#include <sysdep.h>
-
-#ifdef HAVE_GETCPU_VSYSCALL
-# define HAVE_VSYSCALL
-#endif
-#include <sysdep-vdso.h>
int
sched_getcpu (void)
{
-#ifdef __NR_getcpu
unsigned int cpu;
- int r = INLINE_VSYSCALL (getcpu, 3, &cpu, NULL, NULL);
-
+ int r = __getcpu (&cpu, NULL);
return r == -1 ? r : cpu;
-#else
- __set_errno (ENOSYS);
- return -1;
-#endif
}