From patchwork Fri Nov 11 08:19:58 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Madalin Bucur X-Patchwork-Id: 693588 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3tFXvB1QZ1z9t1L for ; Fri, 11 Nov 2016 19:21:42 +1100 (AEDT) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3tFXvB04vczDvr7 for ; Fri, 11 Nov 2016 19:21:42 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0045.outbound.protection.outlook.com [104.47.40.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3tFXsc4fcvzDvJC for ; Fri, 11 Nov 2016 19:20:20 +1100 (AEDT) Received: from BLUPR0301CA0008.namprd03.prod.outlook.com (10.162.113.146) by BN1PR0301MB0740.namprd03.prod.outlook.com (10.160.78.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.707.6; Fri, 11 Nov 2016 08:20:15 +0000 Received: from BL2FFO11FD017.protection.gbl (2a01:111:f400:7c09::165) by BLUPR0301CA0008.outlook.office365.com (2a01:111:e400:5259::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.721.10 via Frontend Transport; Fri, 11 Nov 2016 08:20:15 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; infinera.com; dkim=none (message not signed) header.d=none; infinera.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD017.mail.protection.outlook.com (10.173.161.35) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.707.3 via Frontend Transport; Fri, 11 Nov 2016 08:20:14 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:881; Count:11 Received: from fsr-fed2164-101.ea.freescale.net (fsr-fed2164-101.ea.freescale.net [10.171.73.197]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id uAB8K7eQ009839; Fri, 11 Nov 2016 01:20:12 -0700 From: Madalin Bucur To: Subject: [PATCH net-next v7 01/10] devres: add devm_alloc_percpu() Date: Fri, 11 Nov 2016 10:19:58 +0200 Message-ID: <1478852407-27420-2-git-send-email-madalin.bucur@nxp.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1478852407-27420-1-git-send-email-madalin.bucur@nxp.com> References: <1478852407-27420-1-git-send-email-madalin.bucur@nxp.com> X-IncomingHeaderCount: 11 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131233260151312669; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(4326007)(81156014)(2351001)(81166006)(5660300001)(3450700001)(2906002)(626004)(85426001)(106466001)(69596002)(5003940100001)(356003)(47776003)(97736004)(586003)(8676002)(50226002)(189998001)(104016004)(36756003)(305945005)(8936002)(7846002)(6666003)(43066003)(6916009)(110136003)(87936001)(77096005)(2950100002)(33646002)(86362001)(68736007)(53806999)(105606002)(50466002)(50986999)(76176999)(48376002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR0301MB0740; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD017; 1:Yq9rUPZ3/acxTbWjWgCrV/9F4qMAeNyhY6IZMHAU4zs8pPGCvO9Nrq6T63KJZrn0CyA7FkXnDNbovQbdfFldef52wvZxZSuAY7aBEkB5O0xY1QKoApZuFdPHohaJzhg0QL7/NKjigpQvLTsEFjiUI2/43VLNEsgj4wQ2v8pDKqAyGvIQZXchqUxB7JhXZ7wssW5JZLgYKwUKhdNkAJLUUR6MyDNMxLiHH1A9wbrUnJUfAvpaZK/WMaTfXuUuJbBSQotEvZlO8uznbW+7curDb5o+dMqDNHSNU+o3MJKKGs0uhcJnoy42NREcPvF8dBj/ylpyDbBGoflvFT7zy+CFzQEY5fF4C2uJQ13j6Mhv0V5oqCimM/cZLQ88hI7ugYgb8mFKLAXrg8zL5tG1x4ytQwgDTM7LDaL46tc8vBp7mCTf4RrdRg7TwUCZ1ciiv88a6LsamnFni5IVXDwo106zboOIqI7Ls+K19zymklOnDwhGnzDvaPEZIOcPucLnE6w8p9BjdXqGxvvstc/JSzqiy7vi2lc7MN2xqH2+el80mNf+afnCXL8HUZ2202UgP/I7NxvaGmpyWXdNjbAETV/rcJd7yVJlbGIjj9yHzXGLGsv89pKRImkbA6gblup86xQ6 MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0740; 2:zxffgB2KhwwZZGoPWwIyRnyTkCa3Wcb4Z9yEMbNvMqzC+ei4yU8SdnsatARUME+08z26f7HYM3CmFx+mUaYpMk4DbTcsM1vLmf377zGMo+d399UqBPwUq9QNwMtOYaXozf6qVXNhhFEbmZhKN6EvMpxU5MERc2HuqpiXiX11uFg=; 3:XLDd+nZPDCBkjw7LHU0d5yPdoHzXbyGSGTgAjAQkr/wcCMPz6yRxFdDcAD19iQRNV5zQ9YVva9SNFouVRBxhUFRHQJkxpsLlDVNmXHh8MjqQqhRRJx9rgGcDHF/h7pT/VoFu4SeFSeU1A+O3pHzBONjRFl4/s+nP42+3041UrY3unOxhlfihAHecQr8FUUk1rjt7IVCp7eMq82NkFRown/QjRMwAhKcrdKCWKUJnuX7ZK93ao+eGoeuvyWslP5IS5ldApBDaShFYfm8YDHjAhA== X-MS-Office365-Filtering-Correlation-Id: 0af23fab-b6ca-4f98-afbb-08d40a0b907d X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BN1PR0301MB0740; X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0740; 25:0rMln/H0oeOIXSZSse2IzdZGiHAnCSrrYRSYOWZLzDjiPeaQhZreKwS7JAEQmctNlbA9SuGO2LRhgGDNUBreeNMwUOYoO8DuB2NGydZ/W25zBYWev2KA40BhmjiX7kv013SnEzI6u3wbOMPk8hP8a8TkpCd9/uR9h8rL7/8G30xfh4T3cFUscCr7u700KDRPaShY41rvmBde8iaZ3sNwJxhY7AKmSgxXmVwcUwJg/cwyo3nXkeLS0MiJk/nv7mOtpIWzAe+L7mjwHgn1t8qA7Q96GWWttMkIjqNwVC18sLef4pSzkXju7cQAJvszmaWLb0JwrZCd6tBj2aYEfgh0txO3DLXeqfuhNHcX+egYMAK/OwjrBf/5/9hG4jfdQSXC5h5Xbh4ePGmtF1EwTtKOU1kq2Xy9AUorCnK1sOWdJnq/pzwSNZZ8ghhn/mp6Ky37NKuBYIBrp2+Rf8FQuyVXL2df+18+wozpQ1k8vVJmWWDU0XVZArprvsQGvufzeSGitGRHJZhMTkFlHf4YSPWRpkLD+osIu19Vdio5G23rGLQlw+KvCJL5pabtMKWSaCUwwb3/PEYXI17NyHuIBZ7ba5NWfHzk5kHELkglOjVmfQJdkuSTMR7ik+o83cNjzTwKSYM1f+1Jd44ag5N2xMCI0bPGXIpzgr/7SQDZNEZKyg7dyOSYPaGcNGLnfE5MVuRsqFvf0ipiwJfPTOyFfi3aVJxDsDUS41klN4n3JK3BNmdZFH+RB6bNKckMiSsjP9SF7vXYWKeBZclmcUdQIc8TeA== X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0740; 31:Z+S/Cr4aC/yGc0enIPwnqcmvdkFdrd6Z+i+yKjJJTNsLQMxhquYH3Mkiuasul8b23/4LZdidL9LTlAPkYy7Qp1XG/UTAT+PBWhq+bh2n+8PSd0zqMeKYHNh+eaqWyItIXPfkVtmoaKvDacyeKDNHCVSqAtZ5gE00apcOqkYpmp8ovXmWQjxTSZ4IUF6MhYfmh95yotqWxVRJYYfLiF/d8QV7vF5kj0QvIeGw0oMRdcC9jNA/hBSDbO61t6bNO2+2NZB++eCGWfXo1P8mrjhk3JFFmxI03gZtIjvz7EIocYkCFY9/KWbrRdWDtnHInO9f; 4:FIbR6w6DE/VWLMEJ10ZQXKlfESdWK75+oZn8HyIO1i9yJkP+LLfYhQyOUdaU7lJm5kn146jPA0ePPxOyS4c3o0zG4i7/y6vxN3R/O+FZz7AAF/Hf0c1CBYZSP27+OgvV3HiYPpn1/35lK6iL/A7gXsTjL81TgkBkcjyGcoTi9TGRr23vw10GT21Y/r2sgUzesoU0gWNSG58RRETva18JLa4L3slRpO1MqCEbE2fv7Xe68lMobNW66WMGmkyKi/LA4tPodr6INgwJJojSOexrMTtRbKsaFJuSNhwc614iPEsBZ2hhyJVz9zdQkdA9blWi3INQjX+dYXrpK8ixz7rOD7Pw1d0WAVG8K4RiO36sblGk4QWbm/u16IyeKqonjssrlc6fixpRp6rnLIXfOGW6ItsymdSiKYJXvll+Z9SHwmg+IOV4BRwxNNbsfWPWmm2E67ntrQW81lFH8HJdFNfXpy38iWMVjcx/xRd4taWn511sVaQGapBDliQ2pK+7TTDduelqjFXL25YTKWFrPOgp+2QhG1jLVodOacpuJK500xjXiNCtxYZLCqpsnDHkN1zN X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(13017025)(13018025)(5005006)(13023025)(13024025)(13015025)(8121501046)(10201501046)(3002001)(6055026); SRVR:BN1PR0301MB0740; BCL:0; PCL:0; RULEID:(400006); SRVR:BN1PR0301MB0740; X-Forefront-PRVS: 012349AD1C X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR0301MB0740; 23:SaFdVESR54Z7bSulRXQGCTrUc2ULxsj+mc2cXwS?= =?us-ascii?Q?M7fzih37m9QOODcJ4bbPkMOrGG+oa2uxj3Mu2hg06JBOQZDlkKURKwpF2out?= =?us-ascii?Q?rMwWkGQ4LzXCrrCYZCy2Zz231yR3D9Ia5lYbviPnspaRK7Bu4BSQw93AANoi?= =?us-ascii?Q?uDLg1sEEIi4/eQixM3QFqRqRk5p3Pc9ty+v65BXxGS311tnDqug99dFfSgau?= =?us-ascii?Q?wB1hOstgdsDS3pPAx6p+RXu3ePV5TzWwbo+JVSI/OEogiUMvLuwfiMt/PCsb?= =?us-ascii?Q?pdEYmfEKsRVdNdPbxwmnjUPmMYhtVzkREES7xOJMvq3gnrnJtt/BOXkPyrN9?= =?us-ascii?Q?s/WQx25EhAAzcjB8bFSO0FwtBnFrH5rTRXW8bXbOGTp3oJmYdI89BmAhd6By?= =?us-ascii?Q?InOraksfq80ViPESnKFMhWfPhawcjUphW7BHCQ/RUUUzras2otn3fX/Ilqw1?= =?us-ascii?Q?EysUH5Px7CVVbObaozX1BrE+CwNCiETf3+MLbgNK7pgWHAPr/AmM96tY7Iqj?= =?us-ascii?Q?wUkkf5fJG5Uh2TEZfmyzgNVdbjLap7QfbXE5GbQ3C41I3qHNGYB2fp8QbZG0?= =?us-ascii?Q?EsHuVO2gKycy0ITfe8K2qjsQAzJnNzt/PxEhdQd/oWSUIfo/9QkZ0TPvxyPf?= =?us-ascii?Q?2TRyn40c1QWK/Z695o/2j0VDSu8tJ5BbJLES4HH+ZAALT0Ldrmec3HjdhI1J?= =?us-ascii?Q?jkDGPRCnSaRRLS9Bw7u5E4onRdhfBnUjTuXmU3vWI69BmFbwUg5b6WoN2OMI?= =?us-ascii?Q?rfYT2dsth4y6T0hMvQHM63oG3Yvt6NlF7dEzE9xAwe0o9FfQUqvMRGHZVFh8?= =?us-ascii?Q?Nmi5sYGaiTVxd/f24biHEGPctavXAWZHcQoXNB9SjUZPkIj07vWl/8URugKd?= =?us-ascii?Q?XYep0PGxv4j+ZStMoggstkFc2adgWVnv0sMJDFRne9VXXMIT9l3LrVn/IL+z?= =?us-ascii?Q?qAKnybosBtJPPt8vcRYHyDQC/lXWVtaos0Bg9BP7fwqdQJlTNk7tuL8jLni6?= =?us-ascii?Q?tr2odV5XzoC/IFgNFx6r0d2IXwkeb7SVAEplsGQ25yivGH1fjsuNYj6vSTaC?= =?us-ascii?Q?ux9VE2+j3FP+JqaldBfN2mQ+oSWH7UUFgk8ISy4kggKndTqCkGO2+WmNm1lw?= =?us-ascii?Q?GAaWAvabaJY6eL1fnwEsFCp77dzQlNfY+?= X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0740; 6:niT6CXwSQl0+Zawez4pZqwPfTOWVK0N1fvOuBcAusEwM2Ecp5cXfgcMbAQYIoroanZj7x008qZrpHqHX35L98Mntl7j92bsCboIYSEUISw206LlmeatIwCrTfYMYfEkAT+xQZUbiQU0XheFoyaD8p2l4p1Eks7dfnQanEfieqnwip4I/AoMV6nyErBa8kCmtaq5Jndy1j5MhP52Q+gBkw1tS6bQc9IYLIv9Ft93Ei9VKXQSvy/+PaTgsoR35BvP4k1t13KPmgw1J2BLrF9STvnYD+gY0/Jsnkx4FbA+Q2q69ArySejicXNZFI9g2NVIh; 5:J4JTTpRsY2gYlcEGJDTyqAreGfOvILGAKJJNYUz1lMFAbZYfEknQTYoCQh0AQfTliN1XrD6TItKrzk9iRFNtLJb8k3SRWlWMFnHPKocXAgMNtAWNc+TpPCtIsnAPhzi15xVYsnAvpFwGFTY+1If6VGZGh92BWVJPbsTqVepWLxiX13oJXxjOFKyMZSa+a6IN; 24:YxlEeSNw1H9uhI/ne1tttAwTd8yTzJoJgXbP56SPX82HCGnH9fPYIpqZs2cGyqBaFgaJOkTzlkMI6XcYvwKkE7GWoNVtEop6kUTNHIDxoGw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0740; 7:eW2CPFDXpEYh7kTpO7Jxh7r1Baw3JzLfFZQvdpsIB8Cjzeu5IiYsqBjGoc/5hYljlta4Qtr40Kxw0njYAkfHQrVChHUj/LOz1N2ZmZ1hO34jlL3NV4XIN4QQH6X30Rfcnvn8BbMgSO3z1As3+7wd6Mt1GnT5bHgFAjW35B/h4xG+XPmw714Xv+BE4ESA3ApiquKmxFtDeI3N03PhytOLwP+ufcTMXh9X6EVW6x9NeixHJ//JkTCZFxi8AeQTdStvQIj1iRwuVm9LL7EDdVCVSRlLeL96T4S3bSQryo6XgoYZX7g8T8lkkj3IcXUyC1bsExAYmxifH8meciF+cyj9PsO3hRtcNjwHXQicCOs4KLU= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Nov 2016 08:20:14.8816 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR0301MB0740 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: madalin.bucur@nxp.com Cc: pebolle@tiscali.nl, linux-kernel@vger.kernel.org, ppc@mindchasers.com, oss@buserror.net, joe@perches.com, linuxppc-dev@lists.ozlabs.org, davem@davemloft.net Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Introduce managed counterparts for alloc_percpu() and free_percpu(). Add devm_alloc_percpu() and devm_free_percpu() into the managed interfaces list. Signed-off-by: Madalin Bucur --- Documentation/driver-model/devres.txt | 4 +++ drivers/base/devres.c | 66 +++++++++++++++++++++++++++++++++++ include/linux/device.h | 19 ++++++++++ 3 files changed, 89 insertions(+) diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt index 1670708..ca9d1eb 100644 --- a/Documentation/driver-model/devres.txt +++ b/Documentation/driver-model/devres.txt @@ -332,6 +332,10 @@ MEM MFD devm_mfd_add_devices() +PER-CPU MEM + devm_alloc_percpu() + devm_free_percpu() + PCI pcim_enable_device() : after success, all PCI ops become managed pcim_pin_device() : keep PCI device enabled after release diff --git a/drivers/base/devres.c b/drivers/base/devres.c index 8fc654f..71d5770 100644 --- a/drivers/base/devres.c +++ b/drivers/base/devres.c @@ -10,6 +10,7 @@ #include #include #include +#include #include "base.h" @@ -985,3 +986,68 @@ void devm_free_pages(struct device *dev, unsigned long addr) &devres)); } EXPORT_SYMBOL_GPL(devm_free_pages); + +static void devm_percpu_release(struct device *dev, void *pdata) +{ + void __percpu *p; + + p = *(void __percpu **)pdata; + free_percpu(p); +} + +static int devm_percpu_match(struct device *dev, void *data, void *p) +{ + struct devres *devr = container_of(data, struct devres, data); + + return *(void **)devr->data == p; +} + +/** + * __devm_alloc_percpu - Resource-managed alloc_percpu + * @dev: Device to allocate per-cpu memory for + * @size: Size of per-cpu memory to allocate + * @align: Alignment of per-cpu memory to allocate + * + * Managed alloc_percpu. Per-cpu memory allocated with this function is + * automatically freed on driver detach. + * + * RETURNS: + * Pointer to allocated memory on success, NULL on failure. + */ +void __percpu *__devm_alloc_percpu(struct device *dev, size_t size, + size_t align) +{ + void *p; + void __percpu *pcpu; + + pcpu = __alloc_percpu(size, align); + if (!pcpu) + return NULL; + + p = devres_alloc(devm_percpu_release, sizeof(void *), GFP_KERNEL); + if (!p) { + free_percpu(pcpu); + return NULL; + } + + *(void __percpu **)p = pcpu; + + devres_add(dev, p); + + return pcpu; +} +EXPORT_SYMBOL_GPL(__devm_alloc_percpu); + +/** + * devm_free_percpu - Resource-managed free_percpu + * @dev: Device this memory belongs to + * @pdata: Per-cpu memory to free + * + * Free memory allocated with devm_alloc_percpu(). + */ +void devm_free_percpu(struct device *dev, void __percpu *pdata) +{ + WARN_ON(devres_destroy(dev, devm_percpu_release, devm_percpu_match, + (void *)pdata)); +} +EXPORT_SYMBOL_GPL(devm_free_percpu); diff --git a/include/linux/device.h b/include/linux/device.h index bc41e87..a00105c 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -698,6 +698,25 @@ static inline int devm_add_action_or_reset(struct device *dev, return ret; } +/** + * devm_alloc_percpu - Resource-managed alloc_percpu + * @dev: Device to allocate per-cpu memory for + * @type: Type to allocate per-cpu memory for + * + * Managed alloc_percpu. Per-cpu memory allocated with this function is + * automatically freed on driver detach. + * + * RETURNS: + * Pointer to allocated memory on success, NULL on failure. + */ +#define devm_alloc_percpu(dev, type) \ + ((typeof(type) __percpu *)__devm_alloc_percpu((dev), sizeof(type), \ + __alignof__(type))) + +void __percpu *__devm_alloc_percpu(struct device *dev, size_t size, + size_t align); +void devm_free_percpu(struct device *dev, void __percpu *pdata); + struct device_dma_parameters { /* * a low level driver may set these to teach IOMMU code about