diff options
author | Guenter Roeck <linux@roeck-us.net> | 2023-07-19 20:28:48 -0700 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2023-07-20 13:57:05 +0100 |
commit | ee43f5bb23340c27603c3ad8ef94f677ad7cb9ad (patch) | |
tree | 445bbd316488f03d4937d93c03be7d8e07cff927 /drivers | |
parent | 99aae70551f99536936438bbcfc562df69eeb79c (diff) | |
download | linux-stable-ee43f5bb23340c27603c3ad8ef94f677ad7cb9ad.tar.gz linux-stable-ee43f5bb23340c27603c3ad8ef94f677ad7cb9ad.tar.bz2 linux-stable-ee43f5bb23340c27603c3ad8ef94f677ad7cb9ad.zip |
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')
-rw-r--r-- | drivers/base/regmap/regmap.c | 9 |
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; |