cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

Kconfig.recursion-issue-01 (2256B)


      1# Simple Kconfig recursive issue
      2# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      3#
      4# Test with:
      5#
      6# make KBUILD_KCONFIG=Documentation/kbuild/Kconfig.recursion-issue-01 allnoconfig
      7#
      8# This Kconfig file has a simple recursive dependency issue. In order to
      9# understand why this recursive dependency issue occurs lets consider what
     10# Kconfig needs to address. We iterate over what Kconfig needs to address
     11# by stepping through the questions it needs to address sequentially.
     12#
     13#  * What values are possible for CORE?
     14#
     15# CORE_BELL_A_ADVANCED selects CORE, which means that it influences the values
     16# that are possible for CORE. So for example if CORE_BELL_A_ADVANCED is 'y',
     17# CORE must be 'y' too.
     18#
     19#  * What influences CORE_BELL_A_ADVANCED ?
     20#
     21# As the name implies CORE_BELL_A_ADVANCED is an advanced feature of
     22# CORE_BELL_A so naturally it depends on CORE_BELL_A. So if CORE_BELL_A is 'y'
     23# we know CORE_BELL_A_ADVANCED can be 'y' too.
     24#
     25#   * What influences CORE_BELL_A ?
     26#
     27# CORE_BELL_A depends on CORE, so CORE influences CORE_BELL_A.
     28#
     29# But that is a problem, because this means that in order to determine
     30# what values are possible for CORE we ended up needing to address questions
     31# regarding possible values of CORE itself again. Answering the original
     32# question of what are the possible values of CORE would make the kconfig
     33# tools run in a loop. When this happens Kconfig exits and complains about
     34# the "recursive dependency detected" error.
     35#
     36# Reading the Documentation/kbuild/Kconfig.recursion-issue-01 file it may be
     37# obvious that an easy to solution to this problem should just be the removal
     38# of the "select CORE" from CORE_BELL_A_ADVANCED as that is implicit already
     39# since CORE_BELL_A depends on CORE. Recursive dependency issues are not always
     40# so trivial to resolve, we provide another example below of practical
     41# implications of this recursive issue where the solution is perhaps not so
     42# easy to understand. Note that matching semantics on the dependency on
     43# CORE also consist of a solution to this recursive problem.
     44
     45mainmenu "Simple example to demo kconfig recursive dependency issue"
     46
     47config CORE
     48	tristate
     49
     50config CORE_BELL_A
     51	tristate
     52	depends on CORE
     53
     54config CORE_BELL_A_ADVANCED
     55	tristate
     56	depends on CORE_BELL_A
     57	select CORE