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

Reply via email to