diff options
author | Christophe JAILLET <christophe.jaillet@wanadoo.fr> | 2025-01-24 16:37:58 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2025-02-03 03:38:32 +0300 |
commit | 995cf0e014b0144edf1125668a97c252c5ab775e (patch) | |
tree | 07e75bc5f655fc7bad39d48a4d831ad58dfed707 | |
parent | 2014c95afecee3e76ca4a56956a936e23283f05b (diff) | |
download | linux-995cf0e014b0144edf1125668a97c252c5ab775e.tar.xz |
regmap: Reorder 'struct regmap'
On a x86_64, with configured with allmodconfig, pahole states that the
regmap structure is:
/* size: 1048, cachelines: 17, members: 78 */
/* sum members: 1006, holes: 9, sum holes: 35 */
/* padding: 7 */
/* member types with holes: 2, total: 2 */
/* last cacheline: 24 bytes */
So, when such a struct is allocated, 2048 bytes are allocated, with most of
this space being wasted.
Move a few bools so that the size is reduced to 1024.
After this change, pahole gives:
/* size: 1024, cachelines: 16, members: 78 */
/* sum members: 1006, holes: 6, sum holes: 18 */
/* member types with holes: 2, total: 2 */
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://patch.msgid.link/f01f900d15633d5cda5f27763723acb307c0d22f.1737725820.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | drivers/base/regmap/internal.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h index bdb450436cbc..6f31240ee4a9 100644 --- a/drivers/base/regmap/internal.h +++ b/drivers/base/regmap/internal.h @@ -73,12 +73,12 @@ struct regmap { void *bus_context; const char *name; - bool async; spinlock_t async_lock; wait_queue_head_t async_waitq; struct list_head async_list; struct list_head async_free; int async_ret; + bool async; #ifdef CONFIG_DEBUG_FS bool debugfs_disable; @@ -117,8 +117,6 @@ struct regmap { void *val_buf, size_t val_size); int (*write)(void *context, const void *data, size_t count); - bool defer_caching; - unsigned long read_flag_mask; unsigned long write_flag_mask; @@ -127,6 +125,8 @@ struct regmap { int reg_stride; int reg_stride_order; + bool defer_caching; + /* If set, will always write field to HW. */ bool force_write_field; @@ -161,6 +161,9 @@ struct regmap { struct reg_sequence *patch; int patch_regs; + /* if set, the regmap core can sleep */ + bool can_sleep; + /* if set, converts bulk read to single read */ bool use_single_read; /* if set, converts bulk write to single write */ @@ -176,9 +179,6 @@ struct regmap { void *selector_work_buf; /* Scratch buffer used for selector */ struct hwspinlock *hwlock; - - /* if set, the regmap core can sleep */ - bool can_sleep; }; struct regcache_ops { |