]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
regcache: use map->alloc_flags also for allocating cache
authorMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 28 Aug 2024 12:28:34 +0000 (14:28 +0200)
committerMark Brown <broonie@kernel.org>
Wed, 28 Aug 2024 12:52:29 +0000 (13:52 +0100)
Commit fd4ebc07b4df ("regmap: Hold the regmap lock when allocating and
freeing the cache") introduced a locking around the allocating and
freeing a regmap cache, so adjust the memory allocation flags to the ones
given in the regmap configuration instead of the hardcoded GFP_KERNEL.

This fixes the "BUG: sleeping function called from invalid context"
introduced by the mentioned commit.

Fixes: fd4ebc07b4df ("regmap: Hold the regmap lock when allocating and freeing the cache")
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Link: https://patch.msgid.link/20240828122834.3778031-1-m.szyprowski@samsung.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/base/regmap/regcache-flat.c
drivers/base/regmap/regcache-maple.c
drivers/base/regmap/regcache-rbtree.c

index 9b17c77dec9d7ebbacd5bde16012d44bbae4c696..f36d3618b67c1a1e190f051a81c1b5ba0bc59073 100644 (file)
@@ -27,7 +27,7 @@ static int regcache_flat_init(struct regmap *map)
                return -EINVAL;
 
        map->cache = kcalloc(regcache_flat_get_index(map, map->max_register)
-                            + 1, sizeof(unsigned int), GFP_KERNEL);
+                            + 1, sizeof(unsigned int), map->alloc_flags);
        if (!map->cache)
                return -ENOMEM;
 
index 2dea9d259c493a48c23128bea9e1c11e4066ea2e..8d27d3653ea3e71e7b134cd3e47be385860e7375 100644 (file)
@@ -348,7 +348,7 @@ static int regcache_maple_init(struct regmap *map)
        int ret;
        int range_start;
 
-       mt = kmalloc(sizeof(*mt), GFP_KERNEL);
+       mt = kmalloc(sizeof(*mt), map->alloc_flags);
        if (!mt)
                return -ENOMEM;
        map->cache = mt;
index 3db88bbcae0fc57adc5023cb3648ee774da64d83..188438186589f686e13593e3e68fa42a27beb0ce 100644 (file)
@@ -187,7 +187,7 @@ static int regcache_rbtree_init(struct regmap *map)
        int i;
        int ret;
 
-       map->cache = kmalloc(sizeof *rbtree_ctx, GFP_KERNEL);
+       map->cache = kmalloc(sizeof *rbtree_ctx, map->alloc_flags);
        if (!map->cache)
                return -ENOMEM;