On Wed, 2008-09-03 at 12:14 +0530, Subrata Modak wrote:
> Thanks Paul,
> 
> On Tue, 2008-09-02 at 11:25 +1000, Paul Mackerras wrote:
> > Subrata Modak writes:
> > 
> > > You have added the new system call switch() for the POWERPC architecture
> > > in the recent 2.6.26 kernel. Could you please share with us the ways you
> > > tested it. Did you develop/write an automated test case for this. In
> > > such a case, would you be willing to contribute the same test case(s) to
> > > LTP (http://ltp.cvs.sourceforge.net/ltp/ltp/testcases/kernel/syscalls/)
> > > under GPLv2 ?
> > 
> > This can only be tested on a POWER6 machine.  A program to test it is
> > attached.
> 
> Thanks for sharing the test case with LTP. I have ported it to bare
> minimum LTP requirement and ran it on various architectures and kernel
> versions to test out the behaviour of the test on these machines.
> 
> Yamato,
> 
> When you find time, kindly add more specific stuff that we have
> specially for the LTP syscall tests, things like running in a loop,
> running concurrently, etc.
> 
> And here goes the Patch. Paul, you can propose more modification to this
> if you wish to:
> 
> Signed-off-by: Paul Mackerras <[EMAIL PROTECTED]>
> Signed-off-by: Subrata Modak <[EMAIL PROTECTED]>
> 

I forgot to post the results of the test run on various machines:

1) # uname -a
Linux 2.6.26-autokern1 #1 SMP Tue Sep 2 08:18:50 EDT 2008 ppc64 ppc64
ppc64 GNU/Linux
# ./testcases/bin/switch01 
switch01    1  CONF  :  Processor does not support little-endian mode
# echo $?
0

2) # uname -a
Linux 2.6.9-22.EL #1 SMP Mon Sep 19 17:52:20 EDT 2005 ppc64 ppc64 ppc64
GNU/Linux
# ./testcases/bin/switch01 
switch01    1  CONF  :  Processor does not support little-endian mode
# echo $?
0

3) # uname -a
Linux 2.6.23.13 #1 SMP Wed Jan 9 18:14:28 PST 2008 ia64 GNU/Linux
# ./testcases/bin/switch01 
switch01    1  CONF  :  This system does not support running of switch()
syscall
# echo $?
0

4) # uname -a
Linux 2.6.16.21-0.8-default #1 SMP Mon Jul 3 18:25:39 UTC 2006 ia64 ia64
ia64 GNU/Linux
# ./testcases/bin/switch01 
switch01    1  CONF  :  This system does not support running of switch()
syscall
# echo $?
0

5) # uname -a
Linux 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 i686 i386
GNU/Linux
# ./testcases/bin/switch01 
switch01    1  CONF  :  This system does not support running of switch()
syscall
# echo $?
0

6) # uname -a
Linux 2.6.18-91.el5 #1 SMP Tue Apr 22 17:43:57 EDT 2008 x86_64 x86_64
x86_64 GNU/Linux
# ./testcases/bin/switch01 
switch01    1  CONF  :  This system does not support running of switch()
syscall
# echo $?
0

7) # uname -a
Linux 2.6.18-91.el5PAE #1 SMP Tue Apr 22 17:58:37 EDT 2008 i686 i686
i386 GNU/Linux
# ./testcases/bin/switch01 
switch01    1  CONF  :  This system does not support running of switch()
syscall
# echo $?
0

And finally to a POWER6 CPU machine:
# uname -a
Linux 2.6.27-rc5-autokern1 #1 SMP Wed Sep 3 02:23:39 EDT 2008 ppc64
ppc64 ppc64 GNU/Linux
# ./switch 01
test passed
[EMAIL PROTECTED] ltp]# echo $?
0


Regards--
Subrata

> diff -uprN ltp-full-20080831.orig/runtest/syscalls
> ltp-full-20080831/runtest/syscalls
> --- ltp-full-20080831.orig/runtest/syscalls   2008-09-02
> 23:00:21.000000000 +0530
> +++ ltp-full-20080831/runtest/syscalls        2008-09-02 23:16:13.000000000
> +0530
> @@ -917,6 +917,9 @@ swapon01 swapon01
>  swapon02 swapon02
>  swapon03 swapon03
>  
> +#Exclusive syscall() for POWER6 machines only
> +switch01 switch01
> +
>  symlink01 symlink01
>  symlink02 symlink02
>  symlink03 symlink03
> diff -uprN
> ltp-full-20080831.orig/testcases/kernel/syscalls/switch/Makefile
> ltp-full-20080831/testcases/kernel/syscalls/switch/Makefile
> --- ltp-full-20080831.orig/testcases/kernel/syscalls/switch/Makefile
> 1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20080831/testcases/kernel/syscalls/switch/Makefile
> 2008-09-02 23:15:09.000000000 +0530
> @@ -0,0 +1,32 @@
> +#################################################################################
> +#  Copyright (c) International Business Machines  Corp., 2008
> #
> +#
> #
> +#  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)
> diff -uprN
> ltp-full-20080831.orig/testcases/kernel/syscalls/switch/switch01.c
> ltp-full-20080831/testcases/kernel/syscalls/switch/switch01.c
> --- ltp-full-20080831.orig/testcases/kernel/syscalls/switch/switch01.c
> 1970-01-01 05:30:00.000000000 +0530
> +++ ltp-full-20080831/testcases/kernel/syscalls/switch/switch01.c
> 2008-09-02 23:13:23.000000000 +0530
> @@ -0,0 +1,139 @@
> +/******************************************************************************/
> +/*
> */
> +/* Copyright (c) International Business Machines  Corp., 2008
> */
> +/* Copyright 2008 Paul Mackerras, IBM Corp.
> */
> +/*
> */
> +/* 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:        switch01.c
> */
> +/*
> */
> +/* Description: Test little-endian mode switch system call. Requires a
> 64-bit */
> +/*              processor that supports little-endian mode,such as
> POWER6.    */
> +/*
> */
> +/* Total Tests: 1
> */
> +/*
> */
> +/* Test Name:   switch01
> */
> +/*
> */
> +/* Author:      Paul Mackerras <[EMAIL PROTECTED]>
> */
> +/*
> */
> +/* History:     Created - Sep 02 2008 - Paul Mackerras
> <[EMAIL PROTECTED]>     */
> +/*              Ported to LTP
> */
> +/*                      - Sep 02 2008
> */
> +/*                      - Subrata Modak <[EMAIL PROTECTED]>
> */
> +/*
> */
> +/******************************************************************************/
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <elf.h>
> +#include <signal.h>
> +#include <setjmp.h>
> +#include "test.h"
> +#include "usctest.h"
> +#include <errno.h>
> +#include <sys/stat.h>
> +#include <sys/types.h>
> +#include <sys/syscall.h>
> +#include <fcntl.h>
> +#include <sys/utsname.h>
> +#include <unistd.h>
> +#include "linux_syscall_numbers.h"
> +
> +static void setup();
> +static void cleanup();
> +
> +char *TCID    = "switch01"; /* Test program identifier.    */
> +int TST_TOTAL = 1;          /* Total number of test cases. */
> +extern int Tst_count;       /* Test Case counter for tst_* routines */
> +
> +void setup() {
> +
> +        /* capture signals */
> +        tst_sig(FORK, DEF_HANDLER, cleanup);
> +
> +        /* Check whether we are root*/
> +        if (geteuid() != 0) {
> +                tst_brkm(TBROK, tst_exit, "Test must be run as root");
> +        }
> +
> +        /* Pause if that option was specified */
> +        TEST_PAUSE;
> +
> +}
> +
> +
> +void cleanup() {
> +        /*
> +        * print timing stats if that option was specified.
> +        * print errno log if that option was specified.
> +        */
> +        TEST_CLEANUP;
> +
> +        /* exit with return code appropriate for results */
> +        tst_exit();
> +}       /* End cleanup() */
> +
> +
> +#if defined (__powerpc64__) || (__powerpc__)
> +#ifndef PPC_FEATURE_TRUE_LE
> +    #define PPC_FEATURE_TRUE_LE              0x00000002
> +#endif
> +
> +#include <asm/cputable.h>
> +
> +volatile int got_sigill;
> +sigjmp_buf jb;
> +
> +void sigill(int sig) {
> +     got_sigill = 1;
> +     siglongjmp(jb, 1);
> +}
> +
> +void do_le_switch(void) {
> +     register int r0 asm("r0");
> +
> +     r0 = 0x1ebe;
> +     asm volatile("sc; .long 0x02000044"
> +                  : "=&r" (r0) : "0" (r0)
> +                  : "cr0", "r9", "r10", "r11", "r12");
> +}
> +
> +int main(int ac, char **av, char **envp, unsigned long *auxv) {
> +     for (; *auxv != AT_NULL && *auxv != AT_HWCAP; auxv += 2)
> +             ;
> +     if (!(auxv[0] == AT_HWCAP && (auxv[1] & PPC_FEATURE_TRUE_LE))) {
> +                tst_brkm(TCONF, cleanup, "Processor does not support
> little-endian mode");
> +                tst_exit();
> +     }
> +     signal(SIGILL, sigill);
> +     if (sigsetjmp(jb, 1) == 0)
> +             do_le_switch();
> +     if (got_sigill) {
> +                tst_resm(TFAIL, "Got SIGILL - test failed");
> +                tst_exit();
> +     }
> +        tst_resm(TPASS, "switch() syscall tests passed");
> +        tst_exit();
> +}
> +
> +#else
> +
> +int main() {
> +
> +        tst_brkm(TCONF, cleanup, "This system does not support running
> of switch() syscall");
> +        tst_exit();
> +}
> +
> +#endif
> 
> 
> Regards--
> Subrata
> > 
> > Paul.
> > 


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to