Skip to content

Commit

Permalink
pwm: lpc18xx-sct: Reduce number of devm memory allocations
Browse files Browse the repository at this point in the history
Each devm allocations has an overhead of 24 bytes to store the related
struct devres_node additionally to the fragmentation of the allocator.
So allocating 16 struct lpc18xx_pwm_data (which only hold a single int)
adds quite some overhead. Instead put the per-channel data into the
driver data struct and allocate it in one go.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
  • Loading branch information
Uwe Kleine-König authored and thierryreding committed Feb 2, 2022
1 parent 0401f24 commit 20d9de9
Showing 1 changed file with 5 additions and 7 deletions.
12 changes: 5 additions & 7 deletions drivers/pwm/pwm-lpc18xx-sct.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@
#define LPC18XX_PWM_EVENT_PERIOD 0
#define LPC18XX_PWM_EVENT_MAX 16

#define LPC18XX_NUM_PWMS 16

/* SCT conflict resolution */
enum lpc18xx_pwm_res_action {
LPC18XX_PWM_RES_NONE,
Expand All @@ -101,6 +103,7 @@ struct lpc18xx_pwm_chip {
unsigned long event_map;
struct mutex res_lock;
struct mutex period_lock;
struct lpc18xx_pwm_data channeldata[LPC18XX_NUM_PWMS];
};

static inline struct lpc18xx_pwm_chip *
Expand Down Expand Up @@ -370,7 +373,7 @@ static int lpc18xx_pwm_probe(struct platform_device *pdev)

lpc18xx_pwm->chip.dev = &pdev->dev;
lpc18xx_pwm->chip.ops = &lpc18xx_pwm_ops;
lpc18xx_pwm->chip.npwm = 16;
lpc18xx_pwm->chip.npwm = LPC18XX_NUM_PWMS;

/* SCT counter must be in unify (32 bit) mode */
lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_CONFIG,
Expand Down Expand Up @@ -400,12 +403,7 @@ static int lpc18xx_pwm_probe(struct platform_device *pdev)

pwm = &lpc18xx_pwm->chip.pwms[i];

data = devm_kzalloc(lpc18xx_pwm->dev, sizeof(*data),
GFP_KERNEL);
if (!data) {
ret = -ENOMEM;
goto disable_pwmclk;
}
data = &lpc18xx_pwm->channeldata[i];

pwm_set_chip_data(pwm, data);
}
Expand Down

0 comments on commit 20d9de9

Please sign in to comment.