spi: Reorder fields in 'struct spi_transfer'
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Tue, 14 Feb 2023 10:34:50 +0000 (11:34 +0100)
committerMark Brown <broonie@kernel.org>
Tue, 14 Feb 2023 13:27:58 +0000 (13:27 +0000)
Group some variables based on their sizes to reduce hole and avoid padding.
On x86_64, this shrinks the size from 144 to 128 bytes.

Turn 'timestamped' into a bitfield so that it can be easily merged with
some other bifields and move 'error'.

This should have no real impact on memory allocation because 'struct
spi_transfer' is mostly used on stack, but it can save a few cycles
when the structure is initialized or copied.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/93a051da85a895bc6003aedfb00a13e1c2fc6338.1676370870.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi.c
include/linux/spi/spi.h

index 91f7130..5866bf5 100644 (file)
@@ -1927,7 +1927,7 @@ void spi_take_timestamp_post(struct spi_controller *ctlr,
        /* Capture the resolution of the timestamp */
        xfer->ptp_sts_word_post = progress;
 
-       xfer->timestamped = true;
+       xfer->timestamped = 1;
 }
 EXPORT_SYMBOL_GPL(spi_take_timestamp_post);
 
index 88cb2a1..a08c20b 100644 (file)
@@ -1022,6 +1022,9 @@ struct spi_transfer {
        void            *rx_buf;
        unsigned        len;
 
+#define SPI_TRANS_FAIL_NO_START        BIT(0)
+       u16             error;
+
        dma_addr_t      tx_dma;
        dma_addr_t      rx_dma;
        struct sg_table tx_sg;
@@ -1032,6 +1035,7 @@ struct spi_transfer {
        unsigned        cs_change:1;
        unsigned        tx_nbits:3;
        unsigned        rx_nbits:3;
+       unsigned        timestamped:1;
 #define        SPI_NBITS_SINGLE        0x01 /* 1bit transfer */
 #define        SPI_NBITS_DUAL          0x02 /* 2bits transfer */
 #define        SPI_NBITS_QUAD          0x04 /* 4bits transfer */
@@ -1048,12 +1052,7 @@ struct spi_transfer {
 
        struct ptp_system_timestamp *ptp_sts;
 
-       bool            timestamped;
-
        struct list_head transfer_list;
-
-#define SPI_TRANS_FAIL_NO_START        BIT(0)
-       u16             error;
 };
 
 /**