From patchwork Wed Sep 9 08:30:03 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Qiang X-Patchwork-Id: 515754 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 A6A22140291 for ; Wed, 9 Sep 2015 18:38:48 +1000 (AEST) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 877671A2CE4 for ; Wed, 9 Sep 2015 18:38:48 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from na01-by2-obe.outbound.protection.outlook.com (mail-by2on0135.outbound.protection.outlook.com [207.46.100.135]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id C5C4C1A2AC2 for ; Wed, 9 Sep 2015 18:36:06 +1000 (AEST) Received: from CH1PR03CA003.namprd03.prod.outlook.com (10.255.156.148) by BLUPR0301MB1540.namprd03.prod.outlook.com (10.162.213.158) with Microsoft SMTP Server (TLS) id 15.1.262.15; Wed, 9 Sep 2015 08:35:59 +0000 Received: from BL2FFO11FD039.protection.gbl (10.255.156.132) by CH1PR03CA003.outlook.office365.com (10.255.156.148) with Microsoft SMTP Server (TLS) id 15.1.262.15 via Frontend Transport; Wed, 9 Sep 2015 08:35:59 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; Received-SPF: Fail (protection.outlook.com: domain of freescale.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 BL2FFO11FD039.mail.protection.outlook.com (10.173.161.135) with Microsoft SMTP Server (TLS) id 15.1.262.18 via Frontend Transport; Wed, 9 Sep 2015 08:35:59 +0000 Received: from titan.ap.freescale.net ([10.192.208.233]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id t898Zmcr002376; Wed, 9 Sep 2015 01:35:55 -0700 From: Zhao Qiang To: Subject: [PATCH V8 2/4] genalloc:support memory-allocation from offset Date: Wed, 9 Sep 2015 16:30:03 +0800 Message-ID: <1441787405-19944-2-git-send-email-qiang.zhao@freescale.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1441787405-19944-1-git-send-email-qiang.zhao@freescale.com> References: <1441787405-19944-1-git-send-email-qiang.zhao@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD039; 1:zMTYL9XuBB3/LSuQcqkocof9JEWQZ0QxjHQph3SsBHK/h3bIGNJKaYoDOq+6cfSKjKbNcOfVffNWgV+9v2C2HFr3OVTXWoKSFkkW4rqb7OnFZO2LGZE/Akh5z3gvne32LGZbhvxeMy23GuUbvoNlE+DRjy67YmG5swi2Gj4pq6/A42+6fAApIrY3kjaH1JPKqyBABZQ3O950Na48MLS4E707VIQCtYXdQmnUEEp5R72Gq+6t9BVBWobjs8dij+WJzFsd7tc5ccorePbSKFZmeqOEENCPO1suthmiWGvkWCeSwzyOfMYfyo3ied/uTfY03rEwk1sIeqtC79R8svqIRKosX8uuc08LhWYRmYDxejkZXetjutsgI/ZaAJuTzUiSI4BSk+oIOj/Qr28f4gNU/g== X-Forefront-Antispam-Report: CIP:192.88.158.2; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(229853001)(2371004)(104016003)(87936001)(64706001)(106466001)(47776003)(2351001)(19580395003)(19580405001)(36756003)(92566002)(2950100001)(105606002)(11100500001)(5001960100002)(4001540100001)(6806004)(77156002)(189998001)(5001860100001)(68736005)(46102003)(48376002)(81156007)(77096005)(86362001)(33646002)(5003940100001)(107886002)(110136002)(5007970100001)(69596002)(76176999)(4001450100002)(5001830100001)(50466002)(97736004)(62966003)(85426001)(50226001)(50986999)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BLUPR0301MB1540; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BLUPR0301MB1540; 2:q+duIJVMv8xKBEFcBbowxh1GH0Rm4nFXew0CBqYXib9HV1q++lt1zVIKjr9EZzWQp5Jdf2eqUkRIVckrQDI12WYYMIqZHpDaZNjLtR9x1rSNUYZZOX+cvSR+Gm+Wmy5QNE8mGTjekgTCpzbd7XsOKTmT6wBgctfY2byOrTisn4o=; 3:tLGw9axWWATrxi5xGX3JLjLjotldZvAYb8Oyllxx1L/YB6YKUNvCjaFsrCOQ+XkLei1bioMuhT5QoI/QiEvq69ous7gHKvmSURI/btQr4OmKVs2CLAGNNLv8lNXwnExPUHi++qQ90w9WfNHg0bLrHgNsvZmxM2UL1lUy/tl0x7Yww45bXc0iVYhnHsdJYAF/55PbwUtyeL4fELXAwIujERnxxm0RnX2g1VV6298YsZY=; 25:VsItfX3VejhOzoXx66RpD+RYsKvwzQvTR79c5Dtj3iGsGOmPxCTYwePZYdHTBP59IwM7CUXcfkU9I12Kf2WsZHbqgK4QIBmcH+ElryTOHu//Dd/FQiCNdkm9f/fGsFaiczNYCYGxq0Vs1bkjnp4l1tx1OA1lrZ13vR+mWwDj6TUO1YFsjlp3zHOVphTx1Z9VUVCLv4w634N+8Ikvas08kpW1DNxKj88V+YOmv4PARyL/S6prQ3M2Y/gmHbffvb2m X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB1540; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0301MB1540; 20:sBBxYz7KQmPJhf2HRwLq8w371nUo7swVt8VuNsvOz1k0R5DCu2VfyCLNGryzz0pekGJ6vL+4YtfV0G4YLJDeB9B3ioEFpDkUEHJNkYjMVD8DQxwQPUoX2Qqk0PvfOXAWXGltUid3DYLxwyKFP7gy2tdvBKbRm2125OguvB8Vum2m4Uzuka/BK32dNGW78K/8zDxevP6wUBBUssXSB2xht7CD0PP7J0nhmoZMHdiNP2zXVi7qJmXSa6HR/hL5MlHaAXIVcQTJGzEaVu9PQzBy34pVaDX5O4O5TT+P9W0Q8kMsxEwVmVq4PlzP+qJ6QCqJUzQKuAULyBRYehNv4toejEDcblFO311BURaVVjllnsg=; 4:pXPVOnm5oqREGeH83Cz7ye6lw9S366iH3lFCJbBNoxQRpWb2Uh3jWzeG69YxfGFUE4d6LwpUKLbTb95Q1mM2ew4OJ47Dysvx0XH8/eg0Rwj0ns8gYAHXJzD7X5bYFXGqRpKQh4AJFBi6EK/fPbzyJUEDwwXHOvqQSHgvED+uLfKRmtbBtQoE1SmnSF6jhLrCwOv8yfoXmFuZoH9BLUADPiCRymm/w4SpBjXoG/B5ZOBJnjaIkjoSB1J8Eup4ROVaszGWE1cdN14YhNdTzm5jcJRI4GmuuKo5sIhbYe8+H6kippi6KQCgU3c50z7XR3Yy X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(8121501046)(3002001); SRVR:BLUPR0301MB1540; BCL:0; PCL:0; RULEID:; SRVR:BLUPR0301MB1540; X-Forefront-PRVS: 0694C54398 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0301MB1540; 23:uAbtMQ7lndtceFzHHIjW+9T6rf9NjFsTNqUOyAG?= =?us-ascii?Q?23IEQQ8S6LGIIfW1oG4MLtqiPURsORf5d7Dc/6ZV2ab0doW9sB8D6bEoRt6+?= =?us-ascii?Q?YMNm+vvA567ZYIrJgORh9pwCPa1I4zMJzzFUwkSyNs/x3hEcbz1nAL7VXzE8?= =?us-ascii?Q?NAX6bLX6i+ThBLQYGEbOLiwZSUDipkxHqb72l+0++unVAqBPZ7dM+p3J8nOP?= =?us-ascii?Q?cMWZKaX1svfX2bRSYfWPQ1AzNH1Xv7FyezgDOTJLHmkoxnfOgMhZIDn+4TFf?= =?us-ascii?Q?OtXDDmQ+LDzwDTikhO+cSbM4MJEpMRSQbi9frGekarwCQ5Lrhm2Sf0ZG9uEf?= =?us-ascii?Q?tfcEmnpyhED5mJP+//wTNuWLIWH2XJn0xtJW7mEIN4tqSAcgJLKFeHcJSS2J?= =?us-ascii?Q?3WSWfoabn4uOzBNCISIP5yYLRx+tnBVZQVRcgxaSASkEvNtNaYHkm4gwVKVq?= =?us-ascii?Q?r/btEKhwyz4Xr85TS5Tcxbk062XbXpfAIfwPZohIAGqiR/72aND/M5Z0uLQj?= =?us-ascii?Q?rQkSdMYzZekMfqNOuNc9W4QfHVuUZu3KVXoz26kl7T0YrB4sQW005TXv9wRh?= =?us-ascii?Q?OjFByKJnPT9wUlOa8eGM2KzjMY5rvTa64p7t/Ig8Lx9Uvw4gN/Vso+SGaeTi?= =?us-ascii?Q?iRbpBXgK8lOssgHA+IX/T5FlqeZl0zzMD45WLathzcDr+SNwKnWSV223ZBeG?= =?us-ascii?Q?EWcMYaU13gjeF+2TdNHA32QDdh2vwWN4CXPPhvRMyegv0+XNamX7D3GsRhJv?= =?us-ascii?Q?5IlJuM6XjR/2GL4zKPnYT7Y4+SyJFRs5+ex4U7I22runAuGXHBrZrRM0DazR?= =?us-ascii?Q?7RrYDB4kKDRqgJEAY8ArB3XoVeXYOMoAgmYZNvH1oZLaxBhQVuoJv4pkohMU?= =?us-ascii?Q?n4UivMKZ8l9/ALarVnJzo3kGhv+EXkd7iw38s1u+/8asmqXyWA5eFn1BvCCR?= =?us-ascii?Q?R4DWTFMxK/8FMa2cQ1vBrZcgrM1e5VDx/M+vjLIqVJij/W1PbTGY7mzc7JWD?= =?us-ascii?Q?Fj/b+pipET/N6bs8PyaDKV+tvQRVwGOMxeS816QmmNTYhdFVZkRTcJ4jfHCT?= =?us-ascii?Q?fpQPKj7LqBf56rpM5gj8iOGoHOuMC2rePwNlsSOzX4I4UhGTphxQ0zXrShxL?= =?us-ascii?Q?eUY2YIgeysOG0zQyruQQF/yqr1DBDe5Kbi1Skp7r7gokhzdERkfou7QN6Ool?= =?us-ascii?Q?CqkeoJNK1gNfH7QrrhUrISAUkhmCDM8OB5kMtfAOaje5vTmbyUpUDPregS1j?= =?us-ascii?Q?ih98eZak07/tPnIM0qqJOb73lu1K/8iqHG28emh9sJudIpVXPG6i0TbcKsww?= =?us-ascii?Q?MSg/ACLkj9X5cy0UfsB5HyX5sNkTo5GuOozyVC4+k6Db7?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR0301MB1540; 5:3Cp5mniGKwFbmx3rj+Wv+1Dk1QRkDUCXpqT7+xiUSdWD2+wEn6AA+TyiaLnT2OaPWuEKzNVAdwkE4TjtB6ltP93SkaW0UXGIOhm9huk5wvH5Wjf5C5cq1GL3Os9R+oavUl7SQrLclclN3867vUv9ng==; 24:4yPXc9ahtBf3OUO7zZVBcgdINfsruv+odF+S+K9JrqhGCD761qCBhZmNaaUujYLzf4jUZgwTh2RYbcg+pWAYuF30Bn4orW6hYOgdDPcFspg=; 20:rgX5hHFIy3V1OPTzSOaz6f97dh7VXYWJiNrNe2pT5wp4+yWxRmW4mcW/qtaXADQ4Tq9+uQFGJI3tL7S95borVg== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Sep 2015 08:35:59.0191 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR0301MB1540 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Zhao Qiang , lauraa@codeaurora.org, linux-kernel@vger.kernel.org, paulus@samba.org, linuxppc-dev@lists.ozlabs.org, X.xie@freescale.com Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Add new algo for genalloc, it finds the first available region from a specific offset address of memory matching the size requirement (no alignment constraint) Signed-off-by: Zhao Qiang --- include/linux/genalloc.h | 11 +++++++++++ lib/genalloc.c | 26 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h index aaf3dc2..c384791 100644 --- a/include/linux/genalloc.h +++ b/include/linux/genalloc.h @@ -82,6 +82,13 @@ struct genpool_data_align { int align; /* alignment by bytes for starting address */ }; +/* + * gen_pool data descriptor for gen_pool_first_fit_offset. + */ +struct genpool_data_offset { + unsigned long offset; /* The offset to start searching at */ +}; + extern struct gen_pool *gen_pool_create(int, int); extern phys_addr_t gen_pool_virt_to_phys(struct gen_pool *pool, unsigned long); extern int gen_pool_add_virt(struct gen_pool *, unsigned long, phys_addr_t, @@ -121,6 +128,10 @@ extern unsigned long gen_pool_first_fit(unsigned long *map, unsigned long size, unsigned long start, unsigned int nr, void *data, struct gen_pool *pool); +extern unsigned long gen_pool_first_fit_offset(unsigned long *map, + unsigned long size, unsigned long start, unsigned int nr, + void *data, struct gen_pool *pool); + extern unsigned long gen_pool_first_fit_align(unsigned long *map, unsigned long size, unsigned long start, unsigned int nr, void *data, struct gen_pool *pool); diff --git a/lib/genalloc.c b/lib/genalloc.c index b8762b1..b4f9182 100644 --- a/lib/genalloc.c +++ b/lib/genalloc.c @@ -554,6 +554,32 @@ unsigned long gen_pool_first_fit_align(unsigned long *map, unsigned long size, EXPORT_SYMBOL(gen_pool_first_fit_align); /** + * gen_pool_first_fit_offset - find the first available region + * from a specific offset address of memory matching the size + * requirement (no alignment constraint) + * @map: The address to base the search on + * @size: The bitmap size in bits + * @start: The bitnumber to start searching at + * @nr: The number of zeroed bits we're looking for + * @data: data for alignment + * @pool: pool to get order from + */ +unsigned long gen_pool_first_fit_offset(unsigned long *map, unsigned long size, + unsigned long start, unsigned int nr, void *data, + struct gen_pool *pool) +{ + struct genpool_data_offset *offset_data; + int order; + unsigned long offset_bit; + + offset_data = data; + order = pool->min_alloc_order; + offset_bit = (offset_data->offset + (1UL << order) - 1) >> order; + return bitmap_find_next_zero_area(map, size, start + offset_bit, nr, 0); +} +EXPORT_SYMBOL(gen_pool_first_fit_offset); + +/** * gen_pool_first_fit_order_align - find the first available region * of memory matching the size requirement. The region will be aligned * to the order of the size specified.