From patchwork Tue Sep 25 12:46:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 974386 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=bgdev-pl.20150623.gappssmtp.com header.i=@bgdev-pl.20150623.gappssmtp.com header.b="rvnrCEM/"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42KLS0023jz9sBJ for ; Tue, 25 Sep 2018 22:46:55 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729122AbeIYSyM (ORCPT ); Tue, 25 Sep 2018 14:54:12 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:41950 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729133AbeIYSyL (ORCPT ); Tue, 25 Sep 2018 14:54:11 -0400 Received: by mail-wr1-f68.google.com with SMTP id j15-v6so19136989wrt.8 for ; Tue, 25 Sep 2018 05:46:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=O0syVcyhMbKhyp2iqYZ+ip089O6apq5xjZEumPKtFH0=; b=rvnrCEM/Z/FjAF10btQEVl39K0wR7FmhNb2m1KMIHrQzomkug3Z39OQDttS5FJkCCa bZRz5Vn8EnaTQjX9fsP1nnZjQhzFqI2fhkqOw1QNm1CqRnYCAc1ppVU5XBvS6vgm4V25 oZIYS2uJ8ZxCLdhwVgaUD/hVyNRLbbywscYPI2lrzoYiEX1FxX2etL5rxDIJUyqD25zO 0kG7kZST83kSG7sRsEaI9u5TRcd/7bQy7eMvhWVKts02xPspTbXjT3/2lL18bdqZ/5NG 7eHVutr3zo544N4s3a3yHlFjeVDD9fBbRbtN9M1JDT/eq9++U/sDDy0y6t/lLjoeUPET /GJQ== 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; bh=O0syVcyhMbKhyp2iqYZ+ip089O6apq5xjZEumPKtFH0=; b=IDiisINx/ErWg/DQVClX92hdscqKAqdRudNXBmF3bJGyguf/QqtrVClcA/Fp1dbiKv yZ13Jir5cj31cQjJg6ZSIvAGxV8K4CXD+M4bQL/4H48Y2poCLJR7UR9onAmL+dKZay2z wqwMJU2qRl16aZC9nCOBdl0g8IfG5kgg2egkMAcXfecHo0LJIUWjnD5ijCKiE0JqONyV nXgAKAJmVtCqe5QmFMoyDi7GR30FFzG6nY9EEHFTaywDUclWX3SJ17+tb3zduNkfXihQ DEifjc/RuHI9OSXWohFr9YnaRPbipe/IpEzDpEZpFQ09xaHf1SwYHLW3cmLoIU/kTLK5 FgWQ== X-Gm-Message-State: ABuFfohAOI+iVM67s/tvlA7ugpAtHPEsjvDMd2sI37XwgBI4KAaN4FXE X0DivLk4Sh4c2TXSAxEFQ/sJWQ== X-Google-Smtp-Source: ACcGV63ftiq498gnnXbNYrZBucn0eilwH2omh09NC5/WIEVbBQh3+Wixw8+7LP77wautR/nhyWX1Vg== X-Received: by 2002:a05:6000:10d0:: with SMTP id b16mr838873wrx.226.1537879605494; Tue, 25 Sep 2018 05:46:45 -0700 (PDT) Received: from brgl-bgdev.home ([2a01:cb1d:af:5b00:e837:b8d5:48c1:571b]) by smtp.gmail.com with ESMTPSA id z13sm2276160wrw.19.2018.09.25.05.46.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Sep 2018 05:46:44 -0700 (PDT) From: Bartosz Golaszewski To: Greg Kroah-Hartman , "Rafael J . Wysocki" , Jassi Brar , Thierry Reding , Jonathan Hunter , Arnd Bergmann , Ulf Hansson , Rob Herring , Bjorn Helgaas , Arend van Spriel , Robin Murphy , Vivek Gautam , Joe Perches , Heikki Krogerus , Andrew Morton , Mike Rapoport , Roman Gushchin , Michal Hocko , Huang Ying , Andy Shevchenko , Bjorn Andersson Cc: linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, Bartosz Golaszewski Subject: [PATCH v4 4/4] mailbox: tegra-hsp: use devm_kstrdup_const() Date: Tue, 25 Sep 2018 14:46:29 +0200 Message-Id: <20180925124629.20710-5-brgl@bgdev.pl> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180925124629.20710-1-brgl@bgdev.pl> References: <20180925124629.20710-1-brgl@bgdev.pl> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org Use devm_kstrdup_const() in the tegra-hsp driver. This mostly serves as an example of how to use this new routine to shrink driver code. Also use devm_kzalloc() instead of regular kzalloc() to get shrink the driver even more. Doorbell objects are only removed in the driver's remove callback so it's safe to convert all memory allocations to devres. Signed-off-by: Bartosz Golaszewski --- drivers/mailbox/tegra-hsp.c | 41 ++++++++----------------------------- 1 file changed, 9 insertions(+), 32 deletions(-) diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c index 0cde356c11ab..106c94dedbf1 100644 --- a/drivers/mailbox/tegra-hsp.c +++ b/drivers/mailbox/tegra-hsp.c @@ -183,14 +183,15 @@ static irqreturn_t tegra_hsp_doorbell_irq(int irq, void *data) } static struct tegra_hsp_channel * -tegra_hsp_doorbell_create(struct tegra_hsp *hsp, const char *name, - unsigned int master, unsigned int index) +tegra_hsp_doorbell_create(struct device *dev, struct tegra_hsp *hsp, + const char *name, unsigned int master, + unsigned int index) { struct tegra_hsp_doorbell *db; unsigned int offset; unsigned long flags; - db = kzalloc(sizeof(*db), GFP_KERNEL); + db = devm_kzalloc(dev, sizeof(*db), GFP_KERNEL); if (!db) return ERR_PTR(-ENOMEM); @@ -200,7 +201,7 @@ tegra_hsp_doorbell_create(struct tegra_hsp *hsp, const char *name, db->channel.regs = hsp->regs + offset; db->channel.hsp = hsp; - db->name = kstrdup_const(name, GFP_KERNEL); + db->name = devm_kstrdup_const(dev, name, GFP_KERNEL); db->master = master; db->index = index; @@ -211,13 +212,6 @@ tegra_hsp_doorbell_create(struct tegra_hsp *hsp, const char *name, return &db->channel; } -static void __tegra_hsp_doorbell_destroy(struct tegra_hsp_doorbell *db) -{ - list_del(&db->list); - kfree_const(db->name); - kfree(db); -} - static int tegra_hsp_doorbell_send_data(struct mbox_chan *chan, void *data) { struct tegra_hsp_doorbell *db = chan->con_priv; @@ -332,31 +326,16 @@ static struct mbox_chan *of_tegra_hsp_xlate(struct mbox_controller *mbox, return chan ?: ERR_PTR(-EBUSY); } -static void tegra_hsp_remove_doorbells(struct tegra_hsp *hsp) -{ - struct tegra_hsp_doorbell *db, *tmp; - unsigned long flags; - - spin_lock_irqsave(&hsp->lock, flags); - - list_for_each_entry_safe(db, tmp, &hsp->doorbells, list) - __tegra_hsp_doorbell_destroy(db); - - spin_unlock_irqrestore(&hsp->lock, flags); -} - -static int tegra_hsp_add_doorbells(struct tegra_hsp *hsp) +static int tegra_hsp_add_doorbells(struct device *dev, struct tegra_hsp *hsp) { const struct tegra_hsp_db_map *map = hsp->soc->map; struct tegra_hsp_channel *channel; while (map->name) { - channel = tegra_hsp_doorbell_create(hsp, map->name, + channel = tegra_hsp_doorbell_create(dev, hsp, map->name, map->master, map->index); - if (IS_ERR(channel)) { - tegra_hsp_remove_doorbells(hsp); + if (IS_ERR(channel)) return PTR_ERR(channel); - } map++; } @@ -412,7 +391,7 @@ static int tegra_hsp_probe(struct platform_device *pdev) if (!hsp->mbox.chans) return -ENOMEM; - err = tegra_hsp_add_doorbells(hsp); + err = tegra_hsp_add_doorbells(&pdev->dev, hsp); if (err < 0) { dev_err(&pdev->dev, "failed to add doorbells: %d\n", err); return err; @@ -423,7 +402,6 @@ static int tegra_hsp_probe(struct platform_device *pdev) err = mbox_controller_register(&hsp->mbox); if (err) { dev_err(&pdev->dev, "failed to register mailbox: %d\n", err); - tegra_hsp_remove_doorbells(hsp); return err; } @@ -443,7 +421,6 @@ static int tegra_hsp_remove(struct platform_device *pdev) struct tegra_hsp *hsp = platform_get_drvdata(pdev); mbox_controller_unregister(&hsp->mbox); - tegra_hsp_remove_doorbells(hsp); return 0; }