All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
To: Lars-Peter Clausen <lars@metafoo.de>
Cc: linux-kernel@vger.kernel.org,
	Mark Brown <broonie@opensource.wolfsonmicro.com>,
	Liam Girdwood <lrg@ti.com>, Graeme Gregory <gg@slimlogic.co.uk>,
	Samuel Oritz <sameo@linux.intel.com>
Subject: Re: [PATCH 3/8] regmap: Add the rbtree cache support
Date: Mon, 5 Sep 2011 10:58:16 +0100	[thread overview]
Message-ID: <20110905095816.GD30114@opensource.wolfsonmicro.com> (raw)
In-Reply-To: <4E613B22.7000908@metafoo.de>

On Fri, Sep 02, 2011 at 10:22:58PM +0200, Lars-Peter Clausen wrote:
> On 09/02/2011 05:46 PM, Dimitris Papastamos wrote:
> > This patch adds support for the rbtree cache compression type.
> > 
> > Each rbnode manages a variable length block of registers.  There can be no
> > two nodes with overlapping blocks.  Each block has a base register and a
> > currently top register, all the other registers, if any, lie in between these
> > two and in ascending order.
> > 
> > The reasoning behind the construction of this rbtree is simple.  In the
> > snd_soc_rbtree_cache_init() function, we iterate over the register defaults
> > provided by the regcache core.  For each register value that is non-zero we
> > insert it in the rbtree.  In order to determine in which rbnode we need
> > to add the register, we first look if there is another register already
> > added that is adjacent to the one we are about to add.  If that is the case
> > we append it in that rbnode block, otherwise we create a new rbnode
> > with a single register in its block and add it to the tree.
> > 
> > There are various optimizations across the implementation to speed up lookups
> > by caching the most recently used rbnode.
> > 
> > Signed-off-by: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
> > [...]
> > +
> > +static int regcache_rbtree_init(struct regmap *map)
> > +{
> > +	struct regcache_rbtree_ctx *rbtree_ctx;
> > +	int i;
> > +	int ret;
> > +
> > +	map->cache = kmalloc(sizeof *rbtree_ctx, GFP_KERNEL);
> > +	if (!map->cache)
> > +		return -ENOMEM;
> > +
> > +	rbtree_ctx = map->cache;
> > +	rbtree_ctx->root = RB_ROOT;
> > +	rbtree_ctx->cached_rbnode = NULL;
> > +
> > +	if (!map->cache_defaults)
> > +		return 0;
> > +
> > +	for (i = 0; i < map->num_cache_defaults_raw; ++i) {
> > +		ret = regcache_lookup_reg(map, i);
> > +		if (ret < 0)
> > +			continue;
> > +		ret = regcache_rbtree_write(map,
> > +					    map->cache_defaults[ret].reg,
> > +					    map->cache_defaults[ret].def);
> > +		if (ret)
> > +			goto err;
> > +	}
> 
> You can iterate over the caches_defaults elements directly.

Yes.

Thanks,
Dimitris

  reply	other threads:[~2011-09-05  9:58 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-02 15:46 [PATCH 0/8] Introduce caching support for regmap Dimitris Papastamos
2011-09-02 15:46 ` [PATCH 1/8] regmap: Introduce caching support Dimitris Papastamos
2011-09-02 20:02   ` Lars-Peter Clausen
2011-09-02 23:48     ` Mark Brown
2011-09-03  1:10       ` Dimitris Papastamos
2011-09-04 15:57         ` Mark Brown
2011-09-05  9:44       ` Dimitris Papastamos
2011-09-05  9:43     ` Dimitris Papastamos
2011-09-05  9:55       ` Lars-Peter Clausen
2011-09-05 10:00         ` Dimitris Papastamos
2011-09-02 15:46 ` [PATCH 2/8] regmap: Add the indexed cache support Dimitris Papastamos
2011-09-02 20:16   ` Lars-Peter Clausen
2011-09-05  9:55     ` Dimitris Papastamos
2011-09-05 10:14       ` Lars-Peter Clausen
2011-09-05 18:22         ` Mark Brown
2012-07-17 11:16     ` Mark Brown
2012-07-17 14:24       ` Lars-Peter Clausen
2011-09-02 15:46 ` [PATCH 3/8] regmap: Add the rbtree " Dimitris Papastamos
2011-09-02 20:22   ` Lars-Peter Clausen
2011-09-05  9:58     ` Dimitris Papastamos [this message]
2011-09-02 15:46 ` [PATCH 4/8] regmap: Add the LZO " Dimitris Papastamos
2011-09-05 21:40   ` Matthieu CASTET
2011-09-07 19:19     ` Mark Brown
2011-09-02 15:46 ` [PATCH 5/8] regmap: Add the regcache_sync trace event Dimitris Papastamos
2011-09-02 15:46 ` [PATCH 6/8] regmap: Incorporate the regcache core into regmap Dimitris Papastamos
2011-09-02 15:46 ` [PATCH 7/8] regmap: It is impossible to be given a NULL defaults cache Dimitris Papastamos
2011-09-02 15:46 ` [PATCH 8/8] regmap: Support NULL cache_defaults_raw Dimitris Papastamos

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110905095816.GD30114@opensource.wolfsonmicro.com \
    --to=dp@opensource.wolfsonmicro.com \
    --cc=broonie@opensource.wolfsonmicro.com \
    --cc=gg@slimlogic.co.uk \
    --cc=lars@metafoo.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lrg@ti.com \
    --cc=sameo@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.