From patchwork Tue Nov 15 08:41:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Madalin Bucur X-Patchwork-Id: 694879 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 3tJ1CR2JNbz9t2D for ; Tue, 15 Nov 2016 19:44:19 +1100 (AEDT) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3tJ1CR07nZzDvpr for ; Tue, 15 Nov 2016 19:44:19 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0631.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe45::631]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3tJ1863y13zDt1n for ; Tue, 15 Nov 2016 19:41:26 +1100 (AEDT) Received: from BLUPR0301CA0035.namprd03.prod.outlook.com (10.162.113.173) by MWHPR03MB2477.namprd03.prod.outlook.com (10.169.200.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.721.10; Tue, 15 Nov 2016 08:41:20 +0000 Received: from BN1BFFO11FD022.protection.gbl (2a01:111:f400:7c10::1:153) by BLUPR0301CA0035.outlook.office365.com (2a01:111:e400:5259::45) 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; Tue, 15 Nov 2016 08:41:19 +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 BN1BFFO11FD022.mail.protection.outlook.com (10.58.144.85) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.721.5 via Frontend Transport; Tue, 15 Nov 2016 08:41:19 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:876; 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 uAF8fA9P021609; Tue, 15 Nov 2016 01:41:16 -0700 From: Madalin Bucur To: Subject: [PATCH net-next v8 1/9] devres: add devm_alloc_percpu() Date: Tue, 15 Nov 2016 10:41:01 +0200 Message-ID: <1479199269-9748-2-git-send-email-madalin.bucur@nxp.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1479199269-9748-1-git-send-email-madalin.bucur@nxp.com> References: <1479199269-9748-1-git-send-email-madalin.bucur@nxp.com> X-IncomingHeaderCount: 11 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131236728795584188; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(979002)(6009001)(7916002)(2980300002)(1110001)(1109001)(336004)(339900001)(189002)(199003)(86362001)(85426001)(47776003)(36756003)(8676002)(43066003)(5660300001)(5003940100001)(77096005)(104016004)(189998001)(626004)(50226002)(8936002)(110136003)(2950100002)(81156014)(81166006)(97736004)(6666003)(3450700001)(6916009)(50466002)(305945005)(33646002)(48376002)(7846002)(68736007)(4326007)(2906002)(2351001)(106466001)(105606002)(76176999)(50986999)(87936001)(53806999)(356003)(69596002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR03MB2477; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD022; 1:PdE98tVPGUUPoNjp67xwuFm3uBc0Or1JnwcV7O2lQmPZnIqB/blGXhalx1zBBO244sQqZVym3HC6frZOgO5+nceGGEX2UcZUqve6NCCJ8A93OTKlqYqxLwWBNjGy4WoujYNfe2bT45slyPakOh1MFzYYSwBVZrvar5v/0EaNynqJ6pgUVwyb1Nxf240K1LVohbe+Sy2Plm6qFmHyxex2+/g7Vs58qziyu8PibrJEUgPdLH3XiK3e/3zVQnYHkEDnL57eL6Y6v68CiyswJI8U18Hqi2hJ+My/aIo9P8ma0ic8Q4Ue5+U5tkHCSge8z5nAZeBu6Y8bX2z8tZpytg1p7v0sRMa1k6NAa0vFxkFZXzjrZQDKvSPiZ11U2haMg/ItpPBQh0kCgJuY9OfdfvsElpagljjUr55zILKF88qtxpanHdGtoo7EH0QkvYN+x4oWPY/Qbwy8LWYiG648+kdfG1QvV+HWDwo9h9DR7zd+hfjYh7FUGeXg7NJirtiCXENpvgVfoOMppW5UOuj5RE2b8wEibPuod5eksVN/ekMg6MaXU0fHcJkMaeUJjVuKL/+w6OfGxtahnU9QeXGC/vfS4jbKeozFbNb00ZOmoby+s12FQqB4kWRfPzbr8xOURpmQ MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2477; 2:QOIxBU2fKzN8bO1QfvRg/rd/MAH/QcYmOWtoLuupfAXhDHip0/ZkmttctLvJOZxBJ6lZgyz/mx573gRpoAp6skRF/Me9R+aeA1jnPs8NX9hrIjcaXoU91CgVuvmSVa0rXCt+EyA+Vmu1RM8DMhzbmaFN9nHnaKlFkYCDHrm9LR8=; 3:1qldHn82E48d2XW+FP607VK2Rn3y1EcVHulPiYP3PUIEDeyVpyXZaycMcH9lBig9uUMwvkIhIukaSVYxKAT6dutcVzlp3XEYHmK/TOhOXhJxl0j2R3sHw5yv9BGLxN/MVppc2iIvMsQW9ePctXvLM0Q6bb4dClezw172q/CYGeAZPOyN95HQsYfr/tqjNUg4lGDClBgi+lSxj+xCQJl0ZbxUhxHxrjXzOGsufmHtdlgoqGdDsFFST6wb7AmqjXckiSpkjQlbWBlElMKq7G3YZQ==; 25:bwG8+9yl/eZJU5m2yGwXlJu7DUAltGwBtIGLOjwEQL4ODNMiddAFTMLPApKhi7AzAKiLHAq3sJkHTv1CxbgLUiKUgcWvu93WpaPZnUJ4U5GpW3C3958p+u37O/0XCQBHVHI+CsVPI+1albOaFW+eocWpClRZJInRZA7iT1fITvnI9USzuI+gLM/1k5Q8xTL2k/I/sED60y/1pd9MOcEQ3hRG3+aXhRYAGHJH2fbIYoEJgkYQlg5RVKZ4Qgl9Z665odjehar0SAcNvD++rN7CP/BI8Dt5opYlGFcQZsJpgxexFslKmPZlROWDN2lw9fmif9fxN8nZ0xq6HiBdVMWanwUXazCBY0och9h3pzJc0AkKBNjPDOyY6zupg5q2YP4CsoHXcKXLqk8IkcUdnYflwXANK1+1EBpHiVOkrTxz/u/y/DJBJWIyJVcK0iS2J8uU64/KjqnhYaiwdGpVwlAcvw== X-MS-Office365-Filtering-Correlation-Id: a9869de9-b980-4189-f55b-08d40d332bcc X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:MWHPR03MB2477; X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2477; 31:vA7GfGgbbrQKcLJ/y6Rd7uunIWgvUEXSBHs6LiqAVeZBtMS2NNSpSF8vEb7uKSg7g7kvctzbtCI1kPeSmVriib8Ibc6M8vMv9I2pe7KoaMZZkw7+DzJFLBheuPGUyn4rL4TtvvJTCOSTFONQw94uwwCXZuewbTVzQ9fCLpuHqMgu+1yS/OBfxh+MpQTxs31oXjWJMVPjmU+vTS7CAj87DPGmbEC8sG7vP7vUI++6yHHRbTkflbh4/qAHegeMy8Y3Xs2YpqfgdlfuLIPE/qgpvHjWIFgEU4BjudIn6a/17Yg=; 4:GL7ANBxLlNiqdz/rI+Pp0s6t+9dgOzp9nBTFWwu3tpStI6dJsZ/kxHI/WW4fnDbOTbxKhouELMc+i9BTx57zkdTjVrF2YonN/jXF7JTVKbHont7FHHlnr6rt9kHBzBhtTxoXUVgZy89lQaI5NBpVD85j8bqdoWki97aQWMQo7y9AigPokKn0V+/MHjck7RZhfgljoZuL7wpiDDCL9LvpnbwJqBllONpufAwNQ4oahBmTQMFW1xS6X392QhNMPvPb64/cg1sCnwP9Bzfhgde42tlXgyG8PfFLIgpzfsHktGay6VkpseEfnVylyKJ/aAxkH8b+jxn7KTJG/Rf3hyzEFeT4lUpsYH2BvC2rcllsPLQ3LezfglMSX3T/08sSBEoXf82WYh5P0KN8OtdoyDZHq3U20XrMdK5jv4t9OGp1jFNoO4oVscFGFZU3z9iz4VkQlwr8lkxmmrnhVB1H3tlBNfsR4JTiNeUR1sONi0SWnad8dNfWMAK8vkxdD0ivRHMFDFBAVhYHWc+0m01qcXNxHCzFlgVEJf90jNJQov6f0yXUlEhII9+4jlx2T/YXSXYNVpmM8FU8rj8pIdCZxmLmLg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095035)(601004)(2401047)(13015025)(13024025)(13017025)(5005006)(8121501046)(13018025)(13023025)(3002001)(10201501046)(6055026)(6096035); SRVR:MWHPR03MB2477; BCL:0; PCL:0; RULEID:(400006); SRVR:MWHPR03MB2477; X-Forefront-PRVS: 012792EC17 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR03MB2477; 23:cldrftfKvDLhPK5TyzwTgAccl+67OfdfbY+8flWRy?= =?us-ascii?Q?i+7S7YOCJe6ArIlJwKInXu61zpTpcAyU/Sul9u/fZWkEfcGGwnoANh13NaMV?= =?us-ascii?Q?x7RP95nvs82QByupHtB0OVZLkuvPnyPFcEV9ut8DyyT3RNeWN0NiON3lGm6o?= =?us-ascii?Q?1ke6GS5Nr/z83RX4rVkSueQySPEQb4MbE9o5nJVJYv1k1XMfVHIYjCi/kSZL?= =?us-ascii?Q?JIqdtHeMCc7QF7IRxJbRbAGDCkwDNQw+bn4hFg06p0mEAigCnEu2DiXGFpUO?= =?us-ascii?Q?DUe05vRqd+Z3gllrkkp+JSfYw4vNfBM0dy8RKhb1mnbU3khd1zbuPokbSJ24?= =?us-ascii?Q?pf2R5kWirpAmPd5k/ZLMHRzKNjkoJh63MSC2063Dlel/0kAapsTv74EnJUb9?= =?us-ascii?Q?DyMmqNFSRYkIdI9s8c87I1CgpZn3tYIL8/sPkNWUdldelJznJSe+G8XFa1nA?= =?us-ascii?Q?VsXsCS0eY+elc3q6pHKGYn+JSYn9Uyr9PC/MzRFzDujmsRMvtrU9fFFXBtdJ?= =?us-ascii?Q?NVM+I81faRnpAIIZt5EH6ie6VnrDi2AveT7yuIld7QZveq6bVgGU6UcwvKnO?= =?us-ascii?Q?xIS+LHQ8ZgT3JiDeVQGxlnZ2CWK5yA66RUIkGHsYDidMl4T59qdrF4QeNT1m?= =?us-ascii?Q?3p8DwUdUomFOTLbtg+Ox2/o8+NSAs5LFJamrr1xOyFFKjLjpKNO64XMKlIyE?= =?us-ascii?Q?pDoVADdGNG+kWxaA97cDl8VOunYMePIu/62y6UTzci18vHLQBQMk9s23suzi?= =?us-ascii?Q?WI7yGulaFyR7G2e2VPJKpH48dpGhJ1wdLtk20jeO94q+LPksk5R+ZxjEPiC6?= =?us-ascii?Q?GI/UJIa5KVA3KsxMw7XHfFvVs0hQ8fllTHZXYzNHKPaKsISXRO4MU/LoyJoP?= =?us-ascii?Q?VgaMDT2HQx9b0VcjGR4ciySwRAv897z/VUrk8SJUnKCzLgVn6A0gcwEr2tXN?= =?us-ascii?Q?IMnMbe0TFupxyLWQN+dUMz/yRCqG9aNfK287bPLCKzvU+6ZAc0JJJwa5aGeS?= =?us-ascii?Q?xZc3xPnUVrz+PrXnvC3UpxbJ6RjWe4f+8hdTeaiCytwy9w2bBcwpCdpA+vpv?= =?us-ascii?Q?u/9HvZAuhi0mvwa3pcQ3PJmQ6bN3iVrAXFV7SII/dTKvxtq17970htSlTe7D?= =?us-ascii?Q?C3qYOxTbdlGLChXS6u/gExAO1EfSfnGW5WS9iCMdf9sWNW0NFGDZgkeQ42c7?= =?us-ascii?Q?ME1fOfg22HRIumpTak+JNWb9L5tG8irrS9pzz8wZqLFgsiMlFZVC/I+Ag=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2477; 6:3ylfQ7vybnIgvgFN1u5UCBAlZZKTPobJdW0vTKsGZzSAgNSt/Sk+VgpVBXBp88H1D5FrZUCMh7pdaYWVngv4QE1p6l00L0vmtfPUdGhxMUWn3s0BvtkWlMtIUjzNx2Z3eJO5l5QRWrj0Wdz6iwWfWt2sctTbPhKuOACq9Tm03y8NaQ7tOH878Eu5K/rjLElhTJqSuNLiggtprGndJuGNP++1jU8325PAlRW+ys0unETkdyqSWcM3l91Ony1M39RNTfbgPFJfaSmlcCriEcx6EJF2OGjt83DQpZgcCLtrTWO5jpy/EGML6OpX7cQ9nKXDtin4a2Lgk3nJosVjB95nmg==; 5:4WqRuMtSUQnuRnFFshSbCxjgowtWw8KJstm1RNqaqLyG2g+YAb/u//yw1CUn6zM46eiTBijeGHo8Bww5Z/Och+0KMP8ZcI9QUJ+Rh898QZ8znZMPK5D0lNApNFO3lCCTYbj5MxV8zsg/kximqhW/lhYDbdLZRqsI02McP3iaS9Ok7NDEY9wBc8SLhyj+aItD; 24:kd3rCa0xVrKLFt8NDPoFBn9ZCTYd4nMilddq6zggDH5MHZLgD4Ss/Q4pEbyEOOaFTcNQgRDTZsSWoA5toZ5UWATZINv4zTEWOmbfzCJ0R+E= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; MWHPR03MB2477; 7:OcpHGbOBTR6+7AGmvgocRscNW+Qbxcherprwh/52A7N9G8r6YyFKEQAoww1qDxbR2Uo7Z4gyT0PGBWSwOfRs1zrMLyUEZi2K1d6l6g6Oex0Oei9rgn942yNCN6VwGwF5wJVNoFCdjNd7D01eKyvdo/HhLQ9BLfqeXcYwHCxuKkI+HJw+/ctmiN8/DVOOv2puhYp7ltpb2wKSU5sQZhtZ9h16U+CiDt15tEVF/xL2XSD4wiE4Ms6WrNnI5KQNXb2goXUslswudo5kbVkzzLfru9nfUeZKo/ubLq8+mAqmNkWrFafgP+seN7MOQrnQTB9wjSPzHkqtZzwXY35GWTvHKIcvvgd0hPKAJ+/15RwrWWw= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Nov 2016 08:41:19.3088 (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: MWHPR03MB2477 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