From patchwork Wed Nov 2 20:17:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Madalin Bucur X-Patchwork-Id: 690573 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3t8KHG5G5vz9t0q for ; Thu, 3 Nov 2016 07:20:58 +1100 (AEDT) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3t8KHG4NfCzDvQl for ; Thu, 3 Nov 2016 07:20:58 +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-cys01nam02on0048.outbound.protection.outlook.com [104.47.37.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3t8KCd3jKRzDt4R for ; Thu, 3 Nov 2016 07:17:49 +1100 (AEDT) Received: from BN6PR03CA0058.namprd03.prod.outlook.com (10.173.137.20) by BY2PR0301MB1622.namprd03.prod.outlook.com (10.163.28.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.693.12; Wed, 2 Nov 2016 20:17:44 +0000 Received: from BY2FFO11FD001.protection.gbl (2a01:111:f400:7c0c::104) by BN6PR03CA0058.outlook.office365.com (2603:10b6:404:4c::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.679.12 via Frontend Transport; Wed, 2 Nov 2016 20:17:43 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; transmode.se; dkim=none (message not signed) header.d=none; transmode.se; 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 BY2FFO11FD001.mail.protection.outlook.com (10.1.14.123) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.693.6 via Frontend Transport; Wed, 2 Nov 2016 20:17:43 +0000 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 uA2KHZDf017745; Wed, 2 Nov 2016 13:17:40 -0700 From: Madalin Bucur To: Subject: [PATCH net-next v6 01/10] devres: add devm_alloc_percpu() Date: Wed, 2 Nov 2016 22:17:25 +0200 Message-ID: <1478117854-8952-2-git-send-email-madalin.bucur@nxp.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1478117854-8952-1-git-send-email-madalin.bucur@nxp.com> References: <1478117854-8952-1-git-send-email-madalin.bucur@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131225914634615378; (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)(356003)(3450700001)(2906002)(81156014)(5003940100001)(81166006)(85426001)(11100500001)(104016004)(189998001)(77096005)(586003)(4326007)(87936001)(97736004)(76176999)(8676002)(6666003)(7846002)(50466002)(33646002)(305945005)(47776003)(36756003)(50986999)(48376002)(53806999)(68736007)(69596002)(5660300001)(19580405001)(19580395003)(626004)(8936002)(105606002)(2351001)(43066003)(86362001)(50226002)(229853001)(110136003)(106466001)(6916009)(2950100002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR0301MB1622; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD001; 1:IaTfLlehPE4qYom5YISk02JrXFgz0hdTp9Mp3boNB7oJYaRQEeMu6NkmGdcCOG7TFAIGQoYa47sS6hsfPO3CdNT3yl9UaKVIAOEihFjCa1U/MQ2DSKvBg5HDGdr58aSGQv3AIpUaoO2Kq7yOP9PkeT/FPrrESO3NZzSQaX7bk0+gk6lPOtvDlBymZP+CSKcUb1jwq8TqcKPEKCUraJZXOKHhgFmNctvlPNOYmVbfoYEiT6lrI2bV3jpRoMpui/e6br9qIwfNANzjNNN0N47BUREuLjDSK+7+ycb+CpSlv03k2TN6UO53cdU8/I4MW7FXVh9pmECOj/LmQKvHv5SVgBIslaV6y6hMcYnQgLQvdOI1cTbPD5/FvySKBh79CxXf9SOWgxIA89oCDLC/UW8hzbYWJzRuT4h3jEEGr+9fBGBPU3Q7Zx8HZQJuwP5HQsg5RhI6xfhee362xENkMVp35w6+iy8d/GK6ui4YSY9w07HAMkBESjLMsa/tXfOTVX5fBH5A1ZkX3DiRVwbBqHf5E/UyXoNewe3uSbmQ+kbZORtL0ODNwRhqNZd/PMykjiiw4Q1Qo81UR2+kkfMDZU2Ct/QbuDlzWNirvqLU5k+KHW7mG9WieXWnV5pTmRFXHswyKbhZYJD60T9mIl74F/YwL0XmKaGWF9plpFzp2NBCPWs= MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: bfb8f1d4-9edf-4c9e-3a52-08d4035d4d96 X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB1622; 2:fgcj4OVw+Yb4KWOXLzsp63W2kk9Odt4rjP6jNzXolN9IhO1tKfO8Ssx6uFMuQrBHOgsAobSMHrvk+VG22Lb+M78hrnjU5YWaoFDNJLCHsNcHLdraUBddrNO0uRaYHGynGazh1swE1Lp9h3lC7nkA4wsTrXlqf80MDBRPixGQp3eMdS3+BqI+2AFttAQx9AXUL6sstX7XxF2B6OQ9w+EhDA==; 3:rusqmGOls/GqIOw7cQlQ3FR+JPwJd9H/ZwWtuwy1NKov4UN86qY6sAkA/C08pNVmqwlO7cepKmn4b7nfN7NI2Mt4zstLT219/qB8+IBiNmFHHy4waxu3e4Eg8QxM/NU/0gcxt9BFdg5oJdNVc1NVAaJcpM0HLlZ0bg1MCGI3ig7w/A3KTCb1JNkOwOZcqXBg+xC6fnRF5eGQsLd0HTel3QY4i21BaGCKh1m/ch/T7KgUb7YDxW64I9T4skl+ovjV X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR0301MB1622; X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB1622; 25:F2vBzAGSdfR7+EYcVvFWbIhXSaLGoBAcM1Y/3JLXUKemKKY4FZ0jWueQCUZrlDMUtZsjlTnIgTPYu8rEsIEjXQgRao0HDgy1JPIuzvHxJrVnKNe7t+twp8BRFvJmmCKpSFMsoYg6cXOmjJ4lHeZsv8DWzGWMo9hDN1C1ZqU3nxvG5X1detUyeZ6fhPQTYETkcy5ehPuT0ZGQ05pdclTLF7u3oIhnQ7pP7HvsztPqkESQzHvsv25agJreKW260vToc7gVjIllVtCjIjSv7ImTGLlLlCDf531LskCvaAvqC67W6Ny7jIqlF2Q3iCJveymH1nl2041JZQvei5t9zRXougZNo4XyrDyNJfFGIneWHoU1kB15pJrE8veSsGXOJsuR/3+fM0aKVMzYbFLHEZT1Lz+JN1mJfrj9ypqHmvGOiVNWHRHZ1LsfUUuKPjNdyEehsHDVRuRGzfFhnyax96NPsv3FiKQnRm7CA6kQzuvAzipoYoISzCPd6qEVYVRfV847TaR+gwD1zZvbBaVc90MRc6ZRKq8JSnop5YwHf7WV+xjAjneHlAoGVXVITCsZhNAeIYMAFffZCQRVHlwbd/kd1VImWrtfMkJIONOyoVoOQ+HuXyjPZYD7Yh2mVsUFdlizd4lrvK/iIDupSM6ZsO6+8nTzceks5jEXTGOCXouZnstUK66O31p/cpxK7iAv0Pacfv+fLXk7aU+Jk4Zc9rjKHdeXmq1gKbYiLkSCOwMN22MZ/bGooL3qL2OIqRl3PKHPOu7jJZLkyysSOMBWsnJmvQ== X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB1622; 31:VOs7awmpowi12O9BNM0Z3vqti3JME5rQr3EEn/ZSMZjJIllBFHbVO7OD0PnFd/5ElDtgvROJd6xOjvi7jU7d2rkUekcBn4iEOSNJptVc7OW4ColFjqN7P9yBO+7y2oTNlvS39hFxVVrbHRRP/Tx9s3G4cGp7SjPxxrTpnFJPeicEeiNIKD1pTTlZJbaOCaZocwQrI3SWuxTDjuXNtUD48A8Te317AnmnWCgH+5D0qGQiNsDsOaUbxtufcjaV1BGLd7Icpo2wuDyALOPfpcgQYw==; 4:DKqk+1TrICnGOpmRjRNM/ILyZAmPCexEvbTk5tXx2Rsgl4ZduND+qaiNhG11/C5hjakQREXyp1rC49BkWk+GPDMS9YCQJVLVkal797ajara9caHtkEeXGh2K1IT6sdcYfwTwcgRNhTlM5k++Jx0ZIk/ds9zVBTKi2zSUfR43bTga8BSU0HR5wA0MbXfidmUr2DSp7rlI1OfE1NCNZm8RJ3jKU1zQS2KLUyuSgqxxSEhltyQA1kl78pRwSu/hDG3bD5jsNDvenQ2CPS2mH7H6fCXCPe7gnNMrrwOanXRJpkt4DMXlYg0+0LduOpHaUaCyO5TJ5vO7PZbKKsxsOC+SimrHNlqP0Ux98i+KAhSkZU3S+3/KKpatgc3uJdmZsnGQxTBVlcm/WKYOWgjhHuROylD/GukizrWpd1shC/GDMPTEfO+Bo1rKbw+uFSqoOyiEZVl+bJgxm/fBHXMql2R4JhuMOs9yMgCVlXfnaSDP7Q4lQxp2XHs1x+F8VDvcL5D6YI45WaW/kDZZqKLSxTdiDx95stxk2YLk/zujbkD9ev1KOQ8wqwBgAxiTnHZqsSal 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)(13023025)(13015025)(13024025)(8121501046)(5005006)(10201501046)(3002001)(6055026); SRVR:BY2PR0301MB1622; BCL:0; PCL:0; RULEID:(400006); SRVR:BY2PR0301MB1622; X-Forefront-PRVS: 0114FF88F6 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR0301MB1622; 23:SwhYYoeLO8qYXoSQZXEyj78JIldEwt/vAvkipVG?= =?us-ascii?Q?JAAnzhRBIqNnnPxcntBsTvyB2WdQuLJT6X+ZL9qBMMyDUD4G2O3AdZYxn1u8?= =?us-ascii?Q?upxpTmZsGTs7R/B/TAh1tTkDqUIa+NpL7GrOENLpcBOa6P4a61qaXQdTjg82?= =?us-ascii?Q?ZARrxTLyootncJK+TJ0JcVXyH5UqYiKQ803/0+eoG89vNix4o5K8+YcGiuyx?= =?us-ascii?Q?T/tZIQGMNRf9UR6mPypnGiQlDR29GIAyr1tGV87+y1Punin80EK9rewKwjcu?= =?us-ascii?Q?dwQzQYOSi5dP9Noed0vsi0rna7v7LIQD3/qC2pE6X16gDC8wr/5/v4p/khJs?= =?us-ascii?Q?+yibzReJF5eS/wTFWMDIJOA8+OU5BYpEBMn+tbIWphD7ggil8HwYm427RH9W?= =?us-ascii?Q?XWTgtYwAg+9g08BJPlPUiVvqodzMo45KgpBqpK4Q+DbFzZvTtbeh0MI5Qcq0?= =?us-ascii?Q?04z9yMgyySomXWwOCK9oH7/prDIxjSc2w/enlwcJ5eA6xMAW3d+iC+dcheyr?= =?us-ascii?Q?khj6OOFUA4ExkGQWio3vgaxyHL1upOCZ7gjuJQKyutHAqKolYF7czY4K5zmF?= =?us-ascii?Q?nuVON3tdHUurVTxxMut7DLDfyGVRRETg3/A2PA8y/tUn+ruJky0G09Y7bBv4?= =?us-ascii?Q?eXEl+rV8mLYkfqEIptKimlWCexaIP8vb0GKcLV8tv+ZZiavd0/SxvJFkeH0P?= =?us-ascii?Q?XZbxUEVM58dUpccIyU5wMG1485R47pemRChbUaep+VV+1i+eMhDrCNcNJWc2?= =?us-ascii?Q?m91HBf6gu+ywRRpFbqnmKl446Kk8nAlA4yeyBxh+25NLRo8rxmX/RS77oAMQ?= =?us-ascii?Q?XTf0ZrqHmVkzkHFk3uiijdpBIDxInqdN68dFZ3whNgftNLQzlfUuCaLYnY4w?= =?us-ascii?Q?xBHwPhD5C6a+IIYs2fRxjcJzMzeJWnTlUtb58y/m+0CCi7Q6eUM2Ys1lD0z9?= =?us-ascii?Q?ymQ0W75F0TehN6OcmoI0Bcoba67tCf5urseNl9BJNALASMQSlyQvNY8gIshb?= =?us-ascii?Q?4KqfB5E1hpXSiJjVoyND2tvK2E7BfFztI/oug2AkUqexS2N5x6uGa/0w34DZ?= =?us-ascii?Q?8+ZHP68Vhw1TE+lgdapmtrJqVliv0k7DtcArKOeauxB/k+g+itF2tZrOABPV?= =?us-ascii?Q?lT71R4mlwaJnNuhddUH88H9ieJDtPxTrLJi+V/yN+q2+spJPcbfWe0qf3RWu?= =?us-ascii?Q?e6Q4IOkmqQm+nPVbg7+bEjAtv84lJre6Aun6IMmAv6yW6PKRAD3iJaXpueIU?= =?us-ascii?Q?7walQMdDuTQoAfu75Zv4=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB1622; 6:iqpWMMA2Cj1KZDWHkXm4UYj65Slmi7rWjObmGVZ/PuXLC3V4BOotvVl167u2rBAl1IuRfsHA473n2NQK83MO6gYMZjwbBd2o4n8gENNJgMdsMlyc65N3v+YV+VxQUC4lHuEPdJ5AaD8TvXZ9Xb3Yjt/+58CDg3SfrUtd92TQznr2s9+p9VXPHLwRRyaueA+4AQ3rJg8GHnd9LLgDSktjb6NX/3nWyfEBOnEPoBBVOmAmZeolaDsTbBmsb0Or4tMKmfhL78tPr9Z/l7N57LjEjIeHLJ1tTosljd2KapJyhfpDSmFoeps1UEyu0LRTkaB6; 5:Fl78fsipr9fNR3aUw4TNw/Bs8NF2lH27cRNw4chCQbhfg1zXjRguobM1f8DlCmVv5oqwM7PPCBMcvLUGVyMWu2RA6GEYqh13BdyNPZ9FUpPshhod6h2hpWDyYGLNItiVsbL9A98L6aD7n69cyxt1UMy/LpHbjSF7vTl4+h7/OY/ZNJGISyYC4+KHM8p/SWjH; 24:mdWLrqtv3TGg3V2fy1SuI6WjOLmyu6iwYKtWS3BJCz4H/U5kDDXPuEMnCFjh83UsPNiHnvBmZZ4WwhwbAhTWM7e6roAJXBJKr98rSuuEC0o= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB1622; 7:bludRbbjsFLSOI5ehMV4pnLRcKtjpO9PH0nRzdAQKqw7XDQI9tkNWIdcDxXE9+hWZHXD0vbuBk4c5dfyUs5Z9liuaAJOn+WjM00hS4CvoFwJ4rm3ETWRPcd20n1troqH96mQo+5iA8nX+2TFHco4crLlBsKbHu04a4JOWFIvWzK3ZeThRz21h0o6W4RAmTI/M8XKChtqkNdiW5ARaYUHBL0XrziVA/D+LPQmfZJJVGTbjgmzbUXLPiKb4SEGK6YxWH5enlM3UfMFpYTNFagLYt1RNmI0WnQ61ssW+Zk40TxuN/SZSYXWSe6KRPcDQwNckRizDmJAQ9/vZCfU7TQb10dKtHMSKwcwOEOCSax4ZFw= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Nov 2016 20:17:43.3523 (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: BY2PR0301MB1622 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, joakim.tjernlund@transmode.se, 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..043ffce 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