Re: [PATCH v2 3/3] mmc: Add driver for LiteX's LiteSDCard interface
From: "Gabriel L. Somlo" <gsomlo@gmail.com>
Date: 2021-12-08 20:14:36
Also in:
linux-mmc, lkml
Hi Geert, I did *some* of this for v3, but since figured out how to use `pahole` :) On Mon, Dec 06, 2021 at 11:07:56AM +0100, Geert Uytterhoeven wrote:
quoted
+struct litex_mmc_host { + struct mmc_host *mmc; + struct platform_device *dev; + + void __iomem *sdphy; + void __iomem *sdcore; + void __iomem *sdreader; + void __iomem *sdwriter; + void __iomem *sdirq; + + u32 resp[4]; + u16 rca; + + void *buffer; + size_t buf_size; + dma_addr_t dma; + + unsigned int freq; + unsigned int clock; + bool is_bus_width_set; + bool app_cmd; + + int irq; + struct completion cmd_done;You may want to reorder the members to avoid implicit gaps (i.e. structs first, followed by integral types in decreasing size).
So, for v4, I'll have it looking like this, which `pahole` says is
optimally packed:
struct litex_mmc_host {
struct mmc_host * mmc; /* 0 8 */
struct platform_device * dev; /* 8 8 */
void * sdphy; /* 16 8 */
void * sdcore; /* 24 8 */
void * sdreader; /* 32 8 */
void * sdwriter; /* 40 8 */
void * sdirq; /* 48 8 */
void * buffer; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
size_t buf_size; /* 64 8 */
dma_addr_t dma; /* 72 8 */
struct completion cmd_done; /* 80 32 */
int irq; /* 112 4 */
unsigned int ref_clk; /* 116 4 */
unsigned int sd_clk; /* 120 4 */
u32 resp[4]; /* 124 16 */
/* --- cacheline 2 boundary (128 bytes) was 12 bytes ago --- */
u16 rca; /* 140 2 */
bool is_bus_width_set; /* 142 1 */
bool app_cmd; /* 143 1 */
/* size: 144, cachelines: 3, members: 18 */
/* last cacheline: 16 bytes */
};
Thanks again,
--Gabriel