Re: [PATCH] drivers: regmap: bugfix in regcache-rbtree.c

From: Mark Brown
Date: Wed Aug 21 2013 - 10:45:44 EST


On Wed, Aug 21, 2013 at 04:21:43PM +0200, David Jander wrote:

> I hope you can explain to me how regcache_rbtree_node_alloc() is supposed to
> work, because I start to think that something in there is broken...
> Specially the code at line 323 strikes me:

> if (!rbnode->blklen) {
> rbnode->blklen = sizeof(*rbnode);
> rbnode->base_reg = reg;
> }

That's intended to avoid creating lots of tiny blocks. I think this bit
is actually OK but what should be happening here is that the collision
gets noticed when we try to insert the block and we at least constrain
the size of the new block if not merge it with the old one immediately
after (which is obvioulsy better).

As a bug fix setting blklen to be a single register ought to avoid
triggering problems though it will be less efficient - does that work
for you? Doing the merging is going to be too much for a fix.

Attachment: signature.asc
Description: Digital signature