On 06/14/2013 03:53 PM, Mark Brown wrote: > On Tue, Jun 11, 2013 at 04:34:53PM +0200, Sebastian Andrzej Siewior > wrote: > > It does give you tracepoints and debugfs. If it's making things at > all complicated we need to look at why that is and figure out how > to fix that since it's probably an issue for other users. debugfs are tracepoints is our offer? Let me check the price one more time. A simply mmio read does right now: - lock + unlock. each time you chase another pointer plus enable/disable interrupts plus you have to save flags in another structure. - _regmap_read() We check a few variables and then we go after reg_read and we end up in _regmap_raw_read(). Here we call _regmap_range_lookup() which should return NULL. Next thing we invoke map->format.format_reg(). Finally we can call map->bus->read() which brings us to regmap_mmio_read(). At the end we invoke map->format.parse_val(). write looks most likely the same. A simple register read invokes 5 functions pointers. I am not counting the function arguments in between and I am also not counting the number of arguments which are involved and take pointer as well. This is a lot of stuff that is done for a simple read of an mmio. I understand that most of this may not be expensive in total if it comes to SPI or I2C and all the goodies like reg caching and one interface which deals with SPI and I2C. I also understand that some chips have a non standard interface and are either BE or LE. We have similar things on USB where people wired the BUS wrongly either at the BUS level or at the SoC level so some PowerPC have an in-core ehci controller but its registers are BE and not LE like it should be. The solution here was variable check a simple swap() in that case. I like abstractions but this gone a little too far I think. This is a lot of for a simple mmio access. In terms of performance: If I add a trace point to my read and write I have still less code which is called and it can be disabled. This regmap overhead is always there chasing pointers. As I said before: I doubt that you get this regmap access in an one GiB network driver and in turn remove their trace points to register access. Please don't get me wrong: It is still nice for slow buses and this ADC driver isn't anything close to high performance like a 1GiB network driver but it adds a lot of unwanted overhead which I prefer not to have. Sebastian -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html