<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/linux.git/scripts/kconfig/expr.c, branch v6.6.131</title>
<subtitle>Linux kernel stable tree (mirror)</subtitle>
<id>https://git.radix-linux.su/kernel/linux.git/atom?h=v6.6.131</id>
<link rel='self' href='https://git.radix-linux.su/kernel/linux.git/atom?h=v6.6.131'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/'/>
<updated>2024-07-25T07:50:44+00:00</updated>
<entry>
<title>kconfig: remove wrong expr_trans_bool()</title>
<updated>2024-07-25T07:50:44+00:00</updated>
<author>
<name>Masahiro Yamada</name>
<email>masahiroy@kernel.org</email>
</author>
<published>2024-06-03T16:19:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=d9be8eeab03ef6f452d0606c98e32375d2891aa4'/>
<id>urn:sha1:d9be8eeab03ef6f452d0606c98e32375d2891aa4</id>
<content type='text'>
[ Upstream commit 77a92660d8fe8d29503fae768d9f5eb529c88b36 ]

expr_trans_bool() performs an incorrect transformation.

[Test Code]

    config MODULES
            def_bool y
            modules

    config A
            def_bool y
            select C if B != n

    config B
            def_tristate m

    config C
            tristate

[Result]

    CONFIG_MODULES=y
    CONFIG_A=y
    CONFIG_B=m
    CONFIG_C=m

This output is incorrect because CONFIG_C=y is expected.

Documentation/kbuild/kconfig-language.rst clearly explains the function
of the '!=' operator:

    If the values of both symbols are equal, it returns 'n',
    otherwise 'y'.

Therefore, the statement:

    select C if B != n

should be equivalent to:

    select C if y

Or, more simply:

    select C

Hence, the symbol C should be selected by the value of A, which is 'y'.

However, expr_trans_bool() wrongly transforms it to:

    select C if B

Therefore, the symbol C is selected by (A &amp;&amp; B), which is 'm'.

The comment block of expr_trans_bool() correctly explains its intention:

  * bool FOO!=n =&gt; FOO
    ^^^^

If FOO is bool, FOO!=n can be simplified into FOO. This is correct.

However, the actual code performs this transformation when FOO is
tristate:

    if (e-&gt;left.sym-&gt;type == S_TRISTATE) {
                             ^^^^^^^^^^

While it can be fixed to S_BOOLEAN, there is no point in doing so
because expr_tranform() already transforms FOO!=n to FOO when FOO is
bool. (see the "case E_UNEQUAL" part)

expr_trans_bool() is wrong and unnecessary.

Signed-off-by: Masahiro Yamada &lt;masahiroy@kernel.org&gt;
Acked-by: Randy Dunlap &lt;rdunlap@infradead.org&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<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.radix-linux.su/kernel/linux.git/commit/?id=3460d0bc256a50b71dbdae8227c600761c502022'/>
<id>urn:sha1: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>
</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.radix-linux.su/kernel/linux.git/commit/?id=272a72103012862e3a24ea06635253ead0b6e808'/>
<id>urn:sha1: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>
</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.radix-linux.su/kernel/linux.git/commit/?id=558e78e3ce844c61ceffe32775dbefacf167b023'/>
<id>urn:sha1: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>
</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.radix-linux.su/kernel/linux.git/commit/?id=0c874100108f03401cb3154801d2671bbad40ad4'/>
<id>urn:sha1: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>
</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.radix-linux.su/kernel/linux.git/commit/?id=0cbe3ac439bfe3e6d0f65b006044f84ce7f3e4d0'/>
<id>urn:sha1: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>
</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.radix-linux.su/kernel/linux.git/commit/?id=f8f69dc0b4e070d4a4d39889a85424913cc922d5'/>
<id>urn:sha1: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>
</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.radix-linux.su/kernel/linux.git/commit/?id=d9119b5925a03b9a3191fa3e93b4091651d8ad25'/>
<id>urn:sha1: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>
</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.radix-linux.su/kernel/linux.git/commit/?id=9a47ceec543bfb703fbe2f8d584850b582caf1a6'/>
<id>urn:sha1: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>
</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.radix-linux.su/kernel/linux.git/commit/?id=9e3e10c725360b9d07018cfcd5b7b6b7d325fae5'/>
<id>urn:sha1: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>
</entry>
</feed>
