From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751900AbdJYPdG (ORCPT ); Wed, 25 Oct 2017 11:33:06 -0400 Received: from mail-cys01nam02on0119.outbound.protection.outlook.com ([104.47.37.119]:50941 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751705AbdJYPdE (ORCPT ); Wed, 25 Oct 2017 11:33:04 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=sbates@raithlin.com; From: sbates@raithlin.com To: corbet@lwn.net, sbates@raithlin.com, mathieu.desnoyers@efficios.com, danielmentz@google.com, akpm@linux-foundation.org, will.deacon@arm.com, linux-kernel@vger.kernel.org, logang@deltatee.com Subject: [PATCH] genalloc: Make the avail variable an atomic64_t Date: Wed, 25 Oct 2017 09:32:54 -0600 Message-Id: <1508945574-25984-1-git-send-email-sbates@raithlin.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [162.246.158.188] X-ClientProxiedBy: BN6PR1801CA0002.namprd18.prod.outlook.com (2603:10b6:405:5f::15) To YQXPR0101MB2038.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c00:1b::11) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c6b4112c-1e72-443c-5ae2-08d51bbdae44 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4603075)(4627075)(201702281549075)(2017052603199);SRVR:YQXPR0101MB2038; X-Microsoft-Exchange-Diagnostics: 1;YQXPR0101MB2038;3:Q0g76E9m+ZQ1NkO341XesXYScTiSvxx9Bj/ilmB16vr3fuRFBpaGWm+rsEVPCbi5MBJc704vBlklcHzTudh/AxC+367ByhQliRQjWf+oPU24XdBL5zIGtf/t3AhwaPnT2HwGSU0gLaQnoaOWTf1k3r1g4uRYMqhQMUQXxTziU8LoWxQ1jtA8kwVD2Xgoj4Qwzs7mf5mDqwDLNAIJFP7WHRPS+afAPCUHcwrP5MOHLhtl2uRPcbCD62Nb68ySmO26;25:lVpIK1g4kQYCQppTLOYAYxYFhZdLyLg4m42n/MbLrVBEmWCYnoTRUFb5e4V4pXuSlz7YZhWPcfl/xcOGcQWZ4nDGQuB2qo5tF2PhHVTEXGorNpZoBCra9SLHNgeIzQ7k7YQjlETfB6tlmMWToM5IkrHvrIAfDDmoaF17IQD22qYezhrcoCQeXnx5Mh3A07udBrAs5lknBM8ZRR/vUylUaWT2jNJ5HHPVS+Id1b8h5YjWU5+aev1zLSA5obCWQxWnJnngxAPC6DsTHw2eE66C+b1d/UKXtjmj5B+gJPqt1fR9WTbrBuvSddIIDvpugRjIyRpOpDw5OzEz9q8bFJtnag==;31:xVn7qbixG8r7OL9IS8uu0NgYrsUZdOvD6F/E21qpkq8zG7xSqqNK0174nYV2vb3CESJ4N1LmyFlo1EdfiJkx75m9lke8HHXQueCXb5S9A5hQoH3T1ftuH68HKsp3yvlboWGt1J8B7SVVYecExHNt5/0BSehlaU/UG8cjeE8pPVmq/tdFwSFomkAb1kq6mfQ2g8Df+ktxl2j17YCaupgAavA8BFZHwwUI7h8m51O8jIo= X-MS-TrafficTypeDiagnostic: YQXPR0101MB2038: X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3231020)(3002001)(6041248)(20161123562025)(20161123564025)(20161123555025)(20161123560025)(20161123558100)(2016111802025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6043046)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:YQXPR0101MB2038;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:YQXPR0101MB2038; X-Microsoft-Exchange-Diagnostics: 1;YQXPR0101MB2038;4:8ctmEJnJPK69l/nHJiL+1dERqZSohRMXK/gWUzhLgI4Q1UTPqJ05mDAzaoi7C3dwIcRFi8LPpXXrG8FJeNqJcy4FH5mkbxBJodg+288V4SA2B0IBBs5MXq4M8znCRWmRXjk1ktFsj9KIA4+u/aM+fIaormfyfelRVX/RzAipe8cmaw+TIn+CZMvStCPcSPugrKDHmcsrNQNfwt5HKRssyq2sHRzaABjwqjA86W5qfvyu2xPJixOu/qqZX61ygleDd2CnZE2yfaxuKau6P571SA== X-Forefront-PRVS: 0471B73328 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(6069001)(376002)(39830400002)(346002)(189002)(199003)(81166006)(8936002)(81156014)(50226002)(8676002)(25786009)(478600001)(7736002)(305945005)(106356001)(105586002)(6666003)(101416001)(5003940100001)(6512007)(9686003)(33646002)(53936002)(50986999)(3846002)(6116002)(6486002)(2906002)(86362001)(68736007)(50466002)(48376002)(97736004)(189998001)(316002)(5660300001)(47776003)(36756003)(85782001)(16526018)(66066001)(16586007)(85772001);DIR:OUT;SFP:1102;SCL:1;SRVR:YQXPR0101MB2038;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;YQXPR0101MB2038;23:wFYIwj+gNJ4wDyz1r4FWtaHF9sKAEkn+mSGBnAd?= =?us-ascii?Q?NJjsjqA8G8mcKyCvH/OoYqMK42Ublf1/elmPnxuxW60+AcIq0xkKehPE4/mT?= =?us-ascii?Q?rX27787O6mq8LqjFAVFIKfWbZARVxhfrh19CG9Vx1l+C47ciFG7Un0zv1TrM?= =?us-ascii?Q?98M38zWXdGN2ycbywB8NjKulIBigC40uMnCKKeuKH3RAN5NzQrDnY93DF11P?= =?us-ascii?Q?EwkX2nMq2gD+35KOVMvq19HkP2Lj+11vw1LMyZPaFa+I0sqSYPjUYSr3Wn58?= =?us-ascii?Q?7s48I7qA4E6fnBuxaJB7OGgOuCT8tlrIFfvmCFhN1arjWrkbdUxf+7v5ptNX?= =?us-ascii?Q?yAMkgka8yY5D0OKLk7jx1PPGzFv2ltRXQ3+g2evz0G/EN9ZhF8gHq8Z7/s2a?= =?us-ascii?Q?1MBKZsj58tfdMHIagGYfiAeiOCr+tCjaF+Kx40emCpH66zRAWF0QF2H6GCz4?= =?us-ascii?Q?fqRZncCCH/tmFkR0LvEBs2FjBiu7c49Kw+IZtXMWueHg+iaKIcsDdarp698M?= =?us-ascii?Q?bEA4eZB3BjxYEpbrBx/8hEvWQbgoCD5t9wUk2wl35BNZfufR06fXTiLuN++z?= =?us-ascii?Q?scUF+IHNOpSahjSnPCfTq3sosx3HAhA1G7+8ZrCDfBLy8WMjCWpMs3zDbCYg?= =?us-ascii?Q?Y4XFpNF3Dt9fvtqjBZ8g0UlDAIpbSlXuZk7XWL0/bEE5Fmlec9EDUTl6JRbA?= =?us-ascii?Q?Na1KJPyvRojHAJdr20jrjYcHMC5MiLzwKiQDjFVqOnwPuo2kq3uSTdR3ZAap?= =?us-ascii?Q?vP3Qb/FEswj2zbtyWnDlycrmuyrQU+kxHmVLkNc9l8pugbq3hrSa2wgfwcCo?= =?us-ascii?Q?1y98/cEIG5U/KMXOEdOIQAwLNFSvgQmnQ96hv8fgJaa8l9DnwRvAsrVdTMAu?= =?us-ascii?Q?xnvyp2tC9mOs81JoT6Dj7Pk5Xe2QsdocCqsXlpDO0V/gSlzIXNkCSRJmX3do?= =?us-ascii?Q?oGkL49TMwhW+LcDN5h4ENRNapQAT6F7UUwGqFAcyKmX9kwPWid6zEMo0TwID?= =?us-ascii?Q?G1Mm8P1JJWngTt/Rlr/1Z8HlbbVsEvlcmKhkjKG9wkBschA3fZhwRE9+qKnE?= =?us-ascii?Q?QQYGW8fd2P4YwK645kI844fVg1KiI?= X-Microsoft-Exchange-Diagnostics: 1;YQXPR0101MB2038;6:0Ww2olRx/iHbZ2wXXjqRsuKV2ayyCP9nVg5TlYI+VSS0f4cKVsz0qXa9VbK0TIM6EPzw53cRxiRy8ysv/0s0Sf0UslfKMc7l/ysV1ofYyhGIRrZQ4wAEDP8i8Oklb7S8rqWhmNvjEEUIQuApM4qYCqAAw4/oO7vjfD0ywJZc19B2ZQtfYSK44jrIGeL6iGsbgduIylzEv4vr82gLmPVLqJeKmDm09CnJlr28vc3+Nq5PO9xOKPu916mO9+Cp+JWwkdoxqIqnaYo4pDVosp8b9rggBjV77saQwDr5nXIlppb4lZLPmXtlM/RXcIF/B/fy7eCSN6h/sPG7gpmDYX7N/5rb/zqTrAwQBRO5knVblRo=;5:96+Y9MhbR0Cm7o1a24pfibR8K4iRkVt0D9kWxfGv9CA52BMfAfRQV+p6mS3zaN8iTKeje00+HjQgc0s4iFGyj/1cZtKSgARpsuNka6AxxKGv2Dv4GfJOsRhmansD132L44M08+f/UtyJABCmq3GIEWd2bhilbOu9SYNEdBb/GgM=;24:DeStWK5CUcVWWGlLgzOyBet/h0FjubCirNthAWd9NpHpNKB9QqdqipiaJIwJ/IXruwhmhY04Wv/Fqm/sJso3KGLWhJCiLRSLSPj4RvBJBuY=;7:hYIbSEJd4FRa2zYjMKZrif5g/QjaOCPVHpIK+UZUi4ulbWQVDAuBn9ccUze5HdnQEgBYP49NFpMHkVjY8EAoskv13YX+iJmvyBDOX0lxiDqX4meyKkwFkKNH85QtFdiLOR1kXvkV19Whn5e4S4eS52rGrC2HAn+huojFxV63ZUavGAEkLgniC0jFZd4So4mpF+bCZKo183t0C0llcOuo9gsN3pAvZiVZC5t+Yn/00bhUVtAIIO4OhEzprTPyimJh SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: raithlin.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2017 15:33:01.4120 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c6b4112c-1e72-443c-5ae2-08d51bbdae44 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 18519031-7ff4-4cbb-bbcb-c3252d330f4b X-MS-Exchange-Transport-CrossTenantHeadersStamped: YQXPR0101MB2038 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Stephen Bates If the amount of resources allocated to a gen_pool exceeds 2^32 then the avail atomic overflows and this causes problems when clients try and borrow resources from the pool. Add the header to pull in atomic64 operations on platforms that do not support them natively. Signed-off-by: Stephen Bates --- include/linux/genalloc.h | 3 ++- lib/genalloc.c | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h index 6dfec4d..b327c31 100644 --- a/include/linux/genalloc.h +++ b/include/linux/genalloc.h @@ -32,6 +32,7 @@ #include #include +#include struct device; struct device_node; @@ -71,7 +72,7 @@ struct gen_pool { */ struct gen_pool_chunk { struct list_head next_chunk; /* next chunk in pool */ - atomic_t avail; + atomic64_t avail; phys_addr_t phys_addr; /* physical starting address of memory chunk */ unsigned long start_addr; /* start address of memory chunk */ unsigned long end_addr; /* end address of memory chunk (inclusive) */ diff --git a/lib/genalloc.c b/lib/genalloc.c index 144fe6b..a97df2b 100644 --- a/lib/genalloc.c +++ b/lib/genalloc.c @@ -194,7 +194,7 @@ int gen_pool_add_virt(struct gen_pool *pool, unsigned long virt, phys_addr_t phy chunk->phys_addr = phys; chunk->start_addr = virt; chunk->end_addr = virt + size - 1; - atomic_set(&chunk->avail, size); + atomic64_set(&chunk->avail, size); spin_lock(&pool->lock); list_add_rcu(&chunk->next_chunk, &pool->chunks); @@ -304,7 +304,7 @@ unsigned long gen_pool_alloc_algo(struct gen_pool *pool, size_t size, nbits = (size + (1UL << order) - 1) >> order; rcu_read_lock(); list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) { - if (size > atomic_read(&chunk->avail)) + if (size > atomic64_read(&chunk->avail)) continue; start_bit = 0; @@ -324,7 +324,7 @@ unsigned long gen_pool_alloc_algo(struct gen_pool *pool, size_t size, addr = chunk->start_addr + ((unsigned long)start_bit << order); size = nbits << order; - atomic_sub(size, &chunk->avail); + atomic64_sub(size, &chunk->avail); break; } rcu_read_unlock(); @@ -390,7 +390,7 @@ void gen_pool_free(struct gen_pool *pool, unsigned long addr, size_t size) remain = bitmap_clear_ll(chunk->bits, start_bit, nbits); BUG_ON(remain); size = nbits << order; - atomic_add(size, &chunk->avail); + atomic64_add(size, &chunk->avail); rcu_read_unlock(); return; } @@ -464,7 +464,7 @@ size_t gen_pool_avail(struct gen_pool *pool) rcu_read_lock(); list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) - avail += atomic_read(&chunk->avail); + avail += atomic64_read(&chunk->avail); rcu_read_unlock(); return avail; } -- 2.7.4