Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4043477ybz; Mon, 20 Apr 2020 14:31:29 -0700 (PDT) X-Google-Smtp-Source: APiQypKLphsRQXQ60U6VTboiHxrTcqqC2G09Cn7MqN+/ln62uVyljmu2LRBW+ii5HwenTDztrDWg X-Received: by 2002:a05:6402:1437:: with SMTP id c23mr16243354edx.327.1587418289218; Mon, 20 Apr 2020 14:31:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587418289; cv=none; d=google.com; s=arc-20160816; b=D1mXduQeEJM+BaAlZ7x7zmK/KegZelq995LWJllgrYUQI0SQa5dmsiFCmx8mXdHRyY YrGML9x20Kbk8uLsGY5dFe6HBKz583SPVQOkI1d6wr+Zx/0qxb/oJjdu3eNTiPdJIT32 NdkpH5amKPerC6vh+O5u3iPcsLQKP/z1O+0UIrL0ayzSwO7Zwuf448gMauciq7kBUXGg jwNGoxTxVB5oLnXM6IyAr4WGU3lU1chzFS1qV2b4eF33zYzPwapdZulig2664fweHeqe TGTIsRNwvqVfGN8JbWbpePv0JYjNPIX51Y4w1RCP9D4GSGiNbVEOVg0fOhCghkPA11SI 2rsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=mSDaWHzMe9uROB6JLc5gJdxIqAiYObHmWWZCnpO31b4=; b=AxIEWchlcu3KyUaYx6ATrLBzyyRyJyqOt6pIRV+kKkveHVW1XDsXMTZ9KYIOnh/XtW fxjXeyrKd2LfyG6Un1XQeEJIPWjB9jghZ46oWvnDpUvaSYulSEEyD6/Vd59PUQRippSR CwvNlmWEAMIfUKax95E7lt54LqyVOuj6HPZAHYrN63BX1egTh2mYqxcu2aNZ8em8Awbx sriUxRQ6K2Ff6hmlHIGpbf/cwsxzpQ/r1FXoiaPKTKzfdzHnI9XV3GX7Yhx3Rn7qVfre q/HibR8IT4JpShn1OMogIJPy9GQhcBFR6NITwcSD5YA+aebcjjRHrzzfMi1m/7Yw/Y15 ciag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=btEZXQZM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r13si256474eja.317.2020.04.20.14.31.05; Mon, 20 Apr 2020 14:31:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=btEZXQZM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728138AbgDTV3g (ORCPT + 99 others); Mon, 20 Apr 2020 17:29:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59822 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726748AbgDTV3g (ORCPT ); Mon, 20 Apr 2020 17:29:36 -0400 Received: from mail-io1-xd43.google.com (mail-io1-xd43.google.com [IPv6:2607:f8b0:4864:20::d43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E9CFCC061A0E for ; Mon, 20 Apr 2020 14:29:35 -0700 (PDT) Received: by mail-io1-xd43.google.com with SMTP id o127so12822133iof.0 for ; Mon, 20 Apr 2020 14:29:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=mSDaWHzMe9uROB6JLc5gJdxIqAiYObHmWWZCnpO31b4=; b=btEZXQZMjfh27gEorJkra7C5siyCvtLFbsKQHzYVZvUVQk4fDPjeVeALcIS2d5MTXf /nea74KdSBRj/+fkL0PPIlQnySEinJlvP+t8RCMQtmGDXbbcbUB5OwSUkPMOVrenhajZ z6GGAV7I85Rdsz9DRCfuOrY3kQzIrIM9RGt7jLuEmyOHNqRWNIVhER8ZIxoSJMwrijM7 mSDaC1iZ4R4cgWzQmAMAf/TNo9ZjsI+jnp0f7S4mTph2xJPVZyk5UUEPYGYGOux1fwjG zjVfnzJcP5jSDPmNLPwbNUbQLZRGATJywsoNkx3GYz1MDOOM6X40acbSHXovI5e3dLjT fotw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=mSDaWHzMe9uROB6JLc5gJdxIqAiYObHmWWZCnpO31b4=; b=i7EfcnEjF358+cLpaYfUg9bnd3gWsrBbPn9vT6qbsazzevwCOGAnGCj1MyFnnD7w0i i0jI8eWTlVqqQEnAHPviJrxsfPLl5zAjAjMxD+bCJ+/odwQ+EdFHQe7e6vs2WuW6thGt OFNihBpHJ+CV9X/Ld7z2wZBgMj0Z8k0vKJEKqTLGO72OyKZnE5kBp/DoonqCfjbzXu1r FHEFWwW87JUBfTmfDKltgTk2cIZqCzewFVAQR8e0TVjOTACdr03BjVltapkXSu4Ho2ae Y/mcsgbfFBQIzIRhIHMbl8GBWhueFA3sCZEaeeuaAxGCiJQVa7p/L7F33fnglY5v26qa DH2Q== X-Gm-Message-State: AGi0PuY9YnGsnDglR/Bkmwl2+R8R1C1Yb1zX3oXn43qGwCTZdN781BUD Ci7k6PaXwZP5Lo39wfvRLjBtlroMX2cChJiWP3ki4w== X-Received: by 2002:a02:b88e:: with SMTP id p14mr11961241jam.36.1587418174992; Mon, 20 Apr 2020 14:29:34 -0700 (PDT) MIME-Version: 1.0 References: <20200415204858.2448-1-mathieu.poirier@linaro.org> <20200415204858.2448-3-mathieu.poirier@linaro.org> In-Reply-To: From: Mathieu Poirier Date: Mon, 20 Apr 2020 15:29:24 -0600 Message-ID: Subject: Re: [PATCH v2 2/7] remoteproc: Split firmware name allocation from rproc_alloc() To: Arnaud POULIQUEN Cc: Bjorn Andersson , Ohad Ben-Cohen , Suman Anna , Alex Elder , Markus Elfring , linux-remoteproc , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hey, On Mon, 20 Apr 2020 at 03:24, Arnaud POULIQUEN wrote: > > Hi Mathieu, > > On 4/15/20 10:48 PM, Mathieu Poirier wrote: > > Make the firmware name allocation a function on its own in an > > effort to cleanup 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) > > nitpicking: here you do not allocate memory for the firmware but for its name > The name of the function seems to me quite confusing... Ok, I'll see if I can find something better. > > Else LGTM for the series V3 will be out shortly and it will be fairly different from this one. > > Thanks, > > Arnaud > > > +{ > > + 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); > > > >