Message ID | 4a3658efad8f6247ed8c477717dc2820b72319d0.1704462287.git.christophe.jaillet@wanadoo.fr (mailing list archive) |
---|---|
State | Mainlined, archived |
Headers | show |
Series | thermal: core: Save a few bytes of memory when registering a cooling device | expand |
On Fri, Jan 5, 2024 at 2:45 PM Christophe JAILLET <christophe.jaillet@wanadoo.fr> wrote: > > Some *thermal_cooling_device_register() calls pass a string literal as the > 'type' parameter. > > So kstrdup_const() can be used instead of kfree() to avoid a memory I guess you mean kstrdup()? > allocation in such cases. > > Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> > --- > drivers/thermal/thermal_core.c | 6 +++--- > include/linux/thermal.h | 2 +- > 2 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c > index fa88d8707241..d21225ddbf10 100644 > --- a/drivers/thermal/thermal_core.c > +++ b/drivers/thermal/thermal_core.c > @@ -846,7 +846,7 @@ static void thermal_release(struct device *dev) > sizeof("cooling_device") - 1)) { > cdev = to_cooling_device(dev); > thermal_cooling_device_destroy_sysfs(cdev); > - kfree(cdev->type); > + kfree_const(cdev->type); > ida_free(&thermal_cdev_ida, cdev->id); > kfree(cdev); > } > @@ -918,7 +918,7 @@ __thermal_cooling_device_register(struct device_node *np, > cdev->id = ret; > id = ret; > > - cdev->type = kstrdup(type ? type : "", GFP_KERNEL); > + cdev->type = kstrdup_const(type ? type : "", GFP_KERNEL); > if (!cdev->type) { > ret = -ENOMEM; > goto out_ida_remove; > @@ -969,7 +969,7 @@ __thermal_cooling_device_register(struct device_node *np, > out_cooling_dev: > thermal_cooling_device_destroy_sysfs(cdev); > out_cdev_type: > - kfree(cdev->type); > + kfree_const(cdev->type); > out_ida_remove: > ida_free(&thermal_cdev_ida, id); > out_kfree_cdev: > diff --git a/include/linux/thermal.h b/include/linux/thermal.h > index bf84595a4e86..052c72c0fa17 100644 > --- a/include/linux/thermal.h > +++ b/include/linux/thermal.h > @@ -102,7 +102,7 @@ struct thermal_cooling_device_ops { > > struct thermal_cooling_device { > int id; > - char *type; > + const char *type; > unsigned long max_state; > struct device device; > struct device_node *np; > -- > 2.34.1 >
Le 05/01/2024 à 14:50, Rafael J. Wysocki a écrit : > On Fri, Jan 5, 2024 at 2:45 PM Christophe JAILLET > <christophe.jaillet@wanadoo.fr> wrote: >> >> Some *thermal_cooling_device_register() calls pass a string literal as the >> 'type' parameter. >> >> So kstrdup_const() can be used instead of kfree() to avoid a memory > > I guess you mean kstrdup()? Sure. Stupid cut'n'paste typo. Thx for catching it. Should I resend, or can it be fixed if/when the patch is applied? CJ > >> allocation in such cases. >> >> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> >> --- >> drivers/thermal/thermal_core.c | 6 +++--- >> include/linux/thermal.h | 2 +- >> 2 files changed, 4 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c >> index fa88d8707241..d21225ddbf10 100644 >> --- a/drivers/thermal/thermal_core.c >> +++ b/drivers/thermal/thermal_core.c >> @@ -846,7 +846,7 @@ static void thermal_release(struct device *dev) >> sizeof("cooling_device") - 1)) { >> cdev = to_cooling_device(dev); >> thermal_cooling_device_destroy_sysfs(cdev); >> - kfree(cdev->type); >> + kfree_const(cdev->type); >> ida_free(&thermal_cdev_ida, cdev->id); >> kfree(cdev); >> } >> @@ -918,7 +918,7 @@ __thermal_cooling_device_register(struct device_node *np, >> cdev->id = ret; >> id = ret; >> >> - cdev->type = kstrdup(type ? type : "", GFP_KERNEL); >> + cdev->type = kstrdup_const(type ? type : "", GFP_KERNEL); >> if (!cdev->type) { >> ret = -ENOMEM; >> goto out_ida_remove; >> @@ -969,7 +969,7 @@ __thermal_cooling_device_register(struct device_node *np, >> out_cooling_dev: >> thermal_cooling_device_destroy_sysfs(cdev); >> out_cdev_type: >> - kfree(cdev->type); >> + kfree_const(cdev->type); >> out_ida_remove: >> ida_free(&thermal_cdev_ida, id); >> out_kfree_cdev: >> diff --git a/include/linux/thermal.h b/include/linux/thermal.h >> index bf84595a4e86..052c72c0fa17 100644 >> --- a/include/linux/thermal.h >> +++ b/include/linux/thermal.h >> @@ -102,7 +102,7 @@ struct thermal_cooling_device_ops { >> >> struct thermal_cooling_device { >> int id; >> - char *type; >> + const char *type; >> unsigned long max_state; >> struct device device; >> struct device_node *np; >> -- >> 2.34.1 >> > >
On Fri, Jan 5, 2024 at 3:55 PM Christophe JAILLET <christophe.jaillet@wanadoo.fr> wrote: > > Le 05/01/2024 à 14:50, Rafael J. Wysocki a écrit : > > On Fri, Jan 5, 2024 at 2:45 PM Christophe JAILLET > > <christophe.jaillet@wanadoo.fr> wrote: > >> > >> Some *thermal_cooling_device_register() calls pass a string literal as the > >> 'type' parameter. > >> > >> So kstrdup_const() can be used instead of kfree() to avoid a memory > > > > I guess you mean kstrdup()? > > Sure. > Stupid cut'n'paste typo. Thx for catching it. > > Should I resend, or can it be fixed if/when the patch is applied? I can fix it up.
On Fri, Jan 5, 2024 at 2:45 PM Christophe JAILLET <christophe.jaillet@wanadoo.fr> wrote: > > Some *thermal_cooling_device_register() calls pass a string literal as the > 'type' parameter. > > So kstrdup_const() can be used instead of kfree() to avoid a memory > allocation in such cases. > > Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> > --- > drivers/thermal/thermal_core.c | 6 +++--- > include/linux/thermal.h | 2 +- > 2 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c > index fa88d8707241..d21225ddbf10 100644 > --- a/drivers/thermal/thermal_core.c > +++ b/drivers/thermal/thermal_core.c > @@ -846,7 +846,7 @@ static void thermal_release(struct device *dev) > sizeof("cooling_device") - 1)) { > cdev = to_cooling_device(dev); > thermal_cooling_device_destroy_sysfs(cdev); > - kfree(cdev->type); > + kfree_const(cdev->type); > ida_free(&thermal_cdev_ida, cdev->id); > kfree(cdev); > } > @@ -918,7 +918,7 @@ __thermal_cooling_device_register(struct device_node *np, > cdev->id = ret; > id = ret; > > - cdev->type = kstrdup(type ? type : "", GFP_KERNEL); > + cdev->type = kstrdup_const(type ? type : "", GFP_KERNEL); > if (!cdev->type) { > ret = -ENOMEM; > goto out_ida_remove; > @@ -969,7 +969,7 @@ __thermal_cooling_device_register(struct device_node *np, > out_cooling_dev: > thermal_cooling_device_destroy_sysfs(cdev); > out_cdev_type: > - kfree(cdev->type); > + kfree_const(cdev->type); > out_ida_remove: > ida_free(&thermal_cdev_ida, id); > out_kfree_cdev: > diff --git a/include/linux/thermal.h b/include/linux/thermal.h > index bf84595a4e86..052c72c0fa17 100644 > --- a/include/linux/thermal.h > +++ b/include/linux/thermal.h > @@ -102,7 +102,7 @@ struct thermal_cooling_device_ops { > > struct thermal_cooling_device { > int id; > - char *type; > + const char *type; > unsigned long max_state; > struct device device; > struct device_node *np; > -- Applied as 6.8-rc1 material under a different subject and with some changelog edits. Thanks!
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index fa88d8707241..d21225ddbf10 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -846,7 +846,7 @@ static void thermal_release(struct device *dev) sizeof("cooling_device") - 1)) { cdev = to_cooling_device(dev); thermal_cooling_device_destroy_sysfs(cdev); - kfree(cdev->type); + kfree_const(cdev->type); ida_free(&thermal_cdev_ida, cdev->id); kfree(cdev); } @@ -918,7 +918,7 @@ __thermal_cooling_device_register(struct device_node *np, cdev->id = ret; id = ret; - cdev->type = kstrdup(type ? type : "", GFP_KERNEL); + cdev->type = kstrdup_const(type ? type : "", GFP_KERNEL); if (!cdev->type) { ret = -ENOMEM; goto out_ida_remove; @@ -969,7 +969,7 @@ __thermal_cooling_device_register(struct device_node *np, out_cooling_dev: thermal_cooling_device_destroy_sysfs(cdev); out_cdev_type: - kfree(cdev->type); + kfree_const(cdev->type); out_ida_remove: ida_free(&thermal_cdev_ida, id); out_kfree_cdev: diff --git a/include/linux/thermal.h b/include/linux/thermal.h index bf84595a4e86..052c72c0fa17 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h @@ -102,7 +102,7 @@ struct thermal_cooling_device_ops { struct thermal_cooling_device { int id; - char *type; + const char *type; unsigned long max_state; struct device device; struct device_node *np;
Some *thermal_cooling_device_register() calls pass a string literal as the 'type' parameter. So kstrdup_const() can be used instead of kfree() to avoid a memory allocation in such cases. Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> --- drivers/thermal/thermal_core.c | 6 +++--- include/linux/thermal.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-)