regmap: Reject fast_io regmap configurations with RBTREE and MAPLE caches
authorGuenter Roeck <linux@roeck-us.net>
Thu, 20 Jul 2023 03:28:48 +0000 (20:28 -0700)
committerMark Brown <broonie@kernel.org>
Thu, 20 Jul 2023 12:57:05 +0000 (13:57 +0100)
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>
drivers/base/regmap/regmap.c

index 8b37451..6c637b1 100644 (file)
@@ -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;