diff mbox series

[1/2] spi: fsl-qsi: Optimize fsl_qspi struct

Message ID 20250321-spi-v1-1-b9939baa64b6@gmail.com (mailing list archive)
State New
Headers show
Series spi: fsl-qspi: Fix kernel panic when unbinding the SPI host | expand

Commit Message

Kevin Hao March 21, 2025, 12:40 p.m. UTC
Reorgize the members of the fsl_qspi struct to:
  - Reduce a hole in the struct.
  - Group members required by each op (e.g., iobase, ahb_addr,
    devtype_data and lock) into the same cacheline.

Before:
struct fsl_qspi {
	[...]

	/* size: 176, cachelines: 3, members: 11 */
	/* sum members: 168, holes: 1, sum holes: 4 */
	/* padding: 4 */
	/* member types with holes: 1, total: 1 */
	/* last cacheline: 48 bytes */
};

after:
struct fsl_qspi {
	void *                     iobase;               /*     0     8 */
	void *                     ahb_addr;             /*     8     8 */
	const struct fsl_qspi_devtype_data  * devtype_data; /*    16     8 */
	struct mutex               lock;                 /*    24    32 */
	struct completion          c;                    /*    56    32 */

	/* XXX last struct has 1 hole */

	/* --- cacheline 1 boundary (64 bytes) was 24 bytes ago --- */
	struct clk *               clk;                  /*    88     8 */
	struct clk *               clk_en;               /*    96     8 */
	struct pm_qos_request      pm_qos_req;           /*   104    48 */
	/* --- cacheline 2 boundary (128 bytes) was 24 bytes ago --- */
	struct device *            dev;                  /*   152     8 */
	int                        selected;             /*   160     4 */
	u32                        memmap_phy;           /*   164     4 */

	/* size: 168, cachelines: 3, members: 11 */
	/* member types with holes: 1, total: 1 */
	/* last cacheline: 40 bytes */
};

Signed-off-by: Kevin Hao <haokexin@gmail.com>
---
 drivers/spi/spi-fsl-qspi.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Han Xu March 21, 2025, 3:26 p.m. UTC | #1
On 25/03/21 08:40PM, Kevin Hao wrote:
> 
> Reorgize the members of the fsl_qspi struct to:
>   - Reduce a hole in the struct.
>   - Group members required by each op (e.g., iobase, ahb_addr,
>     devtype_data and lock) into the same cacheline.
> 
> Before:
> struct fsl_qspi {
>         [...]
> 
>         /* size: 176, cachelines: 3, members: 11 */
>         /* sum members: 168, holes: 1, sum holes: 4 */
>         /* padding: 4 */
>         /* member types with holes: 1, total: 1 */
>         /* last cacheline: 48 bytes */
> };
> 
> after:
> struct fsl_qspi {
>         void *                     iobase;               /*     0     8 */
>         void *                     ahb_addr;             /*     8     8 */
>         const struct fsl_qspi_devtype_data  * devtype_data; /*    16     8 */
>         struct mutex               lock;                 /*    24    32 */
>         struct completion          c;                    /*    56    32 */
> 
>         /* XXX last struct has 1 hole */
> 
>         /* --- cacheline 1 boundary (64 bytes) was 24 bytes ago --- */
>         struct clk *               clk;                  /*    88     8 */
>         struct clk *               clk_en;               /*    96     8 */
>         struct pm_qos_request      pm_qos_req;           /*   104    48 */
>         /* --- cacheline 2 boundary (128 bytes) was 24 bytes ago --- */
>         struct device *            dev;                  /*   152     8 */
>         int                        selected;             /*   160     4 */
>         u32                        memmap_phy;           /*   164     4 */
> 
>         /* size: 168, cachelines: 3, members: 11 */
>         /* member types with holes: 1, total: 1 */
>         /* last cacheline: 40 bytes */
> };
> 
> Signed-off-by: Kevin Hao <haokexin@gmail.com>
> ---
>  drivers/spi/spi-fsl-qspi.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/spi/spi-fsl-qspi.c b/drivers/spi/spi-fsl-qspi.c
> index 355e6a39fb41896f460e2474a90b8f0b42068ff3..efd87f44c63a5b12b76538aa459ca8eb203b9dcd 100644
> --- a/drivers/spi/spi-fsl-qspi.c
> +++ b/drivers/spi/spi-fsl-qspi.c
> @@ -264,14 +264,14 @@ static const struct fsl_qspi_devtype_data ls2080a_data = {
>  struct fsl_qspi {
>         void __iomem *iobase;
>         void __iomem *ahb_addr;
> -       u32 memmap_phy;
> -       struct clk *clk, *clk_en;
> -       struct device *dev;
> -       struct completion c;
>         const struct fsl_qspi_devtype_data *devtype_data;
>         struct mutex lock;
> +       struct completion c;
> +       struct clk *clk, *clk_en;
>         struct pm_qos_request pm_qos_req;
> +       struct device *dev;
>         int selected;
> +       u32 memmap_phy;
>  };

Reviewed-by: Han Xu <han.xu@nxp.com>

> 
>  static inline int needs_swap_endian(struct fsl_qspi *q)
> 
> --
> 2.48.1
>
diff mbox series

Patch

diff --git a/drivers/spi/spi-fsl-qspi.c b/drivers/spi/spi-fsl-qspi.c
index 355e6a39fb41896f460e2474a90b8f0b42068ff3..efd87f44c63a5b12b76538aa459ca8eb203b9dcd 100644
--- a/drivers/spi/spi-fsl-qspi.c
+++ b/drivers/spi/spi-fsl-qspi.c
@@ -264,14 +264,14 @@  static const struct fsl_qspi_devtype_data ls2080a_data = {
 struct fsl_qspi {
 	void __iomem *iobase;
 	void __iomem *ahb_addr;
-	u32 memmap_phy;
-	struct clk *clk, *clk_en;
-	struct device *dev;
-	struct completion c;
 	const struct fsl_qspi_devtype_data *devtype_data;
 	struct mutex lock;
+	struct completion c;
+	struct clk *clk, *clk_en;
 	struct pm_qos_request pm_qos_req;
+	struct device *dev;
 	int selected;
+	u32 memmap_phy;
 };
 
 static inline int needs_swap_endian(struct fsl_qspi *q)