Thread (23 messages) 23 messages, 4 authors, 2021-12-10

Re: [PATCH v2 3/3] mmc: Add driver for LiteX's LiteSDCard interface

From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2021-12-09 08:32:06
Also in: linux-mmc, lkml

Hi Gabriel,

On Wed, Dec 8, 2021 at 9:14 PM Gabriel L. Somlo [off-list ref] wrote:
I did *some* of this for v3, but since figured out how to use `pahole` :)
Right, pahole.
On Mon, Dec 06, 2021 at 11:07:56AM +0100, Geert Uytterhoeven wrote:
quoted
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 */
size_t is 32-bit on RV32, so you may want to move it below cmd_done.
        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 */
};
Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help