Re: [PATCH 1/1] cacheflush01: Rewrite into new API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Petr,

On 10/2/20 1:24 PM, Petr Vorel wrote:
This syscall is currently (v5.9) supported on these architectures:
arc, csky, mips, m68k, nds32, sh

constants are missing for m68k, not sure if the testcase is valid for it.
Untested.

Test for __LTP__NR_INVALID_SYSCALL saves adding autotools check for
<asm/cachectl.h>.

Signed-off-by: Petr Vorel <petr.vorel@xxxxxxxxx>
---
Hi,

FYI: I was going to ask for removal of this test, but all these archs are
still supported. This test compiles on all archs now, but I haven't run
it (I don't have access to none of these archs, not sure if LTP is even
tested on these archs).

LTP is pretty much regularly tested on ARC and yes we do support/need the
cachflush syscall test.

Thx,
-Vineet


Kind regards,
Petr

 .../kernel/syscalls/cacheflush/cacheflush01.c | 173 ++++--------------
 1 file changed, 40 insertions(+), 133 deletions(-)

diff --git a/testcases/kernel/syscalls/cacheflush/cacheflush01.c b/testcases/kernel/syscalls/cacheflush/cacheflush01.c
index 29cf2014a..85125f2ee 100644
--- a/testcases/kernel/syscalls/cacheflush/cacheflush01.c
+++ b/testcases/kernel/syscalls/cacheflush/cacheflush01.c
@@ -1,157 +1,64 @@
-/******************************************************************************/
-/* Copyright (c) Maxin John <maxin.john@xxxxxxxxx>, 2009                      */
-/* LKML Reference: https://urldefense.com/v3/__http://lkml.org/lkml/2009/4/9/203__;!!A4F2R9G_pg!MvWpmrCHRK36ROXcP8-qw3B1lCwih8RxIojwKW11TJz0iL7EvnloBIHwI5zr8m1c$                           */
-/* 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:        cacheflush01.c                                                */
-/*                                                                            */
-/* Description: The cacheflush_check() syscall                     	      */
-/*		Tests EINVAL error of cacheflush system call.		      */
-/* 		Its expected behaviour is cacheflush() should return -EINVAL  */
-/*		when cache parameter is not one of ICACHE, DCACHE, or BCACHE. */
-/*                                                                            */
-/* Usage:  <for command-line>                                                 */
-/* cacheflush01 [-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:   cacheflush01                                                  */
-/******************************************************************************/
+// SPDX-License-Identifier: GPL-2.0-or-later
 
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include "test.h"
+#include "tst_test.h"
 #include "lapi/syscalls.h"
 
 #if __NR_cacheflush != __LTP__NR_INVALID_SYSCALL
+
 #include <asm/cachectl.h>
-#else
+
+/*
+ * m68k does not have these constants
+ */
+
 #ifndef   ICACHE
-#define   ICACHE   (1<<0)	/* flush instruction cache        */
+# define   ICACHE   (1<<0)
 #endif
+
 #ifndef   DCACHE
-#define   DCACHE   (1<<1)	/* writeback and flush data cache */
+# define   DCACHE   (1<<1)
 #endif
+
 #ifndef   BCACHE
-#define   BCACHE   (ICACHE|DCACHE)	/* flush both caches              */
-#endif
+# define   BCACHE   (ICACHE|DCACHE)
 #endif
 
-char *TCID = "cacheflush01";
-int TST_TOTAL = 1;
+#define CACHE_DESC(x) .cache = x, .desc = #x
 
-/* Extern Global Functions */
-/******************************************************************************/
-/*                                                                            */
-/* Function:    cleanup                                                       */
-/*                                                                            */
-/* Description: Performs all one time clean up for this test on successful    */
-/*              completion,  premature exit or  failure. Closes all temporary */
-/*              files, removes all temporary directories exits the test with  */
-/*              appropriate return code by calling tst_exit() function.       */
-/*                                                                            */
-/* Input:       None.                                                         */
-/*                                                                            */
-/* Output:      None.                                                         */
-/*                                                                            */
-/* Return:      On failure - Exits calling tst_exit(). Non '0' return code.   */
-/*              On success - Exits calling tst_exit(). With '0' return code.  */
-/*                                                                            */
-/******************************************************************************/
-void cleanup(void)
-{
+static struct test_case_t {
+	int cache;
+	const char *desc;
+} test_cases[] = {
+	{ CACHE_DESC(ICACHE) },
+	{ CACHE_DESC(DCACHE) },
+	{ CACHE_DESC(BCACHE) },
+};
 
-	tst_rmdir();
-}
+static char *addr;
 
-/* Local  Functions */
-/******************************************************************************/
-/*                                                                            */
-/* Function:    setup                                                         */
-/*                                                                            */
-/* Description: Performs all one time setup for this test. This function is   */
-/*              typically used to capture signals, create temporary dirs      */
-/*              and temporary files that may be used in the course of this    */
-/*              test.                                                         */
-/*                                                                            */
-/* Input:       None.                                                         */
-/*                                                                            */
-/* Output:      None.                                                         */
-/*                                                                            */
-/* Return:      On failure - Exits by calling cleanup().                      */
-/*              On success - returns 0.                                       */
-/*                                                                            */
-/******************************************************************************/
-void setup(void)
+static void setup(void)
 {
-	/* Capture signals if any */
-	/* Create temporary directories */
-	TEST_PAUSE;
-	tst_tmpdir();
+	addr = SAFE_MALLOC(getpagesize());
 }
 
-int main(int ac, char **av)
+static void test_cacheflush(unsigned int i)
 {
+	struct test_case_t *tc = &test_cases[i];
 
-	char *addr = NULL;
-
-	tst_parse_opts(ac, av, NULL, NULL);
-
-	setup();
-
-	tst_count = 0;
-	/* Create some user address range */
-	addr = malloc(getpagesize());
-	if (addr == NULL) {
-		tst_brkm(TFAIL | TTERRNO, cleanup, "malloc failed");
-	}
-
-	/* Invokes cacheflush() with proper parameters */
-	TEST(ltp_syscall(__NR_cacheflush, addr, getpagesize(), ICACHE));
-	if (TEST_RETURN == 0) {
-		tst_resm(TPASS, "passed with no errno");
-	} else {
-		tst_resm(TFAIL, "failed with unexpected errno");
-	}
-
-	TEST(ltp_syscall(__NR_cacheflush, addr, getpagesize(), DCACHE));
-	if (TEST_RETURN == 0) {
-		tst_resm(TPASS, "passed with no errno");
+	TEST(tst_syscall(__NR_cacheflush, addr, getpagesize(), tc->cache));
+	if (TST_RET == 0) {
+		tst_res(TPASS, "%s passed", tc->desc);
 	} else {
-		tst_resm(TFAIL, "failed with unexpected errno");
+		tst_res(TFAIL | TTERRNO, "%s failed", tc->desc);
 	}
+}
 
-	TEST(ltp_syscall(__NR_cacheflush, addr, getpagesize(), BCACHE));
-	if (TEST_RETURN == 0) {
-		tst_resm(TPASS, "passed with no errno");
-	} else {
-		tst_resm(TFAIL, "failed with unexpected errno");
-	}
+static struct tst_test test = {
+	.setup = setup,
+	.test = test_cacheflush,
+	.tcnt = ARRAY_SIZE(test_cases),
+};
 
-	cleanup();
-	tst_exit();
-}
+#else
+	TST_TEST_TCONF("system doesn't support cacheflush()");
+#endif





[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux