Hi,
On Tue, 2009-03-10 at 13:54 +0100, Francesco RUNDO wrote:
> Hi All,
>
> I'd like to submit a change to be done on utimensat testcase.
>
> This test performs a kernel version check both at build time and
> runtime. At build time, the test performs a check at makefile level:
>
> @set -e; $(MAKE) check_for_utimensat_support; \
> if './check_for_utimensat_support' > /dev/null 2>&1; then \
> $(MAKE) utimensat01; \
> else echo "System does not support utimensat syscall support"; true; fi
>
> check_for_utimensat_support: check_for_utimensat_support.c
> $(CC) $(CFLAGS) -o $@ $< ../../../../lib/tst_kvercmp.c
> -I../../../../include
>
> The same check is also repeated in the "install" target of the same
> Makefile.
> Moreover, at runtime the script "utimensat_tests.sh" used to run the
> test (by standard runltp script) performs again the same check:
>
> if tst_kvercmp 2 6 22 ; then
> tst_resm TCONF "System kernel version is less than 2.6.22"
> tst_resm TCONF "Cannot execute test"
> exit 0
> fi
>
> Now, my opinion about that is the following:
>
> 1) for i386 arch:
> One of the above checks should be removed.
True.
>
> 2) for cross-build:
> The above structure of the test is really a problem. In fact, at build
> time the Makefile (as it is) cross-builds (by ${CC} env var.) the binary
> "check_for_utimensat_support" which, clearly, can't be executed on the
> host side (even though it will detect the "host" kernel version and not
> the "target" ones!).
> I cross-build & run LTP on SH based archs so that the utimensat testcase
> failed at runtime as the binary utimensat01 wasn't copied to
> $LTPROOT/testcases/bin due to error on "check_for_utimensat_support"
> execution (Exec format error. Wrong Architecture).
>
> I've solved the above problem disabling the check of the kernel version
> at build time (removing the check on the Makefile). I keep only the
> check at runtime.
Yes, that is the way to solve the CROSS build problems. Hence, i have
checked in this portion of the patch. You can also look into some other
tests (probably testcases/kernel/containers, etc) where the same has
been done, and needs rectification.
>
> At the end, I'd like to suggest to use the macro(s) reported on the
> header "linux/version.h" instead of a custom approach, for checking the
> kernel version.
What happens when your distro kernel has say 2.6.18 kernel. And then you
get the 2.6.28 sources, build and reboot in the new kernel ??
tst_kvercmp() compares with the presently running kernel (internally
through uname -a), rather than something installed earlier.
Regards--
Subrata
> The attached patch shows the above approach applied to the
> "check_for_utimensat_support.c" source file.
>
> I'm using an LTP-20090131 + kernel 2.6.23. The hw is SH.
>
> Please, let me know about the issues above described.
>
> Thanks so much.
> Best Regards,
> FR
>
> plain text document attachment
> (ltp-full-20090131-remove-kern_check-utimensat.patch)
> This patch removes the kernel version check at build time as it can't be used
> for test cross-building. Moreover, the same check is also performed at
> runtime.
> Signed-off-by: Francesco Rundo <[email protected]>
> --- ltp-full-20090131/testcases/kernel/syscalls/utimensat/Makefile.original
> 2009-03-10 11:45:56.109998000 +0100
> +++ ltp-full-20090131/testcases/kernel/syscalls/utimensat/Makefile
> 2009-03-10 13:44:35.889999000 +0100
> @@ -23,10 +23,8 @@
> TARGETS = $(patsubst %.c,%,$(SRCS))
>
> all:
> - @set -e; $(MAKE) check_for_utimensat_support; \
> - if './check_for_utimensat_support' > /dev/null 2>&1; then \
> - $(MAKE) utimensat01; \
> - else echo "System does not support utimensat syscall support"; true; fi
> + @set -e; $(MAKE) check_for_utimensat_support;
> + $(MAKE) utimensat01;
>
> check_for_utimensat_support: check_for_utimensat_support.c
> $(CC) $(CFLAGS) -o $@ $< ../../../../lib/tst_kvercmp.c
> -I../../../../include
> @@ -35,9 +33,7 @@
> @set -e; \
> chmod 755 utimensat_tests.sh; \
> ln -f utimensat_tests.sh ../../../bin/utimensat_tests.sh; \
> - if './check_for_utimensat_support' > /dev/null 2>&1; then \
> - for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done \
> - else echo "System does not support utimensat syscall support"; true; fi
> + for i in $(TARGETS); do ln -f $$i ../../../bin/$$i ; done
>
> clean:
> rm -f $(TARGETS)
> plain text document attachment
> (ltp-full-20090131-fix-utimensat-check-kernel.patch)
> This patch replaces a custom method to check kernel version with a standard
> ones.
> Signed-off-by: Francesco Rundo <[email protected]>
> ---
> ltp-full-20090131/testcases/kernel/syscalls/utimensat/check_for_utimensat_support.c.original
> 2009-03-10 11:11:20.669999000 +0100
> +++
> ltp-full-20090131/testcases/kernel/syscalls/utimensat/check_for_utimensat_support.c
> 2009-03-10 11:14:39.819997000 +0100
> @@ -1,8 +1,9 @@
> #include <stdio.h>
> #include <test.h>
> +#include <linux/version.h>
>
> int kernel_support_available(void) {
> - if (tst_kvercmp(2,6,22) < 0)
> + if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22))
> return 1;
> return 0;
> }
> ------------------------------------------------------------------------------
> _______________________________________________
> Ltp-list mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ltp-list
------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list