Skip to contentSkip to conversation

2.6.18-rc3-mm2 Compile Error

PATCH In review Matt Reuther 4 participants 8 messages Aug 7, 2006 – Aug 10, 2006 Timekeeping, clocksource core, NTP, alarmtimer

lore
Share & tools
lore
#0 lore raw

I got an Error while compiling 2.6.18-rc3-mm2:

  AR      arch/i386/lib/lib.a
  GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1

kernel/built-in.o(.text+0x45667): In function `bacct_add_tsk':
include/linux/time.h:130: undefined reference to `__divdi3'
make: *** [.tmp_vmlinux1] Error 1

I attached the .config file.

Have a good day.
Matt

#1 lore raw
Quoted 9 lines · On Sun, 6 Aug 2006 23:30:19 -0400 Matt Reuther <[email protected]> wrote:

I got an Error while compiling 2.6.18-rc3-mm2:

  AR      arch/i386/lib/lib.a
  GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
Quoted 6 lines

kernel/built-in.o(.text+0x45667): In function `bacct_add_tsk':
include/linux/time.h:130: undefined reference to `__divdi3'
make: *** [.tmp_vmlinux1] Error 1

I attached the .config file.

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.18-rc3/2.6.18-rc3-mm2/hot-fixes/csa-basic-accounting-over-taskstats-fix.patch should fix this, thanks.

#2 lore raw
Quoted 16 lines · Andrew Morton

On Sun, 6 Aug 2006 23:30:19 -0400

Quoted 13 lines · Matt Reuther

I got an Error while compiling 2.6.18-rc3-mm2:

  AR      arch/i386/lib/lib.a
  GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1

kernel/built-in.o(.text+0x45667): In function `bacct_add_tsk':
include/linux/time.h:130: undefined reference to `__divdi3'
make: *** [.tmp_vmlinux1] Error 1

Quoted 5 lines
Quoted 1 line

I attached the .config file.

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.18-rc3/2. 6.18-rc3-mm2/hot-fixes/csa-basic-accounting-over-taskstats-fix.patch should fix this, thanks.

It does indeed fix the error. Thank you!

Matt

#3 lore raw

PATCH 1/1 add timespec_to_us() and use it in kernel/tsacct.c

In reply to Andrew Morton
Quoted 16 lines · Andrew Morton
Quoted 13 lines · On Sun, 6 Aug 2006 23:30:19 -0400 Matt Reuther <[email protected]> wrote:

I got an Error while compiling 2.6.18-rc3-mm2:

  AR      arch/i386/lib/lib.a
  GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1

kernel/built-in.o(.text+0x45667): In function `bacct_add_tsk':
include/linux/time.h:130: undefined reference to `__divdi3'
make: *** [.tmp_vmlinux1] Error 1

Quoted 5 lines
Quoted 2 lines

I attached the .config file.

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.18-rc3/2.6.18-rc3-mm2/hot-fixes/csa-basic-accounting-over-taskstats-fix.patch should fix this, thanks.

This doesn't look correct since do_div() does not guarantee to return more than 32bit.

What about the patch below that adds a timespec_to_us() to time.h and uses this function in kernel/tsacct.c?

<-- snip -->

This patch adds a timespec_to_us() to include/linux/time.h and uses it to fix a compile error in kernel/tsacct.c .

---

 include/linux/time.h |   12 ++++++++++++
 kernel/tsacct.c      |    2 +-
 2 files changed, 13 insertions(+), 1 deletion(-)
include/linux/time.h renamed from include/linux/time.h.old +12 -0
@@ -132,6 +132,18 @@
 }
 
 /**
+ * timespec_to_us - Convert timespec to microseconds
+ * @ts:		pointer to the timespec variable to be converted
+ *
+ * Returns the scalar microsecond representation of the timespec
+ * parameter.
+ */
+static inline s64 timespec_to_us(const struct timespec *ts)
+{
+	return ((s64) ts->tv_sec * USEC_PER_SEC) + ts->tv_nsec / NSEC_PER_USEC;
+}
+
+/**
  * timeval_to_ns - Convert timeval to nanoseconds
  * @ts:		pointer to the timeval variable to be converted
  *
kernel/tsacct.c renamed from kernel/tsacct.c.old +1 -1
@@ -36,7 +36,7 @@
 	do_posix_clock_monotonic_gettime(&uptime);
 	ts = timespec_sub(uptime, current->group_leader->start_time);
 	/* rebase elapsed time to usec */
-	stats->ac_etime = (timespec_to_ns(&ts))/NSEC_PER_USEC;
+	stats->ac_etime = timespec_to_us(&ts);
 	stats->ac_btime = xtime.tv_sec - ts.tv_sec;
 	if (thread_group_leader(tsk)) {
 		stats->ac_exitcode = tsk->exit_code;
#4 lore raw

Re: [-mm patch] add timespec_to_us() and use it in kernel/tsacct.c

Quoted 17 lines · On Mon, 7 Aug 2006 15:32:41 +0200 Adrian Bunk <[email protected]> wrote:
Quoted 16 lines · Andrew Morton
Quoted 13 lines · On Sun, 6 Aug 2006 23:30:19 -0400 Matt Reuther <[email protected]> wrote:

I got an Error while compiling 2.6.18-rc3-mm2:

  AR      arch/i386/lib/lib.a
  GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1

kernel/built-in.o(.text+0x45667): In function `bacct_add_tsk':
include/linux/time.h:130: undefined reference to `__divdi3'
make: *** [.tmp_vmlinux1] Error 1

Quoted 8 lines
Quoted 5 lines
Quoted 2 lines

I attached the .config file.

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.18-rc3/2.6.18-rc3-mm2/hot-fixes/csa-basic-accounting-over-taskstats-fix.patch should fix this, thanks.

This doesn't look correct since do_div() does not guarantee to return more than 32bit.

eh? We use do_div() to do 64bit/something all the time??

Quoted 2 lines

What about the patch below that adds a timespec_to_us() to time.h and uses this function in kernel/tsacct.c?

Seems reasonable, but it'd be better as two patches..

Do we do timespec->microseconds anywhere else?

#5 lore raw

Re: [-mm patch] add timespec_to_us() and use it in kernel/tsacct.c

Quoted 23 lines · Andrew Morton
Quoted 20 lines · On Mon, 7 Aug 2006 15:32:41 +0200 Adrian Bunk <[email protected]> wrote:
Quoted 19 lines · Andrew Morton
Quoted 15 lines · On Sun, 6 Aug 2006 23:30:19 -0400 Matt Reuther <[email protected]> wrote:

I got an Error while compiling 2.6.18-rc3-mm2:

  AR      arch/i386/lib/lib.a
  GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1

kernel/built-in.o(.text+0x45667): In function `bacct_add_tsk':
include/linux/time.h:130: undefined reference to `__divdi3'
make: *** [.tmp_vmlinux1] Error 1

I attached the .config file.

Quoted 7 lines
Quoted 5 lines
Quoted 2 lines

ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.18-rc3/2.6.18-rc3-mm2/hot-fixes/csa-basic-accounting-over-taskstats-fix.patch should fix this, thanks.

This doesn't look correct since do_div() does not guarantee to return more than 32bit.

eh? We use do_div() to do 64bit/something all the time??

Sorry, this was my thinko.

Quoted 4 lines
Quoted 2 lines

What about the patch below that adds a timespec_to_us() to time.h and uses this function in kernel/tsacct.c?

Seems reasonable, but it'd be better as two patches..

Feel free to split this patch however you want, I thought it was not worth splitting it.

Quoted 1 line

Do we do timespec->microseconds anywhere else?

I haven't found another place.

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed
#6 lore raw

Re: [-mm patch] add timespec_to_us() and use it in kernel/tsacct.c

In reply to Andrew Morton
Quoted 6 lines · Andrew Morton
Quoted 2 lines · On Mon, 7 Aug 2006 15:32:41 +0200 Adrian Bunk <[email protected]> wrote:

This doesn't look correct since do_div() does not guarantee to return more than 32bit.

eh? We use do_div() to do 64bit/something all the time??

Indeed. If do_div didn't return a 64-bit quotient then printk("%lld", ...) wouldn't work. (The remainder is 32-bit of course, because the divisor is 32-bit.)

Paul.

#7 lore raw

Re: [-mm patch] add timespec_to_us() and use it in kernel/tsacct.c

In reply to Adrian Bunk
Quoted 47 lines · Adrian Bunk
Quoted 1 line · Andrew Morton

On Sun, 6 Aug 2006 23:30:19 -0400

What about the patch below that adds a timespec_to_us() to time.h and uses this function in kernel/tsacct.c?

<-- snip -->

This patch adds a timespec_to_us() to include/linux/time.h and uses it to fix a compile error in kernel/tsacct.c .

---

 include/linux/time.h |   12 ++++++++++++
 kernel/tsacct.c      |    2 +-
 2 files changed, 13 insertions(+), 1 deletion(-)

--- linux-2.6.18-rc3-mm2-full/include/linux/time.h.old 2006-08-06
19:56:50.000000000 +0200 +++
linux-2.6.18-rc3-mm2-full/include/linux/time.h 2006-08-06
20:00:51.000000000 +0200 @@ -132,6 +132,18 @@
}

/**
+ * timespec_to_us - Convert timespec to microseconds
+ * @ts: pointer to the timespec variable to be converted
+ *
+ * Returns the scalar microsecond representation of the timespec
+ * parameter.
+ */

include/linux/time.h renamed from include/linux/time.h.old +6 -1
+static inline s64 timespec_to_us(const struct timespec *ts)
+{
+	return ((s64) ts->tv_sec * USEC_PER_SEC) + ts->tv_nsec / NSEC_PER_USEC;
+}
+
+/**
  * timeval_to_ns - Convert timeval to nanoseconds
  * @ts:		pointer to the timeval variable to be converted
  *
--- linux-2.6.18-rc3-mm2-full/kernel/tsacct.c.old	2006-08-06

19:54:45.000000000 +0200 +++
linux-2.6.18-rc3-mm2-full/kernel/tsacct.c 2006-08-06 19:56:44.000000000
+0200 @@ -36,7 +36,7 @@

kernel/tsacct.c line 42

Quoted 8 lines
kernel/tsacct.c renamed from kernel/tsacct.c.old +1 -1
 	do_posix_clock_monotonic_gettime(&uptime);
 	ts = timespec_sub(uptime, current->group_leader->start_time);
 	/* rebase elapsed time to usec */
-	stats->ac_etime = (timespec_to_ns(&ts))/NSEC_PER_USEC;
+	stats->ac_etime = timespec_to_us(&ts);
 	stats->ac_btime = xtime.tv_sec - ts.tv_sec;
 	if (thread_group_leader(tsk)) {
 		stats->ac_exitcode = tsk->exit_code;

This patch also compiles for me without errors.

Matt