|
View:
New views
9 Messages
—
Rating Filter:
Alert me
|
|
|
[PATCH 03/03] Add cacheflush() syscall test to LTP [LKML Subject: cacheflush system call not returning -EINVAL]Hi John,
>cacheflush man page states that cacheflush() will set EINVAL if cache >parameter is not one of ICACHE, DCACHE, or BCACHE. >In order to confirm this behavior, I have executed the below listed >program (cacheflush_check.c) in Toshiba RBTX4937 board (MIPS) with >2.6.29.1 kernel. I picked up this test program written by you and ported the same to LTP under GPL. It would be great if you do not have any objection in contributing this test to LTP. The below patch does exactly that. Original-Author: Maxin John <maxin.john@...>, Ported-To-LTP-By: Manas K Nayak <maknayak@...>, --- --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/cacheflush01.c 1970-01-01 05:30:00.000000000 +0530 +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/cacheflush01.c 2009-04-13 17:33:00.000000000 +0530 @@ -0,0 +1,192 @@ +/******************************************************************************/ +/* Copyright (c) Maxin John <maxin.john@...>, 2009 */ +/* LKML Reference: http://lkml.org/lkml/2009/4/9/203 */ +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 */ +/******************************************************************************/ + +#include <sys/syscall.h> +#include <unistd.h> +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> + +#if defined __mips__ +#include <asm/cachectl.h> +int cacheflush(char *addr, int nbytes, int cache) +{ +Â Â Â Â return syscall(__NR_cacheflush, addr, nbytes, cache); +} +#endif /* __mips__ */ + +#ifndef ICACHE +#define ICACHE (1<<0) /* flush instruction cache */ +#endif +#ifndef DCACHE +#define DCACHE (1<<1) /* writeback and flush data cache */ +#endif +#ifndef BCACHE +#define BCACHE (ICACHE|DCACHE) /* flush both caches */ +#endif + +/* Harness Specific Incnude Files. */ +#include "test.h" +#include "usctest.h" +#include "linux_syscall_numbers.h" + +/* Extern Global Variables */ +extern int Tst_count; /* counter for tst_xxx routines. */ +extern char *TESTDIR; /* temporary dir created by tst_tmpdir() */ + +/* Global Variables */ +char *TCID = "cacheflush01"; /* Test program identifier.*/ +int testno; +int TST_TOTAL = 1; /* total number of tests in this file. */ + +#if defined __mips__ +/* 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. */ +/* */ +/******************************************************************************/ +extern void cleanup() { + /* Remove tmp dir and all files in it */ + TEST_CLEANUP; + tst_rmdir(); + + /* Exit with appropriate return code. */ + tst_exit(); +} + +/* 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() { + /* Capture signals if any */ + /* Create temporary directories */ + TEST_PAUSE; + tst_tmpdir(); +} + +int main(int ac, char **av) { + + /* cacheflush man page states that cacheflush() is only applicable to MIPS architecture */ + char *addr = NULL; + int lc; /* loop counter */ + char *msg; /* message returned from parse_opts */ + + /* parse standard options */ + if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){ + tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); + tst_exit(); + } + + setup(); + + /* Check looping state if -i option given */ + for (lc = 0; TEST_LOOPING(lc); ++lc) { + Tst_count = 0; + for (testno = 0; testno < TST_TOTAL; ++testno) { + /* Create some user address range */ + addr = malloc(getpagesize()); + if (addr == NULL) { + tst_resm(TFAIL, "%s, Malloc error errno = %d : %s",TCID, TEST_ERRNO, strerror(TEST_ERRNO)); + cleanup(); + tst_exit(); + } + + /* Invokes cacheflush() with proper parameters */ + TEST(cacheflush(addr, getpagesize(), ICACHE)); + TEST(cacheflush(addr, getpagesize(), DCACHE)); + TEST(cacheflush(addr, getpagesize(), BCACHE)); + + /* Tests whether cacheflush() returns -EINVAL */ + TEST(cacheflush(addr, getpagesize(), 0)); + if(TEST_RETURN < 0){ + if (TEST_ERRNO == EINVAL) { + tst_resm(TPASS, "%s PASS -with expected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); + cleanup(); + tst_exit(); + } else { + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); + cleanup(); + tst_exit(); + } + } + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); + cleanup(); + } + + } + tst_exit(); +} + +#else +int main(int ac, char **av) { + + tst_resm(TCONF, "is not available for this architecture"); + tst_exit(); +} +#endif --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/Makefile 1970-01-01 05:30:00.000000000 +0530 +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/Makefile 2009-04-13 17:16:11.000000000 +0530 @@ -0,0 +1,31 @@ +# +# Copyright (c) International Business Machines Corp., 2009 +# +# 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 St, Fifth Floor, Boston, MA 02110-1301 USA +# + +CFLAGS += -I../../../../include -Wall +LDLIBS += -L../../../../lib -lltp + +SRCS = $(wildcard *.c) +TARGETS = $(patsubst %.c,%,$(SRCS)) + +all: $(TARGETS) + +install: + @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done + +clean: + rm -f $(TARGETS) --- ltp-full-20090331.orig/runtest/syscalls 2009-04-13 17:43:04.000000000 +0530 +++ ltp-full-20090331/runtest/syscalls 2009-04-13 17:35:46.000000000 +0530 @@ -36,6 +36,8 @@ capget02 capget02 capset01 capset01 capset02 capset02 +cacheflush01 cacheflush01 + chdir01 chdir01 chdir01A symlink01 -T chdir01 chdir02 chdir02 --- Regards-- Manas ------------------------------------------------------------------------------ This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH 03/03] Add cacheflush() syscall test to LTP [LKML Subject: cacheflush system call not returning -EINVAL]Hi Manas,
I am very glad to know that the test program can be used in LTP for cacheflush() testing. I have no objections in contributing the same code to LTP under GPL. Warm Regards, Maxin B. John On Mon, Apr 13, 2009 at 5:57 PM, Manas K Nayak <maknayak@...> wrote: > Hi John, > >>cacheflush man page states that cacheflush() will set EINVAL if cache >>parameter is not one of ICACHE, DCACHE, or BCACHE. >>In order to confirm this behavior, I have executed the below listed >>program (cacheflush_check.c) in Toshiba RBTX4937 board (MIPS) with >>2.6.29.1 kernel. > > I picked up this test program written by you and ported the same to LTP > under GPL. It would be great if you do not have any objection in > contributing this test to LTP. The below patch does exactly that. > > Original-Author: Maxin John <maxin.john@...>, > Ported-To-LTP-By: Manas K Nayak <maknayak@...>, > --- > > --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/cacheflush01.c 1970-01-01 05:30:00.000000000 +0530 > +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/cacheflush01.c 2009-04-13 17:33:00.000000000 +0530 > @@ -0,0 +1,192 @@ > +/******************************************************************************/ > +/* Copyright (c) Maxin John <maxin.john@...>, 2009 */ > +/* LKML Reference: http://lkml.org/lkml/2009/4/9/203 */ > +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 */ > +/******************************************************************************/ > + > +#include <sys/syscall.h> > +#include <unistd.h> > +#include <stdio.h> > +#include <stdlib.h> > +#include <errno.h> > + > +#if defined __mips__ > +#include <asm/cachectl.h> > +int cacheflush(char *addr, int nbytes, int cache) > +{ > + return syscall(__NR_cacheflush, addr, nbytes, cache); > +} > +#endif /* __mips__ */ > + > +#ifndef ICACHE > +#define ICACHE (1<<0) /* flush instruction cache */ > +#endif > +#ifndef DCACHE > +#define DCACHE (1<<1) /* writeback and flush data cache */ > +#endif > +#ifndef BCACHE > +#define BCACHE (ICACHE|DCACHE) /* flush both caches */ > +#endif > + > +/* Harness Specific Incnude Files. */ > +#include "test.h" > +#include "usctest.h" > +#include "linux_syscall_numbers.h" > + > +/* Extern Global Variables */ > +extern int Tst_count; /* counter for tst_xxx routines. */ > +extern char *TESTDIR; /* temporary dir created by tst_tmpdir() */ > + > +/* Global Variables */ > +char *TCID = "cacheflush01"; /* Test program identifier.*/ > +int testno; > +int TST_TOTAL = 1; /* total number of tests in this file. */ > + > +#if defined __mips__ > +/* 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. */ > +/* */ > +/******************************************************************************/ > +extern void cleanup() { > + /* Remove tmp dir and all files in it */ > + TEST_CLEANUP; > + tst_rmdir(); > + > + /* Exit with appropriate return code. */ > + tst_exit(); > +} > + > +/* 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() { > + /* Capture signals if any */ > + /* Create temporary directories */ > + TEST_PAUSE; > + tst_tmpdir(); > +} > + > +int main(int ac, char **av) { > + > + /* cacheflush man page states that cacheflush() is only applicable to MIPS architecture */ > + char *addr = NULL; > + int lc; /* loop counter */ > + char *msg; /* message returned from parse_opts */ > + > + /* parse standard options */ > + if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){ > + tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); > + tst_exit(); > + } > + > + setup(); > + > + /* Check looping state if -i option given */ > + for (lc = 0; TEST_LOOPING(lc); ++lc) { > + Tst_count = 0; > + for (testno = 0; testno < TST_TOTAL; ++testno) { > + /* Create some user address range */ > + addr = malloc(getpagesize()); > + if (addr == NULL) { > + tst_resm(TFAIL, "%s, Malloc error errno = %d : %s",TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + tst_exit(); > + } > + > + /* Invokes cacheflush() with proper parameters */ > + TEST(cacheflush(addr, getpagesize(), ICACHE)); > + TEST(cacheflush(addr, getpagesize(), DCACHE)); > + TEST(cacheflush(addr, getpagesize(), BCACHE)); > + > + /* Tests whether cacheflush() returns -EINVAL */ > + TEST(cacheflush(addr, getpagesize(), 0)); > + if(TEST_RETURN < 0){ > + if (TEST_ERRNO == EINVAL) { > + tst_resm(TPASS, "%s PASS -with expected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + tst_exit(); > + } else { > + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + tst_exit(); > + } > + } > + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + } > + > + } > + tst_exit(); > +} > + > +#else > +int main(int ac, char **av) { > + > + tst_resm(TCONF, "is not available for this architecture"); > + tst_exit(); > +} > +#endif > --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/Makefile 1970-01-01 05:30:00.000000000 +0530 > +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/Makefile 2009-04-13 17:16:11.000000000 +0530 > @@ -0,0 +1,31 @@ > +# > +# Copyright (c) International Business Machines Corp., 2009 > +# > +# 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 St, Fifth Floor, Boston, MA 02110-1301 USA > +# > + > +CFLAGS += -I../../../../include -Wall > +LDLIBS += -L../../../../lib -lltp > + > +SRCS = $(wildcard *.c) > +TARGETS = $(patsubst %.c,%,$(SRCS)) > + > +all: $(TARGETS) > + > +install: > + @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done > + > +clean: > + rm -f $(TARGETS) > --- ltp-full-20090331.orig/runtest/syscalls 2009-04-13 17:43:04.000000000 +0530 > +++ ltp-full-20090331/runtest/syscalls 2009-04-13 17:35:46.000000000 +0530 > @@ -36,6 +36,8 @@ capget02 capget02 > capset01 capset01 > capset02 capset02 > > +cacheflush01 cacheflush01 > + > chdir01 chdir01 > chdir01A symlink01 -T chdir01 > chdir02 chdir02 > > --- > Regards-- > Manas > > ------------------------------------------------------------------------------ This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH 03/03] Add cacheflush() syscall test to LTP [LKML Subject: cacheflush system call not returning -EINVAL]Hi Maxin,
>Maxin John <maxin.john@...> wrote on 04/13/2009 06:25:54 PM: > Maxin John <maxin.john@...> > 04/13/2009 06:25 PM > > To > > Manas K Nayak/India/IBM@IBMIN > > cc > > ltp-list <ltp-list@...>, Deepakraj B > > Subject > > Re: [PATCH 03/03] Add cacheflush() syscall test to LTP [LKML > Subject: cacheflush system call not returning -EINVAL] > > Hi Manas, > > I am very glad to know that the test program can be used in LTP for > cacheflush() testing. I have no objections in contributing the same > code to LTP under GPL. Thanks a lot... :) Hi Subrata, Could you please include this test in LTP ? > > Warm Regards, > Maxin B. John > > > On Mon, Apr 13, 2009 at 5:57 PM, Manas K Nayak <maknayak@...> wrote: > > Hi John, > > > >>cacheflush man page states that cacheflush() will set EINVAL if cache > >>parameter is not one of ICACHE, DCACHE, or BCACHE. > >>In order to confirm this behavior, I have executed the below listed > >>program (cacheflush_check.c) in Toshiba RBTX4937 board (MIPS) with > >>2.6.29.1 kernel. > > > > I picked up this test program written by you and ported the same to LTP > > under GPL. It would be great if you do not have any objection in > > contributing this test to LTP. The below patch does exactly that. > > > > Original-Author: Maxin John <maxin.john@...>, > > Ported-To-LTP-By: Manas K Nayak <maknayak@...>, > > --- > > > > --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/ > cacheflush01.c 1970-01-01 05:30:00.000000000 +0530 > > +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/ > cacheflush01.c 2009-04-13 17:33:00.000000000 +0530 > > @@ -0,0 +1,192 @@ > > +/ > > > +/* Copyright (c) Maxin John <maxin.john@...>, 2009 > */ > > +/* LKML Reference: http://lkml.org/lkml/2009/4/9/203 > */ > > +/* 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., 59 Temple Place, Suite 330, Boston, MA > 02111-1307 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 > */ > > +/ > > > + > > +#include <sys/syscall.h> > > +#include <unistd.h> > > +#include <stdio.h> > > +#include <stdlib.h> > > +#include <errno.h> > > + > > +#if defined __mips__ > > +#include <asm/cachectl.h> > > +int cacheflush(char *addr, int nbytes, int cache) > > +{ > > + return syscall(__NR_cacheflush, addr, nbytes, cache); > > +} > > +#endif /* __mips__ */ > > + > > +#ifndef ICACHE > > +#define ICACHE (1<<0) /* flush instruction cache */ > > +#endif > > +#ifndef DCACHE > > +#define DCACHE (1<<1) /* writeback and flush data cache */ > > +#endif > > +#ifndef BCACHE > > +#define BCACHE (ICACHE|DCACHE) /* flush both > > +#endif > > + > > +/* Harness Specific Incnude Files. */ > > +#include "test.h" > > +#include "usctest.h" > > +#include "linux_syscall_numbers.h" > > + > > +/* Extern Global Variables */ > > +extern int Tst_count; /* counter for tst_xxx routines. */ > > +extern char *TESTDIR; /* temporary dir created by tst_tmpdir() */ > > + > > +/* Global Variables */ > > +char *TCID = "cacheflush01"; /* Test program identifier.*/ > > +int testno; > > +int TST_TOTAL = 1; /* total number of tests in > this file. */ > > + > > +#if defined __mips__ > > +/* 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. */ > > +/* > */ > > +/ > > > +extern void cleanup() { > > + /* Remove tmp dir and all files in it */ > > + TEST_CLEANUP; > > + tst_rmdir(); > > + > > + /* Exit with appropriate return code. */ > > + tst_exit(); > > +} > > + > > +/* 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() { > > + /* Capture signals if any */ > > + /* Create temporary directories */ > > + TEST_PAUSE; > > + tst_tmpdir(); > > +} > > + > > +int main(int ac, char **av) { > > + > > + /* cacheflush man page states that cacheflush() is > only applicable to MIPS architecture */ > > + char *addr = NULL; > > + int lc; /* loop counter */ > > + char *msg; /* message returned from parse_opts */ > > + > > + /* parse standard options */ > > + if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != > (char *)NULL){ > > + tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", > > + tst_exit(); > > + } > > + > > + setup(); > > + > > + /* Check looping state if -i option given */ > > + for (lc = 0; TEST_LOOPING(lc); ++lc) { > > + Tst_count = 0; > > + for (testno = 0; testno < TST_TOTAL; ++testno) { > > + /* Create some user address range */ > > + addr = malloc(getpagesize()); > > + if (addr == NULL) { > > + tst_resm(TFAIL, "%s, Malloc error errno = > %d : %s",TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > > + cleanup(); > > + tst_exit(); > > + } > > + > > + /* Invokes cacheflush() with proper parameters */ > > + TEST(cacheflush(addr, getpagesize(), ICACHE)); > > + TEST(cacheflush(addr, getpagesize(), DCACHE)); > > + TEST(cacheflush(addr, getpagesize(), BCACHE)); > > + > > + /* Tests whether cacheflush() returns -EINVAL */ > > + TEST(cacheflush(addr, getpagesize(), 0)); > > + if(TEST_RETURN < 0){ > > + if (TEST_ERRNO == EINVAL) { > > + tst_resm(TPASS, "%s PASS -with > expected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > > + cleanup(); > > + tst_exit(); > > + } else { > > + tst_resm(TFAIL, "%s FAIL -with > unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > > + cleanup(); > > + tst_exit(); > > + } > > + } > > + tst_resm(TFAIL, "%s FAIL -with unexpected > errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > > + cleanup(); > > + } > > + > > + } > > + tst_exit(); > > +} > > + > > +#else > > +int main(int ac, char **av) { > > + > > + tst_resm(TCONF, "is not available for this architecture"); > > + tst_exit(); > > +} > > +#endif > > --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/ > Makefile 1970-01-01 05:30:00.000000000 +0530 > > +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/ > Makefile 2009-04-13 17:16:11.000000000 +0530 > > @@ -0,0 +1,31 @@ > > +# > > +# Copyright (c) International Business Machines Corp., 2009 > > +# > > +# This program is free software; you can redistribute it and/or > > +# 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 St, Fifth Floor, Boston, MA > 02110-1301 USA > > +# > > + > > +CFLAGS += -I../../../../include -Wall > > +LDLIBS += -L../../../../lib -lltp > > + > > +SRCS = $(wildcard *.c) > > +TARGETS = $(patsubst %.c,%,$(SRCS)) > > + > > +all: $(TARGETS) > > + > > +install: > > + @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; > > + > > +clean: > > + rm -f $(TARGETS) > > --- ltp-full-20090331.orig/runtest/syscalls 2009-04-13 17:43: > 04.000000000 +0530 > > +++ ltp-full-20090331/runtest/syscalls 2009-04-13 17:35:46.000000000 +0530 > > @@ -36,6 +36,8 @@ capget02 capget02 > > capset01 capset01 > > capset02 capset02 > > > > +cacheflush01 cacheflush01 > > + > > chdir01 chdir01 > > chdir01A symlink01 -T chdir01 > > chdir02 chdir02 > > > > --- > > Regards-- > > Manas > > > > Regards... Manas ------------------------------------------------------------------------------ This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH 03/03] Add cacheflush() syscall test to LTP [LKML Subject: cacheflush system call not returning -EINVAL]On Mon, 2009-04-13 at 18:38 +0530, Manas K Nayak wrote:
> Hi Maxin, > > >Maxin John <maxin.john@...> wrote on 04/13/2009 06:25:54 PM: > > > Hi Manas, > > > > I am very glad to know that the test program can be used in LTP for > > cacheflush() testing. I have no objections in contributing the same > > code to LTP under GPL. > Thanks Maxim, > Thanks a lot... :) > > > Hi Subrata, > Could you please include this test in LTP ? > > Manas, I will test and let you know. Regards-- Subrata > > > > Warm Regards, > > Maxin B. John > > > > > > On Mon, Apr 13, 2009 at 5:57 PM, Manas K Nayak <maknayak@...> > wrote: > > > Hi John, > > > > > >>cacheflush man page states that cacheflush() will set EINVAL if cache > > >>parameter is not one of ICACHE, DCACHE, or BCACHE. > > >>In order to confirm this behavior, I have executed the below listed > > >>program (cacheflush_check.c) in Toshiba RBTX4937 board (MIPS) with > > >>2.6.29.1 kernel. > > > > > > I picked up this test program written by you and ported the same to LTP > > > under GPL. It would be great if you do not have any objection in > > > contributing this test to LTP. The below patch does exactly that. > > > > > > Original-Author: Maxin John <maxin.john@...>, > > > Ported-To-LTP-By: Manas K Nayak <maknayak@...>, > > > --- > > > > > > --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/ > > cacheflush01.c 1970-01-01 05:30:00.000000000 +0530 > > > +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/ > > cacheflush01.c 2009-04-13 17:33:00.000000000 +0530 > > > @@ -0,0 +1,192 @@ > > > +/ > > > ******************************************************************************/ > > > > +/* Copyright (c) Maxin John <maxin.john@...>, 2009 > > */ > > > +/* LKML Reference: http://lkml.org/lkml/2009/4/9/203 > > */ > > > +/* 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., 59 Temple Place, Suite 330, Boston, MA > > 02111-1307 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 > > */ > > > +/ > > > ******************************************************************************/ > > > > + > > > +#include <sys/syscall.h> > > > +#include <unistd.h> > > > +#include <stdio.h> > > > +#include <stdlib.h> > > > +#include <errno.h> > > > + > > > +#if defined __mips__ > > > +#include <asm/cachectl.h> > > > +int cacheflush(char *addr, int nbytes, int cache) > > > +{ > > > + return syscall(__NR_cacheflush, addr, nbytes, cache); > > > +} > > > +#endif /* __mips__ */ > > > + > > > +#ifndef ICACHE > > > +#define ICACHE (1<<0) /* flush instruction cache */ > > > +#endif > > > +#ifndef DCACHE > > > +#define DCACHE (1<<1) /* writeback and flush data cache */ > > > +#endif > > > +#ifndef BCACHE > > > +#define BCACHE (ICACHE|DCACHE) /* flush both > caches */ > > > +#endif > > > + > > > +/* Harness Specific Incnude Files. */ > > > +#include "test.h" > > > +#include "usctest.h" > > > +#include "linux_syscall_numbers.h" > > > + > > > +/* Extern Global Variables */ > > > +extern int Tst_count; /* counter for tst_xxx > routines. */ > > > +extern char *TESTDIR; /* temporary dir created by > tst_tmpdir() */ > > > + > > > +/* Global Variables */ > > > +char *TCID = "cacheflush01"; /* Test program identifier.*/ > > > +int testno; > > > +int TST_TOTAL = 1; /* total number of tests in > > this file. */ > > > + > > > +#if defined __mips__ > > > +/* 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. */ > > > +/* > > */ > > > +/ > > > ******************************************************************************/ > > > > +extern void cleanup() { > > > + /* Remove tmp dir and all files in it */ > > > + TEST_CLEANUP; > > > + tst_rmdir(); > > > + > > > + /* Exit with appropriate return code. */ > > > + tst_exit(); > > > +} > > > + > > > +/* 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() { > > > + /* Capture signals if any */ > > > + /* Create temporary directories */ > > > + TEST_PAUSE; > > > + tst_tmpdir(); > > > +} > > > + > > > +int main(int ac, char **av) { > > > + > > > + /* cacheflush man page states that cacheflush() is > > only applicable to MIPS architecture */ > > > + char *addr = NULL; > > > + int lc; /* loop counter */ > > > + char *msg; /* message returned from parse_opts */ > > > + > > > + /* parse standard options */ > > > + if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != > > (char *)NULL){ > > > + tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", > msg); > > > + tst_exit(); > > > + } > > > + > > > + setup(); > > > + > > > + /* Check looping state if -i option given */ > > > + for (lc = 0; TEST_LOOPING(lc); ++lc) { > > > + Tst_count = 0; > > > + for (testno = 0; testno < TST_TOTAL; ++testno) { > > > + /* Create some user address range */ > > > + addr = malloc(getpagesize()); > > > + if (addr == NULL) { > > > + tst_resm(TFAIL, "%s, Malloc error errno = > > %d : %s",TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > > > + cleanup(); > > > + tst_exit(); > > > + } > > > + > > > + /* Invokes cacheflush() with proper parameters */ > > > + TEST(cacheflush(addr, getpagesize(), ICACHE)); > > > + TEST(cacheflush(addr, getpagesize(), DCACHE)); > > > + TEST(cacheflush(addr, getpagesize(), BCACHE)); > > > + > > > + /* Tests whether cacheflush() returns -EINVAL */ > > > + TEST(cacheflush(addr, getpagesize(), 0)); > > > + if(TEST_RETURN < 0){ > > > + if (TEST_ERRNO == EINVAL) { > > > + tst_resm(TPASS, "%s PASS -with > > expected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > > > + cleanup(); > > > + tst_exit(); > > > + } else { > > > + tst_resm(TFAIL, "%s FAIL -with > > unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > > > + cleanup(); > > > + tst_exit(); > > > + } > > > + } > > > + tst_resm(TFAIL, "%s FAIL -with unexpected > > errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > > > + cleanup(); > > > + } > > > + > > > + } > > > + tst_exit(); > > > +} > > > + > > > +#else > > > +int main(int ac, char **av) { > > > + > > > + tst_resm(TCONF, "is not available for this architecture"); > > > + tst_exit(); > > > +} > > > +#endif > > > --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/ > > Makefile 1970-01-01 05:30:00.000000000 +0530 > > > +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/ > > Makefile 2009-04-13 17:16:11.000000000 +0530 > > > @@ -0,0 +1,31 @@ > > > +# > > > +# Copyright (c) International Business Machines Corp., 2009 > > > +# > > > +# 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 St, Fifth Floor, Boston, MA > > 02110-1301 USA > > > +# > > > + > > > +CFLAGS += -I../../../../include -Wall > > > +LDLIBS += -L../../../../lib -lltp > > > + > > > +SRCS = $(wildcard *.c) > > > +TARGETS = $(patsubst %.c,%,$(SRCS)) > > > + > > > +all: $(TARGETS) > > > + > > > +install: > > > + @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; > done > > > + > > > +clean: > > > + rm -f $(TARGETS) > > > --- ltp-full-20090331.orig/runtest/syscalls 2009-04-13 17:43: > > 04.000000000 +0530 > > > +++ ltp-full-20090331/runtest/syscalls 2009-04-13 17:35:46.000000000 > +0530 > > > @@ -36,6 +36,8 @@ capget02 capget02 > > > capset01 capset01 > > > capset02 capset02 > > > > > > +cacheflush01 cacheflush01 > > > + > > > chdir01 chdir01 > > > chdir01A symlink01 -T chdir01 > > > chdir02 chdir02 > > > > > > --- > > > Regards-- > > > Manas > > > > > > > > Regards... > Manas > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > High Quality Requirements in a Collaborative Environment. > Download a free trial of Rational Requirements Composer Now! > http://p.sf.net/sfu/www-ibm-com > _______________________________________________ > Ltp-list mailing list > Ltp-list@... > https://lists.sourceforge.net/lists/listinfo/ltp-list ------------------------------------------------------------------------------ This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH 03/03] Add cacheflush() syscall test to LTP [LKML Subject: cacheflush system call not returning -EINVAL]Hi John,
On Mon, 2009-04-13 at 17:57 +0530, Manas K Nayak wrote: > Hi John, > > >cacheflush man page states that cacheflush() will set EINVAL if cache > >parameter is not one of ICACHE, DCACHE, or BCACHE. > >In order to confirm this behavior, I have executed the below listed > >program (cacheflush_check.c) in Toshiba RBTX4937 board (MIPS) with > >2.6.29.1 kernel. > > I picked up this test program written by you and ported the same to LTP > under GPL. It would be great if you do not have any objection in > contributing this test to LTP. The below patch does exactly that. Do you have any objection in contributing this test to LTP ? Regards-- Subrata > > Original-Author: Maxin John <maxin.john@...>, > Ported-To-LTP-By: Manas K Nayak <maknayak@...>, > --- > > --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/cacheflush01.c 1970-01-01 05:30:00.000000000 +0530 > +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/cacheflush01.c 2009-04-13 17:33:00.000000000 +0530 > @@ -0,0 +1,192 @@ > +/******************************************************************************/ > +/* Copyright (c) Maxin John <maxin.john@...>, 2009 */ > +/* LKML Reference: http://lkml.org/lkml/2009/4/9/203 */ > +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 */ > +/******************************************************************************/ > + > +#include <sys/syscall.h> > +#include <unistd.h> > +#include <stdio.h> > +#include <stdlib.h> > +#include <errno.h> > + > +#if defined __mips__ > +#include <asm/cachectl.h> > +int cacheflush(char *addr, int nbytes, int cache) > +{ > +B B B B return syscall(__NR_cacheflush, addr, nbytes, cache); > +} > +#endif /* __mips__ */ > + > +#ifndef ICACHE > +#define ICACHE (1<<0) /* flush instruction cache */ > +#endif > +#ifndef DCACHE > +#define DCACHE (1<<1) /* writeback and flush data cache */ > +#endif > +#ifndef BCACHE > +#define BCACHE (ICACHE|DCACHE) /* flush both caches */ > +#endif > + > +/* Harness Specific Incnude Files. */ > +#include "test.h" > +#include "usctest.h" > +#include "linux_syscall_numbers.h" > + > +/* Extern Global Variables */ > +extern int Tst_count; /* counter for tst_xxx routines. */ > +extern char *TESTDIR; /* temporary dir created by tst_tmpdir() */ > + > +/* Global Variables */ > +char *TCID = "cacheflush01"; /* Test program identifier.*/ > +int testno; > +int TST_TOTAL = 1; /* total number of tests in this file. */ > + > +#if defined __mips__ > +/* 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. */ > +/* */ > +/******************************************************************************/ > +extern void cleanup() { > + /* Remove tmp dir and all files in it */ > + TEST_CLEANUP; > + tst_rmdir(); > + > + /* Exit with appropriate return code. */ > + tst_exit(); > +} > + > +/* 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() { > + /* Capture signals if any */ > + /* Create temporary directories */ > + TEST_PAUSE; > + tst_tmpdir(); > +} > + > +int main(int ac, char **av) { > + > + /* cacheflush man page states that cacheflush() is only applicable to MIPS architecture */ > + char *addr = NULL; > + int lc; /* loop counter */ > + char *msg; /* message returned from parse_opts */ > + > + /* parse standard options */ > + if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){ > + tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); > + tst_exit(); > + } > + > + setup(); > + > + /* Check looping state if -i option given */ > + for (lc = 0; TEST_LOOPING(lc); ++lc) { > + Tst_count = 0; > + for (testno = 0; testno < TST_TOTAL; ++testno) { > + /* Create some user address range */ > + addr = malloc(getpagesize()); > + if (addr == NULL) { > + tst_resm(TFAIL, "%s, Malloc error errno = %d : %s",TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + tst_exit(); > + } > + > + /* Invokes cacheflush() with proper parameters */ > + TEST(cacheflush(addr, getpagesize(), ICACHE)); > + TEST(cacheflush(addr, getpagesize(), DCACHE)); > + TEST(cacheflush(addr, getpagesize(), BCACHE)); > + > + /* Tests whether cacheflush() returns -EINVAL */ > + TEST(cacheflush(addr, getpagesize(), 0)); > + if(TEST_RETURN < 0){ > + if (TEST_ERRNO == EINVAL) { > + tst_resm(TPASS, "%s PASS -with expected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + tst_exit(); > + } else { > + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + tst_exit(); > + } > + } > + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + } > + > + } > + tst_exit(); > +} > + > +#else > +int main(int ac, char **av) { > + > + tst_resm(TCONF, "is not available for this architecture"); > + tst_exit(); > +} > +#endif > --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/Makefile 1970-01-01 05:30:00.000000000 +0530 > +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/Makefile 2009-04-13 17:16:11.000000000 +0530 > @@ -0,0 +1,31 @@ > +# > +# Copyright (c) International Business Machines Corp., 2009 > +# > +# 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 St, Fifth Floor, Boston, MA 02110-1301 USA > +# > + > +CFLAGS += -I../../../../include -Wall > +LDLIBS += -L../../../../lib -lltp > + > +SRCS = $(wildcard *.c) > +TARGETS = $(patsubst %.c,%,$(SRCS)) > + > +all: $(TARGETS) > + > +install: > + @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done > + > +clean: > + rm -f $(TARGETS) > --- ltp-full-20090331.orig/runtest/syscalls 2009-04-13 17:43:04.000000000 +0530 > +++ ltp-full-20090331/runtest/syscalls 2009-04-13 17:35:46.000000000 +0530 > @@ -36,6 +36,8 @@ capget02 capget02 > capset01 capset01 > capset02 capset02 > > +cacheflush01 cacheflush01 > + > chdir01 chdir01 > chdir01A symlink01 -T chdir01 > chdir02 chdir02 > > --- > Regards-- > Manas > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > High Quality Requirements in a Collaborative Environment. > Download a free trial of Rational Requirements Composer Now! > http://p.sf.net/sfu/www-ibm-com > _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list ------------------------------------------------------------------------------ This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH 03/03] Add cacheflush() syscall test to LTP [LKML Subject: cacheflush system call not returning -EINVAL]Hi Subrata,
As I have already mentioned, I have no objections in contributing this test to LTP under GPL License. In fact, I have joined LTP mailing list today and will try to contribute to LTP whenever possible. Warm Regards, Maxin B. John On Tue, Apr 14, 2009 at 4:10 PM, Subrata Modak <subrata@...> wrote: > Hi John, > > On Mon, 2009-04-13 at 17:57 +0530, Manas K Nayak wrote: >> Hi John, >> >> >cacheflush man page states that cacheflush() will set EINVAL if cache >> >parameter is not one of ICACHE, DCACHE, or BCACHE. >> >In order to confirm this behavior, I have executed the below listed >> >program (cacheflush_check.c) in Toshiba RBTX4937 board (MIPS) with >> >2.6.29.1 kernel. >> >> I picked up this test program written by you and ported the same to LTP >> under GPL. It would be great if you do not have any objection in >> contributing this test to LTP. The below patch does exactly that. > > Do you have any objection in contributing this test to LTP ? > > Regards-- > Subrata > >> >> Original-Author: Maxin John <maxin.john@...>, >> Ported-To-LTP-By: Manas K Nayak <maknayak@...>, >> --- >> >> --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/cacheflush01.c 1970-01-01 05:30:00.000000000 +0530 >> +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/cacheflush01.c 2009-04-13 17:33:00.000000000 +0530 >> @@ -0,0 +1,192 @@ >> +/******************************************************************************/ >> +/* Copyright (c) Maxin John <maxin.john@...>, 2009 */ >> +/* LKML Reference: http://lkml.org/lkml/2009/4/9/203 */ >> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 */ >> +/******************************************************************************/ >> + >> +#include <sys/syscall.h> >> +#include <unistd.h> >> +#include <stdio.h> >> +#include <stdlib.h> >> +#include <errno.h> >> + >> +#if defined __mips__ >> +#include <asm/cachectl.h> >> +int cacheflush(char *addr, int nbytes, int cache) >> +{ >> +B B B B return syscall(__NR_cacheflush, addr, nbytes, cache); >> +} >> +#endif /* __mips__ */ >> + >> +#ifndef ICACHE >> +#define ICACHE (1<<0) /* flush instruction cache */ >> +#endif >> +#ifndef DCACHE >> +#define DCACHE (1<<1) /* writeback and flush data cache */ >> +#endif >> +#ifndef BCACHE >> +#define BCACHE (ICACHE|DCACHE) /* flush both caches */ >> +#endif >> + >> +/* Harness Specific Incnude Files. */ >> +#include "test.h" >> +#include "usctest.h" >> +#include "linux_syscall_numbers.h" >> + >> +/* Extern Global Variables */ >> +extern int Tst_count; /* counter for tst_xxx routines. */ >> +extern char *TESTDIR; /* temporary dir created by tst_tmpdir() */ >> + >> +/* Global Variables */ >> +char *TCID = "cacheflush01"; /* Test program identifier.*/ >> +int testno; >> +int TST_TOTAL = 1; /* total number of tests in this file. */ >> + >> +#if defined __mips__ >> +/* 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. */ >> +/* */ >> +/******************************************************************************/ >> +extern void cleanup() { >> + /* Remove tmp dir and all files in it */ >> + TEST_CLEANUP; >> + tst_rmdir(); >> + >> + /* Exit with appropriate return code. */ >> + tst_exit(); >> +} >> + >> +/* 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() { >> + /* Capture signals if any */ >> + /* Create temporary directories */ >> + TEST_PAUSE; >> + tst_tmpdir(); >> +} >> + >> +int main(int ac, char **av) { >> + >> + /* cacheflush man page states that cacheflush() is only applicable to MIPS architecture */ >> + char *addr = NULL; >> + int lc; /* loop counter */ >> + char *msg; /* message returned from parse_opts */ >> + >> + /* parse standard options */ >> + if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){ >> + tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); >> + tst_exit(); >> + } >> + >> + setup(); >> + >> + /* Check looping state if -i option given */ >> + for (lc = 0; TEST_LOOPING(lc); ++lc) { >> + Tst_count = 0; >> + for (testno = 0; testno < TST_TOTAL; ++testno) { >> + /* Create some user address range */ >> + addr = malloc(getpagesize()); >> + if (addr == NULL) { >> + tst_resm(TFAIL, "%s, Malloc error errno = %d : %s",TCID, TEST_ERRNO, strerror(TEST_ERRNO)); >> + cleanup(); >> + tst_exit(); >> + } >> + >> + /* Invokes cacheflush() with proper parameters */ >> + TEST(cacheflush(addr, getpagesize(), ICACHE)); >> + TEST(cacheflush(addr, getpagesize(), DCACHE)); >> + TEST(cacheflush(addr, getpagesize(), BCACHE)); >> + >> + /* Tests whether cacheflush() returns -EINVAL */ >> + TEST(cacheflush(addr, getpagesize(), 0)); >> + if(TEST_RETURN < 0){ >> + if (TEST_ERRNO == EINVAL) { >> + tst_resm(TPASS, "%s PASS -with expected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); >> + cleanup(); >> + tst_exit(); >> + } else { >> + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); >> + cleanup(); >> + tst_exit(); >> + } >> + } >> + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); >> + cleanup(); >> + } >> + >> + } >> + tst_exit(); >> +} >> + >> +#else >> +int main(int ac, char **av) { >> + >> + tst_resm(TCONF, "is not available for this architecture"); >> + tst_exit(); >> +} >> +#endif >> --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/Makefile 1970-01-01 05:30:00.000000000 +0530 >> +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/Makefile 2009-04-13 17:16:11.000000000 +0530 >> @@ -0,0 +1,31 @@ >> +# >> +# Copyright (c) International Business Machines Corp., 2009 >> +# >> +# 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 St, Fifth Floor, Boston, MA 02110-1301 USA >> +# >> + >> +CFLAGS += -I../../../../include -Wall >> +LDLIBS += -L../../../../lib -lltp >> + >> +SRCS = $(wildcard *.c) >> +TARGETS = $(patsubst %.c,%,$(SRCS)) >> + >> +all: $(TARGETS) >> + >> +install: >> + @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done >> + >> +clean: >> + rm -f $(TARGETS) >> --- ltp-full-20090331.orig/runtest/syscalls 2009-04-13 17:43:04.000000000 +0530 >> +++ ltp-full-20090331/runtest/syscalls 2009-04-13 17:35:46.000000000 +0530 >> @@ -36,6 +36,8 @@ capget02 capget02 >> capset01 capset01 >> capset02 capset02 >> >> +cacheflush01 cacheflush01 >> + >> chdir01 chdir01 >> chdir01A symlink01 -T chdir01 >> chdir02 chdir02 >> >> --- >> Regards-- >> Manas >> >> >> ------------------------------------------------------------------------------ >> This SF.net email is sponsored by: >> High Quality Requirements in a Collaborative Environment. >> Download a free trial of Rational Requirements Composer Now! >> http://p.sf.net/sfu/www-ibm-com >> _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list > > ------------------------------------------------------------------------------ This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH 03/03] Add cacheflush() syscall test to LTP [LKML Subject: cacheflush system call not returning -EINVAL]On Tue, 2009-04-14 at 17:31 +0530, Maxin John wrote:
> Hi Subrata, > > As I have already mentioned, I have no objections in contributing this > test to LTP under GPL License. Thanks. > In fact, I have joined LTP mailing list today and will try to > contribute to LTP whenever possible. Thatś great. Regards-- Subrata > > Warm Regards, > Maxin B. John > > > On Tue, Apr 14, 2009 at 4:10 PM, Subrata Modak > <subrata@...> wrote: > > Hi John, > > > > On Mon, 2009-04-13 at 17:57 +0530, Manas K Nayak wrote: > >> Hi John, > >> > >> >cacheflush man page states that cacheflush() will set EINVAL if cache > >> >parameter is not one of ICACHE, DCACHE, or BCACHE. > >> >In order to confirm this behavior, I have executed the below listed > >> >program (cacheflush_check.c) in Toshiba RBTX4937 board (MIPS) with > >> >2.6.29.1 kernel. > >> > >> I picked up this test program written by you and ported the same to LTP > >> under GPL. It would be great if you do not have any objection in > >> contributing this test to LTP. The below patch does exactly that. > > > > Do you have any objection in contributing this test to LTP ? > > > > Regards-- > > Subrata > > > >> > >> Original-Author: Maxin John <maxin.john@...>, > >> Ported-To-LTP-By: Manas K Nayak <maknayak@...>, > >> --- > >> > >> --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/cacheflush01.c 1970-01-01 05:30:00.000000000 +0530 > >> +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/cacheflush01.c 2009-04-13 17:33:00.000000000 +0530 > >> @@ -0,0 +1,192 @@ > >> +/******************************************************************************/ > >> +/* Copyright (c) Maxin John <maxin.john@...>, 2009 */ > >> +/* LKML Reference: http://lkml.org/lkml/2009/4/9/203 */ > >> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 */ > >> +/******************************************************************************/ > >> + > >> +#include <sys/syscall.h> > >> +#include <unistd.h> > >> +#include <stdio.h> > >> +#include <stdlib.h> > >> +#include <errno.h> > >> + > >> +#if defined __mips__ > >> +#include <asm/cachectl.h> > >> +int cacheflush(char *addr, int nbytes, int cache) > >> +{ > >> +B B B B return syscall(__NR_cacheflush, addr, nbytes, cache); > >> +} > >> +#endif /* __mips__ */ > >> + > >> +#ifndef ICACHE > >> +#define ICACHE (1<<0) /* flush instruction cache */ > >> +#endif > >> +#ifndef DCACHE > >> +#define DCACHE (1<<1) /* writeback and flush data cache */ > >> +#endif > >> +#ifndef BCACHE > >> +#define BCACHE (ICACHE|DCACHE) /* flush both caches */ > >> +#endif > >> + > >> +/* Harness Specific Incnude Files. */ > >> +#include "test.h" > >> +#include "usctest.h" > >> +#include "linux_syscall_numbers.h" > >> + > >> +/* Extern Global Variables */ > >> +extern int Tst_count; /* counter for tst_xxx routines. */ > >> +extern char *TESTDIR; /* temporary dir created by tst_tmpdir() */ > >> + > >> +/* Global Variables */ > >> +char *TCID = "cacheflush01"; /* Test program identifier.*/ > >> +int testno; > >> +int TST_TOTAL = 1; /* total number of tests in this file. */ > >> + > >> +#if defined __mips__ > >> +/* 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. */ > >> +/* */ > >> +/******************************************************************************/ > >> +extern void cleanup() { > >> + /* Remove tmp dir and all files in it */ > >> + TEST_CLEANUP; > >> + tst_rmdir(); > >> + > >> + /* Exit with appropriate return code. */ > >> + tst_exit(); > >> +} > >> + > >> +/* 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() { > >> + /* Capture signals if any */ > >> + /* Create temporary directories */ > >> + TEST_PAUSE; > >> + tst_tmpdir(); > >> +} > >> + > >> +int main(int ac, char **av) { > >> + > >> + /* cacheflush man page states that cacheflush() is only applicable to MIPS architecture */ > >> + char *addr = NULL; > >> + int lc; /* loop counter */ > >> + char *msg; /* message returned from parse_opts */ > >> + > >> + /* parse standard options */ > >> + if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){ > >> + tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); > >> + tst_exit(); > >> + } > >> + > >> + setup(); > >> + > >> + /* Check looping state if -i option given */ > >> + for (lc = 0; TEST_LOOPING(lc); ++lc) { > >> + Tst_count = 0; > >> + for (testno = 0; testno < TST_TOTAL; ++testno) { > >> + /* Create some user address range */ > >> + addr = malloc(getpagesize()); > >> + if (addr == NULL) { > >> + tst_resm(TFAIL, "%s, Malloc error errno = %d : %s",TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > >> + cleanup(); > >> + tst_exit(); > >> + } > >> + > >> + /* Invokes cacheflush() with proper parameters */ > >> + TEST(cacheflush(addr, getpagesize(), ICACHE)); > >> + TEST(cacheflush(addr, getpagesize(), DCACHE)); > >> + TEST(cacheflush(addr, getpagesize(), BCACHE)); > >> + > >> + /* Tests whether cacheflush() returns -EINVAL */ > >> + TEST(cacheflush(addr, getpagesize(), 0)); > >> + if(TEST_RETURN < 0){ > >> + if (TEST_ERRNO == EINVAL) { > >> + tst_resm(TPASS, "%s PASS -with expected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > >> + cleanup(); > >> + tst_exit(); > >> + } else { > >> + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > >> + cleanup(); > >> + tst_exit(); > >> + } > >> + } > >> + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > >> + cleanup(); > >> + } > >> + > >> + } > >> + tst_exit(); > >> +} > >> + > >> +#else > >> +int main(int ac, char **av) { > >> + > >> + tst_resm(TCONF, "is not available for this architecture"); > >> + tst_exit(); > >> +} > >> +#endif > >> --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/Makefile 1970-01-01 05:30:00.000000000 +0530 > >> +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/Makefile 2009-04-13 17:16:11.000000000 +0530 > >> @@ -0,0 +1,31 @@ > >> +# > >> +# Copyright (c) International Business Machines Corp., 2009 > >> +# > >> +# 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 St, Fifth Floor, Boston, MA 02110-1301 USA > >> +# > >> + > >> +CFLAGS += -I../../../../include -Wall > >> +LDLIBS += -L../../../../lib -lltp > >> + > >> +SRCS = $(wildcard *.c) > >> +TARGETS = $(patsubst %.c,%,$(SRCS)) > >> + > >> +all: $(TARGETS) > >> + > >> +install: > >> + @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done > >> + > >> +clean: > >> + rm -f $(TARGETS) > >> --- ltp-full-20090331.orig/runtest/syscalls 2009-04-13 17:43:04.000000000 +0530 > >> +++ ltp-full-20090331/runtest/syscalls 2009-04-13 17:35:46.000000000 +0530 > >> @@ -36,6 +36,8 @@ capget02 capget02 > >> capset01 capset01 > >> capset02 capset02 > >> > >> +cacheflush01 cacheflush01 > >> + > >> chdir01 chdir01 > >> chdir01A symlink01 -T chdir01 > >> chdir02 chdir02 > >> > >> --- > >> Regards-- > >> Manas > >> > >> > >> ------------------------------------------------------------------------------ > >> This SF.net email is sponsored by: > >> High Quality Requirements in a Collaborative Environment. > >> Download a free trial of Rational Requirements Composer Now! > >> http://p.sf.net/sfu/www-ibm-com > >> _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list > > > > ------------------------------------------------------------------------------ This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH 03/03] Add cacheflush() syscall test to LTP [LKML Subject: cacheflush system call not returning -EINVAL]-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1 Subrata Modak wrote: > On Tue, 2009-04-14 at 17:31 +0530, Maxin John wrote: >> Hi Subrata, >> >> As I have already mentioned, I have no objections in contributing this >> test to LTP under GPL License. > > Thanks. > >> In fact, I have joined LTP mailing list today and will try to >> contribute to LTP whenever possible. > > ThatÅ› great. > > Regards-- > Subrata > Hi All, sys_cacheflush syscall is available for sh4 too. Once this will be included in the LTP suite, we will test/adapt it for sh4 and provide our feedback. Cheers, Carmelo >> Warm Regards, >> Maxin B. John >> >> >> On Tue, Apr 14, 2009 at 4:10 PM, Subrata Modak >> <subrata@...> wrote: >>> Hi John, >>> >>> On Mon, 2009-04-13 at 17:57 +0530, Manas K Nayak wrote: >>>> Hi John, >>>> >>>>> cacheflush man page states that cacheflush() will set EINVAL if cache >>>>> parameter is not one of ICACHE, DCACHE, or BCACHE. >>>>> In order to confirm this behavior, I have executed the below listed >>>>> program (cacheflush_check.c) in Toshiba RBTX4937 board (MIPS) with >>>>> 2.6.29.1 kernel. >>>> I picked up this test program written by you and ported the same to LTP >>>> under GPL. It would be great if you do not have any objection in >>>> contributing this test to LTP. The below patch does exactly that. >>> Do you have any objection in contributing this test to LTP ? >>> >>> Regards-- >>> Subrata >>> >>>> Original-Author: Maxin John <maxin.john@...>, >>>> Ported-To-LTP-By: Manas K Nayak <maknayak@...>, >>>> --- >>>> >>>> --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/cacheflush01.c 1970-01-01 05:30:00.000000000 +0530 >>>> +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/cacheflush01.c 2009-04-13 17:33:00.000000000 +0530 >>>> @@ -0,0 +1,192 @@ >>>> +/******************************************************************************/ >>>> +/* Copyright (c) Maxin John <maxin.john@...>, 2009 */ >>>> +/* LKML Reference: http://lkml.org/lkml/2009/4/9/203 */ >>>> +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 */ >>>> +/******************************************************************************/ >>>> + >>>> +#include <sys/syscall.h> >>>> +#include <unistd.h> >>>> +#include <stdio.h> >>>> +#include <stdlib.h> >>>> +#include <errno.h> >>>> + >>>> +#if defined __mips__ >>>> +#include <asm/cachectl.h> >>>> +int cacheflush(char *addr, int nbytes, int cache) >>>> +{ >>>> +B B B B return syscall(__NR_cacheflush, addr, nbytes, cache); >>>> +} >>>> +#endif /* __mips__ */ >>>> + >>>> +#ifndef ICACHE >>>> +#define ICACHE (1<<0) /* flush instruction cache */ >>>> +#endif >>>> +#ifndef DCACHE >>>> +#define DCACHE (1<<1) /* writeback and flush data cache */ >>>> +#endif >>>> +#ifndef BCACHE >>>> +#define BCACHE (ICACHE|DCACHE) /* flush both caches */ >>>> +#endif >>>> + >>>> +/* Harness Specific Incnude Files. */ >>>> +#include "test.h" >>>> +#include "usctest.h" >>>> +#include "linux_syscall_numbers.h" >>>> + >>>> +/* Extern Global Variables */ >>>> +extern int Tst_count; /* counter for tst_xxx routines. */ >>>> +extern char *TESTDIR; /* temporary dir created by tst_tmpdir() */ >>>> + >>>> +/* Global Variables */ >>>> +char *TCID = "cacheflush01"; /* Test program identifier.*/ >>>> +int testno; >>>> +int TST_TOTAL = 1; /* total number of tests in this file. */ >>>> + >>>> +#if defined __mips__ >>>> +/* 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. */ >>>> +/* */ >>>> +/******************************************************************************/ >>>> +extern void cleanup() { >>>> + /* Remove tmp dir and all files in it */ >>>> + TEST_CLEANUP; >>>> + tst_rmdir(); >>>> + >>>> + /* Exit with appropriate return code. */ >>>> + tst_exit(); >>>> +} >>>> + >>>> +/* 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() { >>>> + /* Capture signals if any */ >>>> + /* Create temporary directories */ >>>> + TEST_PAUSE; >>>> + tst_tmpdir(); >>>> +} >>>> + >>>> +int main(int ac, char **av) { >>>> + >>>> + /* cacheflush man page states that cacheflush() is only applicable to MIPS architecture */ >>>> + char *addr = NULL; >>>> + int lc; /* loop counter */ >>>> + char *msg; /* message returned from parse_opts */ >>>> + >>>> + /* parse standard options */ >>>> + if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){ >>>> + tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); >>>> + tst_exit(); >>>> + } >>>> + >>>> + setup(); >>>> + >>>> + /* Check looping state if -i option given */ >>>> + for (lc = 0; TEST_LOOPING(lc); ++lc) { >>>> + Tst_count = 0; >>>> + for (testno = 0; testno < TST_TOTAL; ++testno) { >>>> + /* Create some user address range */ >>>> + addr = malloc(getpagesize()); >>>> + if (addr == NULL) { >>>> + tst_resm(TFAIL, "%s, Malloc error errno = %d : %s",TCID, TEST_ERRNO, strerror(TEST_ERRNO)); >>>> + cleanup(); >>>> + tst_exit(); >>>> + } >>>> + >>>> + /* Invokes cacheflush() with proper parameters */ >>>> + TEST(cacheflush(addr, getpagesize(), ICACHE)); >>>> + TEST(cacheflush(addr, getpagesize(), DCACHE)); >>>> + TEST(cacheflush(addr, getpagesize(), BCACHE)); >>>> + >>>> + /* Tests whether cacheflush() returns -EINVAL */ >>>> + TEST(cacheflush(addr, getpagesize(), 0)); >>>> + if(TEST_RETURN < 0){ >>>> + if (TEST_ERRNO == EINVAL) { >>>> + tst_resm(TPASS, "%s PASS -with expected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); >>>> + cleanup(); >>>> + tst_exit(); >>>> + } else { >>>> + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); >>>> + cleanup(); >>>> + tst_exit(); >>>> + } >>>> + } >>>> + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); >>>> + cleanup(); >>>> + } >>>> + >>>> + } >>>> + tst_exit(); >>>> +} >>>> + >>>> +#else >>>> +int main(int ac, char **av) { >>>> + >>>> + tst_resm(TCONF, "is not available for this architecture"); >>>> + tst_exit(); >>>> +} >>>> +#endif >>>> --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/Makefile 1970-01-01 05:30:00.000000000 +0530 >>>> +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/Makefile 2009-04-13 17:16:11.000000000 +0530 >>>> @@ -0,0 +1,31 @@ >>>> +# >>>> +# Copyright (c) International Business Machines Corp., 2009 >>>> +# >>>> +# 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 St, Fifth Floor, Boston, MA 02110-1301 USA >>>> +# >>>> + >>>> +CFLAGS += -I../../../../include -Wall >>>> +LDLIBS += -L../../../../lib -lltp >>>> + >>>> +SRCS = $(wildcard *.c) >>>> +TARGETS = $(patsubst %.c,%,$(SRCS)) >>>> + >>>> +all: $(TARGETS) >>>> + >>>> +install: >>>> + @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done >>>> + >>>> +clean: >>>> + rm -f $(TARGETS) >>>> --- ltp-full-20090331.orig/runtest/syscalls 2009-04-13 17:43:04.000000000 +0530 >>>> +++ ltp-full-20090331/runtest/syscalls 2009-04-13 17:35:46.000000000 +0530 >>>> @@ -36,6 +36,8 @@ capget02 capget02 >>>> capset01 capset01 >>>> capset02 capset02 >>>> >>>> +cacheflush01 cacheflush01 >>>> + >>>> chdir01 chdir01 >>>> chdir01A symlink01 -T chdir01 >>>> chdir02 chdir02 >>>> >>>> --- >>>> Regards-- >>>> Manas >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> This SF.net email is sponsored by: >>>> High Quality Requirements in a Collaborative Environment. >>>> Download a free trial of Rational Requirements Composer Now! >>>> http://p.sf.net/sfu/www-ibm-com >>>> _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list >>> > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > High Quality Requirements in a Collaborative Environment. > Download a free trial of Rational Requirements Composer Now! > http://p.sf.net/sfu/www-ibm-com > _______________________________________________ > Ltp-list mailing list > Ltp-list@... > https://lists.sourceforge.net/lists/listinfo/ltp-list -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org iEYEARECAAYFAknknnAACgkQoRq/3BrK1s/SXQCgqrq6kjF2Nu5Wtlt8uedtsfpD daEAnjvrA0h5YixwQbSrdGwKcSB6EQHt =An05 -----END PGP SIGNATURE----- ------------------------------------------------------------------------------ This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
|
|
Re: [PATCH 03/03] Add cacheflush() syscall test to LTP [LKML Subject: cacheflush system call not returning -EINVAL]Thanks John/Manas for this contribution. Added to LTP.
Regards-- Subrata On Mon, 2009-04-13 at 17:57 +0530, Manas K Nayak wrote: > Hi John, > > >cacheflush man page states that cacheflush() will set EINVAL if cache > >parameter is not one of ICACHE, DCACHE, or BCACHE. > >In order to confirm this behavior, I have executed the below listed > >program (cacheflush_check.c) in Toshiba RBTX4937 board (MIPS) with > >2.6.29.1 kernel. > > I picked up this test program written by you and ported the same to LTP > under GPL. It would be great if you do not have any objection in > contributing this test to LTP. The below patch does exactly that. > > Original-Author: Maxin John <maxin.john@...>, > Ported-To-LTP-By: Manas K Nayak <maknayak@...>, > --- > > --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/cacheflush01.c 1970-01-01 05:30:00.000000000 +0530 > +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/cacheflush01.c 2009-04-13 17:33:00.000000000 +0530 > @@ -0,0 +1,192 @@ > +/******************************************************************************/ > +/* Copyright (c) Maxin John <maxin.john@...>, 2009 */ > +/* LKML Reference: http://lkml.org/lkml/2009/4/9/203 */ > +/* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 */ > +/******************************************************************************/ > + > +#include <sys/syscall.h> > +#include <unistd.h> > +#include <stdio.h> > +#include <stdlib.h> > +#include <errno.h> > + > +#if defined __mips__ > +#include <asm/cachectl.h> > +int cacheflush(char *addr, int nbytes, int cache) > +{ > +B B B B return syscall(__NR_cacheflush, addr, nbytes, cache); > +} > +#endif /* __mips__ */ > + > +#ifndef ICACHE > +#define ICACHE (1<<0) /* flush instruction cache */ > +#endif > +#ifndef DCACHE > +#define DCACHE (1<<1) /* writeback and flush data cache */ > +#endif > +#ifndef BCACHE > +#define BCACHE (ICACHE|DCACHE) /* flush both caches */ > +#endif > + > +/* Harness Specific Incnude Files. */ > +#include "test.h" > +#include "usctest.h" > +#include "linux_syscall_numbers.h" > + > +/* Extern Global Variables */ > +extern int Tst_count; /* counter for tst_xxx routines. */ > +extern char *TESTDIR; /* temporary dir created by tst_tmpdir() */ > + > +/* Global Variables */ > +char *TCID = "cacheflush01"; /* Test program identifier.*/ > +int testno; > +int TST_TOTAL = 1; /* total number of tests in this file. */ > + > +#if defined __mips__ > +/* 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. */ > +/* */ > +/******************************************************************************/ > +extern void cleanup() { > + /* Remove tmp dir and all files in it */ > + TEST_CLEANUP; > + tst_rmdir(); > + > + /* Exit with appropriate return code. */ > + tst_exit(); > +} > + > +/* 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() { > + /* Capture signals if any */ > + /* Create temporary directories */ > + TEST_PAUSE; > + tst_tmpdir(); > +} > + > +int main(int ac, char **av) { > + > + /* cacheflush man page states that cacheflush() is only applicable to MIPS architecture */ > + char *addr = NULL; > + int lc; /* loop counter */ > + char *msg; /* message returned from parse_opts */ > + > + /* parse standard options */ > + if ((msg = parse_opts(ac, av, (option_t *)NULL, NULL)) != (char *)NULL){ > + tst_brkm(TBROK, cleanup, "OPTION PARSING ERROR - %s", msg); > + tst_exit(); > + } > + > + setup(); > + > + /* Check looping state if -i option given */ > + for (lc = 0; TEST_LOOPING(lc); ++lc) { > + Tst_count = 0; > + for (testno = 0; testno < TST_TOTAL; ++testno) { > + /* Create some user address range */ > + addr = malloc(getpagesize()); > + if (addr == NULL) { > + tst_resm(TFAIL, "%s, Malloc error errno = %d : %s",TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + tst_exit(); > + } > + > + /* Invokes cacheflush() with proper parameters */ > + TEST(cacheflush(addr, getpagesize(), ICACHE)); > + TEST(cacheflush(addr, getpagesize(), DCACHE)); > + TEST(cacheflush(addr, getpagesize(), BCACHE)); > + > + /* Tests whether cacheflush() returns -EINVAL */ > + TEST(cacheflush(addr, getpagesize(), 0)); > + if(TEST_RETURN < 0){ > + if (TEST_ERRNO == EINVAL) { > + tst_resm(TPASS, "%s PASS -with expected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + tst_exit(); > + } else { > + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + tst_exit(); > + } > + } > + tst_resm(TFAIL, "%s FAIL -with unexpected errno = %d : %s\n", TCID, TEST_ERRNO, strerror(TEST_ERRNO)); > + cleanup(); > + } > + > + } > + tst_exit(); > +} > + > +#else > +int main(int ac, char **av) { > + > + tst_resm(TCONF, "is not available for this architecture"); > + tst_exit(); > +} > +#endif > --- ltp-full-20090331.orig/testcases/kernel/syscalls/cacheflush/Makefile 1970-01-01 05:30:00.000000000 +0530 > +++ ltp-full-20090331/testcases/kernel/syscalls/cacheflush/Makefile 2009-04-13 17:16:11.000000000 +0530 > @@ -0,0 +1,31 @@ > +# > +# Copyright (c) International Business Machines Corp., 2009 > +# > +# 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 St, Fifth Floor, Boston, MA 02110-1301 USA > +# > + > +CFLAGS += -I../../../../include -Wall > +LDLIBS += -L../../../../lib -lltp > + > +SRCS = $(wildcard *.c) > +TARGETS = $(patsubst %.c,%,$(SRCS)) > + > +all: $(TARGETS) > + > +install: > + @set -e; for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done > + > +clean: > + rm -f $(TARGETS) > --- ltp-full-20090331.orig/runtest/syscalls 2009-04-13 17:43:04.000000000 +0530 > +++ ltp-full-20090331/runtest/syscalls 2009-04-13 17:35:46.000000000 +0530 > @@ -36,6 +36,8 @@ capget02 capget02 > capset01 capset01 > capset02 capset02 > > +cacheflush01 cacheflush01 > + > chdir01 chdir01 > chdir01A symlink01 -T chdir01 > chdir02 chdir02 > > --- > Regards-- > Manas > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > High Quality Requirements in a Collaborative Environment. > Download a free trial of Rational Requirements Composer Now! > http://p.sf.net/sfu/www-ibm-com > _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list ------------------------------------------------------------------------------ This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com _______________________________________________ Ltp-list mailing list Ltp-list@... https://lists.sourceforge.net/lists/listinfo/ltp-list |
| Free embeddable forum powered by Nabble | Forum Help |