summaryrefslogtreecommitdiff
path: root/drivers/base/regmap
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2023-07-20 06:28:48 +0300
committerMark Brown <broonie@kernel.org>2023-07-20 15:57:05 +0300
commitee43f5bb23340c27603c3ad8ef94f677ad7cb9ad (patch)
tree445bbd316488f03d4937d93c03be7d8e07cff927 /drivers/base/regmap
parent99aae70551f99536936438bbcfc562df69eeb79c (diff)
downloadlinux-ee43f5bb23340c27603c3ad8ef94f677ad7cb9ad.tar.xz
regmap: Reject fast_io regmap configurations with RBTREE and MAPLE caches
REGCACHE_RBTREE and REGCACHE_MAPLE dynamically allocate memory for regmap operations. This is incompatible with spinlock based locking which is used for fast_io operations. Reject affected configurations. Signed-off-by: Guenter Roeck <linux@roeck-us.net> Link: https://lore.kernel.org/r/20230720032848.1306349-2-linux@roeck-us.net Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/base/regmap')
-rw-r--r--drivers/base/regmap/regmap.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index 8b37451fa931..6c637b18d6b0 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -723,6 +723,15 @@ struct regmap *__regmap_init(struct device *dev,
} else {
if ((bus && bus->fast_io) ||
config->fast_io) {
+ /*
+ * fast_io is incompatible with REGCACHE_RBTREE and REGCACHE_MAPLE
+ * since both need to dynamically allocate memory.
+ */
+ if (config->cache_type == REGCACHE_RBTREE ||
+ config->cache_type == REGCACHE_MAPLE) {
+ ret = -EINVAL;
+ goto err_name;
+ }
if (config->use_raw_spinlock) {
raw_spin_lock_init(&map->raw_spinlock);
map->lock = regmap_lock_raw_spinlock;