From patchwork Mon Mar 2 06:23:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 11414797 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4531992A for ; Mon, 2 Mar 2020 06:24:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 25E33246B9 for ; Mon, 2 Mar 2020 06:24:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583130273; bh=9jUnB3/sZ7LknoR3lndv96Isnwnjwrth62SxdiQTLrY=; h=From:To:Cc:Subject:Date:List-ID:From; b=zwxYbRDuDnJTtcIx3Em+mRz/EIKJgJLmTcJdwhCBH6ycUM+dXnT25/q1/64mR2p9Z 6c1P2IWEE/XXOZ3mRahzgaj+QTLMEfmMlGWlIm/3mgS/XHcOkpqFDqA/2JTajhE70R oymbel/YLxuA0GNHJEjkC0WlTYs/vGTXFDogMeWY= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726829AbgCBGY3 (ORCPT ); Mon, 2 Mar 2020 01:24:29 -0500 Received: from conuserg-11.nifty.com ([210.131.2.78]:57551 "EHLO conuserg-11.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726030AbgCBGY3 (ORCPT ); Mon, 2 Mar 2020 01:24:29 -0500 Received: from localhost.localdomain (p14092-ipngnfx01kyoto.kyoto.ocn.ne.jp [153.142.97.92]) (authenticated) by conuserg-11.nifty.com with ESMTP id 0226NfKm030880; Mon, 2 Mar 2020 15:23:42 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-11.nifty.com 0226NfKm030880 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1583130222; bh=dLJGtmHzi5rst42jrQBM/khBnOAWWgwO3JKYbMyi3SY=; h=From:To:Cc:Subject:Date:From; b=wXI8SixO3CUvqd8AYVrMt7G+hfKz0IVxwN0p18hqHfohg8yKa9CyUxgeXoP56ZgpW gRSP6bv707i9VnWAzNWrLntE9VW6VwKICgs/yonfXEO87yZYlFfVxrsidy5l3kZy5b dz7SEhGG+qi4N3tof/mCPfKTnuVxD92Exp3WA+bmMH7hQD9Mizy3qwAfCXeQAQzhfO CRqp6QU2pPqP1Nh5xy8JxvQnKy+SE/MMzM5FS8xoYuODjvxb4bSrP7Ia40ZT1VG719 TlnJ6zEXbVvSIxi0CqBN3gKhC6fzm4KKO9RU5A9wqcrBElQ3ZKo9dQaDl3O8zxE8Wc 5QQIL5jrt3/HA== X-Nifty-SrcIP: [153.142.97.92] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Nicolas Pitre , Ulf Magnusson , Geert Uytterhoeven , Masahiro Yamada , Jonathan Corbet , Michal Marek , linux-doc@vger.kernel.org Subject: [PATCH 1/2] kconfig: allow symbols implied by y to become m Date: Mon, 2 Mar 2020 15:23:39 +0900 Message-Id: <20200302062340.21453-1-masahiroy@kernel.org> X-Mailer: git-send-email 2.17.1 Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org The 'imply' keyword restricts a symbol to y or n, excluding m when it is implied by y. This is the original behavior since commit 237e3ad0f195 ("Kconfig: Introduce the "imply" keyword"). However, the author of the 'imply' keyword, Nicolas Pitre, stated that the 'imply' keyword should not impose any restrictions. [1] I agree, and want to get rid of this tricky behavior. [1]: https://lkml.org/lkml/2020/2/19/714 Suggested-by: Nicolas Pitre Signed-off-by: Masahiro Yamada Acked-by: Nicolas Pitre --- Documentation/kbuild/kconfig-language.rst | 12 +++++++++++- scripts/kconfig/symbol.c | 5 +---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Documentation/kbuild/kconfig-language.rst b/Documentation/kbuild/kconfig-language.rst index d0111dd26410..d4d988aea679 100644 --- a/Documentation/kbuild/kconfig-language.rst +++ b/Documentation/kbuild/kconfig-language.rst @@ -173,7 +173,7 @@ applicable everywhere (see syntax). === === ============= ============== n y n N/m/y m y m M/y/n - y y y Y/n + y y y Y/m/n y n * N === === ============= ============== @@ -181,6 +181,16 @@ applicable everywhere (see syntax). ability to hook into a secondary subsystem while allowing the user to configure that subsystem out without also having to unset these drivers. + Note: If the combination of FOO=y and BAR=m causes a link error, + you can guard the function call with IS_REACHABLE():: + + foo_init() + { + if (IS_REACHABLE(CONFIG_BAZ)) + baz_register(&foo); + ... + } + - limiting menu display: "visible if" This attribute is only applicable to menu blocks, if the condition is diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index 8d38b700b314..b101ef3c377a 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c @@ -401,8 +401,7 @@ void sym_calc_value(struct symbol *sym) sym_warn_unmet_dep(sym); newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri); } - if (newval.tri == mod && - (sym_get_type(sym) == S_BOOLEAN || sym->implied.tri == yes)) + if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN) newval.tri = yes; break; case S_STRING: @@ -484,8 +483,6 @@ bool sym_tristate_within_range(struct symbol *sym, tristate val) return false; if (sym->visible <= sym->rev_dep.tri) return false; - if (sym->implied.tri == yes && val == mod) - return false; if (sym_is_choice_value(sym) && sym->visible == yes) return val == yes; return val >= sym->rev_dep.tri && val <= sym->visible; From patchwork Mon Mar 2 06:23:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 11414795 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 56EBF92A for ; Mon, 2 Mar 2020 06:24:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3587B24695 for ; Mon, 2 Mar 2020 06:24:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583130269; bh=300FYlPrOZ0xfqnefMKThoEm2G2rBiJuryFHeZGMu6o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=Y/Zesgt7nYpk1314x4ItA1qagI+IOU089gR9aYqZWK14OpMIHI/8robrhu6c58QV0 LAMHsCs7b8phu49NTFHtdlso5syuPuSfmjf12oZXjUNokwTJ9AzFXBplkG9+Eut2XF rVnu6SQuLuagfPxcxgIzgJsXuiPQQlymjGFIobVs= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726426AbgCBGY2 (ORCPT ); Mon, 2 Mar 2020 01:24:28 -0500 Received: from conuserg-11.nifty.com ([210.131.2.78]:57529 "EHLO conuserg-11.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725446AbgCBGY2 (ORCPT ); Mon, 2 Mar 2020 01:24:28 -0500 Received: from localhost.localdomain (p14092-ipngnfx01kyoto.kyoto.ocn.ne.jp [153.142.97.92]) (authenticated) by conuserg-11.nifty.com with ESMTP id 0226NfKn030880; Mon, 2 Mar 2020 15:23:43 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-11.nifty.com 0226NfKn030880 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1583130224; bh=wnLhMgIgggfdJrGLtUh15Of/AoVkbl1wJ7X2YZ58njk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=v6hVUWy5WwyAlcJJb3l/KJUxUWIRiIShof48EqopIpSHgwyFLOX9B7ddtMil3lO5g OnYhC0Qib3IRxAzvZeTxW2udp3w08lU8kZBv/luNPtway5Dd2/G+pKLuRQJYlJK5nm +Nyj24K8NjSJw3uZlItRCET9KiBKZ2rTfuNum+2ZqQHJhWNw+l/qAszGAfghwFqZJ2 uEQlGAhEtcHHnFMhxF7wx36tSDKYJ7FkiulE6GgNfdbnBFfjXU/kokU3rWaTDDXojV 0Mya/P4pwfZAMhFEGtbctJFLipEX/QuocdK4CLUl3SeNS2212vG++OzphNyTdeNdt9 SEfeBJrm07mtw== X-Nifty-SrcIP: [153.142.97.92] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Nicolas Pitre , Ulf Magnusson , Geert Uytterhoeven , Masahiro Yamada , Jonathan Corbet , Michal Marek , linux-doc@vger.kernel.org Subject: [PATCH 2/2] kconfig: make 'imply' obey the direct dependency Date: Mon, 2 Mar 2020 15:23:40 +0900 Message-Id: <20200302062340.21453-2-masahiroy@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200302062340.21453-1-masahiroy@kernel.org> References: <20200302062340.21453-1-masahiroy@kernel.org> Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org The 'imply' statement may create unmet direct dependency when the implied symbol depends on m. [Test Code] config FOO tristate "foo" imply BAZ config BAZ tristate "baz" depends on BAR config BAR def_tristate m config MODULES def_bool y option modules If you set FOO=y, BAZ is also promoted to y, which results in the following .config file: CONFIG_FOO=y CONFIG_BAZ=y CONFIG_BAR=m CONFIG_MODULES=y This does not meet the dependency 'BAZ depends on BAR'. Unlike 'select', what is worse, Kconfig never shows the 'WARNING: unmet direct dependencies detected for ...' for this case. Because 'imply' is considered to be weaker than 'depends on', Kconfig should take the direct dependency into account. For clarification, describe this case in kconfig-language.rst too. Signed-off-by: Masahiro Yamada Acked-by: Nicolas Pitre Tested-by: Geert Uytterhoeven --- Documentation/kbuild/kconfig-language.rst | 7 +++++-- scripts/kconfig/symbol.c | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Documentation/kbuild/kconfig-language.rst b/Documentation/kbuild/kconfig-language.rst index d4d988aea679..68719e78ff85 100644 --- a/Documentation/kbuild/kconfig-language.rst +++ b/Documentation/kbuild/kconfig-language.rst @@ -159,11 +159,11 @@ applicable everywhere (see syntax). Given the following example:: config FOO - tristate + tristate "foo" imply BAZ config BAZ - tristate + tristate "baz" depends on BAR The following values are possible: @@ -174,6 +174,9 @@ applicable everywhere (see syntax). n y n N/m/y m y m M/y/n y y y Y/m/n + n m n N/m + m m m M/n + y m n M/n y n * N === === ============= ============== diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index b101ef3c377a..3dc81397d003 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c @@ -221,7 +221,7 @@ static void sym_calc_visibility(struct symbol *sym) sym_set_changed(sym); } tri = no; - if (sym->implied.expr && sym->dir_dep.tri != no) + if (sym->implied.expr) tri = expr_calc_value(sym->implied.expr); if (tri == mod && sym_get_type(sym) == S_BOOLEAN) tri = yes; @@ -394,6 +394,8 @@ void sym_calc_value(struct symbol *sym) if (sym->implied.tri != no) { sym->flags |= SYMBOL_WRITE; newval.tri = EXPR_OR(newval.tri, sym->implied.tri); + newval.tri = EXPR_AND(newval.tri, + sym->dir_dep.tri); } } calc_newval: