From: Paul H. Hargrove (PHHargrove_at_lbl_dot_gov)
Date: Fri Feb 18 2005 - 15:42:43 PST
Ulisses, Thanks for the patches. I've been using a SuSE 9.2 system where none of these things came up. So, I appreciate your trying it out on a FC3 system. I'll incorporate your fixes in a future releases. Attached is my alternate approach to the timeval<->jiffies change. Could you give it a try? -Paul Ulisses wrote: >On Fri, 2005-02-18 at 11:05 -0800, Paul H. Hargrove wrote: > > >>You are receiving this message because you have e-mailed us in the past >>with questions about the development status of Berkeley Lab >>Checkpoint/Restart (BLCR) for Linux. >> >> > > Thank you! :-) > > > >>This release adds the experimental Linux 2.6.x support that many of you >>have asked me about. It is still only for ia32 (no Opteron yet, but I >>am working on it). The 2.6 support is much less tested than the 2.4 >>kernel support. So, we'd really apreciate hearing of your success or >>failure with BLCR 0.4.0. >> >> > > I've just tried to compile BLCR 0.4.0 on a Fedora Core 3 system running >kernel 2.6.10-1.766_FC3 and gcc 3.4.2. I downloaded the BLCR package, >unpacked it to /tmp and ran the configure: > > $ ./configure --with-linux=/lib/modules/2.6.10-1.766_FC3/build --with- >system-map=/boot/System.map-2.6.10-1.766_FC3 --prefix=/tmp/blcr > > Everything seemed ok, but when I tried to compile it by typing 'make', >I noticed some little problems: > > - libcr won't be compiled unless the following patch is applied because >compilation ends up with this error from linux/include/config.h: >"#error including kernel header in userspace; use the glibc headers >instead!" > >--- blcr-0.4.0/libcr/Makefile.am.orig 2005-02-18 19:49:36.676842325 >-0200 >+++ blcr-0.4.0/libcr/Makefile.am 2005-02-18 19:50:13.771503858 >-0200 >@@ -27,8 +27,7 @@ > -D_REENTRANT\ > -I$(top_builddir)/include\ > -I$(top_srcdir)/include\ >- -I$(srcdir)/arch/@CR_ARCH@/\ >- -I@LINUX_SRC@/include >+ -I$(srcdir)/arch/@CR_ARCH@/ > > EXTRA_DIST=arch license.txt > dist-hook: > > - gcc doesn't like the inlining of cr_barrier_init, cr_barrier_enter >and cr_barrier_break, but it doesn't stop the compilation process. It >says "cr_module/cr_barrier.h:57: sorry, unimplemented: inlining failed >in call to 'cr_barrier_break': function body not available" and when the >function is used "cr_module/kbuild/cr_chkpt_req.c:113: sorry, >unimplemented: called from here". > > - the functions timeval_to_jiffies() and jiffies_to_timeval() already >exist in linux kernel 2.6 in linux/include/jiffies.h, so I guess the >following patches make sense. > >--- blcr-0.4.0/configure.ac.orig 2005-02-18 15:21:35.000000000 >-0200 >+++ blcr-0.4.0/configure.ac 2005-02-18 20:30:02.448827538 -0200 >@@ -436,7 +436,7 @@ > > ## Now we check for specific kernel features... > >-CR_CHECK_KERNEL_COMPILE([timeval_to_jiffies],[ >+CR_CHECK_KERNEL_COMPILE([2.4 timeval_to_jiffies],[ > #include <linux/time.h> > ],[ > #ifdef timeval_to_jiffies >@@ -445,10 +445,29 @@ > int x = sizeof(&timeval_to_jiffies); > #endif > ]) >+CR_CHECK_KERNEL_COMPILE([2.6 timeval_to_jiffies],[ >+ #include <linux/jiffies.h> >+ ],[ >+ #ifdef timeval_to_jiffies >+ /* OK, it exists as a macro */ >+ #else >+ int x = sizeof(&timeval_to_jiffies); >+ #endif >+ ]) > # OK if missing >-CR_CHECK_KERNEL_COMPILE([jiffies_to_timeval],[ >+ >+CR_CHECK_KERNEL_COMPILE([2.4 jiffies_to_timeval],[ > #include <linux/time.h> >- ],[ >+ ],[ >+ #ifdef jiffies_to_timeval >+ /* OK, it exists as a macro */ >+ #else >+ int x = sizeof(&jiffies_to_timeval); >+ #endif >+ ]) >+CR_CHECK_KERNEL_COMPILE([2.6 jiffies_to_timeval],[ >+ #include <linux/jiffies.h> >+ ],[ > #ifdef jiffies_to_timeval > /* OK, it exists as a macro */ > #else > > >--- blcr-0.4.0/cr_module/cr_module.h.orig 2005-02-16 >20:34:31.000000000 -0200 >+++ blcr-0.4.0/cr_module/cr_module.h 2005-02-18 20:41:39.844646017 >-0200 >@@ -244,7 +244,7 @@ > cr_rstrt_req_t *rstrt_req; > } cr_pdata_t; > >-#if !HAVE_TIMEVAL_TO_JIFFIES >+#if !defined(HAVE_2_4_TIMEVAL_TO_JIFFIES) && !defined >(HAVE_2_6_TIMEVAL_TO_JIFFIES) > // Basic adaptation of timespec_to_jiffies from >include/linux/time.h > static __inline__ unsigned long > timeval_to_jiffies(struct timeval *value) >@@ -260,7 +260,7 @@ > } > #endif > >-#if !HAVE_JIFFIES_TO_TIMEVAL >+#if !defined(HAVE_2_4_JIFFIES_TO_TIMEVAL) && !defined >HAVE_2_6_JIFFIES_TO_TIMEVAL) > // Basic adaptation of jiffies_to_timeval from >include/linux/time.h > static __inline__ void > jiffies_to_timeval(unsigned long jiffies, struct timeval *value) > > And I finally got stuck with TASK_ZOMBIE being used but it's defined >nowhere in linux kernel 2.6. The task_struct struct has the exit_state >member, that can be either EXIT_ZOMBIE or EXIT_DEAD. Maybe >cr_module/kbuild/cr_chkpt_req.c and cr_module/kbuild/cr_rstrt_req.c >should test for exit_state being EXIT_ZOMBIE? > > Well, that's it.. I hope this feedback helps you guys (and I also hope >my e-mail client doesn't mess up all the pacthes). Keep up the nice >work. :-) > >Best regards, > >-- Ulisses > > > > Index: configure.ac =================================================================== RCS file: /var/local/cvs/lbnl_cr/configure.ac,v retrieving revision 1.130 diff -u -r1.130 configure.ac --- configure.ac 18 Feb 2005 21:03:27 -0000 1.130 +++ configure.ac 18 Feb 2005 23:38:57 -0000 @@ -433,11 +433,17 @@ CR_CHECK_KERNEL_COMPILE([linux/syscall.h],[ #include <linux/syscall.h> ],[ ]) +CR_CHECK_KERNEL_COMPILE([linux/jiffies.h],[ + #include <linux/jiffies.h> + ],[ ]) ## Now we check for specific kernel features... CR_CHECK_KERNEL_COMPILE([timeval_to_jiffies],[ #include <linux/time.h> + #if HAVE_LINUX_JIFFIES_H + #include <linux/jiffies.h> + #endif ],[ #ifdef timeval_to_jiffies /* OK, it exists as a macro */ @@ -448,6 +454,9 @@ # OK if missing CR_CHECK_KERNEL_COMPILE([jiffies_to_timeval],[ #include <linux/time.h> + #if HAVE_LINUX_JIFFIES_H + #include <linux/jiffies.h> + #endif ],[ #ifdef jiffies_to_timeval /* OK, it exists as a macro */