From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerome Forissier Subject: Re: [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init Date: Thu, 7 Dec 2017 09:42:11 +0100 Message-ID: <40113581-4b8c-defe-ba90-0aabc30a1b6d@linaro.org> References: <1512555692-14439-1-git-send-email-lollivier@baylibre.com> <20171206200601.GH4283@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Return-path: Received: from mail-wm0-f67.google.com ([74.125.82.67]:41403 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752142AbdLGImP (ORCPT ); Thu, 7 Dec 2017 03:42:15 -0500 Received: by mail-wm0-f67.google.com with SMTP id g75so11712035wme.0 for ; Thu, 07 Dec 2017 00:42:14 -0800 (PST) In-Reply-To: <20171206200601.GH4283@codeaurora.org> Content-Language: en-US Sender: linux-arm-msm-owner@vger.kernel.org List-Id: linux-arm-msm@vger.kernel.org To: Stephen Boyd , Loys Ollivier Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, David Brown , Andy Gross , linux-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Jerome Brunet , Jens Wiklander On 12/06/2017 09:06 PM, Stephen Boyd wrote: > On 12/06, Loys Ollivier wrote: >> When using other platform architectures, in the init of the qcom_scm >> driver, of_node_put is called on /firmware if no qcom dt is found. >> This results in a kernel error: Bad of_node_put() on /firmware. >> >> The call to of_node_put from the qcom_scm init is unnecessary as >> of_find_matching_node is calling it automatically. >> >> Remove this of_node_put(). >> >> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver") >> Signed-off-by: Loys Ollivier >> --- > > This still looks wrong. Especially if of_find_matching_node() is > going to look for siblings of the /firmware node for the > compatible string for scm device. Why do we check at all? Can't > we just delete this and let of_platform_populate() take care of > it? BTW, OP-TEE driver seems to have a similar problem. https://lkml.org/lkml/2017/11/29/230 > > ---8<---- > > diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c > index af4c75217ea6..440d8f796faa 100644 > --- a/drivers/firmware/qcom_scm.c > +++ b/drivers/firmware/qcom_scm.c > @@ -626,23 +626,11 @@ static int __init qcom_scm_init(void) > int ret; > > fw_np = of_find_node_by_name(NULL, "firmware"); > - > if (!fw_np) > - return -ENODEV; > - > - np = of_find_matching_node(fw_np, qcom_scm_dt_match); > - > - if (!np) { > - of_node_put(fw_np); > - return -ENODEV; > - } > - > - of_node_put(np); > + return 0; > > ret = of_platform_populate(fw_np, qcom_scm_dt_match, NULL, NULL); > - > of_node_put(fw_np); > - > if (ret) > return ret; > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: jerome.forissier@linaro.org (Jerome Forissier) Date: Thu, 7 Dec 2017 09:42:11 +0100 Subject: [PATCH v2] firmware: qcom: scm: Fix incorrect of_node_put call in scm_init In-Reply-To: <20171206200601.GH4283@codeaurora.org> References: <1512555692-14439-1-git-send-email-lollivier@baylibre.com> <20171206200601.GH4283@codeaurora.org> Message-ID: <40113581-4b8c-defe-ba90-0aabc30a1b6d@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 12/06/2017 09:06 PM, Stephen Boyd wrote: > On 12/06, Loys Ollivier wrote: >> When using other platform architectures, in the init of the qcom_scm >> driver, of_node_put is called on /firmware if no qcom dt is found. >> This results in a kernel error: Bad of_node_put() on /firmware. >> >> The call to of_node_put from the qcom_scm init is unnecessary as >> of_find_matching_node is calling it automatically. >> >> Remove this of_node_put(). >> >> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver") >> Signed-off-by: Loys Ollivier >> --- > > This still looks wrong. Especially if of_find_matching_node() is > going to look for siblings of the /firmware node for the > compatible string for scm device. Why do we check at all? Can't > we just delete this and let of_platform_populate() take care of > it? BTW, OP-TEE driver seems to have a similar problem. https://lkml.org/lkml/2017/11/29/230 > > ---8<---- > > diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c > index af4c75217ea6..440d8f796faa 100644 > --- a/drivers/firmware/qcom_scm.c > +++ b/drivers/firmware/qcom_scm.c > @@ -626,23 +626,11 @@ static int __init qcom_scm_init(void) > int ret; > > fw_np = of_find_node_by_name(NULL, "firmware"); > - > if (!fw_np) > - return -ENODEV; > - > - np = of_find_matching_node(fw_np, qcom_scm_dt_match); > - > - if (!np) { > - of_node_put(fw_np); > - return -ENODEV; > - } > - > - of_node_put(np); > + return 0; > > ret = of_platform_populate(fw_np, qcom_scm_dt_match, NULL, NULL); > - > of_node_put(fw_np); > - > if (ret) > return ret; > >