Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755703AbbHCXSt (ORCPT ); Mon, 3 Aug 2015 19:18:49 -0400 Received: from mail-bn1bon0112.outbound.protection.outlook.com ([157.56.111.112]:29376 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755539AbbHCXSr (ORCPT ); Mon, 3 Aug 2015 19:18:47 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=scottwood@freescale.com; Message-ID: <1438643915.2097.71.camel@freescale.com> Subject: Re: [RFC v3] genalloc:support memory-allocation with bytes-alignment to genalloc From: Scott Wood To: Zhao Qiang CC: , , , , , , Date: Mon, 3 Aug 2015 18:18:35 -0500 In-Reply-To: <1438590921-49116-1-git-send-email-qiang.zhao@freescale.com> References: <1438590921-49116-1-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:12bf:48ff:fe84:c9a0] X-ClientProxiedBy: BY2PR07CA069.namprd07.prod.outlook.com (10.141.251.44) To BN3PR03MB1480.namprd03.prod.outlook.com (25.163.35.143) X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB1480;2:G6cXSR7aG5+O/VIY3ST5xQb8CFPugTqaqYdEW2i3GtHgRJ8k9DqDFIQkbdmEc+4fOxizNUDTkItQUoaPSYMeag61uU/2L1uCp1JFS4cxRZPFqAQOEu3Bzc3QJvzXGpM0vZRLFtLjppmUehJbaO3lucU/U8Tcjqjhyo7ve/RErj0=;3:HsaHefjcELZ1uCZgT+AWxx+xHUg75N5sfJxP04K3VYspzQffhpklz0JeityanjGWuUQr6WlzQzq5N/Ou+42jkj+5FSoKGb29FudNrsl/o4xpWUfpAuFFs7d/3/4ZyeZRJaChn7OyygrBdTLBDZEJgA==;25:7l1Yb1T2j2DtQSWgYcqAMwX/lDUu+9n2/Mbzzhh+nfeGk8U/QvgTR9oor/IX2f7hGHiC+wOfMSLFqarPV88+fnp8byr+fxO9Eh8qHe5YECGutB9T10lHYxPz1sgyptyztySKhmor3H3NFhjLgfjOnRy0WlUV2bHxUmOu0sfn662ylg37NgfgYgD9fxxfwcafEIiZ4DLsL7xxFPaBWO696XcECivJudehK851qXl8XbjDRtpG04rVqrPAG3q5Cc60aGN+nIv2L6+gCL5Qr22JJQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN3PR03MB1480; X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB1480;20:2TYT8UbxHpHG6zZi4bzw0GlAMKaJnVDae68GHudp+KFFF3WFJ5R2f6HtTYQW+Gm5WFT/8+F7ZTsHddaM1R1eJnuA8YxrS8m0rNPs6tzWjpip9mhJ0TgV4K+yBDNRDiIg1T3uShYv/tSeAaYSyuiE7RGJUEAplv9+oSBLz+hWE5J0l+GlSVsGoHhI2hNYzut0PeCEzbwz3RblGuQJ80jpqgYd8Ktv/5B73GJGwMI6U0b+lJnZfZuhIXWknOoYyDijq9FG7CNqMOyHrUWmVAnLMW3SlreCkBWcOUrP7PPv3gwgniNF0dkW8WKsUMkIhwRyWc1QKo7FioXrf0a+R2XFgUVhatwYyqX5a76IYiRx+hVUBcpU1e7nJSV5rCcYokkoV68cwUEyL6ULdaUbcfJDmO2MwXz37ZfExLLmOzGwyGCiz4FbYKdvfFj/SmRfgmHzo1euOdcVIHtKG1/lcu2IrbSWuuroKcEEAx08wrURj0nANvJa4/DE1tSnfvfvjUw6;4:Kp3rMIpFMwQJjQY44qxZjANcGoces7QYmyUVo6DR9ipIz/Zg3QQgt4u1MF62sSo3UUZMUoxxgpPvCX4GmjN3eXB3ElawMVlfKCjJWRwjIKa5p+POzLIh1I7PNIzEYCGnCGohiDlM4/9vMdlVt81oJf6g6ELAs3Z1cejGSB01cLd7xPrYjrYRdJH/oRXTVYtVJYv+D67EL0v2C3eyo83cltvD4cl0Wg7zi4gz0bw2e4G8cqTFn5363Iy0yz849nrJ0iU1WGE156ras+MPyiTpUu7VJY+1TwplntMre9v0iPQ= BN3PR03MB1480: X-MS-Exchange-Organization-RulesExecuted X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(3002001);SRVR:BN3PR03MB1480;BCL:0;PCL:0;RULEID:;SRVR:BN3PR03MB1480; X-Forefront-PRVS: 0657D528EC X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(24454002)(377424004)(189002)(199003)(122386002)(68736005)(2950100001)(5001830100001)(86362001)(23676002)(62966003)(107886002)(77156002)(77096005)(50226001)(36756003)(5820100001)(97736004)(110136002)(101416001)(92566002)(4001540100001)(81156007)(40100003)(5001860100001)(189998001)(76176999)(575784001)(46102003)(105586002)(50986999)(106356001)(5001960100002)(103116003)(47776003)(4001450100002)(50466002)(33646002)(87976001)(64706001)(42186005)(99106002)(3826002)(4001430100001)(5001840100002);DIR:OUT;SFP:1102;SCL:1;SRVR:BN3PR03MB1480;H:[IPv6:2601:448:8100:f9f:12bf:48ff:fe84:c9a0];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCTjNQUjAzTUIxNDgwOzIzOmI3cWxsVmI2RkN5ZDhoU3VCcDhnazV3d1lV?= =?utf-8?B?NlU2aFNnMFpkTHRqSlRRRytmMnBJdGNzQkdYektUVitCSEZYdk52bXRPL1Za?= =?utf-8?B?WnVOS3VLeWRZWkMzc0w5Rm5GaS9uOU9ITHlTYnQ0NlFDc0Zla2k2dTBGTHFr?= =?utf-8?B?bTBnTklLeW5hY3Qzdy9vWGhXSEM2VVFYdkJaM0c0S1hFYWNmTnJFVHFjTDNC?= =?utf-8?B?S2tUcitCQWFvMjhLKzR0cktxeDlob2JZR1VnSkRwNzYzUnQzYkNRS0Rha0hI?= =?utf-8?B?WWlqV0VkdEFoakw3a1RsOFpZODFZYlNhTE1uZzlYNHFEM2FnOXFYVkpicWhy?= =?utf-8?B?akd2VUNMWE9PUUlaUmJlNFlHWi82aTZSYUlPcGVlYThRcUVranZOMVlPeGlS?= =?utf-8?B?NXVpMWxsMiszK296eUQ5YmZXYlMzM1ZCMU1pVW9xVDJPNFhRM3JIU2JMWk5Y?= =?utf-8?B?bmFEV2pnbUJVblgyRFZFbUJ4bHFSVDdKQitkb052ZXM4dllpTUdScHhLamxS?= =?utf-8?B?bCtzSkdkREliSk5MMUM4aU5UaURiNFF0QmdiVDhwSm1GeUpmZjBEeUtoMU93?= =?utf-8?B?SWJranAycUhwYVdzTVRjOWhoc2VWMkZuZnJLcExKdmNLbUFEZEpVZFVXREFM?= =?utf-8?B?R0RqUWJkQmJONVhFd3VKZW1DcGpjbWxJQUwrcTcrVzFiemZYYkVQZ1NlTmlq?= =?utf-8?B?RjNtdWo3cTMvZmpKNkVPTzdVWkI2dmFCMWdCaFl1Zk9PakM1bUhybmxobmJh?= =?utf-8?B?all2MGVMeW05c1UrT0ZqSmxwMjBFeGlTVmpGallCZjd0SGdQdk9TQ1dBVk5H?= =?utf-8?B?QXREWGNwZnRSVml0eEVKVGVYQjZ0dDVTVm5VbXlvU0J5QTFvKzJSMWswWWUv?= =?utf-8?B?Q2IzYjNzUjI5RXpBcE14Rmx4STI3VmN5MkU5NFJpTmpVaDZVK0JvcXpEbFZS?= =?utf-8?B?eFNqT3NKcFFrazZKczliZnNlcEtONTdVTC9SZ3haRXJJVW9Ob1E4bFUwRWp5?= =?utf-8?B?ZWM2TGVobzIvcC91aEpIbFVwQklKQ0hyWVBodGhCdE1sZFdoWkVkWmtsU1JX?= =?utf-8?B?U2IvOGhRblIwNHZuUFhuOXVnNjJOSFlMSnVnYXVSK25iKzVzRHpGMTY2VGth?= =?utf-8?B?YzZZMlNaVkNoeXE5cDlDb09jb3I5ZkxvcEt5ZEluRFRNVHFXZDUvWDhnTnJB?= =?utf-8?B?Sm1xY2RqMVVMR3BaVXc2MEczakxNdUtYWm0wejRZbkhFcG1YNkVMYXJNNHFZ?= =?utf-8?B?a1FBcUMrRERydlQrVVNQNWphUmdCVnVDMzdoRnIzRmVCSzhuS1NtV2VEelh4?= =?utf-8?B?M0JjMjV5Y0VXYXJOMGRYNFJaRHZuc2tPNGNoYklFRnNQbWtHNG5EQ3BKY1Vq?= =?utf-8?B?aUR1SXU2RkxEaVFMT2IweUlwakRpc1JjTEpvampMYzNycEExSTE1RnEzZ2xa?= =?utf-8?B?RE1tZG44djBmVHFZR2xTcXdhV3c4TTJRR2RMTHkxVTJyWDFKcmxOZ0ZXM2tw?= =?utf-8?B?ZlVCUGprS2ZOY0pRbXhQejEwYXlLQis0L0M1YlFTZ1BlaElGSm5zNUFLdElr?= =?utf-8?B?aHp4N2pZaG1rK3JVTEJtSE5SKytqL0FhQ1ZSQ1BUaTZBYWkyNHo3eHI3enlw?= =?utf-8?B?OEZmWGhJMVNiSW5Pc2RGSTZhUVBiemI3TEY3T21jb1VLTDRtUUQwRFR3PT0=?= X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB1480;5:/+uVxb4pNpQntTgCLrXth8AvzgU61Da92wX+CffZPFOJeXsIoZR5LYXy3T7EW2/KRJcg5byd1F8X5PEiXGUvCKcuDHp5dLJ2VVS43NZuvLUI2dkE6J8MiK4Zcq4NyEfwKL4eiNNS9YM5JY3Irwyrkw==;24:QgTLj6ZW+d0IPDWKTAEngtbPrAcvjJUS3dc6ylpvubLQ06cO+Hnb4czKu0b1qTW/EhzWccwXiSvzgo0HWpQnY8NBq6dQII/EruEiGlUni5w=;20:OnKFJZcCQPNFbsXgkuiZGmAT3hQbSaVFdilNfgpyDKbCSNN0bTbB3+Bmx9jzgU2UvkmfdHskI7Bmqw1NgfTCsg== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Aug 2015 23:18:44.1039 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR03MB1480 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2857 Lines: 92 On Mon, 2015-08-03 at 16:35 +0800, Zhao Qiang wrote: > > @@ -73,6 +74,13 @@ struct gen_pool_chunk { > unsigned long bits[0]; /* bitmap for allocating memory chunk */ > }; > > +/* > + * General purpose special memory pool data descriptor. > + */ It's not "general purpose". It's for gen_pool_first_fit_align (and could be reused by any future algorithms that need alignment but nothing else). > +struct data_align { > + int align; /* alignment by bytes for starting address */ > +}; struct genpool_data_align > diff --git a/lib/genalloc.c b/lib/genalloc.c > index d214866..e0b737c 100644 > --- a/lib/genalloc.c > +++ b/lib/genalloc.c > @@ -269,6 +269,24 @@ EXPORT_SYMBOL(gen_pool_destroy); > */ > unsigned long gen_pool_alloc(struct gen_pool *pool, size_t size) > { > + return gen_pool_alloc_data(pool, size, NULL); > +} > +EXPORT_SYMBOL(gen_pool_alloc); This should pass in pool->data, not NULL. > + > +/** > + * gen_pool_alloc_data - allocate special memory from the pool > + * @pool: pool to allocate from > + * @size: number of bytes to allocate from the pool > + * @data: data passed to algorithm > + * > + * Allocate the requested number of bytes from the specified pool. > + * Uses the pool allocation function (with first-fit algorithm by default). > + * Can not be used in NMI handler on architectures without > + * NMI-safe cmpxchg implementation. > + */ > +unsigned long gen_pool_alloc_data(struct gen_pool *pool, size_t size, > + void *data) > +{ > struct gen_pool_chunk *chunk; > unsigned long addr = 0; > int order = pool->min_alloc_order; > @@ -290,7 +308,7 @@ unsigned long gen_pool_alloc(struct gen_pool *pool, > size_t size) > end_bit = chunk_size(chunk) >> order; > retry: > start_bit = pool->algo(chunk->bits, end_bit, start_bit, nbits, > - pool->data); > + pool->data, pool); This should pass in data, not pool->data. Currently you don't use the data argument at all. > +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) > +{ > + struct data_align *alignment; > + unsigned long align_mask; > + int order; > + > + if (data == NULL) > + return -EINVAL; Unnecessary check. If this happens it will happen quickly on the developer's machine, so let it oops and be obvious. > + > + alignment = (struct data_align *)data; Unnecessary cast. -Scott -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/