From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751809AbbIQUZT (ORCPT ); Thu, 17 Sep 2015 16:25:19 -0400 Received: from mail-bn1on0119.outbound.protection.outlook.com ([157.56.110.119]:32000 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751604AbbIQUZR (ORCPT ); Thu, 17 Sep 2015 16:25:17 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=scottwood@freescale.com; Message-ID: <1442521509.19102.72.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:25:09 -0500 In-Reply-To: <1442521184.19102.69.camel@freescale.com> References: <1442194700-6194-1-git-send-email-qiang.zhao@freescale.com> <1442194700-6194-2-git-send-email-qiang.zhao@freescale.com> <1442521184.19102.69.camel@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: BLUPR14CA0074.namprd14.prod.outlook.com (25.163.209.170) To BLUPR03MB1476.namprd03.prod.outlook.com (25.163.81.18) X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB1476;2:XiMkiM6VejAzexHq7VzEM8v4Z4Bk9KVoFw+5hvgN/geJJObquJtBgBGAnX4qUtPc6s9UUKeIUJRvO5yoXRum7lbClidajtKJYK9tqx737h7eZmflz98XcvKNCubKWqdbORyuTvpvPectV1GD5TdfbqoxqNr4crgj6889UKYogSg=;3:YQl1txVNXWzWYaTMr9ZxNO4rVe9wDVc9BpEamxClUOgTHlhf27vvuiOsAzz/tETs4N4cF8Utlch19OEP0CwvdWiXjtXhqErfQ34yxIMUfpFts6J5aV0B5AMxdyT64BNUgErQRo3uctMaUW9nqlbCQw==;25:5uHu4SdiBG8GlxXO9cUSLgrx0p/gFB4AmAtzMzywZEuV0pM+x9yP898DzLbpAkQYzBYl1TijmJ14xjLvG+5tSOzb5iuSWsJD4lZRD3+3Imv0bLVHSQuRFvbKy3a+FBkIOhxUHGdES859a3PDAHp5osfYyqbHroglJsNzxFgoyRY0ajNmwsaIvBH1BYUjf/fEClxr2fBaLI9g4po0v5ZU8tOf6c8RRT/GQ3HzqgpNSaaoYr4ulTupVMc9nngB71PKVJMtpqNp3TgCdcB4FzbC4g== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB1476; X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB1476;20:n2xo/LdxordT5/NRp64UvBxTMUDkrgsJRGs1njg0VSK3p2+menshwf7K7b+mPXbR77j7IfDUS4h4e8rcAs7O5s6WCybzvPQBIH/ksGhiq54jrc/iJbxuSdXwEpe0FGeijBopGDl2G347gzppeIkehvjPdXKfVpGEgP1zURnZ8c16SEnPknw4zSgS5ASxa417zgiDdqOnAHBP/9Mif+IskoGoMs4qup1hsZMWOMfNGEW86ojZSBy19woQoKrv/U0WCJEjn+zUh5PbBBTwdCCCSuhJWuEOS5BrgjNMbMM1l8XBEP5qzJ3m/wX1w+pJ2v/VWauNfJadW/u8VqKLZzPiEx80TW4vHpRIBNcmZ6L3IN4mzuNlaZpGfezoztGrPRZHoGXVb4WRFJcQUBCESJ+Qks9J9cjplPx/t7WgY+Suvy34Vgqu4WzLGfO2UC1KhIXa2pRGRLvHbYX8jjlB4voUX0erBPn8bAsf7o49CwZg6vrFfsHZywTWGP5hJe5+cdFg;4:e+FyEzbIn+LR0Xk5c/CmcDLTA6zYT66frm4QEVheqYbkaobTv/b/P/T1HafFqAQ2QvL+y3D2/ZhbAi+o/mDn6moSsaXvK11yyKnSTn+b/9s/PmA/31rmphf/5i9ZmueLhXrr0wATwwTC/yjyIfRuH0UNInQJdS/AEnQ2UZRL/DT62cRSVs9H6SBzm28T+yHUr6666NsizeJkAQ2jalfNV33XOmd64+lYx2L0S7Ec851O1d4eDYD1sK+2fmZcJPoy5GvTp23pspF92FK6oP70x7wT00lLzunf41FCRY1cCpZ0NULUBniHldXdBuLeTxkbgjnu5hJdZI9Me9KfFel4FA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(8121501046)(520078)(5005006)(3002001);SRVR:BLUPR03MB1476;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB1476; X-Forefront-PRVS: 07025866F6 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(377424004)(189002)(24454002)(199003)(86362001)(50466002)(19580405001)(50226001)(92566002)(5007970100001)(23676002)(5004730100002)(77156002)(4001450100002)(77096005)(62966003)(5820100001)(68736005)(2950100001)(189998001)(4001540100001)(81156007)(50986999)(42186005)(5001830100001)(87976001)(19580395003)(97736004)(47776003)(40100003)(110136002)(5001960100002)(64706001)(122386002)(103116003)(105586002)(101416001)(33646002)(76176999)(106356001)(46102003)(36756003)(5001860100001)(99106002)(3826002)(5001840100002);DIR:OUT;SFP:1102;SCL:1;SRVR:BLUPR03MB1476;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?MTtCTFVQUjAzTUIxNDc2OzIzOlNwd3lVWUhQeC9pYlhsRnJhbGVQYkdhcGRq?= =?utf-8?B?Y2ZUcVgvVGcrMTVKZ3JDd3lMZmZ0ZktyUGVYMEtsc3NCckM1ZzJBc295NHdW?= =?utf-8?B?WUlPa3lmWFprVGttdWRFQVJRTEZ0RjdmOHZqYVYvVGIvM1Ntak9NbUFzWmxJ?= =?utf-8?B?bHFVT04xQjNwU3FiSHU3VWkwWTlnLytuSlFsQnNBTVkzOEhVTnVzMzFHb09O?= =?utf-8?B?b3VoTnQxN0pZaS92K3dHWXF6V010bmFMMlpQRWh0RlJlT21UV2RrMzRPYU90?= =?utf-8?B?SkRITmdWNmpBdzFtaDkvWWl2SlNMVjFrUkVQUmp4SVFUc1NZQ3R5MTI5KzRV?= =?utf-8?B?M0hKK0RyZU53d3N4NWRza0h2K3paOUZDbkY2bXYvZm1IRTRWSmNSVitMWUZD?= =?utf-8?B?ZzFYY1hHaDJOWS8xbncvZkNwNG9jUkNEVjliZkZudER3M0M4NThlU3R3bUIy?= =?utf-8?B?VThUZ1gyMmRObjM2M1pCWTc0a3pWQUg4Zk1oWDlDYzY3NmxlUDBtWDNFODdx?= =?utf-8?B?a1FZNlpZVmVRWHBKQm5lQjNSZkdCU1JFMUMreWNUejFXWnM0VkM4YzJHbDFO?= =?utf-8?B?QzNvME5qd3YxTldtaWMyM0ptRExrVWkxUEdoT3RkM2tMbGlMaVZmaDZLSEhG?= =?utf-8?B?dmYvUnJ6NXhPS3BRdS9vajFCVlNyNW1xcnd5VjFUNGRtK3B1U3h5Y1NFQWFa?= =?utf-8?B?MjJQQTYvVHFnZ0I1V2xPQlRvWXZzeDdSdlNvNEJidGJZYTFqa1hhcXFWaWM2?= =?utf-8?B?eEpxb0pLZVhqbFovY21NMUNJSWJzOEwvakJIbHpvSnViRDh1c2FYOU5BUW4x?= =?utf-8?B?U1ZXazVvQWdHT045dzlxKzBLdlpjMk42WUlmd3RFTzhOZEZSVGMzb2tSTUVH?= =?utf-8?B?NTR3aTR3clhhYy81MUlvV1JRWlFMejNuRG9UTjFMWE0yeEF1Z3VHSkZuRW04?= =?utf-8?B?UWM5ZUR3U3E3aXRmL242Z05uY3FSVkFSK2tRT1FiNHFPSnlsUFBDWHJueWhi?= =?utf-8?B?eUR6MmRRSnV0c1VwdzB1K3FFaEpKRFlsUklTdGRCMTh1bGordmFBUWZycU52?= =?utf-8?B?RU1tMkZHTlFoVWF4SWpHdHhxMnBPZWNmaXVYWDkvc042bDRMN01qcjdWOXVS?= =?utf-8?B?UzJpQ2FFaXlPN3VyVThPRnFiTGxwNlduT21zWVlyU3c1bEw3YThvOUU3QjEz?= =?utf-8?B?M0JDbkhKRWlJR1U5aGd3RVpZYzRvL25PMnFyb3BPMVJuUVl5UDVTcGlSU2Jz?= =?utf-8?B?ZTFISTRnU2Ztd2RCbzQ5bUx2ZnFFUHFUL0xjSDBlQm1tWHVmaW5Hd045b1ZW?= =?utf-8?B?T0dEMVBNd0xNQk5HWmpRYThGNiszRmwzbnJabUdncnB1SjRtZmx0a2c5cXNS?= =?utf-8?B?Mktnb004SDVrcFg3QktwdWU1d2JHcVFzbEZLb3d3YXJnREh3aVdRUUdYNDJJ?= =?utf-8?B?Q1FobFM0dU5HZUNoSEhkbDhEVkYrZlpZMFpqdW8rbDJVZkF3QmdRbGV6eXlU?= =?utf-8?B?TUdqZmhwSklMVi9HWnBCNExxWUpDWE5rNitER0J4a2hRYzV0aWF4dDh4ZkVP?= =?utf-8?B?eitKdXFWYkZtVmtqSWZVSE5qMGViRFo1eXZLcU1qZndjbmdsUExwUGg5alBW?= =?utf-8?B?UktkSEVWeEFveDEvOGp2cWt1S0lUSWxPa3FnbFJzd29UQzhBaEVBK2M5SnY3?= =?utf-8?Q?OnPO1J9mrmiO7r7jOYCcputntfGeWNoeHUp83HU?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB1476;5:7BVRdiiSC256dwFmfVr3QLZWJHbsanRt6MqhSrHVOC7QI+2cck6zMh45y5L/1b7AM7FR8hfsC0vYj/Bgsk2nk65lSA9E6tld/9SgXA6bZzKi4fcvQHysQ892iLFsTWoyylNf+FIyYLwjFmWkJ7sZhg==;24:xWPZTq2zIsFfhdUnm9veyBBa54Yc8TYwP0zteb+Gcw4mFeJRBFzAxwQc1vijnQCYQxETeN8wQpW2n12ppCCvbzU/xDYzUsoiFCS20zF1eAw=;20:lCvhSakHJFzeUlhvsXB/OsaeI9c0akqxSVu/p+2Tzv1FAeSg1JErGv0YSzfeYa22qn1nLoLQenc40ZlNAOqvEQ== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Sep 2015 20:25:13.6999 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB1476 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 2015-09-17 at 15:19 -0500, Scott Wood wrote: > 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(). Never mind, that doesn't fit with how the algorithm is used by the caller, and unlike genalloc isn't atomic. -Scott