diff options
author | Colin Ian King <colin.king@canonical.com> | 2019-02-19 09:21:20 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-02-19 17:15:40 -0500 |
commit | 58066ac9d7f5dcde4ef08c03b7e127f0522d9ea0 (patch) | |
tree | 6751fcd5a6c6ef8d81726d12bc0c62a6ee63949a | |
parent | d2cf821ff677d3108c783f1b41f558069c955c82 (diff) |
ptp_qoriq: don't pass a large struct by value but instead pass it by reference
Passing the struct ptp_clock_info caps by parameter is passing over 130 bytes
of data by value on the stack. Optimize this by passing it by reference instead.
Also shinks the object code size:
Before:
text data bss dec hex filename
12596 2160 64 14820 39e4 drivers/ptp/ptp_qoriq.o
After:
text data bss dec hex filename
12567 2160 64 14791 39c7 drivers/ptp/ptp_qoriq.o
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/freescale/enetc/enetc_ptp.c | 2 | ||||
-rw-r--r-- | drivers/ptp/ptp_qoriq.c | 6 | ||||
-rw-r--r-- | include/linux/fsl/ptp_qoriq.h | 2 |
3 files changed, 5 insertions, 5 deletions
diff --git a/drivers/net/ethernet/freescale/enetc/enetc_ptp.c b/drivers/net/ethernet/freescale/enetc/enetc_ptp.c index dc2f58a7c9e5..8c1497e7d9c5 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_ptp.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_ptp.c | |||
@@ -92,7 +92,7 @@ static int enetc_ptp_probe(struct pci_dev *pdev, | |||
92 | 92 | ||
93 | ptp_qoriq->dev = &pdev->dev; | 93 | ptp_qoriq->dev = &pdev->dev; |
94 | 94 | ||
95 | err = ptp_qoriq_init(ptp_qoriq, base, enetc_ptp_caps); | 95 | err = ptp_qoriq_init(ptp_qoriq, base, &enetc_ptp_caps); |
96 | if (err) | 96 | if (err) |
97 | goto err_no_clock; | 97 | goto err_no_clock; |
98 | 98 | ||
diff --git a/drivers/ptp/ptp_qoriq.c b/drivers/ptp/ptp_qoriq.c index 42d3654f77f0..53775362aac6 100644 --- a/drivers/ptp/ptp_qoriq.c +++ b/drivers/ptp/ptp_qoriq.c | |||
@@ -459,7 +459,7 @@ static int ptp_qoriq_auto_config(struct ptp_qoriq *ptp_qoriq, | |||
459 | } | 459 | } |
460 | 460 | ||
461 | int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base, | 461 | int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base, |
462 | const struct ptp_clock_info caps) | 462 | const struct ptp_clock_info *caps) |
463 | { | 463 | { |
464 | struct device_node *node = ptp_qoriq->dev->of_node; | 464 | struct device_node *node = ptp_qoriq->dev->of_node; |
465 | struct ptp_qoriq_registers *regs; | 465 | struct ptp_qoriq_registers *regs; |
@@ -468,7 +468,7 @@ int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base, | |||
468 | u32 tmr_ctrl; | 468 | u32 tmr_ctrl; |
469 | 469 | ||
470 | ptp_qoriq->base = base; | 470 | ptp_qoriq->base = base; |
471 | ptp_qoriq->caps = caps; | 471 | ptp_qoriq->caps = *caps; |
472 | 472 | ||
473 | if (of_property_read_u32(node, "fsl,cksel", &ptp_qoriq->cksel)) | 473 | if (of_property_read_u32(node, "fsl,cksel", &ptp_qoriq->cksel)) |
474 | ptp_qoriq->cksel = DEFAULT_CKSEL; | 474 | ptp_qoriq->cksel = DEFAULT_CKSEL; |
@@ -605,7 +605,7 @@ static int ptp_qoriq_probe(struct platform_device *dev) | |||
605 | goto no_ioremap; | 605 | goto no_ioremap; |
606 | } | 606 | } |
607 | 607 | ||
608 | err = ptp_qoriq_init(ptp_qoriq, base, ptp_qoriq_caps); | 608 | err = ptp_qoriq_init(ptp_qoriq, base, &ptp_qoriq_caps); |
609 | if (err) | 609 | if (err) |
610 | goto no_clock; | 610 | goto no_clock; |
611 | 611 | ||
diff --git a/include/linux/fsl/ptp_qoriq.h b/include/linux/fsl/ptp_qoriq.h index f127adb71041..992bf9fa1729 100644 --- a/include/linux/fsl/ptp_qoriq.h +++ b/include/linux/fsl/ptp_qoriq.h | |||
@@ -183,7 +183,7 @@ static inline void qoriq_write_le(unsigned __iomem *addr, u32 val) | |||
183 | 183 | ||
184 | irqreturn_t ptp_qoriq_isr(int irq, void *priv); | 184 | irqreturn_t ptp_qoriq_isr(int irq, void *priv); |
185 | int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base, | 185 | int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base, |
186 | const struct ptp_clock_info caps); | 186 | const struct ptp_clock_info *caps); |
187 | void ptp_qoriq_free(struct ptp_qoriq *ptp_qoriq); | 187 | void ptp_qoriq_free(struct ptp_qoriq *ptp_qoriq); |
188 | int ptp_qoriq_adjfine(struct ptp_clock_info *ptp, long scaled_ppm); | 188 | int ptp_qoriq_adjfine(struct ptp_clock_info *ptp, long scaled_ppm); |
189 | int ptp_qoriq_adjtime(struct ptp_clock_info *ptp, s64 delta); | 189 | int ptp_qoriq_adjtime(struct ptp_clock_info *ptp, s64 delta); |