From: Subrata M. <su...@li...> - 2008-08-26 17:06:13
|
Hi Paul, 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 ? CC-ing Crackerjack list, as they may also be interested in testing this System call. Regards-- Subrata http://ltp.sourceforge.net/, https://sourceforge.net/projects/ltp/, |
From: Subrata M. <su...@li...> - 2008-08-30 18:39:23
|
Hi Paul, Would you like to tell us something regarding this below. Regards-- Subrata On Tue, 2008-08-26 at 22:31 +0530, Subrata Modak wrote: > Hi Paul, > > 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 ? > > CC-ing Crackerjack list, as they may also be interested in testing this > System call. > > Regards-- > Subrata > http://ltp.sourceforge.net/, > https://sourceforge.net/projects/ltp/, > > > ------------------------------------------------------------------------- > 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 > Ltp...@li... > https://lists.sourceforge.net/lists/listinfo/ltp-list |
From: Paul M. <pa...@sa...> - 2008-09-02 01:27:14
Attachments:
leswitch-test.c
|
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. Paul. |
From: Michael K. <mtk...@go...> - 2008-09-02 07:54:28
|
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. Paul, In the interests of perhaps documenting this (I don't know Power assembler), can you provide some more info on this interface, like: * What are the settings to enable little/big endian mode? (Or is it just a toggle, with successive identical calls just switching the mode?) * Does the call return any information about the previous endianess state? (It appears not, but I better check.) If not then how does one determine the current state? (I realize that a userspace program could just test where the bytes of a (say) long are placed in relation to one another, and so determine the information in that way, but I'm wondering if there is another way, e.g., inspecting some processor status flag.) * Is any wrapper support for this interface going into glibc, do you know? Cheers, Michael -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ man-pages online: http://www.kernel.org/doc/man-pages/online_pages.html Found a bug? http://www.kernel.org/doc/man-pages/reporting_bugs.html |
From: Paul M. <pa...@sa...> - 2008-09-02 09:58:07
|
Michael Kerrisk writes: > In the interests of perhaps documenting this (I don't know Power assembler), > can you provide some more info on this interface, like: > > * What are the settings to enable little/big endian mode? (Or is it > just a toggle, with successive identical calls just switching the mode?) It's a toggle. > * Does the call return any information about the previous endianess state? No. This is a somewhat unusual system call in that it you can't just call it from normal C code, since it switches the endianness of instruction fetches as well as data loads and stores. This is the way that PowerPC processors that support true little-endian mode work; there is just the one bit that controls the endianness of both instruction and data. (I say "true" little-endian to distinguish it from the "PowerPC little-endian" mode that some earlier processors supported, where the change of endianness was implemented by swizzling the low 3 address bits depending on the size of the access rather than actually byte-swapping the data coming in from memory.) At the moment, POWER6 and the PA6T core from PA Semi are the only 64-bit processors that support true little-endian mode. So to use this system call, you have to set up an instruction sequence in the current endianness, up to the system call instruction for the endian switch, followed by instructions that make sense in the other endianness. You also have to be prepared for the fact that every single datum in memory that's larger than a byte is going to appear to change. So the chain of stack frames will no longer make sense after the call, for instance. This system call is also unusual in that it doesn't return a value in R3 and an error indication in condition register 0 like other system calls. In fact it doesn't affect any registers except for R11 and R12. > (It appears not, but I better check.) If not then how does one determine > the current state? The sequence of bytes in memory for the system call instruction to switch from big endian to little endian is different from the sequence of bytes for the LE to BE switch, because the system call instruction, and every other instruction you execute, has to be in the current endianness. (All instructions are 4 bytes long.) So I don't think there's really any possibility that you could be unaware of the current setting. There is one point where you might be unsure of the current state - immediately after doing the endian-switch system call, if it could have failed because the processor lacks little-endian support or the kernel is too old to support the system call. And of course you can't just use a conditional branch to test whether the system call reported an error because the byte sequence you need to make that conditional branch instruction depends on what endian mode you're in. (That is why I didn't bother making this system call return an error indication in the usual manner.) Fortunately, it turns out that a "b .+12" instruction (branch to the instruction 12 bytes after this one) is a no-op if interpreted in little-endian mode. So one can use that to direct the flow of control one way or the other depending on whether the mode switch happened. > * Is any wrapper support for this interface going into glibc, do you know? I highly doubt it, since it breaks the normal C execution model so completely. You really need to know what you're doing to use it - particularly since we don't have toolchain support for generating little-endian instructions at present. Paul. |
From: Michael K. <mtk...@go...> - 2008-09-02 12:43:25
|
Hi Paul, Thanks for taking the time time to provide all that detail. Is that otherwise documented somewhere? And by the way, what do you call this system call? One other question below. On Tue, Sep 2, 2008 at 2:57 AM, Paul Mackerras <pa...@sa...> wrote: > Michael Kerrisk writes: > >> In the interests of perhaps documenting this (I don't know Power assembler), >> can you provide some more info on this interface, like: >> >> * What are the settings to enable little/big endian mode? (Or is it >> just a toggle, with successive identical calls just switching the mode?) > > It's a toggle. > >> * Does the call return any information about the previous endianess state? > > No. > > This is a somewhat unusual system call in that it you can't just call > it from normal C code, since it switches the endianness of instruction > fetches as well as data loads and stores. This is the way that > PowerPC processors that support true little-endian mode work; there is > just the one bit that controls the endianness of both instruction and > data. (I say "true" little-endian to distinguish it from the "PowerPC > little-endian" mode that some earlier processors supported, where the > change of endianness was implemented by swizzling the low 3 address > bits depending on the size of the access rather than actually > byte-swapping the data coming in from memory.) At the moment, POWER6 > and the PA6T core from PA Semi are the only 64-bit processors that > support true little-endian mode. > > So to use this system call, you have to set up an instruction > sequence in the current endianness, up to the system call instruction > for the endian switch, followed by instructions that make sense in the > other endianness. You also have to be prepared for the fact that > every single datum in memory that's larger than a byte is going to > appear to change. So the chain of stack frames will no longer make > sense after the call, for instance. So I'm not quite comprehending something in the example program. It's changing from big-endian to little-endian, right? So what happens when do_le_switch() returns? (Or is this function simply inlined code?) Above, you just said the stack frames will no longer make sense... (I suppose more generally, I'm wondering: given that the endianess of instructions changes dynamically after this call, it sounds to me like compiled C code would no longer execute after the switch. Clearly, I'm missing something.) Cheers, Michael > > This system call is also unusual in that it doesn't return a value in > R3 and an error indication in condition register 0 like other system > calls. In fact it doesn't affect any registers except for R11 and > R12. > >> (It appears not, but I better check.) If not then how does one determine >> the current state? > > The sequence of bytes in memory for the system call instruction to > switch from big endian to little endian is different from the sequence > of bytes for the LE to BE switch, because the system call instruction, > and every other instruction you execute, has to be in the current > endianness. (All instructions are 4 bytes long.) So I don't think > there's really any possibility that you could be unaware of the > current setting. > > There is one point where you might be unsure of the current state - > immediately after doing the endian-switch system call, if it could > have failed because the processor lacks little-endian support or the > kernel is too old to support the system call. And of course you can't > just use a conditional branch to test whether the system call reported > an error because the byte sequence you need to make that conditional > branch instruction depends on what endian mode you're in. (That is > why I didn't bother making this system call return an error indication > in the usual manner.) > > Fortunately, it turns out that a "b .+12" instruction (branch to the > instruction 12 bytes after this one) is a no-op if interpreted in > little-endian mode. So one can use that to direct the flow of control > one way or the other depending on whether the mode switch happened. > >> * Is any wrapper support for this interface going into glibc, do you know? > > I highly doubt it, since it breaks the normal C execution model so > completely. You really need to know what you're doing to use it - > particularly since we don't have toolchain support for generating > little-endian instructions at present. > > Paul. > -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ man-pages online: http://www.kernel.org/doc/man-pages/online_pages.html Found a bug? http://www.kernel.org/doc/man-pages/reporting_bugs.html |
From: Paul M. <pa...@sa...> - 2008-09-02 23:36:50
|
Michael Kerrisk writes: > Thanks for taking the time time to provide all that detail. Is that > otherwise documented somewhere? The little-endian mode is documented in the Power Architecture specification, available from the page at: http://www.power.org/resources/downloads/ Most of what I wrote was just expanding on the consequences of both instructions and data changing endianness. > And by the way, what do you call this system call? endian_switch(), I guess. > So I'm not quite comprehending something in the example program. It's > changing from big-endian to little-endian, right? So what happens > when do_le_switch() returns? (Or is this function simply inlined > code?) Above, you just said the stack frames will no longer make > sense... (I suppose more generally, I'm wondering: given that the > endianess of instructions changes dynamically after this call, it > sounds to me like compiled C code would no longer execute after the > switch. Clearly, I'm missing something.) The ".long 0x02000044" is a system call instruction in little-endian format. So the "sc" (system call) in the asm switches from big-endian to little-endian, and the ".long 0x02000044" immediately switches back to big-endian (since the syscall doesn't alter the syscall number in r0, it's still valid for the second syscall). If the endianness doesn't get change to little-endian, then since 0x02000044 is an illegal instruction in big-endian mode, the program will get a SIGILL, which it catches and reports failure. Paul. |
From: Michael K. <mtk...@go...> - 2008-09-03 08:21:44
|
Hi Paul, Paul Mackerras wrote: > Michael Kerrisk writes: > >> Thanks for taking the time time to provide all that detail. Is that >> otherwise documented somewhere? > > The little-endian mode is documented in the Power Architecture > specification, available from the page at: > > http://www.power.org/resources/downloads/ > > Most of what I wrote was just expanding on the consequences of both > instructions and data changing endianness. > >> And by the way, what do you call this system call? > > endian_switch(), I guess. > >> So I'm not quite comprehending something in the example program. It's >> changing from big-endian to little-endian, right? So what happens >> when do_le_switch() returns? (Or is this function simply inlined >> code?) Above, you just said the stack frames will no longer make >> sense... (I suppose more generally, I'm wondering: given that the >> endianess of instructions changes dynamically after this call, it >> sounds to me like compiled C code would no longer execute after the >> switch. Clearly, I'm missing something.) > > The ".long 0x02000044" is a system call instruction in little-endian > format. So the "sc" (system call) in the asm switches from big-endian > to little-endian, and the ".long 0x02000044" immediately switches back > to big-endian (since the syscall doesn't alter the syscall number in > r0, it's still valid for the second syscall). Thanks. That was the missing piece ;-). > If the endianness doesn't get change to little-endian, then since > 0x02000044 is an illegal instruction in big-endian mode, the program > will get a SIGILL, which it catches and reports failure. Okay. Thanks! Michael -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ man-pages online: http://www.kernel.org/doc/man-pages/online_pages.html Found a bug? http://www.kernel.org/doc/man-pages/reporting_bugs.html |
From: Subrata M. <su...@li...> - 2008-09-02 09:58:26
|
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 Paul. I will test that and get back to you with the Patch that integrates it to LTP. Regards-- Subrata > Paul. > |
From: Subrata M. <su...@li...> - 2008-09-03 06:45:18
|
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 <pa...@sa...> Signed-off-by: Subrata Modak <su...@li...> 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 <pa...@sa...> */ +/* */ +/* History: Created - Sep 02 2008 - Paul Mackerras <pa...@sa...> */ +/* Ported to LTP */ +/* - Sep 02 2008 */ +/* - Subrata Modak <su...@li...> */ +/* */ +/******************************************************************************/ + +#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. > |
From: Subrata M. <su...@li...> - 2008-09-03 06:48:26
|
Paul, Do you have other system specific tests that you can share with LTP as well ? Regards-- Subrata 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 <pa...@sa...> > Signed-off-by: Subrata Modak <su...@li...> > > 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 <pa...@sa...> > */ > +/* > */ > +/* History: Created - Sep 02 2008 - Paul Mackerras > <pa...@sa...> */ > +/* Ported to LTP > */ > +/* - Sep 02 2008 > */ > +/* - Subrata Modak <su...@li...> > */ > +/* > */ > +/******************************************************************************/ > + > +#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. > > |
From: Subrata M. <su...@li...> - 2008-09-03 06:58:43
|
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 <pa...@sa...> > Signed-off-by: Subrata Modak <su...@li...> > 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 [root@tundro5 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 <pa...@sa...> > */ > +/* > */ > +/* History: Created - Sep 02 2008 - Paul Mackerras > <pa...@sa...> */ > +/* Ported to LTP > */ > +/* - Sep 02 2008 > */ > +/* - Subrata Modak <su...@li...> > */ > +/* > */ > +/******************************************************************************/ > + > +#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. > > |
From: Subrata M. <su...@li...> - 2008-09-04 12:34:43
|
On Wed, 2008-09-03 at 12:13 +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 <pa...@sa...> > Signed-off-by: Subrata Modak <su...@li...> This is being added to LTP. Thanks Paul for contributing this to LTP. 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 <pa...@sa...> > */ > +/* > */ > +/* History: Created - Sep 02 2008 - Paul Mackerras > <pa...@sa...> */ > +/* Ported to LTP > */ > +/* - Sep 02 2008 > */ > +/* - Subrata Modak <su...@li...> > */ > +/* > */ > +/******************************************************************************/ > + > +#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 > Ltp...@li... > https://lists.sourceforge.net/lists/listinfo/ltp-list |
From: Paul M. <pa...@sa...> - 2008-09-05 01:51:10
|
Subrata Modak writes: > And here goes the Patch. Paul, you can propose more modification to this > if you wish to: Looks OK as far as I can see, except that I wonder why you check for being root: > + /* Check whether we are root*/ > + if (geteuid() != 0) { > + tst_brkm(TBROK, tst_exit, "Test must be run as root"); > + } since there is no restriction by the kernel on which processes can use this system call. A process can't do anything to any other process using this system call, so there's no reason to restrict it. > + tst_resm(TPASS, "switch() syscall tests passed"); Also you might like to call it "endian_switch()" rather than just "switch()". Paul. |
From: Subrata M. <su...@li...> - 2008-09-05 06:35:57
|
Thanks Paul. On Fri, 2008-09-05 at 11:50 +1000, Paul Mackerras wrote: > Subrata Modak writes: > > > And here goes the Patch. Paul, you can propose more modification to this > > if you wish to: > > Looks OK as far as I can see, except that I wonder why you check for > being root: > > > + /* Check whether we are root*/ > > + if (geteuid() != 0) { > > + tst_brkm(TBROK, tst_exit, "Test must be run as root"); > > + } > > since there is no restriction by the kernel on which processes can use > this system call. A process can't do anything to any other process > using this system call, so there's no reason to restrict it. I have addressed this, > > > + tst_resm(TPASS, "switch() syscall tests passed"); > > Also you might like to call it "endian_switch()" rather than just > "switch()". as well as this. You can see that here: http://ltp.cvs.sourceforge.net/ltp/ltp/testcases/kernel/syscalls/switch/switch01.c Paul, Would you also like to share other tests with us, that you might have written for System specific stuff or generally. Regards-- Subrata > > Paul. |