lkml.org 
[lkml]   [2011]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/4] regmap: Lock the sync path, ensure we use the lockless _regmap_write()
    Date
    Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
    ---
    drivers/base/regmap/regcache-indexed.c | 4 ++--
    drivers/base/regmap/regcache-lzo.c | 2 +-
    drivers/base/regmap/regcache-rbtree.c | 2 +-
    drivers/base/regmap/regcache.c | 4 +++-
    4 files changed, 7 insertions(+), 5 deletions(-)

    diff --git a/drivers/base/regmap/regcache-indexed.c b/drivers/base/regmap/regcache-indexed.c
    index 268497a..2e10bb1 100644
    --- a/drivers/base/regmap/regcache-indexed.c
    +++ b/drivers/base/regmap/regcache-indexed.c
    @@ -45,8 +45,8 @@ static int regcache_indexed_sync(struct regmap *map)
    int ret;

    for (i = 0; i < map->num_reg_defaults; i++) {
    - ret = regmap_write(map, map->reg_defaults[i].reg,
    - map->reg_defaults[i].def);
    + ret = _regmap_write(map, map->reg_defaults[i].reg,
    + map->reg_defaults[i].def);
    if (ret < 0)
    return ret;
    dev_dbg(map->dev, "Synced register %#x, value %#x\n",
    diff --git a/drivers/base/regmap/regcache-lzo.c b/drivers/base/regmap/regcache-lzo.c
    index 9079cb5..ad6af92 100644
    --- a/drivers/base/regmap/regcache-lzo.c
    +++ b/drivers/base/regmap/regcache-lzo.c
    @@ -339,7 +339,7 @@ static int regcache_lzo_sync(struct regmap *map)
    if (ret)
    return ret;
    map->cache_bypass = 1;
    - ret = regmap_write(map, i, val);
    + ret = _regmap_write(map, i, val);
    map->cache_bypass = 0;
    if (ret)
    return ret;
    diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c
    index de32ced..40f23dd 100644
    --- a/drivers/base/regmap/regcache-rbtree.c
    +++ b/drivers/base/regmap/regcache-rbtree.c
    @@ -327,7 +327,7 @@ static int regcache_rbtree_sync(struct regmap *map)
    if (val == def)
    continue;
    map->cache_bypass = 1;
    - ret = regmap_write(map, regtmp, val);
    + ret = _regmap_write(map, regtmp, val);
    map->cache_bypass = 0;
    if (ret)
    return ret;
    diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
    index 4dfab41..8393c47 100644
    --- a/drivers/base/regmap/regcache.c
    +++ b/drivers/base/regmap/regcache.c
    @@ -230,6 +230,7 @@ int regcache_sync(struct regmap *map)

    BUG_ON(!map->cache_ops);

    + mutex_lock(&map->lock);
    dev_dbg(map->dev, "Syncing %s cache\n",
    map->cache_ops->name);
    name = map->cache_ops->name;
    @@ -242,7 +243,7 @@ int regcache_sync(struct regmap *map)
    if (ret < 0)
    goto out;
    map->cache_bypass = 1;
    - ret = regmap_write(map, i, val);
    + ret = _regmap_write(map, i, val);
    map->cache_bypass = 0;
    if (ret < 0)
    goto out;
    @@ -254,6 +255,7 @@ int regcache_sync(struct regmap *map)
    }
    out:
    trace_regcache_sync(map->dev, name, "stop");
    + mutex_unlock(&map->lock);

    return ret;
    }
    --
    1.7.6.4


    \
     
     \ /
      Last update: 2011-09-29 15:39    [W:6.763 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site