| From a3cbee31daae2466bc8dcac36b33a01352693346 Mon Sep 17 00:00:00 2001 |
| From: Khem Raj <raj.khem@gmail.com> |
| Date: Thu, 7 Jan 2016 19:40:08 +0000 |
| Subject: [PATCH 01/26] Check if __GLIBC_PREREQ is defined before using it |
| |
| __GLIBC_PREREQ is specific to glibc so it should be checked if it is |
| defined or not. |
| |
| Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| |
| --- |
| testcases/kernel/syscalls/accept4/accept4_01.c | 9 ++++- |
| testcases/kernel/syscalls/getcpu/getcpu01.c | 40 +++++++++++++++++++++- |
| .../sched_getaffinity/sched_getaffinity01.c | 26 ++++++++++++++ |
| 3 files changed, 73 insertions(+), 2 deletions(-) |
| |
| diff --git a/testcases/kernel/syscalls/accept4/accept4_01.c b/testcases/kernel/syscalls/accept4/accept4_01.c |
| index 6072bfa..2b090cb 100644 |
| --- a/testcases/kernel/syscalls/accept4/accept4_01.c |
| +++ b/testcases/kernel/syscalls/accept4/accept4_01.c |
| @@ -64,6 +64,7 @@ static void cleanup(void) |
| tst_rmdir(); |
| } |
| |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if !(__GLIBC_PREREQ(2, 10)) |
| static int |
| accept4_01(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags) |
| @@ -82,7 +83,6 @@ accept4_01(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags) |
| } |
| tst_resm(TINFO, "\n"); |
| #endif |
| - |
| #if USE_SOCKETCALL |
| long args[6]; |
| |
| @@ -97,6 +97,7 @@ accept4_01(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags) |
| #endif |
| } |
| #endif |
| +#endif |
| |
| static void |
| do_test(int lfd, struct sockaddr_in *conn_addr, |
| @@ -119,9 +120,15 @@ do_test(int lfd, struct sockaddr_in *conn_addr, |
| die("Connect Error"); |
| |
| addrlen = sizeof(struct sockaddr_in); |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if !(__GLIBC_PREREQ(2, 10)) |
| acceptfd = accept4_01(lfd, (struct sockaddr *)&claddr, &addrlen, |
| closeonexec_flag | nonblock_flag); |
| + |
| +#else |
| + acceptfd = accept4(lfd, (struct sockaddr *)&claddr, &addrlen, |
| + closeonexec_flag | nonblock_flag); |
| +#endif |
| #else |
| acceptfd = accept4(lfd, (struct sockaddr *)&claddr, &addrlen, |
| closeonexec_flag | nonblock_flag); |
| diff --git a/testcases/kernel/syscalls/getcpu/getcpu01.c b/testcases/kernel/syscalls/getcpu/getcpu01.c |
| index c927512..921b107 100644 |
| --- a/testcases/kernel/syscalls/getcpu/getcpu01.c |
| +++ b/testcases/kernel/syscalls/getcpu/getcpu01.c |
| @@ -62,6 +62,7 @@ |
| #include <dirent.h> |
| |
| #if defined(__i386__) || defined(__x86_64__) |
| +#if defined(__GLIBC__) |
| #if __GLIBC_PREREQ(2,6) |
| #if defined(__x86_64__) |
| #include <utmpx.h> |
| @@ -75,10 +76,17 @@ int sys_support = 0; |
| #else |
| int sys_support = 0; |
| #endif |
| +#else |
| +int sys_support = 0; |
| +#endif |
| |
| +#if defined(__GLIBC__) |
| #if !(__GLIBC_PREREQ(2, 7)) |
| #define CPU_FREE(ptr) free(ptr) |
| #endif |
| +#else |
| +#define CPU_FREE(ptr) free(ptr) |
| +#endif |
| |
| void cleanup(void); |
| void setup(void); |
| @@ -164,9 +172,14 @@ static inline int getcpu(unsigned *cpu_id, unsigned *node_id, |
| { |
| #if defined(__i386__) |
| return syscall(318, cpu_id, node_id, cache_struct); |
| -#elif __GLIBC_PREREQ(2,6) |
| +#if defined(__GLIBC__) |
| +#if __GLIBC_PREREQ(2,6) |
| + *cpu_id = sched_getcpu(); |
| +#endif |
| +#else |
| *cpu_id = sched_getcpu(); |
| #endif |
| +#endif |
| return 0; |
| } |
| |
| @@ -191,15 +204,20 @@ unsigned int set_cpu_affinity(void) |
| cpu_set_t *set; |
| size_t size; |
| int nrcpus = 1024; |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if __GLIBC_PREREQ(2, 7) |
| realloc: |
| set = CPU_ALLOC(nrcpus); |
| #else |
| set = malloc(sizeof(cpu_set_t)); |
| #endif |
| +#else |
| + set = malloc(sizeof(cpu_set_t)); |
| +#endif |
| if (set == NULL) { |
| tst_brkm(TFAIL, NULL, "CPU_ALLOC:errno:%d", errno); |
| } |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if __GLIBC_PREREQ(2, 7) |
| size = CPU_ALLOC_SIZE(nrcpus); |
| CPU_ZERO_S(size, set); |
| @@ -207,8 +225,13 @@ realloc: |
| size = sizeof(cpu_set_t); |
| CPU_ZERO(set); |
| #endif |
| +#else |
| + size = sizeof(cpu_set_t); |
| + CPU_ZERO(set); |
| +#endif |
| if (sched_getaffinity(0, size, set) < 0) { |
| CPU_FREE(set); |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if __GLIBC_PREREQ(2, 7) |
| if (errno == EINVAL && nrcpus < (1024 << 8)) { |
| nrcpus = nrcpus << 2; |
| @@ -220,10 +243,17 @@ realloc: |
| "NR_CPUS of the kernel is more than 1024, so we'd better use a newer glibc(>= 2.7)"); |
| else |
| #endif |
| +#else |
| + if (errno == EINVAL) |
| + tst_resm(TFAIL, |
| + "NR_CPUS of the kernel is more than 1024, so we'd better use a newer glibc(>= 2.7)"); |
| + else |
| +#endif |
| tst_resm(TFAIL, "sched_getaffinity:errno:%d", errno); |
| tst_exit(); |
| } |
| cpu_max = max_cpuid(size, set); |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if __GLIBC_PREREQ(2, 7) |
| CPU_ZERO_S(size, set); |
| CPU_SET_S(cpu_max, size, set); |
| @@ -231,6 +261,10 @@ realloc: |
| CPU_ZERO(set); |
| CPU_SET(cpu_max, set); |
| #endif |
| +#else |
| + CPU_ZERO(set); |
| + CPU_SET(cpu_max, set); |
| +#endif |
| if (sched_setaffinity(0, size, set) < 0) { |
| CPU_FREE(set); |
| tst_brkm(TFAIL, NULL, "sched_setaffinity:errno:%d", errno); |
| @@ -247,11 +281,15 @@ unsigned int max_cpuid(size_t size, cpu_set_t * set) |
| { |
| unsigned int index, max = 0; |
| for (index = 0; index < size * BITS_PER_BYTE; index++) |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if __GLIBC_PREREQ(2, 7) |
| if (CPU_ISSET_S(index, size, set)) |
| #else |
| if (CPU_ISSET(index, set)) |
| #endif |
| +#else |
| + if (CPU_ISSET(index, set)) |
| +#endif |
| max = index; |
| return max; |
| } |
| diff --git a/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c b/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c |
| index 9d6a81a..4ed13b2 100644 |
| --- a/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c |
| +++ b/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c |
| @@ -66,9 +66,11 @@ do { \ |
| tst_resm((TEST_RETURN == -1 ? TPASS : TFAIL) | TTERRNO, #t); \ |
| } while (0) |
| |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if !(__GLIBC_PREREQ(2, 7)) |
| #define CPU_FREE(ptr) free(ptr) |
| #endif |
| +#endif |
| |
| int main(int ac, char **av) |
| { |
| @@ -95,14 +97,19 @@ static void do_test(void) |
| pid_t unused_pid; |
| unsigned len; |
| |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if __GLIBC_PREREQ(2, 7) |
| realloc: |
| mask = CPU_ALLOC(nrcpus); |
| #else |
| mask = malloc(sizeof(cpu_set_t)); |
| #endif |
| +#else |
| + mask = malloc(sizeof(cpu_set_t)); |
| +#endif |
| if (mask == NULL) |
| tst_brkm(TFAIL | TTERRNO, cleanup, "fail to get enough memory"); |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if __GLIBC_PREREQ(2, 7) |
| len = CPU_ALLOC_SIZE(nrcpus); |
| CPU_ZERO_S(len, mask); |
| @@ -110,10 +117,15 @@ realloc: |
| len = sizeof(cpu_set_t); |
| CPU_ZERO(mask); |
| #endif |
| +#else |
| + len = sizeof(cpu_set_t); |
| + CPU_ZERO(mask); |
| +#endif |
| /* positive test */ |
| TEST(sched_getaffinity(0, len, mask)); |
| if (TEST_RETURN == -1) { |
| CPU_FREE(mask); |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if __GLIBC_PREREQ(2, 7) |
| if (errno == EINVAL && nrcpus < (1024 << 8)) { |
| nrcpus = nrcpus << 2; |
| @@ -125,17 +137,27 @@ realloc: |
| "newer glibc(>= 2.7)"); |
| else |
| #endif |
| +#else |
| + if (errno == EINVAL) |
| + tst_resm(TFAIL, "NR_CPUS > 1024, we'd better use a " |
| + "newer glibc(>= 2.7)"); |
| + else |
| +#endif |
| tst_resm(TFAIL | TTERRNO, "fail to get cpu affinity"); |
| cleanup(); |
| } else { |
| tst_resm(TINFO, "cpusetsize is %d", len); |
| tst_resm(TINFO, "mask.__bits[0] = %lu ", mask->__bits[0]); |
| for (i = 0; i < num; i++) { |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if __GLIBC_PREREQ(2, 7) |
| TEST(CPU_ISSET_S(i, len, mask)); |
| #else |
| TEST(CPU_ISSET(i, mask)); |
| #endif |
| +#else |
| + TEST(CPU_ISSET(i, mask)); |
| +#endif |
| if (TEST_RETURN != -1) |
| tst_resm(TPASS, "sched_getaffinity() succeed, " |
| "this process %d is running " |
| @@ -143,11 +165,15 @@ realloc: |
| } |
| } |
| |
| +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) |
| #if __GLIBC_PREREQ(2, 7) |
| CPU_ZERO_S(len, mask); |
| #else |
| CPU_ZERO(mask); |
| #endif |
| +#else |
| + CPU_ZERO(mask); |
| +#endif |
| /* negative tests */ |
| QUICK_TEST(sched_getaffinity(0, len, (cpu_set_t *) - 1)); |
| QUICK_TEST(sched_getaffinity(0, 0, mask)); |
| -- |
| 1.9.1 |
| |