* 2.6.32-rc3: floating-point build failure (undefined reference to `__udivdi3' in menu governor) [not found] <alpine.LFD.2.01.0910041727310.3432@localhost.localdomain> @ 2009-10-07 10:41 ` Andreas Mohr 2009-10-07 14:23 ` Arjan van de Ven 0 siblings, 1 reply; 9+ messages in thread From: Andreas Mohr @ 2009-10-07 10:41 UTC (permalink / raw) To: linux-kernel; +Cc: Arjan van de Ven, Adam Belay, linux-acpi Hi, didn't find any report about this, so... LD .tmp_vmlinux1 drivers/built-in.o(.text+0xd85a1): In function `menu_select': drivers/cpuidle/governors/menu.c:212: undefined reference to `__udivdi3' make: *** [.tmp_vmlinux1] Error 1 The symbol being __udivdi3 sounds to me like it's illegal FP use here. This is not necessarily a -rc3 regression, though (currently running 2.6.29-rc7 on this box). # gcc -v Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.3/specs Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux Thread model: posix gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-49) (yes, I know... ;) Andreas Mohr ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: 2.6.32-rc3: floating-point build failure (undefined reference to `__udivdi3' in menu governor) 2009-10-07 10:41 ` 2.6.32-rc3: floating-point build failure (undefined reference to `__udivdi3' in menu governor) Andreas Mohr @ 2009-10-07 14:23 ` Arjan van de Ven 2009-10-07 17:34 ` Andreas Mohr 0 siblings, 1 reply; 9+ messages in thread From: Arjan van de Ven @ 2009-10-07 14:23 UTC (permalink / raw) To: Andreas Mohr; +Cc: linux-kernel, Adam Belay, linux-acpi Andreas Mohr wrote: > Hi, > > didn't find any report about this, so... > > LD .tmp_vmlinux1 > drivers/built-in.o(.text+0xd85a1): In function `menu_select': > drivers/cpuidle/governors/menu.c:212: undefined reference to `__udivdi3' > make: *** [.tmp_vmlinux1] Error 1 > > # gcc -v > Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.3/specs > Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux > Thread model: posix > gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-49) seems you're the only user of this left. it's not floating point but a 64 bit division. The only one I can imagine is the one on line 213 looking at it, can you try sticking (u32) at the end of line 212; that multiply is not very likely to exceed 32 bits ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: 2.6.32-rc3: floating-point build failure (undefined reference to `__udivdi3' in menu governor) 2009-10-07 14:23 ` Arjan van de Ven @ 2009-10-07 17:34 ` Andreas Mohr 2009-10-07 17:45 ` Arjan van de Ven 2009-10-07 17:45 ` Kyle McMartin 0 siblings, 2 replies; 9+ messages in thread From: Andreas Mohr @ 2009-10-07 17:34 UTC (permalink / raw) To: Arjan van de Ven; +Cc: Andreas Mohr, linux-kernel, linux-acpi Hi, On Wed, Oct 07, 2009 at 07:23:07AM -0700, Arjan van de Ven wrote: > Andreas Mohr wrote: >> Hi, >> >> didn't find any report about this, so... >> >> LD .tmp_vmlinux1 >> drivers/built-in.o(.text+0xd85a1): In function `menu_select': >> drivers/cpuidle/governors/menu.c:212: undefined reference to `__udivdi3' >> make: *** [.tmp_vmlinux1] Error 1 >> >> # gcc -v >> Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.3/specs >> Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux >> Thread model: posix >> gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-49) > > seems you're the only user of this left. Oh my... > it's not floating point but a 64 bit division. > The only one I can imagine is the one on line 213 > > looking at it, can you try sticking (u32) at the end of line 212; that multiply is not very likely to exceed 32 bits Nopeee. data->predicted_us = DIV_ROUND_CLOSEST((u32) data->expected_us * data->correction_factor[data->bucket], (u32)RESOLUTION * DECAY); It did properly rebuild drivers/cpuidle/governors/menu.o. Still happening. IOW it must be somewhere inside the DIV_ROUND_CLOSEST macro or so. Andreas Mohr ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: 2.6.32-rc3: floating-point build failure (undefined reference to `__udivdi3' in menu governor) 2009-10-07 17:34 ` Andreas Mohr @ 2009-10-07 17:45 ` Arjan van de Ven 2009-10-07 17:45 ` Kyle McMartin 1 sibling, 0 replies; 9+ messages in thread From: Arjan van de Ven @ 2009-10-07 17:45 UTC (permalink / raw) To: Andreas Mohr; +Cc: linux-kernel, linux-acpi Andreas Mohr wrote: > Hi, >> looking at it, can you try sticking (u32) at the end of line 212; that multiply is not very likely to exceed 32 bits > > Nopeee. > > data->predicted_us = DIV_ROUND_CLOSEST((u32) > data->expected_us * data->correction_factor[data->bucket], > (u32)RESOLUTION * DECAY); > > It did properly rebuild drivers/cpuidle/governors/menu.o. > Still happening. > IOW it must be somewhere inside the DIV_ROUND_CLOSEST macro or so. it looks like your GCC has a problem dividing by a power of two though; both DECAY and RESOLUTION are powers of two... ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: 2.6.32-rc3: floating-point build failure (undefined reference to `__udivdi3' in menu governor) 2009-10-07 17:34 ` Andreas Mohr 2009-10-07 17:45 ` Arjan van de Ven @ 2009-10-07 17:45 ` Kyle McMartin 2009-10-09 16:01 ` Andreas Mohr 1 sibling, 1 reply; 9+ messages in thread From: Kyle McMartin @ 2009-10-07 17:45 UTC (permalink / raw) To: Andreas Mohr; +Cc: Arjan van de Ven, linux-kernel, linux-acpi On Wed, Oct 07, 2009 at 07:34:58PM +0200, Andreas Mohr wrote: > Nopeee. > > data->predicted_us = DIV_ROUND_CLOSEST((u32) > data->expected_us * data->correction_factor[data->bucket], > (u32)RESOLUTION * DECAY); > > It did properly rebuild drivers/cpuidle/governors/menu.o. > Still happening. > IOW it must be somewhere inside the DIV_ROUND_CLOSEST macro or so. > It's being a jerk and not realizing that RESOLUTION * DECAY is a power of 2, so it can just do a shift... I don't recall if gcc 3 had these magic builtins, but if it does, something like this might help since it's the u64 case that's problematic. I probably noviced this in some trivial way, but it's a thought. And in the most-annoying case (most of these u64 divisions are power of 2, that I've seen...) would sort things out. regards, Kyle diff --git a/include/linux/kernel.h b/include/linux/kernel.h index d3cd23f..4936eb6 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -51,6 +51,9 @@ extern const char linux_proc_banner[]; #define DIV_ROUND_CLOSEST(x, divisor)( \ { \ typeof(divisor) __divisor = divisor; \ + if (__builtin_types_compatible_p(typeof(divisor), unsigned long long) && \ + __builtin_popcountll(__divisor) == 1) \ + (((x) + ((__divisor) / 2) << __builtin_ffsll(__divisor))); \ (((x) + ((__divisor) / 2)) / (__divisor)); \ } \ ) ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: 2.6.32-rc3: floating-point build failure (undefined reference to `__udivdi3' in menu governor) 2009-10-07 17:45 ` Kyle McMartin @ 2009-10-09 16:01 ` Andreas Mohr 2009-10-09 16:32 ` Arjan van de Ven 0 siblings, 1 reply; 9+ messages in thread From: Andreas Mohr @ 2009-10-09 16:01 UTC (permalink / raw) To: Kyle McMartin; +Cc: Andreas Mohr, Arjan van de Ven, linux-kernel, linux-acpi Hi, On Wed, Oct 07, 2009 at 01:45:54PM -0400, Kyle McMartin wrote: > On Wed, Oct 07, 2009 at 07:34:58PM +0200, Andreas Mohr wrote: > > Still happening. > > IOW it must be somewhere inside the DIV_ROUND_CLOSEST macro or so. > > > > It's being a jerk and not realizing that RESOLUTION * DECAY is a power > of 2, so it can just do a shift... > > I don't recall if gcc 3 had these magic builtins, but if it does, > something like this might help since it's the u64 case that's > problematic. Uh... nope: In file included from kernel/sched.c:1818: kernel/sched_fair.c: In function `select_task_rq_fair': kernel/sched_fair.c:1366: implicit declaration of function `__builtin_popcountll' kernel/sched_fair.c:1366: implicit declaration of function `__builtin_ffsll' kernel/sched_fair.c:1366: warning: suggest parentheses around + or - inside shift kernel/sched.c: In function `update_sg_lb_stats': kernel/sched.c:3755: warning: suggest parentheses around + or - inside shift kernel/sched.c: In function `find_busiest_queue': kernel/sched.c:4050: warning: suggest parentheses around + or - inside shift make[1]: *** [kernel/sched.o] Error 1 make: *** [kernel] Error 2 Hmpf. Rather stuck now, ain'tcha, given that gcc 3.2.3 doesn't even have those? Thanks, Andreas Mohr ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: 2.6.32-rc3: floating-point build failure (undefined reference to `__udivdi3' in menu governor) 2009-10-09 16:01 ` Andreas Mohr @ 2009-10-09 16:32 ` Arjan van de Ven 2009-10-09 17:08 ` Kyle McMartin 0 siblings, 1 reply; 9+ messages in thread From: Arjan van de Ven @ 2009-10-09 16:32 UTC (permalink / raw) To: Andreas Mohr; +Cc: Kyle McMartin, linux-kernel, linux-acpi Andreas Mohr wrote: > Hi, > > On Wed, Oct 07, 2009 at 01:45:54PM -0400, Kyle McMartin wrote: >> On Wed, Oct 07, 2009 at 07:34:58PM +0200, Andreas Mohr wrote: >>> Still happening. >>> IOW it must be somewhere inside the DIV_ROUND_CLOSEST macro or so. >>> >> It's being a jerk and not realizing that RESOLUTION * DECAY is a power >> of 2, so it can just do a shift... >> >> I don't recall if gcc 3 had these magic builtins, but if it does, >> something like this might help since it's the u64 case that's >> problematic. > > Uh... nope: > > In file included from kernel/sched.c:1818: > kernel/sched_fair.c: In function `select_task_rq_fair': > kernel/sched_fair.c:1366: implicit declaration of function `__builtin_popcountll' > kernel/sched_fair.c:1366: implicit declaration of function `__builtin_ffsll' > kernel/sched_fair.c:1366: warning: suggest parentheses around + or - inside shift > kernel/sched.c: In function `update_sg_lb_stats': > kernel/sched.c:3755: warning: suggest parentheses around + or - inside shift > kernel/sched.c: In function `find_busiest_queue': > kernel/sched.c:4050: warning: suggest parentheses around + or - inside shift > make[1]: *** [kernel/sched.o] Error 1 > make: *** [kernel] Error 2 > > > Hmpf. Rather stuck now, ain'tcha, given that gcc 3.2.3 doesn't even have those? > wonder if making a new define with the value of RESOLUTION * DECAY (the actual value obviously) convinces your gcc that it really is a power of two ? ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: 2.6.32-rc3: floating-point build failure (undefined reference to `__udivdi3' in menu governor) 2009-10-09 16:32 ` Arjan van de Ven @ 2009-10-09 17:08 ` Kyle McMartin 2009-10-09 17:12 ` Arjan van de Ven 0 siblings, 1 reply; 9+ messages in thread From: Kyle McMartin @ 2009-10-09 17:08 UTC (permalink / raw) To: Arjan van de Ven; +Cc: Andreas Mohr, Kyle McMartin, linux-kernel, linux-acpi On Fri, Oct 09, 2009 at 09:32:13AM -0700, Arjan van de Ven wrote: >> Hmpf. Rather stuck now, ain'tcha, given that gcc 3.2.3 doesn't even have those? >> > > wonder if making a new define with the value of RESOLUTION * DECAY > (the actual value obviously) convinces your gcc that it really is a power of two ? > It shouldn't. Maybe just add a BUILD_BUG_ON and change the divide to a shift directly. How expected are these values to ever change, really? -Kyle ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: 2.6.32-rc3: floating-point build failure (undefined reference to `__udivdi3' in menu governor) 2009-10-09 17:08 ` Kyle McMartin @ 2009-10-09 17:12 ` Arjan van de Ven 0 siblings, 0 replies; 9+ messages in thread From: Arjan van de Ven @ 2009-10-09 17:12 UTC (permalink / raw) To: Kyle McMartin; +Cc: Andreas Mohr, linux-kernel, linux-acpi Kyle McMartin wrote: > On Fri, Oct 09, 2009 at 09:32:13AM -0700, Arjan van de Ven wrote: >>> Hmpf. Rather stuck now, ain'tcha, given that gcc 3.2.3 doesn't even have those? >>> >> wonder if making a new define with the value of RESOLUTION * DECAY >> (the actual value obviously) convinces your gcc that it really is a power of two ? >> > > It shouldn't. Maybe just add a BUILD_BUG_ON and change the divide to a > shift directly. How expected are these values to ever change, really? > so far... they haven't. I don't really expect these to change much. maybe once a year or so... to other powers of two ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-10-09 17:13 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <alpine.LFD.2.01.0910041727310.3432@localhost.localdomain>
2009-10-07 10:41 ` 2.6.32-rc3: floating-point build failure (undefined reference to `__udivdi3' in menu governor) Andreas Mohr
2009-10-07 14:23 ` Arjan van de Ven
2009-10-07 17:34 ` Andreas Mohr
2009-10-07 17:45 ` Arjan van de Ven
2009-10-07 17:45 ` Kyle McMartin
2009-10-09 16:01 ` Andreas Mohr
2009-10-09 16:32 ` Arjan van de Ven
2009-10-09 17:08 ` Kyle McMartin
2009-10-09 17:12 ` Arjan van de Ven
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).