linux/drivers/base
Lars-Peter Clausen 3f4ff561bc regmap: rbtree: Make cache_present bitmap per node
With devices which have a dense and small register map but placed at a large
offset the global cache_present bitmap imposes a huge memory overhead. Making
the cache_present per rbtree node avoids the issue and easily reduces the memory
footprint by a factor of ten. For devices with a more sparse map or without a
large base register offset the memory usage might increase slightly by a few
bytes, but not significantly. E.g. for a device which has ~50 registers at
offset 0x4000 the memory footprint of the register cache goes down form 2496
bytes to 175 bytes.

Moving the bitmap to a per node basis means that the handling of the bitmap is
now cache implementation specific and can no longer be managed by the core. The
regcache_sync_block() function is extended by a additional parameter so that the
cache implementation can tell the core which registers in the block are set and
which are not. The parameter is optional and if NULL the core assumes that all
registers are set. The rbtree cache also needs to implement its own drop
callback instead of relying on the core to handle this.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
2013-08-29 13:32:41 +01:00
..
power Merge branch 'pm-assorted' 2013-06-28 13:01:40 +02:00
regmap regmap: rbtree: Make cache_present bitmap per node 2013-08-29 13:32:41 +01:00
attribute_container.c drivers: avoid format string in dev_set_name 2013-07-03 16:07:41 -07:00
base.h driver/base: implement subsys_virtual_register() 2013-03-12 11:36:35 -07:00
bus.c driver core: export subsys_virtual_register 2013-05-21 09:05:52 -07:00
class.c driver-core: constify data for class_find_device() 2013-02-06 12:18:56 -08:00
core.c driver core: add default groups to struct class 2013-07-16 10:57:37 -07:00
cpu.c drivers: delete __cpuinit usage from all remaining drivers files 2013-07-14 19:36:59 -04:00
dd.c PM / Runtime: Idle devices asynchronously after probe|release 2013-04-11 12:42:52 -07:00
devres.c Linux 3.9-rc3 2013-03-17 19:40:50 -07:00
devtmpfs.c driver core: handle user namespaces properly with the uid/gid devtmpfs change 2013-04-11 11:43:29 -07:00
dma-buf.c [media] dma-buf: Cocci spatch "ptr_ret.spatch" 2013-06-08 20:00:29 -03:00
dma-coherent.c drivers: dma-coherent: Fix typo in dma_mmap_from_coherent documentation 2012-10-23 14:05:32 +02:00
dma-contiguous.c drivers: cma: represent physical addresses as phys_addr_t 2012-12-11 09:28:09 +01:00
dma-mapping.c [media] dma-mapping: fix dma_common_get_sgtable() conditional compilation 2012-11-27 09:42:31 -02:00
driver.c driver core: don't trigger uevent after failure 2012-07-17 10:40:23 -07:00
firmware_class.c firmware loader: fix another compile warning with PM_SLEEP unset 2013-06-25 21:04:22 -07:00
firmware.c
hypervisor.c drivers/base: Add export.h for EXPORT_SYMBOL/THIS_MODULE as required. 2011-10-31 19:31:38 -04:00
init.c driver-core: implement 'sysdev' functionality for regular devices and buses 2011-12-14 14:29:38 -08:00
isa.c
Kconfig Finally eradicate CONFIG_HOTPLUG 2013-06-03 14:20:18 -07:00
Makefile reservation: cross-device reservation support, v4 2013-06-28 12:02:15 +10:00
map.c
memory.c Power management and ACPI updates for 3.11-rc1 2013-07-03 14:35:40 -07:00
module.c
node.c drivers/base/node.c: switch to register_hotmemory_notifier() 2013-04-29 15:54:36 -07:00
pinctrl.c drivers: pinctrl sleep and idle states in the core 2013-06-16 11:56:52 +02:00
platform.c driver-core: fix new kernel-doc warning in base/platform.c 2013-07-16 22:43:50 -07:00
reservation.c reservation: cross-device reservation support, v4 2013-06-28 12:02:15 +10:00
soc.c mode_t whack-a-mole: ->is_visible() returns umode_t... 2012-05-29 23:28:42 -04:00
syscore.c
topology.c drivers: delete __cpuinit usage from all remaining drivers files 2013-07-14 19:36:59 -04:00
transport_class.c drivers/base: transport_class explicitly requires EXPORT_SYMBOL 2011-10-31 19:31:15 -04:00