From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751821AbbIQUTz (ORCPT ); Thu, 17 Sep 2015 16:19:55 -0400 Received: from mail-bn1on0141.outbound.protection.outlook.com ([157.56.110.141]:14058 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751478AbbIQUTx (ORCPT ); Thu, 17 Sep 2015 16:19:53 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=scottwood@freescale.com; Message-ID: <1442521184.19102.69.camel@freescale.com> Subject: Re: [PATCH v9 2/5] genalloc:support allocating specific region From: Scott Wood To: Zhao Qiang CC: , , , , , , Date: Thu, 17 Sep 2015 15:19:44 -0500 In-Reply-To: <1442194700-6194-2-git-send-email-qiang.zhao@freescale.com> References: <1442194700-6194-1-git-send-email-qiang.zhao@freescale.com> <1442194700-6194-2-git-send-email-qiang.zhao@freescale.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.16.0-fta1 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Originating-IP: [2601:448:8100:f9f:485b:31af:11cc:cd8b] X-ClientProxiedBy: BLUPR14CA0070.namprd14.prod.outlook.com (25.163.209.166) To CY1PR03MB1487.namprd03.prod.outlook.com (25.163.17.17) X-Microsoft-Exchange-Diagnostics: 1;CY1PR03MB1487;2:TJpswEZSNhCv0QcpqO/EXGKVoizhk204OU7IJTcZnzgiLNN/3WNwfsPWY9ccyTxaSORQloFiC0ueKWS3281nWF9f1dglIZ6sU+qqtIEp/T3G9CSmpI6MhST+nbQfR7ZZeIV1RnZQtySddMfsXYsOIy3GrNkAXIdnuN8jftznveE=;3:KnChlVNb3rEpCSNtEzS7Yq7T1qAuAj1wn2coCbCEWHmuhQcEO3sJOrh4p7mufklE9AXwhZD2TfNAn+Z/I/MTO3XHVnd+qB/TPhOOyB++qp+YfO4NB7Mfl/HDEHvOXuVt/VpuXwMgrL7lT4A1BFiCTA==;25:gglHBuhnk9+xmfX6HS58CdJ68kEkPtf7c0+B2Wmgff8vDs+0QiC28JvRM31P+10d7uUmvSKINXC9BXdUF6/Tol/fLDwxUovd5ByGpo0ZjSnfc6zS5wGgodZ4BaY9pbjXyyD0gs/+B9sgKk/boPyGYjMSx/JNSz/6xwIKzzMN93561tyTSqeQNnkHhJybR2Rsgmgz72u6Mi5aCNSAWSS5BdAtEAeTeqmG0atPDe0nfS41O1m3uq9WR3qy4cIAYcx/AQ/SK+xpIn9h7WQIGbadEA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1487; X-Microsoft-Exchange-Diagnostics: 1;CY1PR03MB1487;20:vDN6grBAYBSC0XMCsw7azUxGLC1Kq8X0FAeJwcCejGibtMfikLeUcyrYrs8E8bOHtdqSVmefZIIXCeqJtDtcUdnk+b1rlMwKUwIsbFMft0ryM7OTWBGpun8qTDqzKUM6MUCL7PS2i9JxJAVcCgC/dzfqqDfDAJ7QFF8Aaff5NOnVJUtox7XTjiphbJ9W9I43/DHWrkajaqhVVpy1hvbscW6CVeuQvQQgSzPXeoEzttTnmMqyN7CvlCoaywpS09lH+hG5wwSml0qTB9yW1x15f5Ry38VL1bN1F8iGuFlyE7z3dazM6GVIwiqSltFN5yHVqg+VEwa2+cT+ybL8IrFVCX69z3okm+FYNpl+tELMfbddbEK2HkofDMWos5q4kEx48ikc6RIAkzL4CQ36oB4epq2liQsmS3bEuMxF2Qo0tUU4UCtHPE+24McvrzS71Fx7etNkqy/d7NPSdW/BlapIZhz2dfKjhpY36KMVv3/7G9WnfMKd2f29ThqAf98QzKax;4:DXQ7EzFXMNLy2US1+7+S/ZFDtP5Hf7w6zB22Q2y8yAv3UaWMSBwjWOUcsS7i8d+Nmb7GvChMytVm8rmUPVNWFKIa8fsI280QLnG/Ihrq41xR4kalcQZEFyN83lUSApMQkKdHAZTHa1wK8WTg6rijUsW5QVTuU7noqXLH3f1Tlg3suGkjWNJIondW5TBJPszf5jOouHbVVRkp7fiqUKrQIHVVQis3v+OYvaSpjfg44xRbUgcOMPO8j6Qc0PUW2LiUj7d4lGT4uuznpKDuG9BJvVUNwOQpbrI17a/hKBolaD5OHEoY7QJifrdAXz++1ic/VJc3f1ifBiDVhX3FFIuQjjh4/xzt1IwAe25ENkYzuSMMt+gl3x4PYkHJRftDWSLF X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(8121501046)(520058)(520078)(5005006)(520075)(3002001);SRVR:CY1PR03MB1487;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1487; X-Forefront-PRVS: 07025866F6 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(189002)(24454002)(199003)(377424004)(101416001)(4001540100001)(103116003)(5001860100001)(77156002)(122386002)(110136002)(2950100001)(92566002)(5820100001)(50986999)(189998001)(81156007)(77096005)(87976001)(68736005)(62966003)(36756003)(46102003)(40100003)(76176999)(23676002)(4001450100002)(106356001)(33646002)(86362001)(5007970100001)(5001830100001)(50226001)(42186005)(105586002)(50466002)(19580405001)(5004730100002)(5001960100002)(64706001)(97736004)(19580395003)(47776003)(99106002)(3826002)(5001840100002);DIR:OUT;SFP:1102;SCL:1;SRVR:CY1PR03MB1487;H:[IPv6:2601:448:8100:f9f:485b:31af:11cc:cd8b];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTFQUjAzTUIxNDg3OzIzOmVIcHlhbTZkSHoyeHFSK2p4Sk5NRHZwdGtD?= =?utf-8?B?VGRuMlNKMFZ0S0trdnhQRTR5RlBJT1dsZmVsUHgrYUZoQUdpUHhISkVCS1cr?= =?utf-8?B?Rm5zU2RPV1p0cGlKelZ1K3lxY0tlRUwzUjhyVmFaT0g4U3oxaFdjT0srRFJt?= =?utf-8?B?TXI2azJDMmJQYS9IMTVPNjJLdE5XWG85OXhRZCt2WFZDbVlWdVU2dGt5c2xN?= =?utf-8?B?RVAyZHBjY2xsV1dOTzB0MmVLcWtUMVlnMlNWY2djTEJiamlhSjhlRTdFRGdz?= =?utf-8?B?bytnZmVLaWdFWHMzaGdxN0NBclQyanN2TmxtalpNdE9ienRRSzkzL2IxOEtI?= =?utf-8?B?MnVQcWhlcjA3L2RMaDVwdXo3OG1FMzV0TXBsZVNuRVF4QkVlaksrNW1sMWpJ?= =?utf-8?B?NCtCSmJELzNFb0lTdW5SWTFUTG1OZkFIdzhLdnBwSC9UTHZpSHgvUlZjdFJ6?= =?utf-8?B?cmdzZTI0QWp4eng3alpxYXBJck9EOEE3K2NjWFY0WCtEMmw3S2VnL1ZpeUpH?= =?utf-8?B?Y0Zxa096SC93bjVITGRxK2RGWExCY0hZRFdjMWR0ZlQxQXJqSU9EQ1Vld0ph?= =?utf-8?B?OUxSVFkwWGEzcjVlMkJEeGQ4WjBGYndyNDZmMkdNRXk5OXhnUnpjVGdGV2Ri?= =?utf-8?B?Y3k2d21mOGkzOXRQWStubVF2b1FYN0U1L3pDb0lYcFN2dno2dk5NUEJmVFgw?= =?utf-8?B?bDZUei9zaHk1MUNBb1Q0RkZ4Q2MzTUhJK0w0RXVBbDdudWdDQ3o5RUk1QTVs?= =?utf-8?B?SG1oUlNBbXpDNjJSamJNZURBNmNRblUyN0k2WkdkR082OWY4ZzJuNzFsemVr?= =?utf-8?B?U3U3ZkVXRWlWZ2NKS28vbDBVZWQvc1RuRHE3bnBjWmF0TDJBVDgxRnZKS1lY?= =?utf-8?B?VURQNzhXMG90Q2hLYjBwREZxOGhUTmxjUzRCeE1kajd2U3Frbm5oLzFadG9u?= =?utf-8?B?OC96Vnh3ejZTNW1sRWNYajg3ZW5zNlFUdWZOWlVjOC9HUU9GZnVGRUdnbnNE?= =?utf-8?B?eS9uQU1Ub1hLQkFqWG9malFuZWJkUk5La1dNSjVkamQxY1Z4b0pNaUJzUm1M?= =?utf-8?B?YXVMbExpNktkY21mQWMraDc3VkhkcjN5SjBFS0h1WUpPRTRkUy9TdC8vdHRk?= =?utf-8?B?N1RTWGl5QUlET01sb1NtTVJFeHdIOHlUOFBlU29wdzJCek1qbXBnWEF5Y0xP?= =?utf-8?B?dFN0VC9CM2FjZUprbEd4NVZSOEJEWGpKRjlTNStnNDF1czNDOXROM0xyQmFR?= =?utf-8?B?SmJHbStsTkRHS1R5ZDZKRmEraXBHZ0NaZWkyaitBNDc0NjJzNHNKbGtOMW1n?= =?utf-8?B?MTlSTWdSSm5GVHo0UmNFc1BUMldYd3B1YnJCblVDMDRVeGNpZkVpeHZMM2sv?= =?utf-8?B?bkVsTFRKdVRzSlBqVmVLOWZ2UkE3dU1xekIrNHdid3B0RENSUjF2RkYzN3FC?= =?utf-8?B?RVRKZzM1Q3VJaWJYdGR0aFJ3bDlKZjFTMzNwcmJNOC9YYlVwNTBNenJkWlBa?= =?utf-8?B?K1I1TkxCSWlEcHVNZnRYbmtVVWlTT1lZekwyU2xnbEdqOWdhckZTemxuQVVW?= =?utf-8?B?aC9zMU9ySC9sZDRrdGx5bUErUU1LZW1YcFdlQ3k5Z0pJNVd0LzBiYmdEU0Ev?= =?utf-8?B?VEJtU1FTTEdiY0djeTZpVlA1ZFhESzFRZ1lLdHZNMzF4MDRRMmx1aVF4bCto?= =?utf-8?Q?5ReKztLFMi5peCrACWeFUSz4b+6LBSHS3y9nlWM?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR03MB1487;5:9FBnRU9xHhLDUkydvPBRVfm/E0+wSb5itwHIiOlrXCoV+CtmO+fqqerYS5PNWrxoiW69uZxJjJwEMn06i97UhWE+K13T4i1fjBSqBa9wLJT8Sss7FqN7atWlqn7C/iqDVbEYJmXBwggsQqpz2dRbyw==;24:2pzrPoXDlYMZIWy3Nxqdmt0TcqZebZ4xc7vNwxXIV0/9sWQ7ILZQiOiViuRt0tM+AiqCb/oz7uipendqVhA24VtyBpgDJN57KkurFJbSVYM=;20:8YeGgdbHoUGvnZKnbA/m+/BVJN359CCnCxGm6UFeHpxnJ8Lf6jnDhrRdqGxvHY61QNs+1XONN4VYK2XPnSu05w== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Sep 2015 20:19:50.0700 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR03MB1487 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 2015-09-14 at 09:38 +0800, Zhao Qiang wrote: > Add new algo for genalloc, it reserve a specific region of > memory matching the size requirement (no alignment constraint) > > Signed-off-by: Zhao Qiang > --- > Changes for v9: > - reserve a specific region, if the return region > - is not during the specific region, return fail. > > include/linux/genalloc.h | 11 +++++++++++ > lib/genalloc.c | 30 ++++++++++++++++++++++++++++++ > 2 files changed, 41 insertions(+) > > diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h > index aaf3dc2..85e3b2f 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_fixed_fit. > + */ > +struct genpool_data_fixed { > + unsigned long offset; /* The offset of the specific region */ > +}; > + > 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_fixed_fit(unsigned long *map, > + unsigned long size, unsigned long start, unsigned int nr, > + void *data, struct gen_pool *pool); > + "fixed fit" doesn't make much sense... How about "fixed_alloc"? /** > + * gen_pool_fixed_fit - reserve a specific region of > + * 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_fixed_fit(unsigned long *map, unsigned long size, > + unsigned long start, unsigned int nr, void *data, > + struct gen_pool *pool) > +{ > + struct genpool_data_fixed *fixed_data; > + int order; > + unsigned long offset_bit; > + unsigned long start_bit; > + > + fixed_data = data; > + order = pool->min_alloc_order; > + offset_bit = fixed_data->offset >> order; > + start_bit = bitmap_find_next_zero_area(map, size, > + start + offset_bit, nr, 0); > + if (start_bit != offset_bit) > + start_bit = size; > + return start_bit; > +} > +EXPORT_SYMBOL(gen_pool_fixed_fit); This would be simpler with bitmap_allocate_region(). -Scott