Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752513AbbK3C4q (ORCPT ); Sun, 29 Nov 2015 21:56:46 -0500 Received: from mail-by2on0148.outbound.protection.outlook.com ([207.46.100.148]:47616 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751675AbbK3C4n (ORCPT ); Sun, 29 Nov 2015 21:56:43 -0500 Authentication-Results: spf=permerror (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; From: Zhao Qiang To: CC: , , , , , , , Zhao Qiang Subject: [PATCH v13 2/6] genalloc:support allocating specific region Date: Mon, 30 Nov 2015 10:48:53 +0800 Message-ID: <1448851737-33125-2-git-send-email-qiang.zhao@freescale.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1448851737-33125-1-git-send-email-qiang.zhao@freescale.com> References: <1448851737-33125-1-git-send-email-qiang.zhao@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD039;1:zC2VOwmSFHKL8ORLFbITAS4ZvFKmV6PnlNVzjnoac+Id9JFvyH1BKQk1ZUR4gWqlMkWWjYGAk5Dra/0iJXFWgS37NDXgRwuv3TMtr8DIH+ST1hTsAnleSifGEdD+pGM6GdFuY4ymC21fSg7IhPG4JSHtYqv8wmWauymVHVVNaVvNg+b8Z3zdO4p1XusE7BZC3MvlDoopcAJdr6Z57sDym56/B8H9rrDqjmK7RTSqiugHJpaJqKXAlR7qEO7lfW9gD6hARlqlseWzHozJEBVVTLRS6W3ETfHazniDojWDsNOsQHw1fqsyhv1zO/ndQ/QdHoHcDLbIdqgmrtelYAT9JPGx3o+vpJZhO6dMEOUovpRjtU2B7WFldOrKeH2p4//XYCgHbxc1iigtwFmziLsMyNx1otmbEI03/yiSAvaDmHlGfJZalw1tbMj2/+40RFa0 X-Forefront-Antispam-Report: CIP:192.88.158.2;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(448002)(199003)(189002)(2351001)(47776003)(586003)(229853001)(50986999)(48376002)(106466001)(76176999)(189998001)(5003940100001)(87936001)(1096002)(86362001)(97736004)(5001960100002)(107886002)(92566002)(5008740100001)(19580405001)(33646002)(6806005)(36756003)(50226001)(110136002)(4001430100002)(1220700001)(19580395003)(11100500001)(77096005)(69596002)(50466002)(85326001)(2950100001)(104016004)(81156007);DIR:OUT;SFP:1102;SCL:1;SRVR:BLUPR0301MB1538;H:az84smr01.freescale.net;FPR:;SPF:PermError;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1538;2:BU007heJjvFP19SYlN7Vw/u5Rv1RZWhHChAss+prLxovAJ3oOYRwtpy+9C7lfGb71WdY2sE6osQ/UaTveDC8zH/iRcnrb4PIUwhh7wy8pttVlBQCEz49uh8JxkvFvpOckw8mogVPE4SWEjdY8eS1Gw==;3:dCqkl0tpUMOn/SgydF6kDUlOf1m+Fp/2Lix8n5ABJGc9pYz/PiQZBPN4fZtPpNL2OoOiuWAtzwVGCodvXOj5cFaYwgbhTWRftrtpZq3mEFsgSvUrRM8YQH4P91HY5JtoovmA1T0hGfKEvlHkR+4epBH61ztHKNI3CwljaIJP+LIBGSNy0XAPN96pGkCyVP9lt0f0oCZya3C1N9V2CwA8RKOlEyHZwOcYzmJFoA4PPGM=;25:RXpEfPnRET6gvQWcvQvAggSn8ty9adFazFLVqlLAIoVxJVkxTFTXvezjbjv7k6iRxPB/U92YzddNbxB5rprRwQh11E0Qx/HuQqsMPmoMLg8MJLgSJBHjOWBmQXOaiaJZjz5PGF401tEq77nUBF2UF1GK8DWG9C82cZMXz31S8qQuSUv1GBwZH7sI/08ii0twaiLK+1+3vtTDTv5S83F4vgBn7JBn4tzalSf124FidlkbFOxntQLfsQPp3jMubXZh5ZrDZ7VS85w3/rNtcryeYw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB1538; X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1538;20:pOjPoEOqHjrl0M7n3q9BKSyit4Z3CrmD8aypysEIyvSb7Fn8hKkS//dSSTaFTfB1kM4aWitYHheXM/RwodXr6P5m1OkGwH1tRllOqPDow6htu6H8ENh1Ni8bEsv8NpRScnAV8og4M9RdqFuW/NWRF0vyGbI8wH+3LRQDlETqviouD+GrfWZYcWiq5FTX0ALTFZDd8EJXzcromNcyjynfPkrc8xYbWE1EsmYcacwKmlvXSK3TWkRDypABlGYW+LzkQCVKGrHaMntlwG4eiaH33kLCAZYi4dEla9e9QriR+YqtLdgJKW3Kz3eC3xLyZ5wVsfWwnefCZF6qfPa/Mv0SKMH6ADGidEIJNTML0uCL9Hk=;4:OV53dMeYMZEjug6CYhyzXuG6jz+oH0mkGop9wbLjfTXTG8MboL02sE18bZP9IjisBEs6DP8E3IneeYSU05h0nEZTVqX9m85886lRZVRskMOQw8JEf/ouFX/J89DM3tIaADZ69bLMhRwHysFWZcTrlMg7/qZRrkKHsiGnSPIdeRAFYX2xGcg6eGlVdz/Zl+QL2atBISQ8rjV53QUu6+FMmAMTPX5o1CpKfP0Es12bWN/MGoqAhRY94Na7ExVZuZc2trQFmz/JUYZIEGX9uvQZB5I3PSyekQFV/GXB8PudqkNR1VRZbjRpfy7Em4LtwCTX0fHMPfbDInBafcP6gFLmL80GUe3CB+DSbxYCXubiZ+IG8SfFnDGdXT4MYhfliGT5azwtMU2R5ktBr2YbOutTWfcbNyssKcmBiFfyHTVHwgQOehF9x6sCDhIcvNVzhHDr X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(10201501046)(3002001);SRVR:BLUPR0301MB1538;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB1538; X-Forefront-PRVS: 0776C39A48 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR0301MB1538;23:/6bwsu2tnCkyrCb/9ztGjCw8lduEzWeDWeyn9B0?= =?us-ascii?Q?NmmG9n0RQMM+nhHLp0lKbQfzzfigCr5jw0k3WMAkXTEMoFExjweKMJbAjwnB?= =?us-ascii?Q?uyFqI5msN+JWXV8dif2hP1IRRAJJbXBL6HItZ94gEU65Lzpy7pR/D6HE+Y2q?= =?us-ascii?Q?VsoCChobnfh2xyLaR0PuBq+AciTG0+ytpPNIFDxuxGoEaZum0sOMOB53IIqs?= =?us-ascii?Q?CKb7KMBem0rmV3b+zFzZMEBDmXHlzwKL/2uKd5ClYBn/nCMNtQXrOVefmP9Y?= =?us-ascii?Q?m71iBh3WvYBI85dxPDIXBlPk11yLDwSkp5LCxVybvCi8xp4RlIKoUdyiC+Ug?= =?us-ascii?Q?E1ofr0A6rrJTZzi3wrIGFjueTDmQGKMsQ1zuEzoQx8LCtNlzujIwaGQzKiPl?= =?us-ascii?Q?16M/4HUw6Uj76bJoP+N4+CWQyLpFU18CTDnrKMkxwegJuNVMU/KjPtySsOaw?= =?us-ascii?Q?nZ6wKcgpuTtZDI1VteNqqzWx1BqRQjl43iUvMBvok1o3ggrTyUqZ3nzWMBW0?= =?us-ascii?Q?FMWYdqs2+Q8zvu716jeRsIyWZbGUTRCBMUNDZzIVyN1YBoiQbaOgdy1V65mY?= =?us-ascii?Q?un3VyOLXEzRiAuagSpm/4SE4GCc38D9JBhZzuvs20H1Eu+2Ye3gYhWhhxFzx?= =?us-ascii?Q?RmOgmjuxJp1NKvBhJ84Ey7e372BC1cFAfWLaAEezXwb4TR/Nnn9ftJDeOADE?= =?us-ascii?Q?XQ3H3tFIqwXBbojwjP+wnr9suxRAFtSzPEJXjp3zKYWdo7QMOXNTpliH+DhD?= =?us-ascii?Q?XqCfRVSjQe6jXu6GBwf2Q6EitwzQ0khDkQi2S5JMEbjU9YtKbuullzNFlNhq?= =?us-ascii?Q?LRggYHRwvcyEyxaftyrmZFtIJgAnkweBzcvJrW6MjN6I9y6zkTPx2i+XI5vQ?= =?us-ascii?Q?/Ccvx7w/3vP1K3KoP2Fodjm4OWTSrVK/eFEL1TS0nY5XKwOqxQX+JpMiiKo7?= =?us-ascii?Q?0QPPpf946Q10cOwzFR229Qalun8M5Zqw98X4QksWTsyAfh7IpstiTxjaIHMg?= =?us-ascii?Q?8orvmYzC6lmb/ETA8rsaoPJ41Qdm0qbCKQBP5N+i1vLls5+LdATtYvRsqD0J?= =?us-ascii?Q?6gM/zlcbElT6EjxkqXPZD0QTN14gF?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1538;5:sE8h7auQCCsUAQUUZAoXmPQ+JtSL/A0pArHj0Bnz+h1X/a0i8xGYE7FZKNovw8/bbMBy99sU4/g9C8hoErpn4DUtjje3rIEjiK5WAQ7Amv83FowcFUApUvfYkqM9OuESXpZ25QE6dCRMpAi/vzbZAQ==;24:nC34xSA8DCZrN8PcmN+z5LP0vSrJh+5lznoI6vK6GLxqaGKiuBqdYZh5LThGzzO2xk6eHSlLIrx6CVRCKEyT5X2cO4pMvBaLO6QA4wblbhc= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2015 02:56:40.6942 (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: BLUPR0301MB1538 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3430 Lines: 102 Add new algo for genalloc, it reserve a specific region of memory 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 Changes for v12: - Nil Changes for v13: - modify commit message - add WARN_ON. include/linux/genalloc.h | 11 +++++++++++ lib/genalloc.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h index 3c676ce..29d4385 100644 --- a/include/linux/genalloc.h +++ b/include/linux/genalloc.h @@ -84,6 +84,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, @@ -124,6 +131,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 b8cf89d..5ec83cd 100644 --- a/lib/genalloc.c +++ b/lib/genalloc.c @@ -556,6 +556,38 @@ 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 + * @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; + if (WARN_ON(fixed_data->offset & (1UL << order - 1))) + return size; + + 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 -- 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/