Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp9547629imu; Wed, 5 Dec 2018 06:36:02 -0800 (PST) X-Google-Smtp-Source: AFSGD/V7pkq/gOvQnfgqGEc7c+4JBdsife8E8cx2tyAAxaPetOeRg42KwUoavdwpKdV4Cpo/zbb5 X-Received: by 2002:a63:df13:: with SMTP id u19mr20861027pgg.294.1544020562270; Wed, 05 Dec 2018 06:36:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544020562; cv=none; d=google.com; s=arc-20160816; b=YYKz+BBCKj9WWelhfGUKg1VDc0kUa6+o+UoPzIXPNzlJ0fu3wKKwsUTroM3lyQRPsb pEO2WuId1fpiMSsrI1MPwpFn/qDjc4+doBFAUuoNeLYjBexjJyTxWLSnqOXL4sM3mjFe W6AaWCpQ5Uvbsnlmap8H0hgrqAMR/OukGGCZgbjzbq1dL52R5LT9p0tFhNZ3+n7mBsCi R4nw9ba1fBQTGs47Jp2ccmYnaeMw64Mitzh8j7buhHGSAAi+F0kXLS7bxCtLpthggYca cE5GPDw7L+DMncXKBQBJXInn0JOulb/TOwI2Su10oVXmA5J+jsBATEY0eoYnMXl8UkG/ 9vKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:cms-type:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:cc:to:subject:dkim-signature:dkim-filter; bh=360O++Tlu3Gj+SOnGunFRnOgxXL62bacYenlerGi2k4=; b=zfsLM9hAUkK3aV2fRIGZ9/rwa0c6yMd8KBGQ3Pidogo0KeJ9mUiKBxqLiJf5wKi3Cj i+cwSFkXDsLr2BUBHYLiODxUNTb+6Mf96XbcPl5rGqhxG5YHpdxlKkGb/TITV3dZ6oc0 qmNSOVgw18B+OF1L4eX8mCUSy60uYoJ0ClCubEV2jPS462eccvKnv8s5I5LImk6ooBVP Qx3FWz+m6k61p6UJgTOJ60Q1ISfIP6uNubgdiH0hr/XiakipeGcpKNBKSkOwXin2dWfo 9Nefe0z9YF0d8M241huhSkKzK4pvfcHI0LZx8zmC5BDRUaOBz+fD6BnWDjudH63qqRkb Mg9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=DFIyTJBz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y20si18428301plr.106.2018.12.05.06.35.45; Wed, 05 Dec 2018 06:36:02 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=DFIyTJBz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727692AbeLEOeP (ORCPT + 99 others); Wed, 5 Dec 2018 09:34:15 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:47310 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727103AbeLEOeP (ORCPT ); Wed, 5 Dec 2018 09:34:15 -0500 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20181205143413euoutp02ab45433c39c3056c0775f510e8340c13~tdmwdiPnt2134921349euoutp02S for ; Wed, 5 Dec 2018 14:34:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20181205143413euoutp02ab45433c39c3056c0775f510e8340c13~tdmwdiPnt2134921349euoutp02S DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1544020454; bh=360O++Tlu3Gj+SOnGunFRnOgxXL62bacYenlerGi2k4=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=DFIyTJBzIIPQCyHCsZ6IxlLAr7gtOv6f2TxKDCEEds7XzVlT4Kb/LvXSp11Z1h8r7 Hob1Moy61djYjHb6xvRPRTexJ63+HcjhDVqDfV9emjejuc7neArlLpicQlUPSrCgRo msfZo/7antCKNqXkngxBLHDrQ4jFw+0HT1oj8ZI0= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20181205143413eucas1p1e470a976f378a58f9eae1cba87837828~tdmv1h4b82432124321eucas1p1r; Wed, 5 Dec 2018 14:34:13 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 84.3A.04294.4E1E70C5; Wed, 5 Dec 2018 14:34:12 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20181205143412eucas1p20fd9f69a63caa071cbe8004f0de7521b~tdmvIqcE50544005440eucas1p2E; Wed, 5 Dec 2018 14:34:12 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20181205143412eusmtrp2a3dc2a4777c952877a3c5d94e345b073~tdmu6RJ9g1909919099eusmtrp2Y; Wed, 5 Dec 2018 14:34:12 +0000 (GMT) X-AuditID: cbfec7f4-835ff700000010c6-5e-5c07e1e46dda Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 63.60.04128.4E1E70C5; Wed, 5 Dec 2018 14:34:12 +0000 (GMT) Received: from [106.116.147.30] (unknown [106.116.147.30]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20181205143411eusmtip12464e37de1217050df236cca12a2efb7~tdmugiX1q1839518395eusmtip17; Wed, 5 Dec 2018 14:34:11 +0000 (GMT) Subject: Re: [PATCH 10/15 v3] gpio: devres: Handle nonexclusive GPIOs To: Linus Walleij , Liam Girdwood , Mark Brown Cc: linux-kernel@vger.kernel.org, Charles Keepax , Bartosz Golaszewski From: Marek Szyprowski Message-ID: <626564ae-8dd6-d271-7a4f-11071df2d7e8@samsung.com> Date: Wed, 5 Dec 2018 15:34:11 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.3.2 MIME-Version: 1.0 In-Reply-To: <20181205124721.26624-11-linus.walleij@linaro.org> Content-Transfer-Encoding: 8bit Content-Language: en-US X-Brightmail-Tracker: H4sIAAAAAAAAA02Se0hTcRTH++3e3XtdTn5Oy4NJ6YjCKF8lDDIzSBnZHxIUUobOvKno1DZn +aBGpukKGZKoVyP/0HwQFStNh1hpubSX2TbNRygZpWCG2sPykdeb5X/fc87nfM85cBhCVi92 ZxJT0llNiipZTknIps65V7vGRukov5rSIMXs9W5SUTI6RimseSak+G4tECmuzdeKFG/NlVQI pZzqz6OVLdwwrTQ1FFLKIXsrpSytXELKGdPmCOq4JCiOTU7MYDW+wTGShGnTLJlm8zhnv/mU 0qPhjQbkwADeA1PDzaQBSRgZrkNQVjH+N5hFoH9oIIRgBsHgrzbxaot1YQ7xWoZrEQzcEgvQ FIL3dT3L7QzjgkPhS1Mcz7jidKjONyOeIXAeApOxjeALFPYHw6SB4rUUB0OnpWLFlMRbYdDW hXifDTgKzJ9yBMQZusrHSF474P1QXVK1ogm8BXIbKwhBu8HA2A0RPwuwiQa7vZHmfQAfBK7o grC/C0xY7tOC9oClllU+F8HlMo4WgqsIGiubKYHaCx2WN2LeiMDecMfsK6QPwEXrPST4O0H/ pLOwgxMUN5USQloKBfkygd4GnOX2v7GPe3oJI5Jzay7j1lzDrbmG+z+3CpENyI3VadXxrDYg hT3ro1WptbqUeJ9TqWoTWn6g54uW2WZkno9tR5hBckfp5xE6SiZWZWgz1e0IGELuKq0LWk5J 41SZWawmNVqjS2a17WgTQ8rdpNnrRk7IcLwqnU1i2TRWs1oVMQ7uehQekBM65PNiqSG29Ij/ zr5nlO7Mvg+BlUMtE4eo8MIffTZL/fThkezMS0ZbtVeglxGORre2GvzCrkzMJckdA15OPqrv 15dv/7i+V9FB31V97XzHBn578psJ4zxfH6v5uRvGiwbp88W9MQsRuu7IxZxhR8vJyNMGTZnY +8GoZ0iWnNQmqPx3EBqt6g8Iw/BTPAMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrHIsWRmVeSWpSXmKPExsVy+t/xu7pPHrLHGLTd4rX4MvcUi8XUh0/Y LK60bmK0+Halg8liyp/lTBaXd81hc2DzeH+jld1j56y77B6bVnWyedy5tofNY/qc/4wenzfJ BbBF6dkU5ZeWpCpk5BeX2CpFG1oY6RlaWugZmVjqGRqbx1oZmSrp29mkpOZklqUW6dsl6GV8 2vSFpeCqTMW1ZUfZGhjvinUxcnJICJhIXPn7k7GLkYtDSGApo8SZBZdZIRIyEienNUDZwhJ/ rnWxQRS9ZZR43vaCqYuRg0NYwFXi3bYUkBoRgRKJD/t3soPUMAu0Mko8enwDquEYo8TVtrfM IFVsAoYSXW9BJnFy8ArYSRw7PpsRxGYRUJG4ffUkmC0qECMx5fJrVogaQYmTM5+wgNicAvYS S6YuALOZBdQl/sy7xAxhy0s0b50NZYtL3Hoyn2kCo9AsJO2zkLTMQtIyC0nLAkaWVYwiqaXF uem5xUZ6xYm5xaV56XrJ+bmbGIFxt+3Yzy07GLveBR9iFOBgVOLhffGAPUaINbGsuDL3EKME B7OSCO8KG6AQb0piZVVqUX58UWlOavEhRlOg5yYyS4km5wNTQl5JvKGpobmFpaG5sbmxmYWS OO95g8ooIYH0xJLU7NTUgtQimD4mDk6pBkZ+d7uvuhN6TibmCunbW+mf4Kw6dc5G0sGYS3JB mFiNd4rwVv0Ag5WVU2f4zMz4kfl4mb9ng5NB39s7c/bKe6lOM3g7ZRbDfenCN6tSt64QXpmQ klm6vcJwZuzWKTMUc2XmWgZZl+9VmlL/iSv3xiH3+98ZGWyDT2uUXszql3wg/XV64vu4u0os xRmJhlrMRcWJAIwQII/RAgAA X-CMS-MailID: 20181205143412eucas1p20fd9f69a63caa071cbe8004f0de7521b X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20181205124826epcas2p13d03e4a183731f285add6c87a8a1a42a X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20181205124826epcas2p13d03e4a183731f285add6c87a8a1a42a References: <20181205124721.26624-1-linus.walleij@linaro.org> <20181205124721.26624-11-linus.walleij@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Linus, On 2018-12-05 13:47, Linus Walleij wrote: > When we get a nonexeclusive GPIO descriptor using managed > resources, we should only add it to the list of managed > resources once: on the first user. Augment the > devm_gpiod_get_index() and devm_gpiod_get_from_of_node() > calls to account for this by checking if the descriptor > is already resource managed before we proceed to allocate > a new resource management struct. > > Cc: Mark Brown > Cc: Bartosz Golaszewski > Cc: Marek Szyprowski > Fixes: b0ce7b29bfcd ("regulator/gpio: Allow nonexclusive GPIO access") > Reported-by: Marek Szyprowski > Signed-off-by: Linus Walleij > --- > ChangeLog v1->v3: > - New patch. > - This fix is in response to an issue Marek saw in the fixups > for resource-managed GPIO descriptors used with ena_gpiod > in the regulator subsystem. > - I first thought to apply it to the GPIO tree directly, but > since it is not a regression it is better to put it into > the regulator tree with the rest of the patches. > --- > drivers/gpio/gpiolib-devres.c | 50 ++++++++++++++++++++++++++--------- > 1 file changed, 38 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpio/gpiolib-devres.c b/drivers/gpio/gpiolib-devres.c > index 01959369360b..a57e968025a8 100644 > --- a/drivers/gpio/gpiolib-devres.c > +++ b/drivers/gpio/gpiolib-devres.c > @@ -98,15 +98,28 @@ struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, > struct gpio_desc **dr; > struct gpio_desc *desc; > > + desc = gpiod_get_index(dev, con_id, idx, flags); > + if (IS_ERR(desc)) > + return desc; > + > + /* > + * For non-exclusive GPIO descriptors, check if this descriptor is > + * already under resource management by this device. > + */ > + if (flags & GPIOD_FLAGS_BIT_NONEXCLUSIVE) { > + struct devres *dres; > + > + dres = devres_find(dev, devm_gpiod_release, > + devm_gpiod_match, desc);     devres_find(dev, devm_gpiod_release, devm_gpiod_match, &desc); > + if (dres) > + return desc; > + } > + > dr = devres_alloc(devm_gpiod_release, sizeof(struct gpio_desc *), > GFP_KERNEL); > - if (!dr) > + if (!dr) { > + gpiod_put(desc); > return ERR_PTR(-ENOMEM); > - > - desc = gpiod_get_index(dev, con_id, idx, flags); > - if (IS_ERR(desc)) { > - devres_free(dr); > - return desc; > } > > *dr = desc; > @@ -140,15 +153,28 @@ struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev, > struct gpio_desc **dr; > struct gpio_desc *desc; > > + desc = gpiod_get_from_of_node(node, propname, index, dflags, label); > + if (IS_ERR(desc)) > + return desc; > + > + /* > + * For non-exclusive GPIO descriptors, check if this descriptor is > + * already under resource management by this device. > + */ > + if (dflags & GPIOD_FLAGS_BIT_NONEXCLUSIVE) { > + struct devres *dres; > + > + dres = devres_find(dev, devm_gpiod_release, > + devm_gpiod_match, desc); devres_find(dev, devm_gpiod_release, devm_gpiod_match, &desc); > + if (dres) > + return desc; > + } > + > dr = devres_alloc(devm_gpiod_release, sizeof(struct gpio_desc *), > GFP_KERNEL); > - if (!dr) > + if (!dr) { > + gpiod_put(desc); > return ERR_PTR(-ENOMEM); > - > - desc = gpiod_get_from_of_node(node, propname, index, dflags, label); > - if (IS_ERR(desc)) { > - devres_free(dr); > - return desc; > } > > *dr = desc; Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland