286 lines
7.6 KiB
Diff
286 lines
7.6 KiB
Diff
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
|
|
|