From: Garrett C. <yab...@us...> - 2009-11-27 07:40:25
|
Update of /cvsroot/ltp/ltp/testcases/kernel/syscalls/cacheflush In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv5278/syscalls/cacheflush Modified Files: cacheflush01.c Log Message: Check in cleaned up versions of these tests. Signed-off-by: Garrett Cooper <yan...@gm... Index: cacheflush01.c =================================================================== RCS file: /cvsroot/ltp/ltp/testcases/kernel/syscalls/cacheflush/cacheflush01.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** cacheflush01.c 30 Jun 2009 07:25:22 -0000 1.2 --- cacheflush01.c 27 Nov 2009 07:40:17 -0000 1.3 *************** *** 40,44 **** /******************************************************************************/ - #include <sys/syscall.h> #include <unistd.h> #include <stdio.h> --- 40,43 ---- *************** *** 46,65 **** #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 --- 45,59 ---- #include <errno.h> ! /* cacheflush man page states that cacheflush() is only applicable to ! * MIPS architecture -- regardless, it's a good negative test.. */ #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 *************** *** 69,72 **** --- 63,76 ---- #include "linux_syscall_numbers.h" + /* cacheflush man page states that cacheflush() is only applicable to + * MIPS architecture -- regardless, it's a good negative test.. */ + #if defined __mips__ + #include <asm/cachectl.h> + #define __NR_cacheflush (__NR_Linux + 197) + #else + /* Fake linux_syscall_numbers.h */ + #define __NR_cacheflush 0 + #endif + /* Extern Global Variables */ extern int Tst_count; /* counter for tst_xxx routines. */ *************** *** 74,82 **** /* 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 */ /******************************************************************************/ --- 78,84 ---- /* Global Variables */ ! char *TCID = "cacheflush01"; /* Test program identifier.*/ ! int TST_TOTAL = 1; /* total number of tests in this file. */ /* Extern Global Functions */ /******************************************************************************/ *************** *** 101,107 **** TEST_CLEANUP; tst_rmdir(); - - /* Exit with appropriate return code. */ - tst_exit(); } --- 103,106 ---- *************** *** 131,192 **** } ! 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 --- 130,171 ---- } ! int main(int ac, char **av) ! { char *addr = NULL; 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(); ! Tst_count = 0; ! /* Create some user address range */ ! addr = malloc(getpagesize()); ! if (addr == NULL) { ! tst_brkm(TFAIL | TTERRNO, cleanup, "malloc failed"); ! } ! /* Invokes cacheflush() with proper parameters */ ! TEST(syscall(__NR_cacheflush, addr, getpagesize(), ICACHE)); ! TEST(syscall(__NR_cacheflush, addr, getpagesize(), DCACHE)); ! TEST(syscall(__NR_cacheflush, addr, getpagesize(), BCACHE)); ! /* Tests whether cacheflush() returns -EINVAL */ ! TEST(syscall(__NR_cacheflush, addr, getpagesize(), 0)); ! if (TEST_RETURN < 0) { ! if (TEST_ERRNO == EINVAL) { ! tst_resm(TPASS | TTERRNO, "passed with expected errno"); ! } else { ! tst_resm(TFAIL | TTERRNO, "failed with unexpected errno"); ! } ! } else { ! tst_resm(TFAIL, "passed unexpectedly"); ! } ! cleanup(); tst_exit(); } |