[LTP] [PATCH v2 1/2] syscalls/sched_getaffinity: Cleanup && Convert to new API

Yang Xu xuyang2018.jy@cn.fujitsu.com
Wed Apr 17 08:05:01 CEST 2019


Convert test to new library. It also fixes a rare compile error
for getcpu01.c on some old distros that use ltp CPU_ALLOC(report
cleanup undefined error).

Signed-off-by: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
---
 include/lapi/cpuset.h                         |   4 +-
 .../sched_getaffinity/sched_getaffinity01.c   | 151 ++++--------------
 2 files changed, 32 insertions(+), 123 deletions(-)

diff --git a/include/lapi/cpuset.h b/include/lapi/cpuset.h
index b94665022..d7ca39f9f 100644
--- a/include/lapi/cpuset.h
+++ b/include/lapi/cpuset.h
@@ -35,8 +35,8 @@
 #ifndef CPU_ALLOC
 #define CPU_ALLOC(ncpus) malloc(sizeof(cpu_set_t)); \
 if (ncpus > CPU_SETSIZE) { \
-	tst_brkm(TCONF, cleanup, \
-		"Your libc does not support masks with %ld cpus", ncpus); \
+	tst_brk(TCONF, \
+		"Your libc does not support masks with %d cpus", ncpus); \
 }
 #endif
 
diff --git a/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c b/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c
index 02f04b909..1c149fe40 100644
--- a/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c
+++ b/testcases/kernel/syscalls/sched_getaffinity/sched_getaffinity01.c
@@ -1,92 +1,26 @@
-/******************************************************************************/
-/* Copyright (c) Crackerjack Project., 2007				      */
-/*									      */
-/* This program is free software;  you can redistribute it and/or modify      */
-/* it under the terms of the GNU General Public License as published by       */
-/* the Free Software Foundation; either version 2 of the License, or          */
-/* (at your option) any later version.					      */
-/*									      */
-/* This program is distributed in the hope that it will be useful,            */
-/* but WITHOUT ANY WARRANTY;  without even the implied warranty of            */
-/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See		      */
-/* the GNU General Public License for more details.			      */
-/*									      */
-/* You should have received a copy of the GNU General Public License          */
-/* along with this program;  if not, write to the Free Software		      */
-/* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    */
-/*									      */
-/******************************************************************************/
-/******************************************************************************/
-/*									      */
-/* File:        sched_getaffinity01.c					      */
-/*									      */
-/* Description: This tests the sched_getaffinity() syscall		      */
-/*									      */
-/* Usage:  <for command-line>						      */
-/* sched_getaffinity01 [-c n] [-e][-i n] [-I x] [-p x] [-t]		      */
-/*      where,  -c n : Run n copies concurrently.			      */
-/*			-e   : Turn on errno logging.			      */
-/*			-i n : Execute test n times.			      */
-/*			-I x : Execute test for x seconds.		      */
-/*			-P x : Pause for x seconds between iterations.	      */
-/*			-t   : Turn on syscall timing.			      */
-/*									      */
-/* Total Tests: 1							      */
-/*									      */
-/* Test Name:   sched_getaffinity01					      */
-/* History:     Porting from Crackerjack to LTP is done by		      */
-/*			Manas Kumar Nayak maknayak@in.ibm.com>		      */
-/******************************************************************************/
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) Crackerjack Project., 2007
+ * Description: This case tests the sched_getaffinity() syscall
+ * History:     Porting from Crackerjack to LTP is done by
+ *		 Manas Kumar Nayak maknayak@in.ibm.com>
+ */
 #define _GNU_SOURCE
-#define __USE_GNU
-#include <sys/types.h>
 #include <errno.h>
-#include <limits.h>
 #include <sched.h>
-#include <signal.h>
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <unistd.h>
-
-#include "test.h"
-#include "safe_macros.h"
-#include "lapi/syscalls.h"
-
-char *TCID = "sched_getaffinity01";
-int TST_TOTAL = 1;
-
-static long num;
-static void do_test(void);
-static void setup(void);
-static void cleanup(void);
+#include "tst_test.h"
+#include "tst_safe_macros.h"
+#include "lapi/cpuset.h"
 
 #define QUICK_TEST(t) \
 do { \
 	TEST(t); \
-	tst_resm((TEST_RETURN == -1 ? TPASS : TFAIL) | TTERRNO, #t); \
+	tst_res((TST_RET == -1 ? TPASS : TFAIL) | TTERRNO, #t); \
 } while (0)
 
-#if !(__GLIBC_PREREQ(2, 7))
-#define CPU_FREE(ptr)	free(ptr)
-#endif
-
-int main(int ac, char **av)
-{
-	int lc;
-
-	tst_parse_opts(ac, av, NULL, NULL);
-	setup();
-
-	for (lc = 0; TEST_LOOPING(lc); ++lc) {
-		tst_count = 0;
-
-		do_test();
-	}
-
-	cleanup();
-	tst_exit();
-}
+static long num;
 
 static void do_test(void)
 {
@@ -96,78 +30,53 @@ static void do_test(void)
 	pid_t unused_pid;
 	unsigned len;
 
-#if __GLIBC_PREREQ(2, 7)
 realloc:
 	mask = CPU_ALLOC(nrcpus);
-#else
-	mask = malloc(sizeof(cpu_set_t));
-#endif
-	if (mask == NULL)
-		tst_brkm(TFAIL | TTERRNO, cleanup, "fail to get enough memory");
-#if __GLIBC_PREREQ(2, 7)
+	if (!mask)
+		tst_brk(TBROK | TERRNO, "CPU_ALLOC()");
+
 	len = CPU_ALLOC_SIZE(nrcpus);
 	CPU_ZERO_S(len, mask);
-#else
-	len = sizeof(cpu_set_t);
-	CPU_ZERO(mask);
-#endif
+
 	/* positive test */
 	TEST(sched_getaffinity(0, len, mask));
-	if (TEST_RETURN == -1) {
+	if (TST_RET == -1) {
 		CPU_FREE(mask);
-#if __GLIBC_PREREQ(2, 7)
 		if (errno == EINVAL && nrcpus < (1024 << 8)) {
 			nrcpus = nrcpus << 2;
 			goto realloc;
 		}
-#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();
+		tst_res(TFAIL | TTERRNO, "fail to get cpu affinity");
 	} else {
-		tst_resm(TINFO, "cpusetsize is %d", len);
-		tst_resm(TINFO, "mask.__bits[0] = %lu ", mask->__bits[0]);
+		tst_res(TINFO, "cpusetsize is %d", len);
+		tst_res(TINFO, "mask.__bits[0] = %lu ", mask->__bits[0]);
 		for (i = 0; i < num; i++) {
-#if __GLIBC_PREREQ(2, 7)
 			TEST(CPU_ISSET_S(i, len, mask));
-#else
-			TEST(CPU_ISSET(i, mask));
-#endif
-			if (TEST_RETURN != -1)
-				tst_resm(TPASS, "sched_getaffinity() succeed, "
+			if (TST_RET != -1)
+				tst_res(TPASS, "sched_getaffinity() succeed, "
 					 "this process %d is running "
 					 "processor: %d", getpid(), i);
 		}
 	}
 
-#if __GLIBC_PREREQ(2, 7)
 	CPU_ZERO_S(len, mask);
-#else
-	CPU_ZERO(mask);
-#endif
+
 	/* negative tests */
 	QUICK_TEST(sched_getaffinity(0, len, (cpu_set_t *) - 1));
 	QUICK_TEST(sched_getaffinity(0, 0, mask));
 
-	unused_pid = tst_get_unused_pid(cleanup);
+	unused_pid = tst_get_unused_pid();
 	QUICK_TEST(sched_getaffinity(unused_pid, len, mask));
 	CPU_FREE(mask);
 }
 
 static void setup(void)
 {
-	TEST_PAUSE;
-	tst_tmpdir();
-
-	num = SAFE_SYSCONF(NULL, _SC_NPROCESSORS_CONF);
-	tst_resm(TINFO, "system has %ld processor(s).", num);
+	num = SAFE_SYSCONF(_SC_NPROCESSORS_CONF);
+	tst_res(TINFO, "system has %ld processor(s).", num);
 }
 
-static void cleanup(void)
-{
-	tst_rmdir();
-}
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = do_test,
+};
-- 
2.18.1





More information about the ltp mailing list