diff mbox series

[7/7] linux-yocto_4.1.bb: Fix build with gcc7

Message ID 20170513025932.26254-7-raj.khem@gmail.com
State New
Headers show
Series [1/7] musl: Update to latest master | expand

Commit Message

Khem Raj May 13, 2017, 2:59 a.m. UTC
Signed-off-by: Khem Raj <raj.khem@gmail.com>

---
 ...ve-up-on-gcc-ilog2-constant-optimizations.patch | 134 +++++++++++++++++++++
 meta/recipes-kernel/linux/linux-yocto_4.1.bb       |   2 +
 2 files changed, 136 insertions(+)
 create mode 100644 meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch

-- 
2.13.0

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Comments

Bruce Ashfield May 13, 2017, 3:45 p.m. UTC | #1
I already have this queued, I'm just not sending any kernel pull requests
while
the release is finalizing.

So please, do not queue or merge this change.

Bruce

On Fri, May 12, 2017 at 10:59 PM, Khem Raj <raj.khem@gmail.com> wrote:

> Signed-off-by: Khem Raj <raj.khem@gmail.com>

> ---

>  ...ve-up-on-gcc-ilog2-constant-optimizations.patch | 134

> +++++++++++++++++++++

>  meta/recipes-kernel/linux/linux-yocto_4.1.bb       |   2 +

>  2 files changed, 136 insertions(+)

>  create mode 100644 meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-

> gcc-ilog2-constant-optimizations.patch

>

> diff --git a/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-

> gcc-ilog2-constant-optimizations.patch b/meta/recipes-kernel/linux/

> linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch

> new file mode 100644

> index 0000000000..35c4484f20

> --- /dev/null

> +++ b/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-

> gcc-ilog2-constant-optimizations.patch

> @@ -0,0 +1,134 @@

> +From 273bf720b7acb5f808337fe57c5f400422a30051 Mon Sep 17 00:00:00 2001

> +From: Linus Torvalds <torvalds@linux-foundation.org>

> +Date: Thu, 2 Mar 2017 12:17:22 -0800

> +Subject: [PATCH] give up on gcc ilog2() constant optimizations

> +

> +commit 474c90156c8dcc2fa815e6716cc9394d7930cb9c upstream.

> +

> +gcc-7 has an "optimization" pass that completely screws up, and

> +generates the code expansion for the (impossible) case of calling

> +ilog2() with a zero constant, even when the code gcc compiles does not

> +actually have a zero constant.

> +

> +And we try to generate a compile-time error for anybody doing ilog2() on

> +a constant where that doesn't make sense (be it zero or negative).  So

> +now gcc7 will fail the build due to our sanity checking, because it

> +created that constant-zero case that didn't actually exist in the source

> +code.

> +

> +There's a whole long discussion on the kernel mailing about how to work

> +around this gcc bug.  The gcc people themselevs have discussed their

> +"feature" in

> +

> +   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72785

> +

> +but it's all water under the bridge, because while it looked at one

> +point like it would be solved by the time gcc7 was released, that was

> +not to be.

> +

> +So now we have to deal with this compiler braindamage.

> +

> +And the only simple approach seems to be to just delete the code that

> +tries to warn about bad uses of ilog2().

> +

> +So now "ilog2()" will just return 0 not just for the value 1, but for

> +any non-positive value too.

> +

> +It's not like I can recall anybody having ever actually tried to use

> +this function on any invalid value, but maybe the sanity check just

> +meant that such code never made it out in public.

> +

> +Reported-by: Laura Abbott <labbott@redhat.com>

> +Cc: John Stultz <john.stultz@linaro.org>,

> +Cc: Thomas Gleixner <tglx@linutronix.de>

> +Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> +Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

> +Cc: Jiri Slaby <jslaby@suse.cz>

> +Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

> +Signed-off-by: Khem Raj <raj.khem@gmail.com>

> +---

> +Upstream-Status: Backport

> +

> + include/linux/log2.h       | 13 ++-----------

> + tools/include/linux/log2.h | 13 ++-----------

> + 2 files changed, 4 insertions(+), 22 deletions(-)

> +

> +diff --git a/include/linux/log2.h b/include/linux/log2.h

> +index fd7ff3d91e6a..f38fae23bdac 100644

> +--- a/include/linux/log2.h

> ++++ b/include/linux/log2.h

> +@@ -16,12 +16,6 @@

> + #include <linux/bitops.h>

> +

> + /*

> +- * deal with unrepresentable constant logarithms

> +- */

> +-extern __attribute__((const, noreturn))

> +-int ____ilog2_NaN(void);

> +-

> +-/*

> +  * non-constant log of base 2 calculators

> +  * - the arch may override these in asm/bitops.h if they can be

> implemented

> +  *   more efficiently than using fls() and fls64()

> +@@ -85,7 +79,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)

> + #define ilog2(n)                              \

> + (                                             \

> +       __builtin_constant_p(n) ? (             \

> +-              (n) < 1 ? ____ilog2_NaN() :     \

> ++              (n) < 2 ? 0 :                   \

> +               (n) & (1ULL << 63) ? 63 :       \

> +               (n) & (1ULL << 62) ? 62 :       \

> +               (n) & (1ULL << 61) ? 61 :       \

> +@@ -148,10 +142,7 @@ unsigned long __rounddown_pow_of_two(unsigned long

> n)

> +               (n) & (1ULL <<  4) ?  4 :       \

> +               (n) & (1ULL <<  3) ?  3 :       \

> +               (n) & (1ULL <<  2) ?  2 :       \

> +-              (n) & (1ULL <<  1) ?  1 :       \

> +-              (n) & (1ULL <<  0) ?  0 :       \

> +-              ____ilog2_NaN()                 \

> +-                                 ) :          \

> ++              1 ) :                           \

> +       (sizeof(n) <= 4) ?                      \

> +       __ilog2_u32(n) :                        \

> +       __ilog2_u64(n)                          \

> +diff --git a/tools/include/linux/log2.h b/tools/include/linux/log2.h

> +index 41446668ccce..d5677d39c1e4 100644

> +--- a/tools/include/linux/log2.h

> ++++ b/tools/include/linux/log2.h

> +@@ -13,12 +13,6 @@

> + #define _TOOLS_LINUX_LOG2_H

> +

> + /*

> +- * deal with unrepresentable constant logarithms

> +- */

> +-extern __attribute__((const, noreturn))

> +-int ____ilog2_NaN(void);

> +-

> +-/*

> +  * non-constant log of base 2 calculators

> +  * - the arch may override these in asm/bitops.h if they can be

> implemented

> +  *   more efficiently than using fls() and fls64()

> +@@ -78,7 +72,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)

> + #define ilog2(n)                              \

> + (                                             \

> +       __builtin_constant_p(n) ? (             \

> +-              (n) < 1 ? ____ilog2_NaN() :     \

> ++              (n) < 2 ? 0 :                   \

> +               (n) & (1ULL << 63) ? 63 :       \

> +               (n) & (1ULL << 62) ? 62 :       \

> +               (n) & (1ULL << 61) ? 61 :       \

> +@@ -141,10 +135,7 @@ unsigned long __rounddown_pow_of_two(unsigned long

> n)

> +               (n) & (1ULL <<  4) ?  4 :       \

> +               (n) & (1ULL <<  3) ?  3 :       \

> +               (n) & (1ULL <<  2) ?  2 :       \

> +-              (n) & (1ULL <<  1) ?  1 :       \

> +-              (n) & (1ULL <<  0) ?  0 :       \

> +-              ____ilog2_NaN()                 \

> +-                                 ) :          \

> ++              1 ) :                           \

> +       (sizeof(n) <= 4) ?                      \

> +       __ilog2_u32(n) :                        \

> +       __ilog2_u64(n)                          \

> +--

> +2.12.2

> +

> diff --git a/meta/recipes-kernel/linux/linux-yocto_4.1.bb

> b/meta/recipes-kernel/linux/linux-yocto_4.1.bb

> index bf7f266ee6..f90d5159d5 100644

> --- a/meta/recipes-kernel/linux/linux-yocto_4.1.bb

> +++ b/meta/recipes-kernel/linux/linux-yocto_4.1.bb

> @@ -24,6 +24,8 @@ SRCREV_meta ?= "7140ddb86e4b01529185e6d4a60600

> 1ad152b8f3"

>  SRC_URI = "git://git.yoctoproject.org/linux-yocto-4.1.git;name=

> machine;branch=${KBRANCH}; \

>             git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;

> name=meta;branch=yocto-4.1;destsuffix=${KMETA}"

>

> +SRC_URI += "file://0001-give-up-on-gcc-ilog2-constant-optimizations.

> patch"

> +

>  LINUX_VERSION ?= "4.1.38"

>

>  PV = "${LINUX_VERSION}+git${SRCPV}"

> --

> 2.13.0

>

> --

> _______________________________________________

> Openembedded-core mailing list

> Openembedded-core@lists.openembedded.org

> http://lists.openembedded.org/mailman/listinfo/openembedded-core

>




-- 
"Thou shalt not follow the NULL pointer, for chaos and madness await thee
at its end"
-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core
Khem Raj May 13, 2017, 4:10 p.m. UTC | #2
On Sat, May 13, 2017 at 8:45 AM, Bruce Ashfield
<bruce.ashfield@gmail.com> wrote:
> I already have this queued, I'm just not sending any kernel pull requests

> while

> the release is finalizing.


its already done yesterday :) so you are free to send

>

> So please, do not queue or merge this change.

>


sure

> Bruce

>

> On Fri, May 12, 2017 at 10:59 PM, Khem Raj <raj.khem@gmail.com> wrote:

>>

>> Signed-off-by: Khem Raj <raj.khem@gmail.com>

>> ---

>>  ...ve-up-on-gcc-ilog2-constant-optimizations.patch | 134

>> +++++++++++++++++++++

>>  meta/recipes-kernel/linux/linux-yocto_4.1.bb       |   2 +

>>  2 files changed, 136 insertions(+)

>>  create mode 100644

>> meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch

>>

>> diff --git

>> a/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch

>> b/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch

>> new file mode 100644

>> index 0000000000..35c4484f20

>> --- /dev/null

>> +++

>> b/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch

>> @@ -0,0 +1,134 @@

>> +From 273bf720b7acb5f808337fe57c5f400422a30051 Mon Sep 17 00:00:00 2001

>> +From: Linus Torvalds <torvalds@linux-foundation.org>

>> +Date: Thu, 2 Mar 2017 12:17:22 -0800

>> +Subject: [PATCH] give up on gcc ilog2() constant optimizations

>> +

>> +commit 474c90156c8dcc2fa815e6716cc9394d7930cb9c upstream.

>> +

>> +gcc-7 has an "optimization" pass that completely screws up, and

>> +generates the code expansion for the (impossible) case of calling

>> +ilog2() with a zero constant, even when the code gcc compiles does not

>> +actually have a zero constant.

>> +

>> +And we try to generate a compile-time error for anybody doing ilog2() on

>> +a constant where that doesn't make sense (be it zero or negative).  So

>> +now gcc7 will fail the build due to our sanity checking, because it

>> +created that constant-zero case that didn't actually exist in the source

>> +code.

>> +

>> +There's a whole long discussion on the kernel mailing about how to work

>> +around this gcc bug.  The gcc people themselevs have discussed their

>> +"feature" in

>> +

>> +   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72785

>> +

>> +but it's all water under the bridge, because while it looked at one

>> +point like it would be solved by the time gcc7 was released, that was

>> +not to be.

>> +

>> +So now we have to deal with this compiler braindamage.

>> +

>> +And the only simple approach seems to be to just delete the code that

>> +tries to warn about bad uses of ilog2().

>> +

>> +So now "ilog2()" will just return 0 not just for the value 1, but for

>> +any non-positive value too.

>> +

>> +It's not like I can recall anybody having ever actually tried to use

>> +this function on any invalid value, but maybe the sanity check just

>> +meant that such code never made it out in public.

>> +

>> +Reported-by: Laura Abbott <labbott@redhat.com>

>> +Cc: John Stultz <john.stultz@linaro.org>,

>> +Cc: Thomas Gleixner <tglx@linutronix.de>

>> +Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>> +Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

>> +Cc: Jiri Slaby <jslaby@suse.cz>

>> +Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

>> +Signed-off-by: Khem Raj <raj.khem@gmail.com>

>> +---

>> +Upstream-Status: Backport

>> +

>> + include/linux/log2.h       | 13 ++-----------

>> + tools/include/linux/log2.h | 13 ++-----------

>> + 2 files changed, 4 insertions(+), 22 deletions(-)

>> +

>> +diff --git a/include/linux/log2.h b/include/linux/log2.h

>> +index fd7ff3d91e6a..f38fae23bdac 100644

>> +--- a/include/linux/log2.h

>> ++++ b/include/linux/log2.h

>> +@@ -16,12 +16,6 @@

>> + #include <linux/bitops.h>

>> +

>> + /*

>> +- * deal with unrepresentable constant logarithms

>> +- */

>> +-extern __attribute__((const, noreturn))

>> +-int ____ilog2_NaN(void);

>> +-

>> +-/*

>> +  * non-constant log of base 2 calculators

>> +  * - the arch may override these in asm/bitops.h if they can be

>> implemented

>> +  *   more efficiently than using fls() and fls64()

>> +@@ -85,7 +79,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)

>> + #define ilog2(n)                              \

>> + (                                             \

>> +       __builtin_constant_p(n) ? (             \

>> +-              (n) < 1 ? ____ilog2_NaN() :     \

>> ++              (n) < 2 ? 0 :                   \

>> +               (n) & (1ULL << 63) ? 63 :       \

>> +               (n) & (1ULL << 62) ? 62 :       \

>> +               (n) & (1ULL << 61) ? 61 :       \

>> +@@ -148,10 +142,7 @@ unsigned long __rounddown_pow_of_two(unsigned long

>> n)

>> +               (n) & (1ULL <<  4) ?  4 :       \

>> +               (n) & (1ULL <<  3) ?  3 :       \

>> +               (n) & (1ULL <<  2) ?  2 :       \

>> +-              (n) & (1ULL <<  1) ?  1 :       \

>> +-              (n) & (1ULL <<  0) ?  0 :       \

>> +-              ____ilog2_NaN()                 \

>> +-                                 ) :          \

>> ++              1 ) :                           \

>> +       (sizeof(n) <= 4) ?                      \

>> +       __ilog2_u32(n) :                        \

>> +       __ilog2_u64(n)                          \

>> +diff --git a/tools/include/linux/log2.h b/tools/include/linux/log2.h

>> +index 41446668ccce..d5677d39c1e4 100644

>> +--- a/tools/include/linux/log2.h

>> ++++ b/tools/include/linux/log2.h

>> +@@ -13,12 +13,6 @@

>> + #define _TOOLS_LINUX_LOG2_H

>> +

>> + /*

>> +- * deal with unrepresentable constant logarithms

>> +- */

>> +-extern __attribute__((const, noreturn))

>> +-int ____ilog2_NaN(void);

>> +-

>> +-/*

>> +  * non-constant log of base 2 calculators

>> +  * - the arch may override these in asm/bitops.h if they can be

>> implemented

>> +  *   more efficiently than using fls() and fls64()

>> +@@ -78,7 +72,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)

>> + #define ilog2(n)                              \

>> + (                                             \

>> +       __builtin_constant_p(n) ? (             \

>> +-              (n) < 1 ? ____ilog2_NaN() :     \

>> ++              (n) < 2 ? 0 :                   \

>> +               (n) & (1ULL << 63) ? 63 :       \

>> +               (n) & (1ULL << 62) ? 62 :       \

>> +               (n) & (1ULL << 61) ? 61 :       \

>> +@@ -141,10 +135,7 @@ unsigned long __rounddown_pow_of_two(unsigned long

>> n)

>> +               (n) & (1ULL <<  4) ?  4 :       \

>> +               (n) & (1ULL <<  3) ?  3 :       \

>> +               (n) & (1ULL <<  2) ?  2 :       \

>> +-              (n) & (1ULL <<  1) ?  1 :       \

>> +-              (n) & (1ULL <<  0) ?  0 :       \

>> +-              ____ilog2_NaN()                 \

>> +-                                 ) :          \

>> ++              1 ) :                           \

>> +       (sizeof(n) <= 4) ?                      \

>> +       __ilog2_u32(n) :                        \

>> +       __ilog2_u64(n)                          \

>> +--

>> +2.12.2

>> +

>> diff --git a/meta/recipes-kernel/linux/linux-yocto_4.1.bb

>> b/meta/recipes-kernel/linux/linux-yocto_4.1.bb

>> index bf7f266ee6..f90d5159d5 100644

>> --- a/meta/recipes-kernel/linux/linux-yocto_4.1.bb

>> +++ b/meta/recipes-kernel/linux/linux-yocto_4.1.bb

>> @@ -24,6 +24,8 @@ SRCREV_meta ?=

>> "7140ddb86e4b01529185e6d4a606001ad152b8f3"

>>  SRC_URI =

>> "git://git.yoctoproject.org/linux-yocto-4.1.git;name=machine;branch=${KBRANCH};

>> \

>>

>> git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-4.1;destsuffix=${KMETA}"

>>

>> +SRC_URI +=

>> "file://0001-give-up-on-gcc-ilog2-constant-optimizations.patch"

>> +

>>  LINUX_VERSION ?= "4.1.38"

>>

>>  PV = "${LINUX_VERSION}+git${SRCPV}"

>> --

>> 2.13.0

>>

>> --

>> _______________________________________________

>> Openembedded-core mailing list

>> Openembedded-core@lists.openembedded.org

>> http://lists.openembedded.org/mailman/listinfo/openembedded-core

>

>

>

>

> --

> "Thou shalt not follow the NULL pointer, for chaos and madness await thee at

> its end"

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core
Bruce Ashfield May 13, 2017, 4:16 p.m. UTC | #3
On Sat, May 13, 2017 at 12:10 PM, Khem Raj <raj.khem@gmail.com> wrote:

> On Sat, May 13, 2017 at 8:45 AM, Bruce Ashfield

> <bruce.ashfield@gmail.com> wrote:

> > I already have this queued, I'm just not sending any kernel pull requests

> > while

> > the release is finalizing.

>

> its already done yesterday :) so you are free to send

>


oh! I hadn't noticed. I was heads down working on some features. I'll update
and send my queue tonight.

I attached the patch to show it exists :D

Cheers,

Bruce


>

> >

> > So please, do not queue or merge this change.

> >

>

> sure

>

> > Bruce

> >

> > On Fri, May 12, 2017 at 10:59 PM, Khem Raj <raj.khem@gmail.com> wrote:

> >>

> >> Signed-off-by: Khem Raj <raj.khem@gmail.com>

> >> ---

> >>  ...ve-up-on-gcc-ilog2-constant-optimizations.patch | 134

> >> +++++++++++++++++++++

> >>  meta/recipes-kernel/linux/linux-yocto_4.1.bb       |   2 +

> >>  2 files changed, 136 insertions(+)

> >>  create mode 100644

> >> meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-

> gcc-ilog2-constant-optimizations.patch

> >>

> >> diff --git

> >> a/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-

> gcc-ilog2-constant-optimizations.patch

> >> b/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-

> gcc-ilog2-constant-optimizations.patch

> >> new file mode 100644

> >> index 0000000000..35c4484f20

> >> --- /dev/null

> >> +++

> >> b/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-

> gcc-ilog2-constant-optimizations.patch

> >> @@ -0,0 +1,134 @@

> >> +From 273bf720b7acb5f808337fe57c5f400422a30051 Mon Sep 17 00:00:00 2001

> >> +From: Linus Torvalds <torvalds@linux-foundation.org>

> >> +Date: Thu, 2 Mar 2017 12:17:22 -0800

> >> +Subject: [PATCH] give up on gcc ilog2() constant optimizations

> >> +

> >> +commit 474c90156c8dcc2fa815e6716cc9394d7930cb9c upstream.

> >> +

> >> +gcc-7 has an "optimization" pass that completely screws up, and

> >> +generates the code expansion for the (impossible) case of calling

> >> +ilog2() with a zero constant, even when the code gcc compiles does not

> >> +actually have a zero constant.

> >> +

> >> +And we try to generate a compile-time error for anybody doing ilog2()

> on

> >> +a constant where that doesn't make sense (be it zero or negative).  So

> >> +now gcc7 will fail the build due to our sanity checking, because it

> >> +created that constant-zero case that didn't actually exist in the

> source

> >> +code.

> >> +

> >> +There's a whole long discussion on the kernel mailing about how to work

> >> +around this gcc bug.  The gcc people themselevs have discussed their

> >> +"feature" in

> >> +

> >> +   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72785

> >> +

> >> +but it's all water under the bridge, because while it looked at one

> >> +point like it would be solved by the time gcc7 was released, that was

> >> +not to be.

> >> +

> >> +So now we have to deal with this compiler braindamage.

> >> +

> >> +And the only simple approach seems to be to just delete the code that

> >> +tries to warn about bad uses of ilog2().

> >> +

> >> +So now "ilog2()" will just return 0 not just for the value 1, but for

> >> +any non-positive value too.

> >> +

> >> +It's not like I can recall anybody having ever actually tried to use

> >> +this function on any invalid value, but maybe the sanity check just

> >> +meant that such code never made it out in public.

> >> +

> >> +Reported-by: Laura Abbott <labbott@redhat.com>

> >> +Cc: John Stultz <john.stultz@linaro.org>,

> >> +Cc: Thomas Gleixner <tglx@linutronix.de>

> >> +Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> >> +Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

> >> +Cc: Jiri Slaby <jslaby@suse.cz>

> >> +Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

> >> +Signed-off-by: Khem Raj <raj.khem@gmail.com>

> >> +---

> >> +Upstream-Status: Backport

> >> +

> >> + include/linux/log2.h       | 13 ++-----------

> >> + tools/include/linux/log2.h | 13 ++-----------

> >> + 2 files changed, 4 insertions(+), 22 deletions(-)

> >> +

> >> +diff --git a/include/linux/log2.h b/include/linux/log2.h

> >> +index fd7ff3d91e6a..f38fae23bdac 100644

> >> +--- a/include/linux/log2.h

> >> ++++ b/include/linux/log2.h

> >> +@@ -16,12 +16,6 @@

> >> + #include <linux/bitops.h>

> >> +

> >> + /*

> >> +- * deal with unrepresentable constant logarithms

> >> +- */

> >> +-extern __attribute__((const, noreturn))

> >> +-int ____ilog2_NaN(void);

> >> +-

> >> +-/*

> >> +  * non-constant log of base 2 calculators

> >> +  * - the arch may override these in asm/bitops.h if they can be

> >> implemented

> >> +  *   more efficiently than using fls() and fls64()

> >> +@@ -85,7 +79,7 @@ unsigned long __rounddown_pow_of_two(unsigned long

> n)

> >> + #define ilog2(n)                              \

> >> + (                                             \

> >> +       __builtin_constant_p(n) ? (             \

> >> +-              (n) < 1 ? ____ilog2_NaN() :     \

> >> ++              (n) < 2 ? 0 :                   \

> >> +               (n) & (1ULL << 63) ? 63 :       \

> >> +               (n) & (1ULL << 62) ? 62 :       \

> >> +               (n) & (1ULL << 61) ? 61 :       \

> >> +@@ -148,10 +142,7 @@ unsigned long __rounddown_pow_of_two(unsigned

> long

> >> n)

> >> +               (n) & (1ULL <<  4) ?  4 :       \

> >> +               (n) & (1ULL <<  3) ?  3 :       \

> >> +               (n) & (1ULL <<  2) ?  2 :       \

> >> +-              (n) & (1ULL <<  1) ?  1 :       \

> >> +-              (n) & (1ULL <<  0) ?  0 :       \

> >> +-              ____ilog2_NaN()                 \

> >> +-                                 ) :          \

> >> ++              1 ) :                           \

> >> +       (sizeof(n) <= 4) ?                      \

> >> +       __ilog2_u32(n) :                        \

> >> +       __ilog2_u64(n)                          \

> >> +diff --git a/tools/include/linux/log2.h b/tools/include/linux/log2.h

> >> +index 41446668ccce..d5677d39c1e4 100644

> >> +--- a/tools/include/linux/log2.h

> >> ++++ b/tools/include/linux/log2.h

> >> +@@ -13,12 +13,6 @@

> >> + #define _TOOLS_LINUX_LOG2_H

> >> +

> >> + /*

> >> +- * deal with unrepresentable constant logarithms

> >> +- */

> >> +-extern __attribute__((const, noreturn))

> >> +-int ____ilog2_NaN(void);

> >> +-

> >> +-/*

> >> +  * non-constant log of base 2 calculators

> >> +  * - the arch may override these in asm/bitops.h if they can be

> >> implemented

> >> +  *   more efficiently than using fls() and fls64()

> >> +@@ -78,7 +72,7 @@ unsigned long __rounddown_pow_of_two(unsigned long

> n)

> >> + #define ilog2(n)                              \

> >> + (                                             \

> >> +       __builtin_constant_p(n) ? (             \

> >> +-              (n) < 1 ? ____ilog2_NaN() :     \

> >> ++              (n) < 2 ? 0 :                   \

> >> +               (n) & (1ULL << 63) ? 63 :       \

> >> +               (n) & (1ULL << 62) ? 62 :       \

> >> +               (n) & (1ULL << 61) ? 61 :       \

> >> +@@ -141,10 +135,7 @@ unsigned long __rounddown_pow_of_two(unsigned

> long

> >> n)

> >> +               (n) & (1ULL <<  4) ?  4 :       \

> >> +               (n) & (1ULL <<  3) ?  3 :       \

> >> +               (n) & (1ULL <<  2) ?  2 :       \

> >> +-              (n) & (1ULL <<  1) ?  1 :       \

> >> +-              (n) & (1ULL <<  0) ?  0 :       \

> >> +-              ____ilog2_NaN()                 \

> >> +-                                 ) :          \

> >> ++              1 ) :                           \

> >> +       (sizeof(n) <= 4) ?                      \

> >> +       __ilog2_u32(n) :                        \

> >> +       __ilog2_u64(n)                          \

> >> +--

> >> +2.12.2

> >> +

> >> diff --git a/meta/recipes-kernel/linux/linux-yocto_4.1.bb

> >> b/meta/recipes-kernel/linux/linux-yocto_4.1.bb

> >> index bf7f266ee6..f90d5159d5 100644

> >> --- a/meta/recipes-kernel/linux/linux-yocto_4.1.bb

> >> +++ b/meta/recipes-kernel/linux/linux-yocto_4.1.bb

> >> @@ -24,6 +24,8 @@ SRCREV_meta ?=

> >> "7140ddb86e4b01529185e6d4a606001ad152b8f3"

> >>  SRC_URI =

> >> "git://git.yoctoproject.org/linux-yocto-4.1.git;name=

> machine;branch=${KBRANCH};

> >> \

> >>

> >> git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;

> name=meta;branch=yocto-4.1;destsuffix=${KMETA}"

> >>

> >> +SRC_URI +=

> >> "file://0001-give-up-on-gcc-ilog2-constant-optimizations.patch"

> >> +

> >>  LINUX_VERSION ?= "4.1.38"

> >>

> >>  PV = "${LINUX_VERSION}+git${SRCPV}"

> >> --

> >> 2.13.0

> >>

> >> --

> >> _______________________________________________

> >> Openembedded-core mailing list

> >> Openembedded-core@lists.openembedded.org

> >> http://lists.openembedded.org/mailman/listinfo/openembedded-core

> >

> >

> >

> >

> > --

> > "Thou shalt not follow the NULL pointer, for chaos and madness await

> thee at

> > its end"

>




-- 
"Thou shalt not follow the NULL pointer, for chaos and madness await thee
at its end"
-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core
Khem Raj May 13, 2017, 5:12 p.m. UTC | #4
On Sat, May 13, 2017 at 9:16 AM, Bruce Ashfield
<bruce.ashfield@gmail.com> wrote:
>

>

> On Sat, May 13, 2017 at 12:10 PM, Khem Raj <raj.khem@gmail.com> wrote:

>>

>> On Sat, May 13, 2017 at 8:45 AM, Bruce Ashfield

>> <bruce.ashfield@gmail.com> wrote:

>> > I already have this queued, I'm just not sending any kernel pull

>> > requests

>> > while

>> > the release is finalizing.

>>

>> its already done yesterday :) so you are free to send

>

>

> oh! I hadn't noticed. I was heads down working on some features. I'll update

> and send my queue tonight.

>

> I attached the patch to show it exists :D


thanks. clearing ENOBELIEVE

>

> Cheers,

>

> Bruce

>

>>

>>

>> >

>> > So please, do not queue or merge this change.

>> >

>>

>> sure

>>

>> > Bruce

>> >

>> > On Fri, May 12, 2017 at 10:59 PM, Khem Raj <raj.khem@gmail.com> wrote:

>> >>

>> >> Signed-off-by: Khem Raj <raj.khem@gmail.com>

>> >> ---

>> >>  ...ve-up-on-gcc-ilog2-constant-optimizations.patch | 134

>> >> +++++++++++++++++++++

>> >>  meta/recipes-kernel/linux/linux-yocto_4.1.bb       |   2 +

>> >>  2 files changed, 136 insertions(+)

>> >>  create mode 100644

>> >>

>> >> meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch

>> >>

>> >> diff --git

>> >>

>> >> a/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch

>> >>

>> >> b/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch

>> >> new file mode 100644

>> >> index 0000000000..35c4484f20

>> >> --- /dev/null

>> >> +++

>> >>

>> >> b/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch

>> >> @@ -0,0 +1,134 @@

>> >> +From 273bf720b7acb5f808337fe57c5f400422a30051 Mon Sep 17 00:00:00 2001

>> >> +From: Linus Torvalds <torvalds@linux-foundation.org>

>> >> +Date: Thu, 2 Mar 2017 12:17:22 -0800

>> >> +Subject: [PATCH] give up on gcc ilog2() constant optimizations

>> >> +

>> >> +commit 474c90156c8dcc2fa815e6716cc9394d7930cb9c upstream.

>> >> +

>> >> +gcc-7 has an "optimization" pass that completely screws up, and

>> >> +generates the code expansion for the (impossible) case of calling

>> >> +ilog2() with a zero constant, even when the code gcc compiles does not

>> >> +actually have a zero constant.

>> >> +

>> >> +And we try to generate a compile-time error for anybody doing ilog2()

>> >> on

>> >> +a constant where that doesn't make sense (be it zero or negative).  So

>> >> +now gcc7 will fail the build due to our sanity checking, because it

>> >> +created that constant-zero case that didn't actually exist in the

>> >> source

>> >> +code.

>> >> +

>> >> +There's a whole long discussion on the kernel mailing about how to

>> >> work

>> >> +around this gcc bug.  The gcc people themselevs have discussed their

>> >> +"feature" in

>> >> +

>> >> +   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72785

>> >> +

>> >> +but it's all water under the bridge, because while it looked at one

>> >> +point like it would be solved by the time gcc7 was released, that was

>> >> +not to be.

>> >> +

>> >> +So now we have to deal with this compiler braindamage.

>> >> +

>> >> +And the only simple approach seems to be to just delete the code that

>> >> +tries to warn about bad uses of ilog2().

>> >> +

>> >> +So now "ilog2()" will just return 0 not just for the value 1, but for

>> >> +any non-positive value too.

>> >> +

>> >> +It's not like I can recall anybody having ever actually tried to use

>> >> +this function on any invalid value, but maybe the sanity check just

>> >> +meant that such code never made it out in public.

>> >> +

>> >> +Reported-by: Laura Abbott <labbott@redhat.com>

>> >> +Cc: John Stultz <john.stultz@linaro.org>,

>> >> +Cc: Thomas Gleixner <tglx@linutronix.de>

>> >> +Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>> >> +Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

>> >> +Cc: Jiri Slaby <jslaby@suse.cz>

>> >> +Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

>> >> +Signed-off-by: Khem Raj <raj.khem@gmail.com>

>> >> +---

>> >> +Upstream-Status: Backport

>> >> +

>> >> + include/linux/log2.h       | 13 ++-----------

>> >> + tools/include/linux/log2.h | 13 ++-----------

>> >> + 2 files changed, 4 insertions(+), 22 deletions(-)

>> >> +

>> >> +diff --git a/include/linux/log2.h b/include/linux/log2.h

>> >> +index fd7ff3d91e6a..f38fae23bdac 100644

>> >> +--- a/include/linux/log2.h

>> >> ++++ b/include/linux/log2.h

>> >> +@@ -16,12 +16,6 @@

>> >> + #include <linux/bitops.h>

>> >> +

>> >> + /*

>> >> +- * deal with unrepresentable constant logarithms

>> >> +- */

>> >> +-extern __attribute__((const, noreturn))

>> >> +-int ____ilog2_NaN(void);

>> >> +-

>> >> +-/*

>> >> +  * non-constant log of base 2 calculators

>> >> +  * - the arch may override these in asm/bitops.h if they can be

>> >> implemented

>> >> +  *   more efficiently than using fls() and fls64()

>> >> +@@ -85,7 +79,7 @@ unsigned long __rounddown_pow_of_two(unsigned long

>> >> n)

>> >> + #define ilog2(n)                              \

>> >> + (                                             \

>> >> +       __builtin_constant_p(n) ? (             \

>> >> +-              (n) < 1 ? ____ilog2_NaN() :     \

>> >> ++              (n) < 2 ? 0 :                   \

>> >> +               (n) & (1ULL << 63) ? 63 :       \

>> >> +               (n) & (1ULL << 62) ? 62 :       \

>> >> +               (n) & (1ULL << 61) ? 61 :       \

>> >> +@@ -148,10 +142,7 @@ unsigned long __rounddown_pow_of_two(unsigned

>> >> long

>> >> n)

>> >> +               (n) & (1ULL <<  4) ?  4 :       \

>> >> +               (n) & (1ULL <<  3) ?  3 :       \

>> >> +               (n) & (1ULL <<  2) ?  2 :       \

>> >> +-              (n) & (1ULL <<  1) ?  1 :       \

>> >> +-              (n) & (1ULL <<  0) ?  0 :       \

>> >> +-              ____ilog2_NaN()                 \

>> >> +-                                 ) :          \

>> >> ++              1 ) :                           \

>> >> +       (sizeof(n) <= 4) ?                      \

>> >> +       __ilog2_u32(n) :                        \

>> >> +       __ilog2_u64(n)                          \

>> >> +diff --git a/tools/include/linux/log2.h b/tools/include/linux/log2.h

>> >> +index 41446668ccce..d5677d39c1e4 100644

>> >> +--- a/tools/include/linux/log2.h

>> >> ++++ b/tools/include/linux/log2.h

>> >> +@@ -13,12 +13,6 @@

>> >> + #define _TOOLS_LINUX_LOG2_H

>> >> +

>> >> + /*

>> >> +- * deal with unrepresentable constant logarithms

>> >> +- */

>> >> +-extern __attribute__((const, noreturn))

>> >> +-int ____ilog2_NaN(void);

>> >> +-

>> >> +-/*

>> >> +  * non-constant log of base 2 calculators

>> >> +  * - the arch may override these in asm/bitops.h if they can be

>> >> implemented

>> >> +  *   more efficiently than using fls() and fls64()

>> >> +@@ -78,7 +72,7 @@ unsigned long __rounddown_pow_of_two(unsigned long

>> >> n)

>> >> + #define ilog2(n)                              \

>> >> + (                                             \

>> >> +       __builtin_constant_p(n) ? (             \

>> >> +-              (n) < 1 ? ____ilog2_NaN() :     \

>> >> ++              (n) < 2 ? 0 :                   \

>> >> +               (n) & (1ULL << 63) ? 63 :       \

>> >> +               (n) & (1ULL << 62) ? 62 :       \

>> >> +               (n) & (1ULL << 61) ? 61 :       \

>> >> +@@ -141,10 +135,7 @@ unsigned long __rounddown_pow_of_two(unsigned

>> >> long

>> >> n)

>> >> +               (n) & (1ULL <<  4) ?  4 :       \

>> >> +               (n) & (1ULL <<  3) ?  3 :       \

>> >> +               (n) & (1ULL <<  2) ?  2 :       \

>> >> +-              (n) & (1ULL <<  1) ?  1 :       \

>> >> +-              (n) & (1ULL <<  0) ?  0 :       \

>> >> +-              ____ilog2_NaN()                 \

>> >> +-                                 ) :          \

>> >> ++              1 ) :                           \

>> >> +       (sizeof(n) <= 4) ?                      \

>> >> +       __ilog2_u32(n) :                        \

>> >> +       __ilog2_u64(n)                          \

>> >> +--

>> >> +2.12.2

>> >> +

>> >> diff --git a/meta/recipes-kernel/linux/linux-yocto_4.1.bb

>> >> b/meta/recipes-kernel/linux/linux-yocto_4.1.bb

>> >> index bf7f266ee6..f90d5159d5 100644

>> >> --- a/meta/recipes-kernel/linux/linux-yocto_4.1.bb

>> >> +++ b/meta/recipes-kernel/linux/linux-yocto_4.1.bb

>> >> @@ -24,6 +24,8 @@ SRCREV_meta ?=

>> >> "7140ddb86e4b01529185e6d4a606001ad152b8f3"

>> >>  SRC_URI =

>> >>

>> >> "git://git.yoctoproject.org/linux-yocto-4.1.git;name=machine;branch=${KBRANCH};

>> >> \

>> >>

>> >>

>> >> git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-4.1;destsuffix=${KMETA}"

>> >>

>> >> +SRC_URI +=

>> >> "file://0001-give-up-on-gcc-ilog2-constant-optimizations.patch"

>> >> +

>> >>  LINUX_VERSION ?= "4.1.38"

>> >>

>> >>  PV = "${LINUX_VERSION}+git${SRCPV}"

>> >> --

>> >> 2.13.0

>> >>

>> >> --

>> >> _______________________________________________

>> >> Openembedded-core mailing list

>> >> Openembedded-core@lists.openembedded.org

>> >> http://lists.openembedded.org/mailman/listinfo/openembedded-core

>> >

>> >

>> >

>> >

>> > --

>> > "Thou shalt not follow the NULL pointer, for chaos and madness await

>> > thee at

>> > its end"

>

>

>

>

> --

> "Thou shalt not follow the NULL pointer, for chaos and madness await thee at

> its end"

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core
diff mbox series

Patch

diff --git a/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch b/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch
new file mode 100644
index 0000000000..35c4484f20
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-yocto/0001-give-up-on-gcc-ilog2-constant-optimizations.patch
@@ -0,0 +1,134 @@ 
+From 273bf720b7acb5f808337fe57c5f400422a30051 Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Thu, 2 Mar 2017 12:17:22 -0800
+Subject: [PATCH] give up on gcc ilog2() constant optimizations
+
+commit 474c90156c8dcc2fa815e6716cc9394d7930cb9c upstream.
+
+gcc-7 has an "optimization" pass that completely screws up, and
+generates the code expansion for the (impossible) case of calling
+ilog2() with a zero constant, even when the code gcc compiles does not
+actually have a zero constant.
+
+And we try to generate a compile-time error for anybody doing ilog2() on
+a constant where that doesn't make sense (be it zero or negative).  So
+now gcc7 will fail the build due to our sanity checking, because it
+created that constant-zero case that didn't actually exist in the source
+code.
+
+There's a whole long discussion on the kernel mailing about how to work
+around this gcc bug.  The gcc people themselevs have discussed their
+"feature" in
+
+   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72785
+
+but it's all water under the bridge, because while it looked at one
+point like it would be solved by the time gcc7 was released, that was
+not to be.
+
+So now we have to deal with this compiler braindamage.
+
+And the only simple approach seems to be to just delete the code that
+tries to warn about bad uses of ilog2().
+
+So now "ilog2()" will just return 0 not just for the value 1, but for
+any non-positive value too.
+
+It's not like I can recall anybody having ever actually tried to use
+this function on any invalid value, but maybe the sanity check just
+meant that such code never made it out in public.
+
+Reported-by: Laura Abbott <labbott@redhat.com>
+Cc: John Stultz <john.stultz@linaro.org>,
+Cc: Thomas Gleixner <tglx@linutronix.de>
+Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Jiri Slaby <jslaby@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Backport
+
+ include/linux/log2.h       | 13 ++-----------
+ tools/include/linux/log2.h | 13 ++-----------
+ 2 files changed, 4 insertions(+), 22 deletions(-)
+
+diff --git a/include/linux/log2.h b/include/linux/log2.h
+index fd7ff3d91e6a..f38fae23bdac 100644
+--- a/include/linux/log2.h
++++ b/include/linux/log2.h
+@@ -16,12 +16,6 @@
+ #include <linux/bitops.h>
+ 
+ /*
+- * deal with unrepresentable constant logarithms
+- */
+-extern __attribute__((const, noreturn))
+-int ____ilog2_NaN(void);
+-
+-/*
+  * non-constant log of base 2 calculators
+  * - the arch may override these in asm/bitops.h if they can be implemented
+  *   more efficiently than using fls() and fls64()
+@@ -85,7 +79,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
+ #define ilog2(n)				\
+ (						\
+ 	__builtin_constant_p(n) ? (		\
+-		(n) < 1 ? ____ilog2_NaN() :	\
++		(n) < 2 ? 0 :			\
+ 		(n) & (1ULL << 63) ? 63 :	\
+ 		(n) & (1ULL << 62) ? 62 :	\
+ 		(n) & (1ULL << 61) ? 61 :	\
+@@ -148,10 +142,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
+ 		(n) & (1ULL <<  4) ?  4 :	\
+ 		(n) & (1ULL <<  3) ?  3 :	\
+ 		(n) & (1ULL <<  2) ?  2 :	\
+-		(n) & (1ULL <<  1) ?  1 :	\
+-		(n) & (1ULL <<  0) ?  0 :	\
+-		____ilog2_NaN()			\
+-				   ) :		\
++		1 ) :				\
+ 	(sizeof(n) <= 4) ?			\
+ 	__ilog2_u32(n) :			\
+ 	__ilog2_u64(n)				\
+diff --git a/tools/include/linux/log2.h b/tools/include/linux/log2.h
+index 41446668ccce..d5677d39c1e4 100644
+--- a/tools/include/linux/log2.h
++++ b/tools/include/linux/log2.h
+@@ -13,12 +13,6 @@
+ #define _TOOLS_LINUX_LOG2_H
+ 
+ /*
+- * deal with unrepresentable constant logarithms
+- */
+-extern __attribute__((const, noreturn))
+-int ____ilog2_NaN(void);
+-
+-/*
+  * non-constant log of base 2 calculators
+  * - the arch may override these in asm/bitops.h if they can be implemented
+  *   more efficiently than using fls() and fls64()
+@@ -78,7 +72,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
+ #define ilog2(n)				\
+ (						\
+ 	__builtin_constant_p(n) ? (		\
+-		(n) < 1 ? ____ilog2_NaN() :	\
++		(n) < 2 ? 0 :			\
+ 		(n) & (1ULL << 63) ? 63 :	\
+ 		(n) & (1ULL << 62) ? 62 :	\
+ 		(n) & (1ULL << 61) ? 61 :	\
+@@ -141,10 +135,7 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
+ 		(n) & (1ULL <<  4) ?  4 :	\
+ 		(n) & (1ULL <<  3) ?  3 :	\
+ 		(n) & (1ULL <<  2) ?  2 :	\
+-		(n) & (1ULL <<  1) ?  1 :	\
+-		(n) & (1ULL <<  0) ?  0 :	\
+-		____ilog2_NaN()			\
+-				   ) :		\
++		1 ) :				\
+ 	(sizeof(n) <= 4) ?			\
+ 	__ilog2_u32(n) :			\
+ 	__ilog2_u64(n)				\
+-- 
+2.12.2
+
diff --git a/meta/recipes-kernel/linux/linux-yocto_4.1.bb b/meta/recipes-kernel/linux/linux-yocto_4.1.bb
index bf7f266ee6..f90d5159d5 100644
--- a/meta/recipes-kernel/linux/linux-yocto_4.1.bb
+++ b/meta/recipes-kernel/linux/linux-yocto_4.1.bb
@@ -24,6 +24,8 @@  SRCREV_meta ?= "7140ddb86e4b01529185e6d4a606001ad152b8f3"
 SRC_URI = "git://git.yoctoproject.org/linux-yocto-4.1.git;name=machine;branch=${KBRANCH}; \
            git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-4.1;destsuffix=${KMETA}"
 
+SRC_URI += "file://0001-give-up-on-gcc-ilog2-constant-optimizations.patch"
+
 LINUX_VERSION ?= "4.1.38"
 
 PV = "${LINUX_VERSION}+git${SRCPV}"