From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932227AbbI2CPp (ORCPT ); Mon, 28 Sep 2015 22:15:45 -0400 Received: from mail-by2on0141.outbound.protection.outlook.com ([207.46.100.141]:31588 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932172AbbI2CPl (ORCPT ); Mon, 28 Sep 2015 22:15:41 -0400 Authentication-Results: spf=fail (sender IP is 192.88.168.50) 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; From: Zhao Qiang To: CC: , , , , , , , Zhao Qiang Subject: [PATCH v11 2/6] genalloc:support allocating specific region Date: Tue, 29 Sep 2015 10:09:17 +0800 Message-ID: <1443492561-11538-2-git-send-email-qiang.zhao@freescale.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1443492561-11538-1-git-send-email-qiang.zhao@freescale.com> References: <1443492561-11538-1-git-send-email-qiang.zhao@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD006;1:TyJ0QiCHOM1c2W3ZtwIBVfTE73FQ7dKQTUR8ZqEKPtBy7rMyIiZ0nEHmoV3nqHMENyfywOUUQRj1fWVhBeJldwLbSppDIN3ar2WsCYlQeZmjezASBCGMFJuTIIl+W+GsyyikvKwgZx0nT8SIk/mjKcJ+4X3GpCY9MAm9k1Bz+UHaW8tPi0K3d6XIEk/rvjZ49d/O6lH0K5KuqSEpuGLSioDfAiyOkHqId0Ph7Q5HAubro+mxpO8eekCTMAAG9nNyCdooYPBKp+noCAq5ncYfErdv0ETpzHaykHFDG5O9BNelXq+GKPK9C6ECKcI7ITiuoe4UJ8zA6la6ILmibVEPMJvyQYUgkEWIWUWJnUrV+OXDJGuNkdEhgTkNqKE6Hzfex1gHhl/Sz4MxJXiXw2gtMQ== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(2950100001)(92566002)(64706001)(19580405001)(48376002)(19580395003)(6806005)(229853001)(33646002)(47776003)(4001450100002)(97736004)(105606002)(2351001)(106466001)(104016004)(77096005)(86362001)(2371004)(62966003)(77156002)(68736005)(87936001)(50226001)(76176999)(46102003)(50986999)(85426001)(50466002)(5001920100001)(5001960100002)(81156007)(11100500001)(189998001)(5001860100001)(110136002)(36756003)(107886002)(5001830100001)(5007970100001)(5003940100001)(4001540100001)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:DM2PR0301MB0736;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0736;2:PZaZE4yztVEYDz4PBSolR7QR0schB2hGSbImTVtXzkUo0CtPcWBBv5DD5AlNWsn+m2nuBwnn8szu+4iS42k+uFjPR94lgT4jRZUpyNFvQjxqi76zkPpZvjKIbaNllgF1MXu+w4WR6mdtIH+7uXHIz7DKUGBQDqe2P2zoKchH+X0=;3:KiUwup3xSMhTTkaWkhQcQUtxZWKYGHcY/lLOl4hC/mXS/+9Vqe5CCGrJcCPfiZdmAPSNbffnCE7zM/U9ji0TI2sHKfOLToiEUgFc0g7l6y1wNSP7uYlcp40p9eGmU9L8Ya8P+qDk1yqtH8H9vQOGI4irahrVVGG3vLPd+QNi2mRZUrzLAru6v+nXP//1dLjh/kJFEp/SJN6pndZR4Vh0t2GNm1VRoRmZNZzknGgf+b8=;25:+E92wDFdxg943zpJ2gmr+LLyWqsBsxIJ95Hlh/MCyxGuEJErhEVeYxNVNG0/OhBXAsPwZ4MPB5ObVasJmKLrpg2DpfFvkUl0C+k5aYDDSD+5L+/SdEQABqUarr8Yz5JMoO9zt0+hA5QxAPyUI73J4MsCAstBKSBauZEnwCyk8WwkLzOTJtesacfW55lNcij+0TYHcQES0Gqjk7IhKajHpbUh2XYc5Sb6ZDamvMZ1A7rbZKgj42H8WtsxW6LnJN/5 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB0736; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0736;20:1ZrXbXAR7Ag7nBl7mFtI4UEUb2slFqMg14ztyjtRoRfdgSq21rVj2j4KNoKtWjEJJL5LsBYCsP7GTbYzKlN+uzN0Tlh4zdvDM/ooIA3I8QctmKJ4GDo+7clK7XIiwKflTAZf/PpjDTu7pP+oENQLEcVpECyKWP260RayK2d8oQAPhh/GKNRcvdCPf7kUS+Nkl8970OES3xogkEPlz0ElanQKmYnMl1QHZRzxIUYkUGHGu/6Oq5fMcGAOvmfw3vXsE3zQ27hWlu1Cp1SaDTM2k7jh1fjYmciwslLYV35+0uw/WOyfCCLpKMEEad36CuTlyZ5fghozjMUFHD2F+LBabqIOVvidZ6xkNu/ScPHF30I=;4:2nlZIgWfV8VnzVYiRUmzLwCTh5bUjKDyGugynA0YBvPCB5SRBqAXGLmMinzxCwmFu2cwt/t8Bm21Ou1ONK9pBLkbWzvOOL3rco02ZAoz/tlUzgM1lW655QxDb6IwBp24nH6RN38d58YpXMA+ui3K+xbux9WmL/g2JLKAULqmgiX5BeDdhYSfw0fSHSuC6w8r3oM+/OnT3TaAq/Nu7EkMXnxqqamGPiPrUquc/pAhx5vL8+/mGKFh/Dz52gsBTbz3mkrPGBqfjK7AYCL/ghuFdJjOJczgY3ZWj/7NEQM/agE+JAWTRLRCVMk+0iaCiZuVGOP3l8hB13yj8oKc7aE42/NSPQcrVtbNh1XWpiS/1Mo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(3002001);SRVR:DM2PR0301MB0736;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB0736; X-Forefront-PRVS: 0714841678 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR0301MB0736;23:B/KEVcikApGB5MT/XVyX2nX8ZrxwIG4SEDoJlBA?= =?us-ascii?Q?X3o6fewz0p3nWLPhvzCdNr6tPxHsGNjp4cZetRp27+PVS84MQjqDgQ9WIK02?= =?us-ascii?Q?/RPUpHMZq4NguX2dNRrGsWdNH1wW5qTZsMl4oOiEulCpuNYS/HBxAxbUkyuI?= =?us-ascii?Q?jdpppDU/Xgz9GDGKnvH6b2n6EXFUTrFadIB5Tf8RijfhEF71hMP9SMUnrryF?= =?us-ascii?Q?HD3DSm94mRsGDzG5hUrTNcxTUs7XwBteC8FYTY6S7iFdzyZHOxdC9E7H3Vi0?= =?us-ascii?Q?GWxbuRVYsMVJ78acwSDyjCR8BDIZODwUQ+5F7GXXT7mDq4JetQHWYoqF2/I1?= =?us-ascii?Q?tjO2fEkyVFPPsoj+qbv3irGJJs38OeE6FqyV352n68Uo3/fhMmvGQ3ne475+?= =?us-ascii?Q?7z/++L7ZH+BOGR1cl4wJZ6QjAs1i6Q36ll3s/soleAHdmnDqjKSUB4xZ2WrZ?= =?us-ascii?Q?khDUUFUtBe4QrW/ZsJ8RcmibFU44Zs5nO7L5X1rHSDVS0NhfCxn1ocbjYEuN?= =?us-ascii?Q?SOzUAzlf56c9WXtTVBGj+pjrDvU+jnLm7Bea8NJwNRe+5yhuJS2Mt6mzZRw5?= =?us-ascii?Q?l5jrfD6Mv+leWC90dAweszGPj5H3eO5m1TvzenJRFrIkY5Y2ebNHb1rPFa0s?= =?us-ascii?Q?7mpK4HpLBkBEbrw0geIvYM7tqiN/88XPGsWyZCzp5bWqFNzebr/uUGAQh/eq?= =?us-ascii?Q?82f78GKlMNzKyaLabAFoU67sPddfbvh7687tYlGNunhvZ7J+zC/444zOZ3le?= =?us-ascii?Q?Z08i4TPoFDfpWTku01DVnN/tOSG+psuT0u5gbCtcpvBaofvBqjS9Z8kQzL42?= =?us-ascii?Q?MLCSPWiHV5F7OtUxnqHYRSaAjqlkq84UYsGNFlj2NlppV5QPumCWgnY9ASAf?= =?us-ascii?Q?JBGDKWIuAXS4c9kuFgTekijlaYx2EuyOYsT/5wnWj4YkNDMTJukOW288kAu7?= =?us-ascii?Q?PBmCNcobQBszah0p+V7cUoj4MCMBzJQ99QMfqqIlz4tmFnoSZeYuF8UC41bK?= =?us-ascii?Q?0xs+M2Mus13df70GPvN8rpC+KqdHYKAvEygCfsqAnpRcP9Xk5+QLnFVwqSjk?= =?us-ascii?Q?mXuyDKqzievh8wJzaoEJhJj3cYmTT+Q6cou++ncEx2uGm+bKe6K96WzQa9/k?= =?us-ascii?Q?gFTHYUX866ZX2EMJT35lGArsDpEXB/NhmNrjxDZ+TsYoIaFD1CVTr/IRhV6o?= =?us-ascii?Q?OMCjtI01okROfmgM/G6CvpJp8iMbfeqlbKSnjIHUvhRPfCpU3miM4HS1iBBN?= =?us-ascii?Q?TUMALvYUDPXO49PpGvVicb7K99gk9OWgXMwYZfGOoXgnm3RxAE3hzbYeVVn8?= =?us-ascii?Q?0osk3KthwxfaKTac9ippAtPGsvAJZyhZJGSdHdrM+M9HA?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0736;5:bNk9NOEaGi/fZF+h61iPEwELi4bhj2n17TRDsM6agYtFD54Oq+vhrdyoFACYq1gtmfzYzUW1p2/BRLMneBr78zl46s4z/hRjesMmzxzdrj+oAB6+WozzDF//T7ZGX5B442TjsB1hk45B3HuTupYz6Q==;24:5Drfgyvo57D8fIl8MeCcgBiiFceCXd9QohFisFpx5f/KP8KaEnXdAoQvQVi89VNPIh4ZdfJbrfYURz44tw2KsmGN0KspwvA2Jy2KbXY9FjE=;20:eo6Z3Ob1shIjbMpqt0jUFfqPhuPQ7tjm7Q9TL92pCIYth1t17+4b/3DrF6OLfbQIrLagfCk2/5zHjFoNKILpdw== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2015 02:15:39.2019 (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.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0301MB0736 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Changes for v10: - rename gen_pool_fixed_fit to gen_pool_fixed_alloc Changes for v11: - rename gen_pool_fixed_fit to gen_pool_fixed_alloc 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..56d5d96 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_alloc. + */ +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_alloc(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..1e6fde8 100644 --- a/lib/genalloc.c +++ b/lib/genalloc.c @@ -554,6 +554,36 @@ unsigned long gen_pool_first_fit_align(unsigned long *map, unsigned long size, EXPORT_SYMBOL(gen_pool_first_fit_align); /** + * gen_pool_fixed_alloc - 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_alloc(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_alloc); + +/** * 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. -- 2.1.0.27.g96db324