Skip to content
Snippets Groups Projects
  1. Feb 27, 2019
  2. Dec 28, 2018
    • Masahiro Yamada's avatar
      kconfig: convert to SPDX License Identifier · 0c874100
      Masahiro Yamada authored
      
      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: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      0c874100
  3. Nov 01, 2018
  4. Aug 22, 2018
  5. Jul 25, 2018
    • Masahiro Yamada's avatar
      kconfig: allow all config targets to write auto.conf if missing · 00c864f8
      Masahiro Yamada authored
      
      Currently, only syncconfig creates or updates include/config/auto.conf
      and some other files.  Other config targets create or update only the
      .config file.
      
      When you configure and build the kernel from a pristine source tree,
      any config target is followed by syncconfig in the build stage since
      include/config/auto.conf is missing.
      
      We are moving compiler tests from Makefile to Kconfig.  It means that
      parsing Kconfig files will be more costly since Kconfig invokes the
      compiler commands internally.  Thus, we want to avoid invoking Kconfig
      twice (one for *config to create the .config, and one for syncconfig
      to synchronize the auto.conf).  If auto.conf does not exist, we can
      generate all configuration files in the first configuration stage,
      which will save the syncconfig in the build stage.
      
      Please note this should be done only when auto.conf is missing.  If
      *config blindly did this, time stamp files under include/config/ would
      be unnecessarily touched, triggering unneeded rebuild of objects.
      
      I assume a scenario like this:
      
       1. You have a source tree that has already been built
          with CONFIG_FOO disabled
      
       2. Run "make menuconfig" to enable CONFIG_FOO
      
       3. CONFIG_FOO turns out to be unnecessary.
          Run "make menuconfig" again to disable CONFIG_FOO
      
       4. Run "make"
      
      In this case, include/config/foo.h should not be touched since there
      is no change in CONFIG_FOO.  The sync process should be delayed until
      the user really attempts to build the kernel.
      
      This commit has another motivation; I want to suppress the 'No such
      file or directory' warning from the 'include' directive.
      
      The top-level Makefile includes auto.conf with '-include' directive,
      like this:
      
        ifeq ($(dot-config),1)
        -include include/config/auto.conf
        endif
      
      This looks strange because auto.conf is mandatory when dot-config is 1.
      I guess only the reason of using '-include' is to suppress the warning
      'include/config/auto.conf: No such file or directory' when building
      from a clean tree.  However, this has a side-effect; Make considers
      the files included by '-include' are optional.  Hence, Make continues
      to build even if it fails to generate include/config/auto.conf.  I will
      change this in the next commit, but the warning message is annoying.
      (At least, kbuild test robot reports it as a regression.)
      
      With this commit, Kconfig will generate all configuration files together
      with the .config and I guess it is a solution good enough to suppress
      the warning.
      
      Note:
      GNU Make 4.2 or later does not display the warning from the 'include'
      directive if include files are successfully generated.  See GNU Make
      commit 87a5f98d248f ("[SV 102] Don't show unnecessary include file
      errors.")  However, older GNU Make versions are still widely used.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      00c864f8
    • Masahiro Yamada's avatar
      kconfig: make syncconfig update .config regardless of sym_change_count · 16952b77
      Masahiro Yamada authored
      
      syncconfig updates the .config only when sym_change_count > 0, i.e.
      any change in config symbols has been detected.
      
      Not only symbols but also comments are contained in the .config file.
      If only comments are updated, they are not fed back to the .config,
      then the stale comments are left-over.  Of course, this is just a
      matter of comments, but why not fix it.
      
      I see some scenarios where this happens.
      
      Scenario A:
      
       1. You have a source tree that has already been configured.
      
       2. Linus increments the version number in the top-level Makefile
          (i.e. he commits a new release)
      
       3. You pull it, and run 'make'
      
       4. syncconfig is invoked because the environment variable,
          KERNELVERSION is updated, but the .config is not updated since
          no config symbol is changed.
      
       5. The .config file contains a kernel version in the top line:
      
          # Automatically generated file; DO NOT EDIT.
          # Linux/arm64 4.18.0-rc2 Kernel Configuration
      
          ... which points to a previous version.
      
      Scenario B:
      
       1. You have a source tree that has already been configured.
      
       2. You upgrade the compiler, but it still has the same version number.
          This may happen if you regularly build the latest compiler from
          the source code.
      
       3. You run 'make'
      
       4. syncconfig is invoked because the environment variable,
          CC_VERSION_TEXT is updated, but the .config is not updated since
          no config symbol is changed.
      
       5. The .config file contains the version string of the compiler:
      
          #
          # Compiler: aarch64-linux-gcc (GCC) 9.0.0 20180628 (experimental)
          #
      
          ... which carries the information of the old compiler.
      
      If KCONFIG_NOSILENTUPDATE is set, syncconfig is not allowed to update
      the .config file.  Otherwise, it is fine to update it regardless of
      sym_change_count.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      16952b77
  6. May 28, 2018
  7. Apr 13, 2018
    • Don Zickus's avatar
      kconfig: extend output of 'listnewconfig' · 17baab68
      Don Zickus authored
      We at Red Hat/Fedora have generally tried to have a per file breakdown of
      every config option we set.  This makes it easy for us to add new options
      when they are exposed and keep a changelog of why they were set.
      
      A Fedora example is here:
        https://src.fedoraproject.org/cgit/rpms/kernel.git/tree/configs/fedora/generic
      
      
      
      Using various merge scripts, we build up a config file and run it through
      'make listnewconfig' and 'make oldnoconfig'.   The idea is to print out new
      config options that haven't been manually set and use the default until
      a patch is posted to set it properly.
      
      To speed things up, it would be nice to make it easier to generate a
      patch to post the default setting.  The output of 'make listnewconfig'
      has two issues that limit us:
      
      - it doesn't provide the default value
      - it doesn't provide the new 'choice' options that get flagged in
        'oldconfig'
      
      This patch extends 'listnewconfig' to address the above two issues.
      
      This allows us to run a script
      
      make listnewconfig | rhconfig-tool -o patches; git send-email patches/
      
      The output of 'make listnewconfig':
      
      CONFIG_NET_EMATCH_IPT
      CONFIG_IPVLAN
      CONFIG_ICE
      CONFIG_NET_VENDOR_NI
      CONFIG_IEEE802154_MCR20A
      CONFIG_IR_IMON_DECODER
      CONFIG_IR_IMON_RAW
      
      The new output of 'make listnewconfig':
      
      CONFIG_KERNEL_XZ=n
      CONFIG_KERNEL_LZO=n
      CONFIG_NET_EMATCH_IPT=n
      CONFIG_IPVLAN=n
      CONFIG_ICE=n
      CONFIG_NET_VENDOR_NI=y
      CONFIG_IEEE802154_MCR20A=n
      CONFIG_IR_IMON_DECODER=n
      CONFIG_IR_IMON_RAW=n
      
      Signed-off-by: default avatarDon Zickus <dzickus@redhat.com>
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      17baab68
  8. Mar 25, 2018
    • Masahiro Yamada's avatar
      kconfig: rename silentoldconfig to syncconfig · 911a91c3
      Masahiro Yamada authored
      
      As commit cedd55d4 ("kconfig: Remove silentoldconfig from help
      and docs; fix kconfig/conf's help") mentioned, 'silentoldconfig' is a
      historical misnomer.  That commit removed it from help and docs since
      it is an internal interface.  If so, it should be allowed to rename
      it to something more intuitive.  'syncconfig' is the one I came up
      with because it updates the .config if necessary, then synchronize
      include/generated/autoconf.h and include/config/* with it.
      
      You should not manually invoke 'silentoldcofig'.  Display warning if
      used in case existing scripts are doing wrong.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarUlf Magnusson <ulfalizer@gmail.com>
      911a91c3
    • Masahiro Yamada's avatar
      kconfig: hide irrelevant sub-menus for oldconfig · 2aad9b89
      Masahiro Yamada authored
      
      Historically, "make oldconfig" has changed its behavior several times,
      quieter or louder.  (I attached the history below.)  Currently, it is
      not as quiet as it should be.  This commit addresses it.
      
        Test Case
        ---------
      
      ---------------------------(Kconfig)----------------------------
      menu "menu"
      
      config FOO
              bool "foo"
      
      menu "sub menu"
      
      config BAR
              bool "bar"
      
      endmenu
      
      endmenu
      
      menu "sibling menu"
      
      config BAZ
              bool "baz"
      
      endmenu
      ----------------------------------------------------------------
      
      ---------------------------(.config)----------------------------
      CONFIG_BAR=y
      CONFIG_BAZ=y
      ----------------------------------------------------------------
      
      With the Kconfig and .config above, "make silentoldconfig" and
      "make oldconfig" work differently, like follows:
      
        $ make silentoldconfig
        scripts/kconfig/conf  --silentoldconfig Kconfig
        *
        * Restart config...
        *
        *
        * menu
        *
        foo (FOO) [N/y/?] (NEW) y
        #
        # configuration written to .config
        #
      
        $ make oldconfig
        scripts/kconfig/conf  --oldconfig Kconfig
        *
        * Restart config...
        *
        *
        * menu
        *
        foo (FOO) [N/y/?] (NEW) y
        *
        * sub menu
        *
        bar (BAR) [Y/n/?] y
        #
        # configuration written to .config
        #
      
      Both hide "sibling node" since it is irrelevant.  The difference is
      that silentoldconfig hides "sub menu" whereas oldconfig does not.
      The behavior of silentoldconfig is preferred since the "sub menu"
      does not contain any new symbol.
      
      The root cause is in conf().  There are three input modes that can
      call conf(); oldaskconfig, oldconfig, and silentoldconfig.
      
      Everytime conf() encounters a menu entry, it calls check_conf() to
      check if it contains new symbols.  If no new symbol is found, the
      menu is just skipped.
      
      Currently, this happens only when input_mode == silentoldconfig.
      The oldaskconfig enters into the check_conf() loop as silentoldconfig,
      so oldaskconfig works likewise for the second loop or later, but it
      never happens for oldconfig.  So, irrelevant sub-menus are shown for
      oldconfig.
      
      Change the test condition to "input_mode != oldaskconfig".  This is
      false only for the first loop of oldaskconfig; it must ask the user
      all symbols, so no need to call check_conf().
      
        History of oldconfig
        --------------------
      
      [0] Originally, "make oldconfig" was as loud as "make config"  (It
          showed the entire .config file)
      
      [1] Commit cd9140e1 ("kconfig: make oldconfig is now less chatty")
          made oldconfig quieter, but it was still less quieter than
          silentoldconfig.  (oldconfig did not hide sub-menus)
      
      [2] Commit 204c96f6 ("kconfig: fix silentoldconfig") changed
          the input_mode of oldconfig to "ask_silent" from "ask_new".
          So, oldconfig really became as quiet as silentoldconfig.
          (oldconfig hided irrelevant sub-menus)
      
      [3] Commit 4062f1a4 ("kconfig: use long options in conf") made
          oldconfig as loud as [0] due to misconversion.
      
      [4] Commit 14828349 ("kconfig: fix make oldconfig") addressed
          the misconversion of [3], but it made oldconfig quieter only to
          the same level as [1], not [2].
      
      This commit is restoring the behavior of [2].
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarUlf Magnusson <ulfalizer@gmail.com>
      2aad9b89
    • Masahiro Yamada's avatar
      kconfig: remove redundant input_mode test for check_conf() loop · 99f0b657
      Masahiro Yamada authored
      
      check_conf() never increments conf_cnt for listnewconfig, so conf_cnt
      is always zero.
      
      In other words, conf_cnt is not zero, "input_mode != listnewconfig"
      is met.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarUlf Magnusson <ulfalizer@gmail.com>
      99f0b657
    • Masahiro Yamada's avatar
      kconfig: remove unneeded input_mode test in conf() · 4bb3a5b0
      Masahiro Yamada authored
      
      conf() is never called for listnewconfig / olddefconfig.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarUlf Magnusson <ulfalizer@gmail.com>
      4bb3a5b0
    • Masahiro Yamada's avatar
      kconfig: do not call check_conf() for olddefconfig · 59a80b5e
      Masahiro Yamada authored
      
      check_conf() traverses the menu tree, but it is completely no-op for
      olddefconfig because the following if-else block does nothing.
      
          if (input_mode == listnewconfig) {
                  ...
          } else if (input_mode != olddefconfig) {
                  ...
          }
      
      As the help message says, olddefconfig automatically sets new symbols
      to their default value.  There is no room for manual intervention.
      So, calling check_conf() for olddefconfig is odd in the first place.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarUlf Magnusson <ulfalizer@gmail.com>
      59a80b5e
  9. Feb 08, 2018
    • Masahiro Yamada's avatar
      kconfig: send error messages to stderr · 9e3e10c7
      Masahiro Yamada authored
      
      These messages should be directed to stderr.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarUlf Magnusson <ulfalizer@gmail.com>
      9e3e10c7
    • Masahiro Yamada's avatar
      kconfig: echo stdin to stdout if either is redirected · f3ff6fb5
      Masahiro Yamada authored
      
      If stdio is not tty, conf_askvalue() puts additional new line to
      prevent prompts from being concatenated into a single line.  This
      care is missing in conf_choice(), so a 'choice' prompt and the next
      prompt are shown in the same line.
      
      Move the code into xfgets() to cater to all cases.  To improve this
      more, let's echo stdin to stdout.  This clarifies what keys were
      input from stdio and the stdout looks like as if it were from tty.
      
      I removed the isatty(2) check since stderr is unrelated here.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarUlf Magnusson <ulfalizer@gmail.com>
      f3ff6fb5
    • Masahiro Yamada's avatar
      kconfig: remove check_stdin() · d2a04648
      Masahiro Yamada authored
      
      Except silentoldconfig, valid_stdin is 1, so check_stdin() is no-op.
      
      oldconfig and silentoldconfig work almost in the same way except that
      the latter generates additional files under include/.  Both ask users
      for input for new symbols.
      
      I do not know why only silentoldconfig requires stdio be tty.
      
        $ rm -f .config; touch .config
        $ yes "" | make oldconfig > stdout
        $ rm -f .config; touch .config
        $ yes "" | make silentoldconfig > stdout
        make[1]: *** [silentoldconfig] Error 1
        make: *** [silentoldconfig] Error 2
        $ tail -n 4 stdout
        Console input/output is redirected. Run 'make oldconfig' to update configuration.
      
        scripts/kconfig/Makefile:40: recipe for target 'silentoldconfig' failed
        Makefile:507: recipe for target 'silentoldconfig' failed
      
      Redirection is useful, for example, for testing where we want to give
      particular key inputs from a test file, then check the result.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarUlf Magnusson <ulfalizer@gmail.com>
      d2a04648
    • Masahiro Yamada's avatar
      kconfig: show '?' prompt even if no help text is available · 4f208f39
      Masahiro Yamada authored
      
      'make config', 'make oldconfig', etc. always receive '?' as a valid
      input and show useful information even if no help text is available.
      
      ------------------------>8------------------------
      foo (FOO) [N/y] (NEW) ?
      
      There is no help available for this option.
      Symbol: FOO [=n]
      Type  : bool
      Prompt: foo
        Defined at Kconfig:1
      ------------------------>8------------------------
      
      However, '?' is not shown in the prompt if its help text is missing.
      Let's show '?' all the time so that the prompt and the behavior match.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarUlf Magnusson <ulfalizer@gmail.com>
      4f208f39
  10. Jan 27, 2018
  11. Jan 21, 2018
  12. Dec 10, 2015
  13. Apr 09, 2015
  14. Jun 10, 2014
  15. Jun 24, 2013
    • Yann E. MORIN's avatar
      kconfig: loop as long as we changed some symbols in randconfig · 3b9a19e0
      Yann E. MORIN authored
      
      Because of choice-in-a-choice constructs, it can happen that not all
      symbols are assigned a value during randconfig, leading in rare cases
      to this situation:
      
          ---8<--- choice-in-choice.in
          choice
              bool "A/B/C"
          config A
              bool "A"
      
          config B
              bool "B"
          if B
          choice
              bool "E/F"
          config E
              bool "E"
          config F
              bool "F"
          endchoice
          endif # B
      
          config C
              bool "C"
          endchoice
          ---8<---
      
          $ ./scripts/kconfig/conf --randconfig choice-in-choice.in
          [--SNIP--]
          $ ./scripts/kconfig/conf --silentoldconfig choice-in-choice.in </dev/null
          [--SNIP--]
          A/B/C
            1. A (A)
          > 2. B (B)
            3. C (C)
          choice[1-3]: 2
            E/F
            > 1. E (E) (NEW)
              2. F (F) (NEW)
            choice[1-2]: aborted!
      
          Console input/output is redirected. Run 'make oldconfig' to update
          configuration.
      
      Fix this by looping in randconfig for as long as some symbol gets assigned
      a value.
      
      Note: this was spotted with the USB EHCI Debug Device Gadget (USB_G_DBGP),
      which uses this choice-in-a-choice construct, and exhibits this problem.
      The example above is just a stripped-down minimalist test-case.
      
      Signed-off-by: default avatar"Yann E. MORIN" <yann.morin.1998@free.fr>
      3b9a19e0
  16. Jun 18, 2013
  17. Apr 24, 2013
    • Yann E. MORIN's avatar
      kconfig: allow specifying the seed for randconfig · 0d8024c6
      Yann E. MORIN authored
      
      For reproducibility, it can be useful to be able to specify the
      seed to use to seed the RNG.
      
      Add a new KCONFIG_SEED environment variable which can be set to
      the seed to use:
          $ make KCONFIG_SEED=42 randconfig
          $ sha1sum .config
          70a128c8dcc61303069e1be352cce64114dfcbca  .config
          $ make KCONFIG_SEED=42 randconfig
          $ sha1sum .config
          70a128c8dcc61303069e1be352cce64114dfcbca  .config
      
      It's very usefull for eg. debugging the kconfig parser.
      
      Signed-off-by: default avatar"Yann E. MORIN" <yann.morin.1998@free.fr>
      0d8024c6
  18. Feb 19, 2013
  19. Sep 27, 2012
  20. Aug 31, 2012
  21. May 07, 2012
    • Eric W. Biederman's avatar
      kbuild: all{no,yes,mod,def,rand}config only read files when instructed to. · 9f420bf0
      Eric W. Biederman authored
      
      Prevent subtle surprises to both people working on the kconfig code
      and people using make allnoconfig allyesconfig allmoconfig and
      randconfig by only attempting to read a config file if
      KCONFIG_ALLCONFIG is set.
      
      Common sense suggests attempting to read the extra config files does
      not make sense unless requested.  The documentation says the code
      won't attempt to read the extra config files unless requested.
      Current usage does not appear to include people depending on the code
      reading the config files without the variable being set So do the
      simple thing and stop reading config files when passed
      all{no,yes,mod,def,rand}config unless KCONFIG_ALLCONFIG environment
      variable is set.
      
      Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
      Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
      9f420bf0
  22. May 04, 2012
    • Eric W. Biederman's avatar
      kconfig: Add error handling to KCONFIG_ALLCONFIG · 5efe241e
      Eric W. Biederman authored
      
      - Only try to read the file specified if KCONFIG_ALL_CONFIG is set to
        something other than the empty string or "1".
      
      - Don't use stat to check the name passed to conf_read_simple so that
        zconf_fopen can find the file in the current directory or in SRCTREE
        removing a extremely source of confusing failure, where KCONFIG_ALL_CONFIG
        was not interpreted with respect to the directory make was called in.
      
      - If conf_read_simple fails complain clearly and stop processing.
        Allowing the simple debugging of typos.
      
      - Clearly document the behavior so it is clear to users which
        values are treated as flags and which values are treated as
        filenames.
      
      Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
      5efe241e
  23. Jul 02, 2011
  24. Jun 06, 2011
  25. Apr 24, 2011
    • Ben Hutchings's avatar
      kconfig: Avoid buffer underrun in choice input · 3ba41621
      Ben Hutchings authored
      
      Commit 40aee729 ('kconfig: fix default value for choice input')
      fixed some cases where kconfig would select the wrong option from a
      choice with a single valid option and thus enter an infinite loop.
      
      However, this broke the test for user input of the form 'N?', because
      when kconfig selects the single valid option the input is zero-length
      and the test will read the byte before the input buffer.  If this
      happens to contain '?' (as it will in a mips build on Debian unstable
      today) then kconfig again enters an infinite loop.
      
      Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
      Cc: stable@kernel.org [2.6.17+]
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      3ba41621
  26. Apr 08, 2011
    • Ben Hutchings's avatar
      kconfig: Avoid buffer underrun in choice input · 466de918
      Ben Hutchings authored
      
      commit 40aee729 ('kconfig: fix default
      value for choice input') fixed some cases where kconfig would select
      the wrong option from a choice with a single valid option and thus
      enter an infinite loop.
      
      However, this broke the test for user input of the form 'N?', because
      when kconfig selects the single valid option the input is zero-length
      and the test will read the byte before the input buffer.  If this
      happens to contain '?' (as it will in a mips build on Debian unstable
      today) then kconfig again enters an infinite loop.
      
      Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
      Cc: stable@kernel.org [2.6.17+]
      Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
      466de918
  27. Dec 15, 2010
Loading