<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/scripts/kconfig/expr.c, branch v5.19-rc3</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>kconfig: distinguish between dependencies and visibility in help text</title>
<updated>2020-01-06T17:18:45+00:00</updated>
<author>
<name>Thomas Hebb</name>
<email>tommyhebb@gmail.com</email>
</author>
<published>2019-12-17T16:15:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=3460d0bc256a50b71dbdae8227c600761c502022'/>
<id>3460d0bc256a50b71dbdae8227c600761c502022</id>
<content type='text'>
Kconfig makes a distinction between dependencies (defined by "depends
on" expressions and enclosing "if" blocks) and visibility (which
includes all dependencies, but also includes inline "if" expressions of
individual properties as well as, for prompts, "visible if" expressions
of enclosing menus).

Before commit bcdedcc1afd6 ("menuconfig: print more info for symbol
without prompts"), the "Depends on" lines of a symbol's help text
indicated the visibility of the prompt property they appeared under.
After bcdedcc1afd, there was always only a single "Depends on" line,
which indicated the visibility of the first P_SYMBOL property of the
symbol. Since P_SYMBOLs never have inline if expressions, this was in
effect the same as the dependencies of the menu item that the P_SYMBOL
was attached to.

Neither of these situations accurately conveyed the dependencies of a
symbol--the first because it was actually the visibility, and the second
because it only showed the dependencies from a single definition.

With this series, we are back to printing separate dependencies for each
definition, but we print the actual dependencies (rather than the
visibility) in the "Depends on" line. However, it can still be useful to
know the visibility of a prompt, so this patch adds a "Visible if" line
that shows the visibility only if the visibility is different from the
dependencies (which it isn't for most prompts in Linux).

Before:

  Symbol: THUMB2_KERNEL [=n]
  Type  : bool
  Defined at arch/arm/Kconfig:1417
    Prompt: Compile the kernel in Thumb-2 mode
    Depends on: (CPU_V7 [=y] || CPU_V7M [=n]) &amp;&amp; !CPU_V6 [=n] &amp;&amp; !CPU_V6K [=n]
    Location:
      -&gt; Kernel Features
    Selects: ARM_UNWIND [=n]

After:

   Symbol: THUMB2_KERNEL [=n]
   Type  : bool
   Defined at arch/arm/Kconfig:1417
     Prompt: Compile the kernel in Thumb-2 mode
     Depends on: (CPU_V7 [=y] || CPU_V7M [=n]) &amp;&amp; !CPU_V6 [=n] &amp;&amp; !CPU_V6K [=n]
     Visible if: (CPU_V7 [=y] || CPU_V7M [=n]) &amp;&amp; !CPU_V6 [=n] &amp;&amp; !CPU_V6K [=n] &amp;&amp; !CPU_THUMBONLY [=n]
     Location:
       -&gt; Kernel Features
     Selects: ARM_UNWIND [=n]

Signed-off-by: Thomas Hebb &lt;tommyhebb@gmail.com&gt;
Signed-off-by: Masahiro Yamada &lt;masahiroy@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Kconfig makes a distinction between dependencies (defined by "depends
on" expressions and enclosing "if" blocks) and visibility (which
includes all dependencies, but also includes inline "if" expressions of
individual properties as well as, for prompts, "visible if" expressions
of enclosing menus).

Before commit bcdedcc1afd6 ("menuconfig: print more info for symbol
without prompts"), the "Depends on" lines of a symbol's help text
indicated the visibility of the prompt property they appeared under.
After bcdedcc1afd, there was always only a single "Depends on" line,
which indicated the visibility of the first P_SYMBOL property of the
symbol. Since P_SYMBOLs never have inline if expressions, this was in
effect the same as the dependencies of the menu item that the P_SYMBOL
was attached to.

Neither of these situations accurately conveyed the dependencies of a
symbol--the first because it was actually the visibility, and the second
because it only showed the dependencies from a single definition.

With this series, we are back to printing separate dependencies for each
definition, but we print the actual dependencies (rather than the
visibility) in the "Depends on" line. However, it can still be useful to
know the visibility of a prompt, so this patch adds a "Visible if" line
that shows the visibility only if the visibility is different from the
dependencies (which it isn't for most prompts in Linux).

Before:

  Symbol: THUMB2_KERNEL [=n]
  Type  : bool
  Defined at arch/arm/Kconfig:1417
    Prompt: Compile the kernel in Thumb-2 mode
    Depends on: (CPU_V7 [=y] || CPU_V7M [=n]) &amp;&amp; !CPU_V6 [=n] &amp;&amp; !CPU_V6K [=n]
    Location:
      -&gt; Kernel Features
    Selects: ARM_UNWIND [=n]

After:

   Symbol: THUMB2_KERNEL [=n]
   Type  : bool
   Defined at arch/arm/Kconfig:1417
     Prompt: Compile the kernel in Thumb-2 mode
     Depends on: (CPU_V7 [=y] || CPU_V7M [=n]) &amp;&amp; !CPU_V6 [=n] &amp;&amp; !CPU_V6K [=n]
     Visible if: (CPU_V7 [=y] || CPU_V7M [=n]) &amp;&amp; !CPU_V6 [=n] &amp;&amp; !CPU_V6K [=n] &amp;&amp; !CPU_THUMBONLY [=n]
     Location:
       -&gt; Kernel Features
     Selects: ARM_UNWIND [=n]

Signed-off-by: Thomas Hebb &lt;tommyhebb@gmail.com&gt;
Signed-off-by: Masahiro Yamada &lt;masahiroy@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>kconfig: don't crash on NULL expressions in expr_eq()</title>
<updated>2019-12-17T10:21:07+00:00</updated>
<author>
<name>Thomas Hebb</name>
<email>tommyhebb@gmail.com</email>
</author>
<published>2019-12-09T08:19:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=272a72103012862e3a24ea06635253ead0b6e808'/>
<id>272a72103012862e3a24ea06635253ead0b6e808</id>
<content type='text'>
NULL expressions are taken to always be true, as implemented by the
expr_is_yes() macro and by several other functions in expr.c. As such,
they ought to be valid inputs to expr_eq(), which compares two
expressions.

Signed-off-by: Thomas Hebb &lt;tommyhebb@gmail.com&gt;
Signed-off-by: Masahiro Yamada &lt;masahiroy@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
NULL expressions are taken to always be true, as implemented by the
expr_is_yes() macro and by several other functions in expr.c. As such,
they ought to be valid inputs to expr_eq(), which compares two
expressions.

Signed-off-by: Thomas Hebb &lt;tommyhebb@gmail.com&gt;
Signed-off-by: Masahiro Yamada &lt;masahiroy@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>kconfig: split some C files out of zconf.y</title>
<updated>2018-12-28T13:22:38+00:00</updated>
<author>
<name>Masahiro Yamada</name>
<email>yamada.masahiro@socionext.com</email>
</author>
<published>2018-12-21T08:33:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=558e78e3ce844c61ceffe32775dbefacf167b023'/>
<id>558e78e3ce844c61ceffe32775dbefacf167b023</id>
<content type='text'>
I want to compile each C file independently instead of including all
of them from zconf.y.

Split out confdata.c, expr.c, symbol.c, and preprocess.c .
These are low-hanging fruits.

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
I want to compile each C file independently instead of including all
of them from zconf.y.

Split out confdata.c, expr.c, symbol.c, and preprocess.c .
These are low-hanging fruits.

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>kconfig: convert to SPDX License Identifier</title>
<updated>2018-12-28T13:22:28+00:00</updated>
<author>
<name>Masahiro Yamada</name>
<email>yamada.masahiro@socionext.com</email>
</author>
<published>2018-12-18T12:13:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=0c874100108f03401cb3154801d2671bbad40ad4'/>
<id>0c874100108f03401cb3154801d2671bbad40ad4</id>
<content type='text'>
All files in lxdialog/ are licensed under GPL-2.0+, and the rest are
under GPL-2.0. I added GPL-2.0 tags to test scripts in tests/.

Documentation/process/license-rules.rst does not suggest anything
about the flex/bison files. Because flex does not accept the C++
comment style at the very top of a file, I used the C style for
zconf.l, and so for zconf.y for consistency.

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
All files in lxdialog/ are licensed under GPL-2.0+, and the rest are
under GPL-2.0. I added GPL-2.0 tags to test scripts in tests/.

Documentation/process/license-rules.rst does not suggest anything
about the flex/bison files. Because flex does not accept the C++
comment style at the very top of a file, I used the C style for
zconf.l, and so for zconf.y for consistency.

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>kconfig: remove k_invalid from expr_parse_string() return type</title>
<updated>2018-12-08T01:42:42+00:00</updated>
<author>
<name>Masahiro Yamada</name>
<email>yamada.masahiro@socionext.com</email>
</author>
<published>2018-11-30T09:15:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=0cbe3ac439bfe3e6d0f65b006044f84ce7f3e4d0'/>
<id>0cbe3ac439bfe3e6d0f65b006044f84ce7f3e4d0</id>
<content type='text'>
The only possibility of k_invalid being returned was when
expr_parse_sting() parsed S_OTHER type symbol. This actually never
happened, and this is even clearer since S_OTHER has gone.

Clean up unreachable code.

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The only possibility of k_invalid being returned was when
expr_parse_sting() parsed S_OTHER type symbol. This actually never
happened, and this is even clearer since S_OTHER has gone.

Clean up unreachable code.

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>kconfig: make unmet dependency warnings readable</title>
<updated>2018-03-25T17:04:06+00:00</updated>
<author>
<name>Masahiro Yamada</name>
<email>yamada.masahiro@socionext.com</email>
</author>
<published>2018-03-13T09:56:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f8f69dc0b4e070d4a4d39889a85424913cc922d5'/>
<id>f8f69dc0b4e070d4a4d39889a85424913cc922d5</id>
<content type='text'>
Currently, the unmet dependency warnings end up with endlessly long
expressions, most of which are false positives.

Here is test code to demonstrate how it currently works.

[Test Case]

  config DEP1
          def_bool y

  config DEP2
          bool "DEP2"

  config A
          bool "A"
          select E

  config B
          bool "B"
          depends on DEP2
          select E

  config C
          bool "C"
          depends on DEP1 &amp;&amp; DEP2
          select E

  config D
          def_bool n
          select E

  config E
          bool
          depends on DEP1 &amp;&amp; DEP2

[Result]

  $ make config
  scripts/kconfig/conf  --oldaskconfig Kconfig
  *
  * Linux Kernel Configuration
  *
  DEP2 (DEP2) [N/y/?] (NEW) n
  A (A) [N/y/?] (NEW) y
  warning: (A &amp;&amp; B &amp;&amp; D) selects E which has unmet direct
  dependencies (DEP1 &amp;&amp; DEP2)

Here, I see some points to be improved.

First, '(A || B || D)' would make more sense than '(A &amp;&amp; B &amp;&amp; D)'.
I am not sure if this is intentional, but expr_simplify_unmet_dep()
turns OR expressions into AND, like follows:

        case E_OR:
                return expr_alloc_and(

Second, we see false positives.  'A' is a real unmet dependency.
'B' is false positive because 'DEP1' is fixed to 'y', and 'B' depends
on 'DEP2'.  'C' was correctly dropped by expr_simplify_unmet_dep().
'D' is also false positive because it has no chance to be enabled.
Current expr_simplify_unmet_dep() cannot avoid those false positives.

After all, I decided to use the same helpers as used for printing
reverse dependencies in the help.

With this commit, unreadable warnings (most of the reported symbols are
false positives) in the real world:

$ make ARCH=score allyesconfig
scripts/kconfig/conf  --allyesconfig Kconfig
warning: (HWSPINLOCK_QCOM &amp;&amp; AHCI_MTK &amp;&amp; STMMAC_PLATFORM &amp;&amp;
 DWMAC_IPQ806X &amp;&amp; DWMAC_LPC18XX &amp;&amp; DWMAC_OXNAS &amp;&amp; DWMAC_ROCKCHIP &amp;&amp;
 DWMAC_SOCFPGA &amp;&amp; DWMAC_STI &amp;&amp; TI_CPSW &amp;&amp; PINCTRL_GEMINI &amp;&amp;
 PINCTRL_OXNAS &amp;&amp; PINCTRL_ROCKCHIP &amp;&amp; PINCTRL_DOVE &amp;&amp;
 PINCTRL_ARMADA_37XX &amp;&amp; PINCTRL_STM32 &amp;&amp; S3C2410_WATCHDOG &amp;&amp;
 VIDEO_OMAP3 &amp;&amp; VIDEO_S5P_FIMC &amp;&amp; USB_XHCI_MTK &amp;&amp; RTC_DRV_AT91SAM9 &amp;&amp;
 LPC18XX_DMAMUX &amp;&amp; VIDEO_OMAP4 &amp;&amp; COMMON_CLK_GEMINI &amp;&amp;
 COMMON_CLK_ASPEED &amp;&amp; COMMON_CLK_NXP &amp;&amp; COMMON_CLK_OXNAS &amp;&amp;
 COMMON_CLK_BOSTON &amp;&amp; QCOM_ADSP_PIL &amp;&amp; QCOM_Q6V5_PIL &amp;&amp; QCOM_GSBI &amp;&amp;
 ATMEL_EBI &amp;&amp; ST_IRQCHIP &amp;&amp; RESET_IMX7 &amp;&amp; PHY_HI6220_USB &amp;&amp;
 PHY_RALINK_USB &amp;&amp; PHY_ROCKCHIP_PCIE &amp;&amp; PHY_DA8XX_USB) selects
 MFD_SYSCON which has unmet direct dependencies (HAS_IOMEM)
warning: (PINCTRL_AT91 &amp;&amp; PINCTRL_AT91PIO4 &amp;&amp; PINCTRL_OXNAS &amp;&amp;
 PINCTRL_PISTACHIO &amp;&amp; PINCTRL_PIC32 &amp;&amp; PINCTRL_MESON &amp;&amp;
 PINCTRL_NOMADIK &amp;&amp; PINCTRL_MTK &amp;&amp; PINCTRL_MT7622 &amp;&amp; GPIO_TB10X)
 selects OF_GPIO which has unmet direct dependencies (GPIOLIB &amp;&amp; OF &amp;&amp;
 HAS_IOMEM)
warning: (FAULT_INJECTION_STACKTRACE_FILTER &amp;&amp; LATENCYTOP &amp;&amp; LOCKDEP)
 selects FRAME_POINTER which has unmet direct dependencies
 (DEBUG_KERNEL &amp;&amp; (CRIS || M68K || FRV || UML || SUPERH || BLACKFIN ||
 MN10300 || METAG) || ARCH_WANT_FRAME_POINTERS)

will be turned into:

$ make ARCH=score allyesconfig
scripts/kconfig/conf  --allyesconfig Kconfig

WARNING: unmet direct dependencies detected for MFD_SYSCON
  Depends on [n]: HAS_IOMEM [=n]
  Selected by [y]:
  - PINCTRL_STM32 [=y] &amp;&amp; PINCTRL [=y] &amp;&amp; (ARCH_STM32 ||
 COMPILE_TEST [=y]) &amp;&amp; OF [=y]
  - RTC_DRV_AT91SAM9 [=y] &amp;&amp; RTC_CLASS [=y] &amp;&amp; (ARCH_AT91 ||
 COMPILE_TEST [=y])
  - RESET_IMX7 [=y] &amp;&amp; RESET_CONTROLLER [=y]
  - PHY_HI6220_USB [=y] &amp;&amp; (ARCH_HISI &amp;&amp; ARM64 ||
 COMPILE_TEST [=y])
  - PHY_RALINK_USB [=y] &amp;&amp; (RALINK || COMPILE_TEST [=y])
  - PHY_ROCKCHIP_PCIE [=y] &amp;&amp; (ARCH_ROCKCHIP &amp;&amp; OF [=y] ||
 COMPILE_TEST [=y])

WARNING: unmet direct dependencies detected for OF_GPIO
  Depends on [n]: GPIOLIB [=y] &amp;&amp; OF [=y] &amp;&amp; HAS_IOMEM [=n]
  Selected by [y]:
  - PINCTRL_MTK [=y] &amp;&amp; PINCTRL [=y] &amp;&amp; (ARCH_MEDIATEK ||
 COMPILE_TEST [=y]) &amp;&amp; OF [=y]
  - PINCTRL_MT7622 [=y] &amp;&amp; PINCTRL [=y] &amp;&amp; (ARCH_MEDIATEK ||
 COMPILE_TEST [=y]) &amp;&amp; OF [=y] &amp;&amp; (ARM64 || COMPILE_TEST [=y])

WARNING: unmet direct dependencies detected for FRAME_POINTER
  Depends on [n]: DEBUG_KERNEL [=y] &amp;&amp; (CRIS || M68K || FRV || UML ||
 SUPERH || BLACKFIN || MN10300 || METAG) || ARCH_WANT_FRAME_POINTERS [=n]
  Selected by [y]:
  - LATENCYTOP [=y] &amp;&amp; DEBUG_KERNEL [=y] &amp;&amp; STACKTRACE_SUPPORT [=y] &amp;&amp;
 PROC_FS [=y] &amp;&amp; !MIPS &amp;&amp; !PPC &amp;&amp; !S390 &amp;&amp; !MICROBLAZE &amp;&amp; !ARM_UNWIND &amp;&amp;
 !ARC &amp;&amp; !X86

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
Reviewed-by: Petr Vorel &lt;petr.vorel@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Currently, the unmet dependency warnings end up with endlessly long
expressions, most of which are false positives.

Here is test code to demonstrate how it currently works.

[Test Case]

  config DEP1
          def_bool y

  config DEP2
          bool "DEP2"

  config A
          bool "A"
          select E

  config B
          bool "B"
          depends on DEP2
          select E

  config C
          bool "C"
          depends on DEP1 &amp;&amp; DEP2
          select E

  config D
          def_bool n
          select E

  config E
          bool
          depends on DEP1 &amp;&amp; DEP2

[Result]

  $ make config
  scripts/kconfig/conf  --oldaskconfig Kconfig
  *
  * Linux Kernel Configuration
  *
  DEP2 (DEP2) [N/y/?] (NEW) n
  A (A) [N/y/?] (NEW) y
  warning: (A &amp;&amp; B &amp;&amp; D) selects E which has unmet direct
  dependencies (DEP1 &amp;&amp; DEP2)

Here, I see some points to be improved.

First, '(A || B || D)' would make more sense than '(A &amp;&amp; B &amp;&amp; D)'.
I am not sure if this is intentional, but expr_simplify_unmet_dep()
turns OR expressions into AND, like follows:

        case E_OR:
                return expr_alloc_and(

Second, we see false positives.  'A' is a real unmet dependency.
'B' is false positive because 'DEP1' is fixed to 'y', and 'B' depends
on 'DEP2'.  'C' was correctly dropped by expr_simplify_unmet_dep().
'D' is also false positive because it has no chance to be enabled.
Current expr_simplify_unmet_dep() cannot avoid those false positives.

After all, I decided to use the same helpers as used for printing
reverse dependencies in the help.

With this commit, unreadable warnings (most of the reported symbols are
false positives) in the real world:

$ make ARCH=score allyesconfig
scripts/kconfig/conf  --allyesconfig Kconfig
warning: (HWSPINLOCK_QCOM &amp;&amp; AHCI_MTK &amp;&amp; STMMAC_PLATFORM &amp;&amp;
 DWMAC_IPQ806X &amp;&amp; DWMAC_LPC18XX &amp;&amp; DWMAC_OXNAS &amp;&amp; DWMAC_ROCKCHIP &amp;&amp;
 DWMAC_SOCFPGA &amp;&amp; DWMAC_STI &amp;&amp; TI_CPSW &amp;&amp; PINCTRL_GEMINI &amp;&amp;
 PINCTRL_OXNAS &amp;&amp; PINCTRL_ROCKCHIP &amp;&amp; PINCTRL_DOVE &amp;&amp;
 PINCTRL_ARMADA_37XX &amp;&amp; PINCTRL_STM32 &amp;&amp; S3C2410_WATCHDOG &amp;&amp;
 VIDEO_OMAP3 &amp;&amp; VIDEO_S5P_FIMC &amp;&amp; USB_XHCI_MTK &amp;&amp; RTC_DRV_AT91SAM9 &amp;&amp;
 LPC18XX_DMAMUX &amp;&amp; VIDEO_OMAP4 &amp;&amp; COMMON_CLK_GEMINI &amp;&amp;
 COMMON_CLK_ASPEED &amp;&amp; COMMON_CLK_NXP &amp;&amp; COMMON_CLK_OXNAS &amp;&amp;
 COMMON_CLK_BOSTON &amp;&amp; QCOM_ADSP_PIL &amp;&amp; QCOM_Q6V5_PIL &amp;&amp; QCOM_GSBI &amp;&amp;
 ATMEL_EBI &amp;&amp; ST_IRQCHIP &amp;&amp; RESET_IMX7 &amp;&amp; PHY_HI6220_USB &amp;&amp;
 PHY_RALINK_USB &amp;&amp; PHY_ROCKCHIP_PCIE &amp;&amp; PHY_DA8XX_USB) selects
 MFD_SYSCON which has unmet direct dependencies (HAS_IOMEM)
warning: (PINCTRL_AT91 &amp;&amp; PINCTRL_AT91PIO4 &amp;&amp; PINCTRL_OXNAS &amp;&amp;
 PINCTRL_PISTACHIO &amp;&amp; PINCTRL_PIC32 &amp;&amp; PINCTRL_MESON &amp;&amp;
 PINCTRL_NOMADIK &amp;&amp; PINCTRL_MTK &amp;&amp; PINCTRL_MT7622 &amp;&amp; GPIO_TB10X)
 selects OF_GPIO which has unmet direct dependencies (GPIOLIB &amp;&amp; OF &amp;&amp;
 HAS_IOMEM)
warning: (FAULT_INJECTION_STACKTRACE_FILTER &amp;&amp; LATENCYTOP &amp;&amp; LOCKDEP)
 selects FRAME_POINTER which has unmet direct dependencies
 (DEBUG_KERNEL &amp;&amp; (CRIS || M68K || FRV || UML || SUPERH || BLACKFIN ||
 MN10300 || METAG) || ARCH_WANT_FRAME_POINTERS)

will be turned into:

$ make ARCH=score allyesconfig
scripts/kconfig/conf  --allyesconfig Kconfig

WARNING: unmet direct dependencies detected for MFD_SYSCON
  Depends on [n]: HAS_IOMEM [=n]
  Selected by [y]:
  - PINCTRL_STM32 [=y] &amp;&amp; PINCTRL [=y] &amp;&amp; (ARCH_STM32 ||
 COMPILE_TEST [=y]) &amp;&amp; OF [=y]
  - RTC_DRV_AT91SAM9 [=y] &amp;&amp; RTC_CLASS [=y] &amp;&amp; (ARCH_AT91 ||
 COMPILE_TEST [=y])
  - RESET_IMX7 [=y] &amp;&amp; RESET_CONTROLLER [=y]
  - PHY_HI6220_USB [=y] &amp;&amp; (ARCH_HISI &amp;&amp; ARM64 ||
 COMPILE_TEST [=y])
  - PHY_RALINK_USB [=y] &amp;&amp; (RALINK || COMPILE_TEST [=y])
  - PHY_ROCKCHIP_PCIE [=y] &amp;&amp; (ARCH_ROCKCHIP &amp;&amp; OF [=y] ||
 COMPILE_TEST [=y])

WARNING: unmet direct dependencies detected for OF_GPIO
  Depends on [n]: GPIOLIB [=y] &amp;&amp; OF [=y] &amp;&amp; HAS_IOMEM [=n]
  Selected by [y]:
  - PINCTRL_MTK [=y] &amp;&amp; PINCTRL [=y] &amp;&amp; (ARCH_MEDIATEK ||
 COMPILE_TEST [=y]) &amp;&amp; OF [=y]
  - PINCTRL_MT7622 [=y] &amp;&amp; PINCTRL [=y] &amp;&amp; (ARCH_MEDIATEK ||
 COMPILE_TEST [=y]) &amp;&amp; OF [=y] &amp;&amp; (ARM64 || COMPILE_TEST [=y])

WARNING: unmet direct dependencies detected for FRAME_POINTER
  Depends on [n]: DEBUG_KERNEL [=y] &amp;&amp; (CRIS || M68K || FRV || UML ||
 SUPERH || BLACKFIN || MN10300 || METAG) || ARCH_WANT_FRAME_POINTERS [=n]
  Selected by [y]:
  - LATENCYTOP [=y] &amp;&amp; DEBUG_KERNEL [=y] &amp;&amp; STACKTRACE_SUPPORT [=y] &amp;&amp;
 PROC_FS [=y] &amp;&amp; !MIPS &amp;&amp; !PPC &amp;&amp; !S390 &amp;&amp; !MICROBLAZE &amp;&amp; !ARM_UNWIND &amp;&amp;
 !ARC &amp;&amp; !X86

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
Reviewed-by: Petr Vorel &lt;petr.vorel@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>kconfig: Print reverse dependencies in groups</title>
<updated>2018-03-25T17:03:58+00:00</updated>
<author>
<name>Eugeniu Rosca</name>
<email>erosca@de.adit-jv.com</email>
</author>
<published>2018-02-24T15:24:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=d9119b5925a03b9a3191fa3e93b4091651d8ad25'/>
<id>d9119b5925a03b9a3191fa3e93b4091651d8ad25</id>
<content type='text'>
Surprisingly or not, disabling a CONFIG option (which is assumed to
be unneeded) may be not so trivial. Especially it is not trivial, when
this CONFIG option is selected by a dozen of other configs. Before the
moment commit 1ccb27143360 ("kconfig: make "Selected by:" and
"Implied by:" readable") popped up in v4.16-rc1, it was an absolute pain
to break down the "Selected by" reverse dependency expression in order
to identify all those configs which select (IOW *do not allow
disabling*) a certain feature (assumed to be not needed).

This patch tries to make one step further by putting at users'
fingertips the revdep top level OR sub-expressions grouped/clustered by
the tristate value they evaluate to. This should allow the users to
directly concentrate on and tackle the _active_ reverse dependencies.

To give some numbers and quantify the complexity of certain reverse
dependencies, assuming commit 617aebe6a97e ("Merge tag
'usercopy-v4.16-rc1' of
git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux"), ARCH=arm64
and vanilla arm64 defconfig, here is the top 10 CONFIG options with
the highest amount of top level "||" sub-expressions/tokens that make
up the final "Selected by" reverse dependency expression.

| Config            | All revdep | Active revdep |
|-------------------|------------|---------------|
| REGMAP_I2C        | 212        | 9             |
| CRC32             | 167        | 25            |
| FW_LOADER         | 128        | 5             |
| MFD_CORE          | 124        | 9             |
| FB_CFB_IMAGEBLIT  | 114        | 2             |
| FB_CFB_COPYAREA   | 111        | 2             |
| FB_CFB_FILLRECT   | 110        | 2             |
| SND_PCM           | 103        | 2             |
| CRYPTO_HASH       | 87         | 19            |
| WATCHDOG_CORE     | 86         | 6             |

The story behind the above is that users need to visually
review/evaluate 212 expressions which *potentially* select REGMAP_I2C
in order to identify the expressions which *actually* select REGMAP_I2C,
for a particular ARCH and for a particular defconfig used.

To make this experience smoother, change the way reverse dependencies
are displayed to the user from [1] to [2].

[1] Old representation of DMA_ENGINE_RAID:
  Selected by:
  - AMCC_PPC440SPE_ADMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (440SPe || 440SP)
  - BCM_SBA_RAID [=m] &amp;&amp; DMADEVICES [=y] &amp;&amp; (ARM64 [=y] || ...
  - FSL_RAID [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; FSL_SOC &amp;&amp; ...
  - INTEL_IOATDMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; PCI [=y] &amp;&amp; X86_64
  - MV_XOR [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (PLAT_ORION || ARCH_MVEBU [=y] ...
  - MV_XOR_V2 [=y] &amp;&amp; DMADEVICES [=y] &amp;&amp; ARM64 [=y]
  - XGENE_DMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (ARCH_XGENE [=y] || ...
  - DMATEST [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; DMA_ENGINE [=y]

[2] New representation of DMA_ENGINE_RAID:
  Selected by [y]:
  - MV_XOR_V2 [=y] &amp;&amp; DMADEVICES [=y] &amp;&amp; ARM64 [=y]
  Selected by [m]:
  - BCM_SBA_RAID [=m] &amp;&amp; DMADEVICES [=y] &amp;&amp; (ARM64 [=y] || ...
  Selected by [n]:
  - AMCC_PPC440SPE_ADMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (440SPe || ...
  - FSL_RAID [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; FSL_SOC &amp;&amp; ...
  - INTEL_IOATDMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; PCI [=y] &amp;&amp; X86_64
  - MV_XOR [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (PLAT_ORION || ARCH_MVEBU [=y] ...
  - XGENE_DMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (ARCH_XGENE [=y] || ...
  - DMATEST [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; DMA_ENGINE [=y]

Suggested-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
Signed-off-by: Eugeniu Rosca &lt;erosca@de.adit-jv.com&gt;
Reviewed-by: Petr Vorel &lt;pvorel@suse.cz&gt;
Reviewed-by: Ulf Magnusson &lt;ulfalizer@gmail.com&gt;
Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Surprisingly or not, disabling a CONFIG option (which is assumed to
be unneeded) may be not so trivial. Especially it is not trivial, when
this CONFIG option is selected by a dozen of other configs. Before the
moment commit 1ccb27143360 ("kconfig: make "Selected by:" and
"Implied by:" readable") popped up in v4.16-rc1, it was an absolute pain
to break down the "Selected by" reverse dependency expression in order
to identify all those configs which select (IOW *do not allow
disabling*) a certain feature (assumed to be not needed).

This patch tries to make one step further by putting at users'
fingertips the revdep top level OR sub-expressions grouped/clustered by
the tristate value they evaluate to. This should allow the users to
directly concentrate on and tackle the _active_ reverse dependencies.

To give some numbers and quantify the complexity of certain reverse
dependencies, assuming commit 617aebe6a97e ("Merge tag
'usercopy-v4.16-rc1' of
git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux"), ARCH=arm64
and vanilla arm64 defconfig, here is the top 10 CONFIG options with
the highest amount of top level "||" sub-expressions/tokens that make
up the final "Selected by" reverse dependency expression.

| Config            | All revdep | Active revdep |
|-------------------|------------|---------------|
| REGMAP_I2C        | 212        | 9             |
| CRC32             | 167        | 25            |
| FW_LOADER         | 128        | 5             |
| MFD_CORE          | 124        | 9             |
| FB_CFB_IMAGEBLIT  | 114        | 2             |
| FB_CFB_COPYAREA   | 111        | 2             |
| FB_CFB_FILLRECT   | 110        | 2             |
| SND_PCM           | 103        | 2             |
| CRYPTO_HASH       | 87         | 19            |
| WATCHDOG_CORE     | 86         | 6             |

The story behind the above is that users need to visually
review/evaluate 212 expressions which *potentially* select REGMAP_I2C
in order to identify the expressions which *actually* select REGMAP_I2C,
for a particular ARCH and for a particular defconfig used.

To make this experience smoother, change the way reverse dependencies
are displayed to the user from [1] to [2].

[1] Old representation of DMA_ENGINE_RAID:
  Selected by:
  - AMCC_PPC440SPE_ADMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (440SPe || 440SP)
  - BCM_SBA_RAID [=m] &amp;&amp; DMADEVICES [=y] &amp;&amp; (ARM64 [=y] || ...
  - FSL_RAID [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; FSL_SOC &amp;&amp; ...
  - INTEL_IOATDMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; PCI [=y] &amp;&amp; X86_64
  - MV_XOR [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (PLAT_ORION || ARCH_MVEBU [=y] ...
  - MV_XOR_V2 [=y] &amp;&amp; DMADEVICES [=y] &amp;&amp; ARM64 [=y]
  - XGENE_DMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (ARCH_XGENE [=y] || ...
  - DMATEST [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; DMA_ENGINE [=y]

[2] New representation of DMA_ENGINE_RAID:
  Selected by [y]:
  - MV_XOR_V2 [=y] &amp;&amp; DMADEVICES [=y] &amp;&amp; ARM64 [=y]
  Selected by [m]:
  - BCM_SBA_RAID [=m] &amp;&amp; DMADEVICES [=y] &amp;&amp; (ARM64 [=y] || ...
  Selected by [n]:
  - AMCC_PPC440SPE_ADMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (440SPe || ...
  - FSL_RAID [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; FSL_SOC &amp;&amp; ...
  - INTEL_IOATDMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; PCI [=y] &amp;&amp; X86_64
  - MV_XOR [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (PLAT_ORION || ARCH_MVEBU [=y] ...
  - XGENE_DMA [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; (ARCH_XGENE [=y] || ...
  - DMATEST [=n] &amp;&amp; DMADEVICES [=y] &amp;&amp; DMA_ENGINE [=y]

Suggested-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
Signed-off-by: Eugeniu Rosca &lt;erosca@de.adit-jv.com&gt;
Reviewed-by: Petr Vorel &lt;pvorel@suse.cz&gt;
Reviewed-by: Ulf Magnusson &lt;ulfalizer@gmail.com&gt;
Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>kconfig: clean-up reverse dependency help implementation</title>
<updated>2018-03-25T17:03:57+00:00</updated>
<author>
<name>Masahiro Yamada</name>
<email>yamada.masahiro@socionext.com</email>
</author>
<published>2018-02-20T08:18:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=9a47ceec543bfb703fbe2f8d584850b582caf1a6'/>
<id>9a47ceec543bfb703fbe2f8d584850b582caf1a6</id>
<content type='text'>
This commit splits out the special E_OR handling ('-' instead of '||')
into a dedicated helper expr_print_revdev().

Restore the original expr_print() prior to commit 1ccb27143360
("kconfig: make "Selected by:" and "Implied by:" readable").

This makes sense because:

  - We need to chop those expressions only when printing the reverse
    dependency, and only when E_OR is encountered

  - Otherwise, it should be printed as before, so fall back to
    expr_print()

This also improves the behavior; for a single line, it was previously
displayed in the same line as "Selected by", like this:

  Selected by: A [=n] &amp;&amp; B [=n]

This will be displayed in a new line, consistently:

  Selected by:
  - A [=n] &amp;&amp; B [=n]

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
Reviewed-by: Petr Vorel &lt;pvorel@suse.cz&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This commit splits out the special E_OR handling ('-' instead of '||')
into a dedicated helper expr_print_revdev().

Restore the original expr_print() prior to commit 1ccb27143360
("kconfig: make "Selected by:" and "Implied by:" readable").

This makes sense because:

  - We need to chop those expressions only when printing the reverse
    dependency, and only when E_OR is encountered

  - Otherwise, it should be printed as before, so fall back to
    expr_print()

This also improves the behavior; for a single line, it was previously
displayed in the same line as "Selected by", like this:

  Selected by: A [=n] &amp;&amp; B [=n]

This will be displayed in a new line, consistently:

  Selected by:
  - A [=n] &amp;&amp; B [=n]

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
Reviewed-by: Petr Vorel &lt;pvorel@suse.cz&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>kconfig: send error messages to stderr</title>
<updated>2018-02-08T19:10:10+00:00</updated>
<author>
<name>Masahiro Yamada</name>
<email>yamada.masahiro@socionext.com</email>
</author>
<published>2018-02-06T00:34:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=9e3e10c725360b9d07018cfcd5b7b6b7d325fae5'/>
<id>9e3e10c725360b9d07018cfcd5b7b6b7d325fae5</id>
<content type='text'>
These messages should be directed to stderr.

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
Reviewed-by: Ulf Magnusson &lt;ulfalizer@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
These messages should be directed to stderr.

Signed-off-by: Masahiro Yamada &lt;yamada.masahiro@socionext.com&gt;
Reviewed-by: Ulf Magnusson &lt;ulfalizer@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge tag 'kconfig-v4.16' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild</title>
<updated>2018-02-01T19:45:49+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2018-02-01T19:45:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=562f36ed28e6faa4245ea2ca1392d90ab98ebbe8'/>
<id>562f36ed28e6faa4245ea2ca1392d90ab98ebbe8</id>
<content type='text'>
Pull Kconfig updates from Masahiro Yamada:
 "A pretty big batch of Kconfig updates.

  I have to mention the lexer and parser of Kconfig are now built from
  real .l and .y sources. So, flex and bison are the requirement for
  building the kernel. Both of them (unlike gperf) have been stable for
  a long time. This change has been tested several weeks in linux-next,
  and I did not receive any problem report about this.

  Summary:

   - add checks for mistakes, like the choice default is not in choice,
     help is doubled

   - document data structure and complex code

   - fix various memory leaks

   - change Makefile to build lexer and parser instead of using
     pre-generated C files

   - drop 'boolean' keyword, which is equivalent to 'bool'

   - use default 'yy' prefix and remove unneeded Make variables

   - fix gettext() check for xconfig

   - announce that oldnoconfig will be finally removed

   - make 'Selected by:' and 'Implied by' readable in help and search
     result

   - hide silentoldconfig from 'make help' to stop confusing people

   - fix misc things and cleanups"

* tag 'kconfig-v4.16' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (37 commits)
  kconfig: Remove silentoldconfig from help and docs; fix kconfig/conf's help
  kconfig: make "Selected by:" and "Implied by:" readable
  kconfig: announce removal of oldnoconfig if used
  kconfig: fix make xconfig when gettext is missing
  kconfig: Clarify menu and 'if' dependency propagation
  kconfig: Document 'if' flattening logic
  kconfig: Clarify choice dependency propagation
  kconfig: Document SYMBOL_OPTIONAL logic
  kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX
  kconfig: use default 'yy' prefix for lexer and parser
  kconfig: make conf_unsaved a local variable of conf_read()
  kconfig: make xfgets() really static
  kconfig: make input_mode static
  kconfig: Warn if there is more than one help text
  kconfig: drop 'boolean' keyword
  kconfig: use bool instead of boolean for type definition attributes, again
  kconfig: Remove menu_end_entry()
  kconfig: Document important expression functions
  kconfig: Document automatic submenu creation code
  kconfig: Fix choice symbol expression leak
  ...
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pull Kconfig updates from Masahiro Yamada:
 "A pretty big batch of Kconfig updates.

  I have to mention the lexer and parser of Kconfig are now built from
  real .l and .y sources. So, flex and bison are the requirement for
  building the kernel. Both of them (unlike gperf) have been stable for
  a long time. This change has been tested several weeks in linux-next,
  and I did not receive any problem report about this.

  Summary:

   - add checks for mistakes, like the choice default is not in choice,
     help is doubled

   - document data structure and complex code

   - fix various memory leaks

   - change Makefile to build lexer and parser instead of using
     pre-generated C files

   - drop 'boolean' keyword, which is equivalent to 'bool'

   - use default 'yy' prefix and remove unneeded Make variables

   - fix gettext() check for xconfig

   - announce that oldnoconfig will be finally removed

   - make 'Selected by:' and 'Implied by' readable in help and search
     result

   - hide silentoldconfig from 'make help' to stop confusing people

   - fix misc things and cleanups"

* tag 'kconfig-v4.16' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (37 commits)
  kconfig: Remove silentoldconfig from help and docs; fix kconfig/conf's help
  kconfig: make "Selected by:" and "Implied by:" readable
  kconfig: announce removal of oldnoconfig if used
  kconfig: fix make xconfig when gettext is missing
  kconfig: Clarify menu and 'if' dependency propagation
  kconfig: Document 'if' flattening logic
  kconfig: Clarify choice dependency propagation
  kconfig: Document SYMBOL_OPTIONAL logic
  kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX
  kconfig: use default 'yy' prefix for lexer and parser
  kconfig: make conf_unsaved a local variable of conf_read()
  kconfig: make xfgets() really static
  kconfig: make input_mode static
  kconfig: Warn if there is more than one help text
  kconfig: drop 'boolean' keyword
  kconfig: use bool instead of boolean for type definition attributes, again
  kconfig: Remove menu_end_entry()
  kconfig: Document important expression functions
  kconfig: Document automatic submenu creation code
  kconfig: Fix choice symbol expression leak
  ...
</pre>
</div>
</content>
</entry>
</feed>
