soundwire: optimize sdw_dpn_prop
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Thu, 3 Oct 2024 07:06:43 +0000 (15:06 +0800)
committerVinod Koul <vkoul@kernel.org>
Thu, 3 Oct 2024 07:58:50 +0000 (13:28 +0530)
commit9942f90bdcc035eb5f01d7343dac99bd805ef3ec
treef645035ddaa316cf89ae86614ad14ea1aa232bcc
parent557e28f8b53243097162cf4d3e59bcee9fb9713b
soundwire: optimize sdw_dpn_prop

before:
struct sdw_dpn_prop {
u32                        num;                  /*     0     4 */
u32                        max_word;             /*     4     4 */
u32                        min_word;             /*     8     4 */
u32                        num_words;            /*    12     4 */
u32 *                      words;                /*    16     8 */
enum sdw_dpn_type          type;                 /*    24     4 */
u32                        max_grouping;         /*    28     4 */
bool                       simple_ch_prep_sm;    /*    32     1 */

/* XXX 3 bytes hole, try to pack */

u32                        ch_prep_timeout;      /*    36     4 */
u32                        imp_def_interrupts;   /*    40     4 */
u32                        max_ch;               /*    44     4 */
u32                        min_ch;               /*    48     4 */
u32                        num_channels;         /*    52     4 */
u32 *                      channels;             /*    56     8 */
/* --- cacheline 1 boundary (64 bytes) --- */
u32                        num_ch_combinations;  /*    64     4 */

/* XXX 4 bytes hole, try to pack */

u32 *                      ch_combinations;      /*    72     8 */
u32                        modes;                /*    80     4 */
u32                        max_async_buffer;     /*    84     4 */
bool                       block_pack_mode;      /*    88     1 */
bool                       read_only_wordlength; /*    89     1 */

/* XXX 2 bytes hole, try to pack */

u32                        port_encoding;        /*    92     4 */
struct sdw_dpn_audio_mode * audio_modes;         /*    96     8 */

/* size: 104, cachelines: 2, members: 22 */
/* sum members: 95, holes: 3, sum holes: 9 */
/* last cacheline: 40 bytes */
};

after:

struct sdw_dpn_prop {
struct sdw_dpn_audio_mode * audio_modes;         /*     0     8 */
u32                        num;                  /*     8     4 */
u32                        max_word;             /*    12     4 */
u32                        min_word;             /*    16     4 */
u32                        num_words;            /*    20     4 */
u32 *                      words;                /*    24     8 */
enum sdw_dpn_type          type;                 /*    32     4 */
u32                        max_grouping;         /*    36     4 */
u32                        ch_prep_timeout;      /*    40     4 */
u32                        imp_def_interrupts;   /*    44     4 */
u32                        max_ch;               /*    48     4 */
u32                        min_ch;               /*    52     4 */
u32                        num_channels;         /*    56     4 */
u32                        num_ch_combinations;  /*    60     4 */
/* --- cacheline 1 boundary (64 bytes) --- */
u32 *                      channels;             /*    64     8 */
u32 *                      ch_combinations;      /*    72     8 */
u32                        modes;                /*    80     4 */
u32                        max_async_buffer;     /*    84     4 */
u32                        port_encoding;        /*    88     4 */
bool                       block_pack_mode;      /*    92     1 */
bool                       read_only_wordlength; /*    93     1 */
bool                       simple_ch_prep_sm;    /*    94     1 */

/* size: 96, cachelines: 2, members: 22 */
/* padding: 1 */
/* last cacheline: 32 bytes */
};

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Link: https://lore.kernel.org/r/20241003070650.62787-8-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
include/linux/soundwire/sdw.h