From: Mike Snitzer Date: Mon, 27 Mar 2023 17:59:25 +0000 (-0400) Subject: dm: add dm_num_hash_locks() X-Git-Tag: v6.6.17~5021^2~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0bac3f2f28b87b520e50a196c42409485acfe5cf;p=platform%2Fkernel%2Flinux-rpi.git dm: add dm_num_hash_locks() Simple helper to use when DM core code needs to appropriately size, based on num_online_cpus(), its data structures that split locks. dm_num_hash_locks() rounds up num_online_cpus() to next power of 2 but caps return at DM_HASH_LOCKS_MAX (64). This heuristic may evolve as warranted, but as-is it will serve as a more informed basis for sizing the sharded lock structs in dm-bufio's dm_buffer_cache (buffer_trees) and dm-bio-prison-v1's dm_bio_prison (prison_regions). Signed-off-by: Mike Snitzer --- diff --git a/drivers/md/dm.h b/drivers/md/dm.h index 22eaed1..a1a5def 100644 --- a/drivers/md/dm.h +++ b/drivers/md/dm.h @@ -20,6 +20,7 @@ #include #include #include +#include #include "dm-stats.h" @@ -228,4 +229,13 @@ void dm_free_md_mempools(struct dm_md_mempools *pools); */ unsigned int dm_get_reserved_bio_based_ios(void); +#define DM_HASH_LOCKS_MAX 64 + +static inline unsigned int dm_num_hash_locks(void) +{ + unsigned int num_locks = roundup_pow_of_two(num_online_cpus()); + + return min_t(unsigned int, num_locks, DM_HASH_LOCKS_MAX); +} + #endif