From patchwork Sun Sep 30 20:26:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 976947 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="nGGCBUhx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42NcQF2lq6z9sBv for ; Mon, 1 Oct 2018 06:26:45 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728554AbeJADAs (ORCPT ); Sun, 30 Sep 2018 23:00:48 -0400 Received: from mail-wm1-f68.google.com ([209.85.128.68]:35935 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728555AbeJADAs (ORCPT ); Sun, 30 Sep 2018 23:00:48 -0400 Received: by mail-wm1-f68.google.com with SMTP id n23-v6so6650599wmc.1 for ; Sun, 30 Sep 2018 13:26:22 -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=q/fF90NrepbyDB35CQnzwzM4iX3gSJNp5nR350IMu2k=; b=nGGCBUhxAo54lfQfvsb74d3PLMuqV2YBe29QG4VwwG0Y9/8FPrSAKc08QujiIV77p3 c4/eFVI5cueAq6Fbz2y9axeGe7MACPgapBfERbVlIbeqiJ8gBM7MHQcBprrtzJs6ooIL tKvfmk1rQv2toOY9kW07ramvt2ryQGR5fDCQEj4iR8r2tXNulrKK0RudqhwF9lVKC0VE 7sanU0upOFackTKjRmZcBNV0LhN/wJjVdUOytJfJhcGsjhVpkQWivtL+qDR1zaNdYeuh Q3NreFOMDnM9XKaTUpo0yeXWAiplVhpQvCAOW7FsmCrQiiSbH/Z43+h15FJqX1uO8R2R NbwQ== 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=q/fF90NrepbyDB35CQnzwzM4iX3gSJNp5nR350IMu2k=; b=TAMVNu9UFhx1aS+TYiya8aHWNVftGkYfg0F1s+vj+IBAlt3Cyt/f01RTGyup0FFfTX LKrURpUtAh0hgPfjqtXpSaZHJJlrYPw/4sTHyKZsIICLt/Z+J53O+0OsWO3qwadpCBEB zj4fIiZOPTifGrqfJFS8CATpKLaPBnCSO1nKI9pLgPd1pmCsYrvjFbhuOsJk11cdwUo+ Ks1mnK8iD+CpDD3/9ZnC2csWAtKTWkI/4XeDyAf9k+11kOIqVneQHux/M6VAu7uJgR0Y iUnBICj9JcOO20+tQGN35xI+08tAQ6Zut9yBA3wVQJo/ROP4Cg7hZ0iKQdTgMvPbuSV5 zy0g== X-Gm-Message-State: ABuFfohENdJB31wNx4Am16W0RIAQhIDlcZFx4WnGlt4UgT9b7L4QPd4x zht0yI1Tx4Y7q9Kvt/JIB8o2eA== X-Google-Smtp-Source: ACcGV61YR78MUWSIaTMjdb0Fjz2ZkIQGg0cUgeKGe7/UMgCN654b/Ck7tH6FLmP0XBBAWbn3u3vAIg== X-Received: by 2002:a1c:ae84:: with SMTP id x126-v6mr6848149wme.73.1538339181794; Sun, 30 Sep 2018 13:26:21 -0700 (PDT) Received: from brgl-bgdev.home ([2a01:cb1d:af:5b00:e837:b8d5:48c1:571b]) by smtp.gmail.com with ESMTPSA id v16-v6sm18566465wrw.12.2018.09.30.13.26.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 30 Sep 2018 13:26:21 -0700 (PDT) From: Bartosz Golaszewski To: Greg Kroah-Hartman , "Rafael J . Wysocki" , Jassi Brar , Thierry Reding , Jonathan Hunter , Arnd Bergmann , Andy Shevchenko , Geert Uytterhoeven , Rasmus Villemoes Cc: linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, Bartosz Golaszewski Subject: [PATCH v6 1/4] devres: constify p in devm_kfree() Date: Sun, 30 Sep 2018 22:26:12 +0200 Message-Id: <20180930202615.12951-2-brgl@bgdev.pl> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180930202615.12951-1-brgl@bgdev.pl> References: <20180930202615.12951-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 Reviewed-by: Geert Uytterhoeven Acked-by: Rasmus Villemoes --- 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 Sun Sep 30 20:26:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 976948 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="HdPzKJtF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42NcQG1Scwz9sCK for ; Mon, 1 Oct 2018 06:26:46 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728662AbeJADAu (ORCPT ); Sun, 30 Sep 2018 23:00:50 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:42376 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728633AbeJADAu (ORCPT ); Sun, 30 Sep 2018 23:00:50 -0400 Received: by mail-wr1-f66.google.com with SMTP id b11-v6so11540229wru.9 for ; Sun, 30 Sep 2018 13:26:24 -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=wBfa6xDfzr2sbr6kcGWmagCtbFwHshVsfFISZaQ0oEg=; b=HdPzKJtFKp4jLhqD4bGDbutkfIahpZZ7OVs4nwGKidH7w9kTz8XeYUeSqGI+h2vA+8 pZ1RFFZoQnTSKQpUpN/qsAsdVOuclYBaU7MoajlLiRTqXNW3utEgPZD6lGS/BWfMYsDq a1Er5IxYMx4XYimDfMYgy25UVltfGQibcx9WU3CIWRQ6Ngpsau9nd110RcMCkaSOaiqv lIDNLt7FCgYiRDanzB10z5HxhWeRzSj7JzU8iOX0b5EV6+bh50X8x71akBrVWCe5j7S7 iUkR3igSLII4T3t3T34nY5UYAbKo4nxBXnuZPOuuI5AwBaQRJBOh1uoMfNy8ECfO8dp4 jk4Q== 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=wBfa6xDfzr2sbr6kcGWmagCtbFwHshVsfFISZaQ0oEg=; b=C5CjRBKeTFMeY9N3a2dk3AL5VGkEIwoGoslDiNHhN3enwy7jGe6AXNA2jr0w9Ju/Zb AK9lOgnzm8iOAF3JccT4clYURUmxLX0RgHV0cizjLm064S8geeKr7T6RmtufdXT/+Wnk lOa/Cw6pW3qyv/ALmxQ64qCcubvORUWVeDcFr43Abc0kFPmxnuxhatbatl0t5tYyLDev QiS87CTM78ZqfdqmVBLpezPEKaoZnKAt1kG83tf5p6oba7B1XyX+lZg5iKq03I7DBGCD oeXQ8+ghj0fvPXeXVYP+DbNjZbmrJjlrBuhsp5dNd3pwUCha6ynMol3QF48i96NuPNUe M7dQ== X-Gm-Message-State: ABuFfoi8N5pHP6XhdEvbVrmINtOBI8ZOaOrv5zvYdMYWRndHnKUNk/RB SCodroNfogUTOfgO1hjKkJhUEw== X-Google-Smtp-Source: ACcGV622Z46pF1NKwfHISnsVzRZHaVzp8ASHZfRhlfkuDJYHOHEfG+9WB751+SLAPtm4rAGk7e+0kw== X-Received: by 2002:adf:f88d:: with SMTP id u13-v6mr4749013wrp.311.1538339183427; Sun, 30 Sep 2018 13:26:23 -0700 (PDT) Received: from brgl-bgdev.home ([2a01:cb1d:af:5b00:e837:b8d5:48c1:571b]) by smtp.gmail.com with ESMTPSA id v16-v6sm18566465wrw.12.2018.09.30.13.26.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 30 Sep 2018 13:26:22 -0700 (PDT) From: Bartosz Golaszewski To: Greg Kroah-Hartman , "Rafael J . Wysocki" , Jassi Brar , Thierry Reding , Jonathan Hunter , Arnd Bergmann , Andy Shevchenko , Geert Uytterhoeven , Rasmus Villemoes Cc: linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, Bartosz Golaszewski Subject: [PATCH v6 2/4] mm: move is_kernel_rodata() to asm-generic/sections.h Date: Sun, 30 Sep 2018 22:26:13 +0200 Message-Id: <20180930202615.12951-3-brgl@bgdev.pl> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180930202615.12951-1-brgl@bgdev.pl> References: <20180930202615.12951-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(). Signed-off-by: Bartosz Golaszewski Reviewed-by: Bjorn Andersson Acked-by: Mike Rapoport Acked-by: Rasmus Villemoes Reviewed-by: Geert Uytterhoeven --- 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 Sun Sep 30 20:26:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 976949 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="r0uTbSOF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42NcQH0bClz9sBs for ; Mon, 1 Oct 2018 06:26:47 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728666AbeJADAv (ORCPT ); Sun, 30 Sep 2018 23:00:51 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:40268 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728659AbeJADAv (ORCPT ); Sun, 30 Sep 2018 23:00:51 -0400 Received: by mail-wr1-f65.google.com with SMTP id y8-v6so11563780wrh.7 for ; Sun, 30 Sep 2018 13:26:25 -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=ApeEBzYoZaLAzJI8/OmZ6g6k8Ab9sg8MfvJpY8+ZNMk=; b=r0uTbSOFcbxLO/QL+dB6Xp9rYYWrgEix4/bSo+dU3Hh3Os/+iNogUZxf737WQlai+s RpLOzVBo2ENEGHlT6cxeBgPcrqRRCs+4s54wOjUVo3yhhOGEqLt8VrM4NlG1FckFNZhZ PNCVDdqh2+X7kgIscVngodTnFVypBBYUY4h3PMJd5EU6N22nE8nOWwfxI2yGzLc+P2VZ pCi3RY/IivGRMmSKbbmsqGKk9AuqHBqH1j4oLIwjiSX0sJo7PNy2vbY4WmcoxqmlV33V DkldhHTjfEltCzCjezgSuwXCRsHC2vNCCzyHdH64sd0VxTh3iWaD0jUt72PfuqGlN6ot 2tag== 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=ApeEBzYoZaLAzJI8/OmZ6g6k8Ab9sg8MfvJpY8+ZNMk=; b=Rsl8SqwrVw0FQsf33UMPJWUuCCtJkGFcJdjUBNX6ZdbAYpoQtehhNXvKRX247d4Gvs aGzSWp/3o7EtFGXZPp1YyP3c+r3EeuJO1JzGLXmtPR8arYL1V0z/gSOONvp666biHWg5 BIbhkt6ujLZi8auwS5aGKOmc/gncEhHN6LqWVeAhUKW5WVs6NW0AFpRZN9omJUnth3SN SOlifi4eYcBd869ZmUbgBbqEvxsaXYP5FRwVNg1iNK3/qA309BdwJUi7f1/krmGrnCYB tIwp7d06OZqSOqSz+SOo84f0dj4OuCi4lQoLB9HlcqowbvYFRCsp0HmeewyluPpStbgQ 4qOg== X-Gm-Message-State: ABuFfoisWlUBhQW/SiQUdq3q2HOF8AEkOynLkWZmbpbL4TMmBecSfIaw bTcyiETwNUrihTjfbR94K35ukw== X-Google-Smtp-Source: ACcGV62lj2UTN597McA9Vb6ftLO5eT+cWY8EeViVztRZ43TA6FXNif742UMJ7Bl/kjbdydYBoBT7og== X-Received: by 2002:adf:e808:: with SMTP id o8-v6mr3076693wrm.269.1538339184696; Sun, 30 Sep 2018 13:26:24 -0700 (PDT) Received: from brgl-bgdev.home ([2a01:cb1d:af:5b00:e837:b8d5:48c1:571b]) by smtp.gmail.com with ESMTPSA id v16-v6sm18566465wrw.12.2018.09.30.13.26.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 30 Sep 2018 13:26:24 -0700 (PDT) From: Bartosz Golaszewski To: Greg Kroah-Hartman , "Rafael J . Wysocki" , Jassi Brar , Thierry Reding , Jonathan Hunter , Arnd Bergmann , Andy Shevchenko , Geert Uytterhoeven , Rasmus Villemoes Cc: linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, Bartosz Golaszewski Subject: [PATCH v6 3/4] devres: provide devm_kstrdup_const() Date: Sun, 30 Sep 2018 22:26:14 +0200 Message-Id: <20180930202615.12951-4-brgl@bgdev.pl> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180930202615.12951-1-brgl@bgdev.pl> References: <20180930202615.12951-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. Make devm_kfree() check if the passed pointer doesn't point to .rodata and if so - don't actually destroy the resource. Signed-off-by: Bartosz Golaszewski Reviewed-by: Bjorn Andersson Acked-by: Mike Rapoport Acked-by: Rasmus Villemoes Reviewed-by: Geert Uytterhoeven --- drivers/base/devres.c | 31 +++++++++++++++++++++++++++++++ include/linux/device.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/drivers/base/devres.c b/drivers/base/devres.c index 438c91a43508..00c70f0fcdcd 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. @@ -889,6 +913,13 @@ void devm_kfree(struct device *dev, const void *p) { int rc; + /* + * Special case: pointer to a string in .rodata returned by + * devm_kstrdup_const(). + */ + if (unlikely(is_kernel_rodata((unsigned long)p))) + return; + rc = devres_destroy(dev, devm_kmalloc_release, devm_kmalloc_match, (void *)p); WARN_ON(rc); diff --git a/include/linux/device.h b/include/linux/device.h index 33f7cb271fbb..e626acb93ef5 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -694,6 +694,8 @@ static inline void *devm_kcalloc(struct device *dev, } 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 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 Sun Sep 30 20:26:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 976950 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="w7W/tX/T"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42NcQJ3nwtz9sCn for ; Mon, 1 Oct 2018 06:26:48 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728633AbeJADAx (ORCPT ); Sun, 30 Sep 2018 23:00:53 -0400 Received: from mail-wm1-f68.google.com ([209.85.128.68]:35637 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728664AbeJADAw (ORCPT ); Sun, 30 Sep 2018 23:00:52 -0400 Received: by mail-wm1-f68.google.com with SMTP id o18-v6so6685251wmc.0 for ; Sun, 30 Sep 2018 13:26:26 -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=w7W/tX/T82M7c8f+3bIhAve5JFO+DY5Rq/2i2fCIRsiRQ6Ly2dYZBl765fvH24WH3G JmCG9rlZHdOA5Ql9EhsPMPtx4PhSptEP/anrdZwDMWQ+lOkwszTGMTRV8RSg/8MXlwAR rQdYV8kY/ZAgCE+HPYsd7/vaq0PaVDoCTC+BpKXjuDgzX5HZZ8o/F28itZW5DtjfFxnw 8a+HeuypnIZv3RoniHbHyB47mTjJnw73pzV7nRUYwx6KgVMnSa+xlY8PfJK2lMMdIt9F N77seMORgsw5Giqy3bC8gtZs1bbzcOl3S/wOD3nEhHar2VQtVaosedt71ZsWMCy1Mfyr vmOw== 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=GLIFrRhw8FYQC9F36riCp1d4WRJsjh9xPyD9lbIoBuhZmfT8750G3JZm6IyeFFK4qQ zgAvF85c0Ysa2ybtUT88ZxEYNOF986ZzNuBLxM0X0mBQZ5JJC3A7D9ncD+cfA00v3bVF VVySVt9sTvqnKS5qQFFII54NNFm6H8D2gIqBXqxUuhedI9UHB2zB+ThtY+Fagew6oX+J KctHhvqzWeeDHDTgQA0WHtYk0Cbpl6u0ZxyAVVSf3zW0P9WMqY0dCNeTytBBMexg+SmN Bb0gpmnk1agdgoYjAO5WwzCBJcqe2mSf5/S2CkYksA7KQElCsQA7rzMEGRCaC5/5HBQX t9hA== X-Gm-Message-State: ABuFfogzZmVwU+4npzWRkY29I8z+/DuHi5kUC7ZFJY5XBpa9SXVSs8KL XrBycaG+3QAKxWUIR/enncSAbA== X-Google-Smtp-Source: ACcGV63VEVVK1jkBPOt9G/PKx3iIU00AOIjNPTudis33UXJEKkC/iwZgNmYbzNkIdlYHsIL4ih0TvQ== X-Received: by 2002:a1c:7015:: with SMTP id l21-v6mr6843040wmc.81.1538339185950; Sun, 30 Sep 2018 13:26:25 -0700 (PDT) Received: from brgl-bgdev.home ([2a01:cb1d:af:5b00:e837:b8d5:48c1:571b]) by smtp.gmail.com with ESMTPSA id v16-v6sm18566465wrw.12.2018.09.30.13.26.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 30 Sep 2018 13:26:25 -0700 (PDT) From: Bartosz Golaszewski To: Greg Kroah-Hartman , "Rafael J . Wysocki" , Jassi Brar , Thierry Reding , Jonathan Hunter , Arnd Bergmann , Andy Shevchenko , Geert Uytterhoeven , Rasmus Villemoes Cc: linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, Bartosz Golaszewski Subject: [PATCH v6 4/4] mailbox: tegra-hsp: use devm_kstrdup_const() Date: Sun, 30 Sep 2018 22:26:15 +0200 Message-Id: <20180930202615.12951-5-brgl@bgdev.pl> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180930202615.12951-1-brgl@bgdev.pl> References: <20180930202615.12951-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; }