From patchwork Tue Sep 25 12:46:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 974389 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="xG3SB/hq"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42KLSG2y1nz9sBn for ; Tue, 25 Sep 2018 22:47:10 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729088AbeIYSyI (ORCPT ); Tue, 25 Sep 2018 14:54:08 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:43179 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729013AbeIYSyG (ORCPT ); Tue, 25 Sep 2018 14:54:06 -0400 Received: by mail-wr1-f65.google.com with SMTP id z14-v6so5722247wrs.10 for ; Tue, 25 Sep 2018 05:46:41 -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=38j/leseIFaYyx4yzFjMEUsIrw9mip1Szaiqm4tzm/A=; b=xG3SB/hqI9zicDsqSJWxH2a5w6TT5cAbl+08w875aubOfbKW4wjl7huBAYTMw0npzF go8eUZ7yKDwZIk8P4tYDlnN/8NWhxTnJCffhRTJO/vPopUeFr//EnbhVbUijE9n2CEOw TqfaAJkTdqgye9qyEXoYgBDRRRpGcS+/lU1VGZENwT4XcPGqUvM3JJEL1nAlAr0m5UlJ r6BsHPCbkdzfryYDNmHEfnWYbtT8gucikuarsE3qdm9PvINabI7PSfrgnQgZBf/5UQUt VQKymh5IQb+1xWifHxW0T4oqTU1TnswOQeqNJlQMtGEcSYxvtMWP/pCoCATJhXV9PIMa 6IFg== 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=38j/leseIFaYyx4yzFjMEUsIrw9mip1Szaiqm4tzm/A=; b=jHuXcJTDKmaTtd9knyKNll6TPAtLUtaQzdIAe6LgxDHO69ZATFIq2eqgBmy+Xs6M/+ yv4W9Un38bmlR1mj94Q6++YyzSM0QAexwXBD27Gna099Gsgh/veMmpEUldQZjaU5WM+C rIa8DyBDFBYixqALlaiX4zLHPZfm66q9EFMG1cAOEKbWlfQ6pL/73r+0iw7Y0DrYyN9d lPYe5lLWrCNqDAqiwaTBoJivs3lDNkdOdmOgCa0yQ+pJfKIbWO1LsqEL8mYmNO13sr6l 2P+QsOrdr/YuGz0OFvxdVeORBgXTodQHCYr8jdw8jykbagxwu2wvcMuGFyxAtz1V7Smw 4AmQ== X-Gm-Message-State: ABuFfoj3fE9lf2VbmHWbGM7dUONvI13srNwjOgKcv6v0waGAm5eswDgU XBkHzL2eCuVhTu0T0blgi3aNMQ== X-Google-Smtp-Source: ACcGV62vFyqE/rtZmRXRbZQgPOF7bcisFripMfz3eLQzPU++WzaYPCbLaEjSEWGD+F/+huW5YGEBRw== X-Received: by 2002:adf:e6c9:: with SMTP id y9-v6mr834729wrm.35.1537879600998; Tue, 25 Sep 2018 05:46:40 -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.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Sep 2018 05:46:40 -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 1/4] devres: constify p in devm_kfree() Date: Tue, 25 Sep 2018 14:46:26 +0200 Message-Id: <20180925124629.20710-2-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 Make devm_kfree() signature uniform with that of kfree(). To avoid compiler warnings: cast p to (void *) when calling devres_destroy(). Signed-off-by: Bartosz Golaszewski Reviewed-by: Bjorn Andersson --- drivers/base/devres.c | 5 +++-- include/linux/device.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/base/devres.c b/drivers/base/devres.c index f98a097e73f2..438c91a43508 100644 --- a/drivers/base/devres.c +++ b/drivers/base/devres.c @@ -885,11 +885,12 @@ EXPORT_SYMBOL_GPL(devm_kasprintf); * * Free memory allocated with devm_kmalloc(). */ -void devm_kfree(struct device *dev, void *p) +void devm_kfree(struct device *dev, const void *p) { int rc; - rc = devres_destroy(dev, devm_kmalloc_release, devm_kmalloc_match, p); + rc = devres_destroy(dev, devm_kmalloc_release, + devm_kmalloc_match, (void *)p); WARN_ON(rc); } EXPORT_SYMBOL_GPL(devm_kfree); diff --git a/include/linux/device.h b/include/linux/device.h index 8f882549edee..33f7cb271fbb 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -692,7 +692,7 @@ static inline void *devm_kcalloc(struct device *dev, { return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO); } -extern void devm_kfree(struct device *dev, void *p); +extern void devm_kfree(struct device *dev, const void *p); extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp) __malloc; extern void *devm_kmemdup(struct device *dev, const void *src, size_t len, gfp_t gfp); From patchwork Tue Sep 25 12:46:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 974388 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="U4ysULxb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42KLSD5PD8z9s7T for ; Tue, 25 Sep 2018 22:47:08 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729022AbeIYSyb (ORCPT ); Tue, 25 Sep 2018 14:54:31 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:42619 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729082AbeIYSyI (ORCPT ); Tue, 25 Sep 2018 14:54:08 -0400 Received: by mail-wr1-f66.google.com with SMTP id b11-v6so7017410wru.9 for ; Tue, 25 Sep 2018 05:46:43 -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=aahfn6W3XqbfPKSIMQjYMgIUnQeoDBftDVQeJAnnkHA=; b=U4ysULxbQKP2iLd6agdmTy0MZcKrK53uYOV/CWcFRJvATAOIl4McMKBxBu0vJ9ERN2 R07N++hpe0OTNEBXkV0NetWtAloETayE235TrPyEBLXV9eY3/Jt+DjLCbpiYIzJ6miWh P3Dqdt1sguL/k6nvZU5Iq7UHmdBorzvYjOnbVjhgpXtNKG18Ok737iuJRvD6d0TjvRV6 /8THm4vi7+hU4UgFAvvqnpQhzSjMvdB4O6ivm+4u6guOXH5UCSWBx9rCtpAHtQzW5Jxs FquGlIQcoIljnFQXopr4KSAmbN/WQBRYf9bs8Opb0egxmpJGyBsv9njxV3y/q02L+1+y Y55A== 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=aahfn6W3XqbfPKSIMQjYMgIUnQeoDBftDVQeJAnnkHA=; b=AKVh4i8twlfbhxmkTsYuyv2ZiSR3ACATDd+KJU9cGQ/JLPc610CiLNS3vXpWQ7Xnlh KyGwiCz0Ml7bijkvMMevV36WX6vQqGNU6wshglPVy2KwFDwG4EOhDOuZRJ9E3KH6ZJBd z7h+72hi50pqAf2HRKYpr1fsBGIC5JHr1JEjwtI/vffCGxvNWWj5i75hisE+zcr0RQmH Yr6vpqPcicS9hWNBX3ysCmg9Hh9zRlnqwJeJFmfe0xhGfZD/iI8yR2CBkkQsA1ui7/od 0Y7GGG4XEszYJUH6Ct2RVwDIFyxN6H4JccfTtGjxfJ1bvYD8d5H8QQaKK1Vx10c1tEZx STPw== X-Gm-Message-State: ABuFfojB1iLUoJWGmifVrlvOKqLoPKvHcksab56PLXsl6sRs+YVqm4g8 kT21S4uLMSFOYIraBAhhzdmA0w== X-Google-Smtp-Source: ACcGV61Du3tqo+1NOpmGdGsMj6oqmDw1DPj/MK3lJ6tiZjpB48sO6GuYv8zCYx5jBgY98KZS66MymQ== X-Received: by 2002:adf:9dd1:: with SMTP id q17-v6mr841688wre.12.1537879602515; Tue, 25 Sep 2018 05:46:42 -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.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Sep 2018 05:46:41 -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 2/4] mm: move is_kernel_rodata() to asm-generic/sections.h Date: Tue, 25 Sep 2018 14:46:27 +0200 Message-Id: <20180925124629.20710-3-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 Export this routine so that we can use it later in devm_kstrdup_const() and devm_kfree_const(). Signed-off-by: Bartosz Golaszewski Reviewed-by: Bjorn Andersson Acked-by: Mike Rapoport --- include/asm-generic/sections.h | 14 ++++++++++++++ mm/util.c | 7 ------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/include/asm-generic/sections.h b/include/asm-generic/sections.h index 849cd8eb5ca0..d79abca81a52 100644 --- a/include/asm-generic/sections.h +++ b/include/asm-generic/sections.h @@ -141,4 +141,18 @@ static inline bool init_section_intersects(void *virt, size_t size) return memory_intersects(__init_begin, __init_end, virt, size); } +/** + * is_kernel_rodata - checks if the pointer address is located in the + * .rodata section + * + * @addr: address to check + * + * Returns: true if the address is located in .rodata, false otherwise. + */ +static inline bool is_kernel_rodata(unsigned long addr) +{ + return addr >= (unsigned long)__start_rodata && + addr < (unsigned long)__end_rodata; +} + #endif /* _ASM_GENERIC_SECTIONS_H_ */ diff --git a/mm/util.c b/mm/util.c index 9e3ebd2ef65f..470f5cd80b64 100644 --- a/mm/util.c +++ b/mm/util.c @@ -15,17 +15,10 @@ #include #include -#include #include #include "internal.h" -static inline int is_kernel_rodata(unsigned long addr) -{ - return addr >= (unsigned long)__start_rodata && - addr < (unsigned long)__end_rodata; -} - /** * kfree_const - conditionally free memory * @x: pointer to the memory From patchwork Tue Sep 25 12:46:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 974387 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="htgAqfBy"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42KLS25SM7z9s9N for ; Tue, 25 Sep 2018 22:46:58 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729138AbeIYSyK (ORCPT ); Tue, 25 Sep 2018 14:54:10 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:34832 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729112AbeIYSyJ (ORCPT ); Tue, 25 Sep 2018 14:54:09 -0400 Received: by mail-wr1-f68.google.com with SMTP id o16so9912677wrx.2 for ; Tue, 25 Sep 2018 05:46:44 -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=Hl9QIj3GGHz5egGHWiKaZEu8TXn7XsISVPAF0TF2KVk=; b=htgAqfBy0Mu2sHH/EWsnpBdHsrnt38NPo1ive4eEyB7MNwXwBgt0149uo+1I9dBpLX 7tu7ifpw82ch2jPzeUp+VQ1Izh9pt+YIsk7cVAHhm4HpRkpkWBXavcevjWvfkr7c1eWS gYYBbaoiYMoU/b1SVgOr7lYZn5NRXVLMZWuXSs51edhNMk4J83LzfGJW/bBPEKP8KuIr sGpt0LLTY0EoqC2YpYWYd6rm1BgqRrYZtnR8wS4rtk+WquXduNK2qfOVeXf/vPHtuLy1 yzQlFfxj8TwEKa3e2F0QWf0PbjseMz/7vNj385Se3ZJn7Adsf4jGgpCD5nRQDnuiAABz YFjQ== 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=Hl9QIj3GGHz5egGHWiKaZEu8TXn7XsISVPAF0TF2KVk=; b=r5w3lQABIafzAbomdr+AhI71qihkSVvSd0ox54gfV1BQdp8k+76dxDhCB3faMTCiqQ YeTk4hM01Qpp631AhiZ5phggKTjjnObsvqXCMAjFLN26t7c7+YhPukFFwvGF5gEHGKz8 g47N8ry/jfdWfU6v8xRXLQR+7wUo+16oXRo3vj0jPl7+QXXOYgB0zgdgsIa4BHVfSflB VkJwQJP2zVx5SIj9NV7F5/Knme7XUKGzHDQnFtrR7BtVMOJM2uPw4kwV6zQkN1Rq7EQN bx3o+Wxi65AZFjkE2sFgOBmCQ/zy+WVpw3Dger8aWR6u8La6ZnmXnHqS0UJwv0gFvBUp 9EMw== X-Gm-Message-State: ABuFfohnywmVjKYuWoUHQvbthRIyS5beWhohMi5gK3x2nc/P1HaGKgBo netWqYNhTs6pEAhHm47HW+SWTA== X-Google-Smtp-Source: ACcGV62xLZYmZrn9c8PVYHVbNSgo+7ZTD/3j+mzVuYTmGomL0Ie0eulbUQp2z5+QwP/kwCX2tW5alw== X-Received: by 2002:a5d:50cf:: with SMTP id f15-v6mr908600wrt.128.1537879604000; Tue, 25 Sep 2018 05:46:44 -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.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Sep 2018 05:46:43 -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 3/4] devres: provide devm_kstrdup_const() Date: Tue, 25 Sep 2018 14:46:28 +0200 Message-Id: <20180925124629.20710-4-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 Provide a resource managed version of kstrdup_const(). This variant internally calls devm_kstrdup() on pointers that are outside of .rodata section and returns the string as is otherwise. Also provide a corresponding version of devm_kfree(). Signed-off-by: Bartosz Golaszewski Reviewed-by: Bjorn Andersson Acked-by: Mike Rapoport --- drivers/base/devres.c | 38 ++++++++++++++++++++++++++++++++++++++ include/linux/device.h | 3 +++ 2 files changed, 41 insertions(+) diff --git a/drivers/base/devres.c b/drivers/base/devres.c index 438c91a43508..48185d57bc5b 100644 --- a/drivers/base/devres.c +++ b/drivers/base/devres.c @@ -11,6 +11,8 @@ #include #include +#include + #include "base.h" struct devres_node { @@ -822,6 +824,28 @@ char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp) } EXPORT_SYMBOL_GPL(devm_kstrdup); +/** + * devm_kstrdup_const - resource managed conditional string duplication + * @dev: device for which to duplicate the string + * @s: the string to duplicate + * @gfp: the GFP mask used in the kmalloc() call when allocating memory + * + * Strings allocated by devm_kstrdup_const will be automatically freed when + * the associated device is detached. + * + * RETURNS: + * Source string if it is in .rodata section otherwise it falls back to + * devm_kstrdup. + */ +const char *devm_kstrdup_const(struct device *dev, const char *s, gfp_t gfp) +{ + if (is_kernel_rodata((unsigned long)s)) + return s; + + return devm_kstrdup(dev, s, gfp); +} +EXPORT_SYMBOL(devm_kstrdup_const); + /** * devm_kvasprintf - Allocate resource managed space and format a string * into that. @@ -895,6 +919,20 @@ void devm_kfree(struct device *dev, const void *p) } EXPORT_SYMBOL_GPL(devm_kfree); +/** + * devm_kfree_const - Resource managed conditional kfree + * @dev: device this memory belongs to + * @p: memory to free + * + * Function calls devm_kfree only if @p is not in .rodata section. + */ +void devm_kfree_const(struct device *dev, const void *p) +{ + if (!is_kernel_rodata((unsigned long)p)) + devm_kfree(dev, p); +} +EXPORT_SYMBOL(devm_kfree_const); + /** * devm_kmemdup - Resource-managed kmemdup * @dev: Device this memory belongs to diff --git a/include/linux/device.h b/include/linux/device.h index 33f7cb271fbb..79ccc6eb0975 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -693,7 +693,10 @@ static inline void *devm_kcalloc(struct device *dev, return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO); } extern void devm_kfree(struct device *dev, const void *p); +extern void devm_kfree_const(struct device *dev, const void *p); extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp) __malloc; +extern const char *devm_kstrdup_const(struct device *dev, + const char *s, gfp_t gfp); extern void *devm_kmemdup(struct device *dev, const void *src, size_t len, gfp_t gfp); 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; }