From patchwork Mon Apr 13 19:33:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Poirier X-Patchwork-Id: 11486147 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 15365112C for ; Mon, 13 Apr 2020 19:34:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EFB3F20578 for ; Mon, 13 Apr 2020 19:34:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="RGuxT7Dp" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387895AbgDMTeK (ORCPT ); Mon, 13 Apr 2020 15:34:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58426 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2387887AbgDMTeF (ORCPT ); Mon, 13 Apr 2020 15:34:05 -0400 Received: from mail-pj1-x1041.google.com (mail-pj1-x1041.google.com [IPv6:2607:f8b0:4864:20::1041]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12EE0C008749 for ; Mon, 13 Apr 2020 12:34:05 -0700 (PDT) Received: by mail-pj1-x1041.google.com with SMTP id t40so4222572pjb.3 for ; Mon, 13 Apr 2020 12:34:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6TjOuIVToF1NlCHf/TN+d81EeLU7495kSPR6hHYE0Fk=; b=RGuxT7DpcK4VfIkxlFhREK8AALcVpHkQVLbiSOBe9Rmhwa/lMCBk9FuOaLEHJHlusS pJN5x65XaiwE4Bz51GDFC2djK+UdL1kx+AfVUFzLWEQhTJ7LTpKmZxXrt6lA+etbs9U7 00352uM+uPYGSuDB+xQ9AG5iB/c+JW4XzvXGXC38SrQNC5Z7UEsohospYWA97qOILDQw fiax3Sf0/mBBaj1C9lY9c+9+stwhNul098oiIVSr/gUSgSy6ihT/jdf+Ch4i6iZtRRLJ T2iHHUXfE8cTihGwv7K2c/b/L7ePOqN6A32TKC3DTMW5Bqsek1dn2HajJZ3AJkO3hkkI gztg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6TjOuIVToF1NlCHf/TN+d81EeLU7495kSPR6hHYE0Fk=; b=e32aI2/gFqx3RTBzu/QyUJR1j33JIVV11IAL1id04kf1QT8+jRa540CQJkVuEQjQrr 3zOk2Tc3m6XgGFCm2kRapISai4TBgVX/ygsHcKhNbYd4qcZwnDJP0IsR+ND0Q4qDXNWy 6tV1QV4ipi/aaNiES6qVCOHE6zUFzRqn0EFx5+xNOKuO1tHrCpdsweIzGBOIUYxs1ai0 eyYSKtD+WCesJGg9nRIs8+Mw2dkSTuojYAqu5NBP9TAOO9hzpTJVNwbFg1YlMu30qL1/ sCtzRLpvAtdVwWk0w6qqfpeU7YcafTjkZNKBtOyJLw1FajEkIi1DANr+xzd/9La/ENnS NttQ== X-Gm-Message-State: AGi0PuaDp2UyMRVis0lJiPHYhQv8syKlwCNRD2fxHIVx57NhbqjBE4Mc Mu1NweJS1qx+6u9vFklIXbXdAQ== X-Google-Smtp-Source: APiQypKtMpSzbygORrjyitVbPW/AtwsKD923jVbEsASpdT9n/FTIelN3THWi9eixr3ud0NMeNVKAxQ== X-Received: by 2002:a17:90a:1681:: with SMTP id o1mr23927367pja.55.1586806444594; Mon, 13 Apr 2020 12:34:04 -0700 (PDT) Received: from xps15.cg.shawcable.net (S0106002369de4dac.cg.shawcable.net. [68.147.8.254]) by smtp.gmail.com with ESMTPSA id ml24sm7032330pjb.48.2020.04.13.12.34.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Apr 2020 12:34:04 -0700 (PDT) From: Mathieu Poirier To: bjorn.andersson@linaro.org, ohad@wizery.com Cc: s-anna@ti.com, elder@linaro.org, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/4] remoteproc: Fix a bug in rproc_alloc() Date: Mon, 13 Apr 2020 13:33:58 -0600 Message-Id: <20200413193401.27234-2-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200413193401.27234-1-mathieu.poirier@linaro.org> References: <20200413193401.27234-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Sender: linux-remoteproc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org From: Alex Elder If ida_simple_get() returns an error when called in rproc_alloc(), put_device() is called to clean things up. By this time the rproc device type has been assigned, with rproc_type_release() as the release function. The first thing rproc_type_release() does is call: idr_destroy(&rproc->notifyids); But at the time the ida_simple_get() call is made, the notifyids field in the remoteproc structure has not been initialized. I'm not actually sure this case causes an observable problem, but it's incorrect. Fix this by initializing the notifyids field before calling ida_simple_get() in rproc_alloc(). Signed-off-by: Alex Elder Reviewed-by: Mathieu Poirier --- drivers/remoteproc/remoteproc_core.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index e12a54e67588..80056513ae71 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -2053,6 +2053,7 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, rproc->dev.type = &rproc_type; rproc->dev.class = &rproc_class; rproc->dev.driver_data = rproc; + idr_init(&rproc->notifyids); /* Assign a unique device index and name */ rproc->index = ida_simple_get(&rproc_dev_index, 0, 0, GFP_KERNEL); @@ -2078,8 +2079,6 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, mutex_init(&rproc->lock); - idr_init(&rproc->notifyids); - INIT_LIST_HEAD(&rproc->carveouts); INIT_LIST_HEAD(&rproc->mappings); INIT_LIST_HEAD(&rproc->traces); From patchwork Mon Apr 13 19:33:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Poirier X-Patchwork-Id: 11486141 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 351AE913 for ; Mon, 13 Apr 2020 19:34:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1D7E620732 for ; Mon, 13 Apr 2020 19:34:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="x1kxvMRO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387898AbgDMTeK (ORCPT ); Mon, 13 Apr 2020 15:34:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58428 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2387888AbgDMTeH (ORCPT ); Mon, 13 Apr 2020 15:34:07 -0400 Received: from mail-pl1-x641.google.com (mail-pl1-x641.google.com [IPv6:2607:f8b0:4864:20::641]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BBF6C008769 for ; Mon, 13 Apr 2020 12:34:06 -0700 (PDT) Received: by mail-pl1-x641.google.com with SMTP id n24so1029344plp.13 for ; Mon, 13 Apr 2020 12:34:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Tqni+LFQs2BXwijyWOQh2noe7z9qpa756mX5vhw58xA=; b=x1kxvMROr35jGt5EZzazsvuw305CbQ2XuoPGeMULTwrj2S7M8Yy6nZsu7OD2+HsGNl z4IYZJ0zOvV+Sbs+ux+1F7OLcSAOnTGQxZUM0pJ3EXOc1mX9Rd3XTICczieLy8v6i69z gRTKs1B/zrUfJQ1gnSdL5OifS4oPJJl+zgjYkc/qd9I1fPa7X9p/MpxzM0YFmctJ87rZ g+u4ao9yJVKn3o5NeL/jcHlR3I/6nhyLMNPrJqnoiv7P4wyr4Vd6OzSUiNK9ArZF6WYn oJ5MBJb7JbPFPg8MCcWCMDGRw47DYOfI7dyMlmhf4lECKeDItuxxOLeSDsmpAuPmF0j2 MWfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Tqni+LFQs2BXwijyWOQh2noe7z9qpa756mX5vhw58xA=; b=r/9k08xgqp0Me27k+YFkwltqYvKNfREIPhDLO2QeD1rwEbrWZL/KxiuhGi/Mw6VCod 1J5hCGH4kYomx29K/RcVWQXn5OduXdseGW/w8aPNL0qGvzXvENUaj9vZOfSrTF8xZJr6 HdGmYJ5O9+RLA7fq/MkVKKeGHeoUdrLGhKYdEDCcSxxQZ5/CV7gAO7IjRxQTTMx1gUbF Mg+aFHgKWir54a0DIllS+7i25w6k/JskaAKiW71yI3Gqk7ujzj1uzsexlkjk3HOVphMl eu2VupXer1D1zKhkmB1vNQbXnrMT+CSTQbmqmww98XRTmTJQZyupxkbvBuO0HUoj4VNA COsA== X-Gm-Message-State: AGi0PuZOf22cYM6snYh/hxJPRCrcv20hqU939AHhzOLBRDarAYwAEFuG 82sy5f2kL1/cjRfJ9yomm9cBNw== X-Google-Smtp-Source: APiQypKIdbsYGV+y3wifNha4p/A9VL7D+Ddu1Ii57HONkc2qTturVxQnH9/15QPKaFMKTjl3ihNbwg== X-Received: by 2002:a17:90a:364c:: with SMTP id s70mr23112059pjb.143.1586806445703; Mon, 13 Apr 2020 12:34:05 -0700 (PDT) Received: from xps15.cg.shawcable.net (S0106002369de4dac.cg.shawcable.net. [68.147.8.254]) by smtp.gmail.com with ESMTPSA id ml24sm7032330pjb.48.2020.04.13.12.34.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Apr 2020 12:34:05 -0700 (PDT) From: Mathieu Poirier To: bjorn.andersson@linaro.org, ohad@wizery.com Cc: s-anna@ti.com, elder@linaro.org, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/4] remoteproc: Split firmware name allocation from rproc_alloc() Date: Mon, 13 Apr 2020 13:33:59 -0600 Message-Id: <20200413193401.27234-3-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200413193401.27234-1-mathieu.poirier@linaro.org> References: <20200413193401.27234-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Sender: linux-remoteproc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org Make the firmware name allocation a function on its own in order to introduce more flexibility to function rproc_alloc(). Signed-off-by: Mathieu Poirier --- drivers/remoteproc/remoteproc_core.c | 66 ++++++++++++++++------------ 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index 80056513ae71..4dee63f319ba 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -1979,6 +1979,33 @@ static const struct device_type rproc_type = { .release = rproc_type_release, }; +static int rproc_alloc_firmware(struct rproc *rproc, + const char *name, const char *firmware) +{ + char *p, *template = "rproc-%s-fw"; + int name_len; + + if (!firmware) { + /* + * If the caller didn't pass in a firmware name then + * construct a default name. + */ + name_len = strlen(name) + strlen(template) - 2 + 1; + p = kmalloc(name_len, GFP_KERNEL); + if (!p) + return -ENOMEM; + snprintf(p, name_len, template, name); + } else { + p = kstrdup(firmware, GFP_KERNEL); + if (!p) + return -ENOMEM; + } + + rproc->firmware = p; + + return 0; +} + /** * rproc_alloc() - allocate a remote processor handle * @dev: the underlying device @@ -2007,42 +2034,21 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, const char *firmware, int len) { struct rproc *rproc; - char *p, *template = "rproc-%s-fw"; - int name_len; if (!dev || !name || !ops) return NULL; - if (!firmware) { - /* - * If the caller didn't pass in a firmware name then - * construct a default name. - */ - name_len = strlen(name) + strlen(template) - 2 + 1; - p = kmalloc(name_len, GFP_KERNEL); - if (!p) - return NULL; - snprintf(p, name_len, template, name); - } else { - p = kstrdup(firmware, GFP_KERNEL); - if (!p) - return NULL; - } - rproc = kzalloc(sizeof(struct rproc) + len, GFP_KERNEL); - if (!rproc) { - kfree(p); + if (!rproc) return NULL; - } + + if (rproc_alloc_firmware(rproc, name, firmware)) + goto free_rproc; rproc->ops = kmemdup(ops, sizeof(*ops), GFP_KERNEL); - if (!rproc->ops) { - kfree(p); - kfree(rproc); - return NULL; - } + if (!rproc->ops) + goto free_firmware; - rproc->firmware = p; rproc->name = name; rproc->priv = &rproc[1]; rproc->auto_boot = true; @@ -2091,6 +2097,12 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, rproc->state = RPROC_OFFLINE; return rproc; + +free_firmware: + kfree(rproc->firmware); +free_rproc: + kfree(rproc); + return NULL; } EXPORT_SYMBOL(rproc_alloc); From patchwork Mon Apr 13 19:34:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Poirier X-Patchwork-Id: 11486145 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 30476913 for ; Mon, 13 Apr 2020 19:34:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 17FDC20731 for ; Mon, 13 Apr 2020 19:34:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="d9U8U4mS" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387903AbgDMTeL (ORCPT ); Mon, 13 Apr 2020 15:34:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2387887AbgDMTeK (ORCPT ); Mon, 13 Apr 2020 15:34:10 -0400 Received: from mail-pg1-x542.google.com (mail-pg1-x542.google.com [IPv6:2607:f8b0:4864:20::542]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 331D0C00860B for ; Mon, 13 Apr 2020 12:34:07 -0700 (PDT) Received: by mail-pg1-x542.google.com with SMTP id d17so4929481pgo.0 for ; Mon, 13 Apr 2020 12:34:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CbfVjk3n7dmtNabMVVrC9yJ09gyFOYpKGc85h9CW1lY=; b=d9U8U4mSflEe4j0ZiTHJv35UwXRhVJ6QMZ+zO0JqNkV1GgmqV90Rb0/4+crhwnfLC8 xqF6GP1ev/WVIK2HJORf8n+ak1kc6JX4ZXSoAB6fxMYEyG788bXAbE51VRWOe6CaCBxs 2/0IgpNVCE/emIsUO91F29x7Ls9fgsm9bw1aVBRCUNDWQiSGz3L2j123CgwVImEq5fzC B/03oKZ6RoNdcrH9vKZCKIQ5HhTDzR5JVocDGQcbq7ytU9MiChJ0BqUgJSodelh8Dcbu BNpUOZ2vwiBKNi9tOoZMVTYRbA2APdRQBkz8jNU4jRDD7Xe3J8AHr/BfXhvi29LIPp25 Wrmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CbfVjk3n7dmtNabMVVrC9yJ09gyFOYpKGc85h9CW1lY=; b=mqjjzVPzL51Od/f+ekgJAQqH/8LdKSAY5h4Q6apoLtc5IV6nNk0wYRkqp+FzISMcyg +6IUCBEoQ3EN8RnQTFm4XHHUBdv9wcqn12Go6+ERoif2UtazBjqtbuuQwo6fUJXG0GxK KnDvmZtBbzL+2kiHphKU9sdHa7Uq4SbfTcPpDfxg7YXLsrWI5sxpoD0JDSYvNPT2kNBa BvMmYYfyKOsRptIITDScUST+4hCMv1AVABjN7vcIa5fAlrXCAczxUV1KTFEEBahXEXyQ ZzAdmZDSCn6geBDgUdz3gP9Ur6wCyPESSXIK9BKgaIE4mi7RTcH17zI9O/y53r8Mkfsc yIGA== X-Gm-Message-State: AGi0PuZwBJM/qQ53vU6gCOstmwMY+/jROh5fSnNBlLsBGKWZG45tp8P3 7rGNoNu5Ua5wsPElh4Y+Xcg2juT+LdY= X-Google-Smtp-Source: APiQypISK1cjUZOJJw7oxYyo4pLuVlNFM1tkqhgi6XI1egohf6p7Zoqspbr9PWLC3pqLQirvf6uSHw== X-Received: by 2002:a63:6604:: with SMTP id a4mr17533914pgc.381.1586806446754; Mon, 13 Apr 2020 12:34:06 -0700 (PDT) Received: from xps15.cg.shawcable.net (S0106002369de4dac.cg.shawcable.net. [68.147.8.254]) by smtp.gmail.com with ESMTPSA id ml24sm7032330pjb.48.2020.04.13.12.34.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Apr 2020 12:34:06 -0700 (PDT) From: Mathieu Poirier To: bjorn.andersson@linaro.org, ohad@wizery.com Cc: s-anna@ti.com, elder@linaro.org, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/4] remoteproc: Split rproc_ops allocation from rproc_alloc() Date: Mon, 13 Apr 2020 13:34:00 -0600 Message-Id: <20200413193401.27234-4-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200413193401.27234-1-mathieu.poirier@linaro.org> References: <20200413193401.27234-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Sender: linux-remoteproc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org Make the rproc_ops allocation a function on its own in order to introduce more flexibility to function rproc_alloc(). Signed-off-by: Mathieu Poirier Reviewed-by: Alex Elder --- drivers/remoteproc/remoteproc_core.c | 32 +++++++++++++++++----------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index 4dee63f319ba..c272d78f07e8 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -2006,6 +2006,25 @@ static int rproc_alloc_firmware(struct rproc *rproc, return 0; } +static int rproc_alloc_ops(struct rproc *rproc, const struct rproc_ops *ops) +{ + rproc->ops = kmemdup(ops, sizeof(*ops), GFP_KERNEL); + if (!rproc->ops) + return -ENOMEM; + + /* Default to ELF loader if no load function is specified */ + if (!rproc->ops->load) { + rproc->ops->load = rproc_elf_load_segments; + rproc->ops->parse_fw = rproc_elf_load_rsc_table; + rproc->ops->find_loaded_rsc_table = + rproc_elf_find_loaded_rsc_table; + rproc->ops->sanity_check = rproc_elf_sanity_check; + rproc->ops->get_boot_addr = rproc_elf_get_boot_addr; + } + + return 0; +} + /** * rproc_alloc() - allocate a remote processor handle * @dev: the underlying device @@ -2045,8 +2064,7 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, if (rproc_alloc_firmware(rproc, name, firmware)) goto free_rproc; - rproc->ops = kmemdup(ops, sizeof(*ops), GFP_KERNEL); - if (!rproc->ops) + if (rproc_alloc_ops(rproc, ops)) goto free_firmware; rproc->name = name; @@ -2073,16 +2091,6 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, atomic_set(&rproc->power, 0); - /* Default to ELF loader if no load function is specified */ - if (!rproc->ops->load) { - rproc->ops->load = rproc_elf_load_segments; - rproc->ops->parse_fw = rproc_elf_load_rsc_table; - rproc->ops->find_loaded_rsc_table = rproc_elf_find_loaded_rsc_table; - if (!rproc->ops->sanity_check) - rproc->ops->sanity_check = rproc_elf32_sanity_check; - rproc->ops->get_boot_addr = rproc_elf_get_boot_addr; - } - mutex_init(&rproc->lock); INIT_LIST_HEAD(&rproc->carveouts); From patchwork Mon Apr 13 19:34:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Poirier X-Patchwork-Id: 11486143 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 5171517D4 for ; Mon, 13 Apr 2020 19:34:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3A0EF20735 for ; Mon, 13 Apr 2020 19:34:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="HeMosw6Y" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387901AbgDMTeK (ORCPT ); Mon, 13 Apr 2020 15:34:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58446 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2387890AbgDMTeJ (ORCPT ); Mon, 13 Apr 2020 15:34:09 -0400 Received: from mail-pg1-x544.google.com (mail-pg1-x544.google.com [IPv6:2607:f8b0:4864:20::544]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC015C00860E for ; Mon, 13 Apr 2020 12:34:08 -0700 (PDT) Received: by mail-pg1-x544.google.com with SMTP id h69so2370578pgc.8 for ; Mon, 13 Apr 2020 12:34:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gU2cOA3BiSfFddDcALcj2wG+E3K4HvoumOkViRH8D+8=; b=HeMosw6YchIKbW/5m0S6mmisN7wfVCq+TFADyM7X/zjgLv6x8SfDaXjGs2EzZ7xbOd UBMg2roQLdvuMY8OaV/fAMYaNgPC2z9n2P+bGekXRp7uKpViPwRn1KOC0+5uS0BcKPlh RQprc/CcgjZiejIbY9+g1EMg4ZPCZ3190q4L8IhDegAdu31HMcDZO63Zo/mcXRvkm8fw 1/PCPGpN22nPOw+bqr5ShQElpx1tQ78R+9GIvSzOSg2ECJ9FVle10VLVTQ1pmv6OXhNb Bnonk89IUQY4mxJdgLMrNHElPGyTmPJIV2bd3VFYk36GBc4946tZa9oElN4tmnRYj+fD mfWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gU2cOA3BiSfFddDcALcj2wG+E3K4HvoumOkViRH8D+8=; b=M3X/UIAWB+lXLZwo8mjqOA3IuiPlWnNGdwtW636ROgYYdJPpgTlv7ENg05xrPXN+YC B0DD8QXWxFRIC41kkktCpD9s/ERkalbAd/tX2T91wBIlWkyVoFLG8j+8ePav9keQWPMf DM8MTiA0Ra5NxWW+IiHqjIJdlBQT0PS8NLjGDl5pr1/GOCWVOn5SGtEptIs2KtSiY3xR kVdxJ5nUgmJD057ixiRSnU2ViEgEP6iNgDYFniXlIMYcc55TqaF3JPWLrH6bHIHYRYaf Io3QiJUDFxLg7LYOUZedX9P0Wm/gU5adqNy+aWxY5QVL0xPfdnXzrVukKGyds0dDg1NW 6iLg== X-Gm-Message-State: AGi0PuYPjzuwQFu07V29n0Q2yzA7RmWQaL7HJNjfZYQy2yF8dmwPRafd Bk4FX+Mnj9owWLtgOLyPctNw2w== X-Google-Smtp-Source: APiQypLO7Rs9j/m1litrgLroiUDnC44EIiP0dbxzfEPDsTKCchKHqeCUne1a6mCxPCvBCRZVLL04xA== X-Received: by 2002:a63:cc03:: with SMTP id x3mr18918025pgf.28.1586806448202; Mon, 13 Apr 2020 12:34:08 -0700 (PDT) Received: from xps15.cg.shawcable.net (S0106002369de4dac.cg.shawcable.net. [68.147.8.254]) by smtp.gmail.com with ESMTPSA id ml24sm7032330pjb.48.2020.04.13.12.34.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Apr 2020 12:34:07 -0700 (PDT) From: Mathieu Poirier To: bjorn.andersson@linaro.org, ohad@wizery.com Cc: s-anna@ti.com, elder@linaro.org, linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/4] remoteproc: Get rid of tedious error path Date: Mon, 13 Apr 2020 13:34:01 -0600 Message-Id: <20200413193401.27234-5-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200413193401.27234-1-mathieu.poirier@linaro.org> References: <20200413193401.27234-1-mathieu.poirier@linaro.org> MIME-Version: 1.0 Sender: linux-remoteproc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org Get rid of tedious error management by moving firmware and operation allocation after calling device_initialize(). That way we take advantage of the automatic call to rproc_type_release() to cleanup after ourselves when put_device() is called. Signed-off-by: Mathieu Poirier Reviewed-by: Alex Elder Reviewed-by: Alex Elder --- drivers/remoteproc/remoteproc_core.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index c272d78f07e8..10009b95867a 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -2061,12 +2061,6 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, if (!rproc) return NULL; - if (rproc_alloc_firmware(rproc, name, firmware)) - goto free_rproc; - - if (rproc_alloc_ops(rproc, ops)) - goto free_firmware; - rproc->name = name; rproc->priv = &rproc[1]; rproc->auto_boot = true; @@ -2079,12 +2073,17 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, rproc->dev.driver_data = rproc; idr_init(&rproc->notifyids); + if (rproc_alloc_firmware(rproc, name, firmware)) + goto out; + + if (rproc_alloc_ops(rproc, ops)) + goto out; + /* Assign a unique device index and name */ rproc->index = ida_simple_get(&rproc_dev_index, 0, 0, GFP_KERNEL); if (rproc->index < 0) { dev_err(dev, "ida_simple_get failed: %d\n", rproc->index); - put_device(&rproc->dev); - return NULL; + goto out; } dev_set_name(&rproc->dev, "remoteproc%d", rproc->index); @@ -2105,11 +2104,8 @@ struct rproc *rproc_alloc(struct device *dev, const char *name, rproc->state = RPROC_OFFLINE; return rproc; - -free_firmware: - kfree(rproc->firmware); -free_rproc: - kfree(rproc); +out: + put_device(&rproc->dev); return NULL; } EXPORT_SYMBOL(rproc_alloc);