[lm-sensors] [PATCH 1/2] thermal: add hwmon sys I/F for thermal device
Len Brown
lenb at kernel.org
Tue Mar 18 05:59:39 CET 2008
On Thursday 13 March 2008, Zhang, Rui wrote:
>
> On Thu, 2008-03-13 at 13:09 +0800, Len Brown wrote:
> >
> > > On Tuesday 26 February 2008, Zhang, Rui wrote:
> > > >
> > > > Add hwmon sys I/F for the generic thermal device.
> > > >
> > > > Signed-off-by: Zhang Rui <rui.zhang at intel.com>
> > > > Cc: Hans de Geode <j.w.r.degoede at hhs.nl>
> > > > ---
> > > > Documentation/thermal/sysfs-api.txt | 22 ++--
> > > > drivers/thermal/Kconfig | 1
> > > > drivers/thermal/thermal.c | 169
> > ++++++++++++++++++++++++++++++------
> > > > 3 files changed, 155 insertions(+), 37 deletions(-)
> > > >
> > ...
> > > > {
> > > > int result = 0;
> > > > @@ -716,16 +829,20 @@ static int __init thermal_init(void)
> > > > mutex_destroy(&thermal_idr_lock);
> > > > mutex_destroy(&thermal_list_lock);
> > > > }
> > > > - return result;
> > > > -}
> > > >
> > > > -static void __exit thermal_exit(void)
> > > > -{
> > > > - class_unregister(&thermal_class);
> > > > - idr_destroy(&thermal_tz_idr);
> > > > - idr_destroy(&thermal_cdev_idr);
> > > > - mutex_destroy(&thermal_idr_lock);
> > > > - mutex_destroy(&thermal_list_lock);
> > > > + thermal_hwmon = hwmon_device_register(NULL);
> > > > + if (IS_ERR(thermal_hwmon)) {
> > > > + result = PTR_ERR(thermal_hwmon);
> > > > + thermal_hwmon = NULL;
> > > > + printk(KERN_ERR PREFIX
> > > > + "unable to register hwmon device\n");
> > > > + thermal_exit();
> >
> > An __exit routine can not be called from an __init routine.
> > this doesn't build on ia64, which discards .exit sections:
> >
> > .exit.text' referenced in section `.init.text' of drivers/built-in.o:
> > defined in discarded section `.exit.text' of drivers/built-in.o
> >
> > -Len
> As I don't have an ia64 machine,
> len, could you please help me test this incremental patch? :)
>
> From: Zhang Rui <rui.zhang at intel.com>
>
> An __exit routine can not be called from an __init routine.
> this doesn't build on ia64, which discards .exit sections:
> ".exit.text' referenced in section `.init.text' of drivers/built-in.o:
> defined in discarded section `.exit.text' of drivers/built-in.o"
>
> http://marc.info/?l=linux-acpi&m=120538509025142&w=2
>
> Signed-off-by: Zhang Rui <rui.zhang at intel.com>
> ---
> drivers/thermal/thermal.c | 19 +++++++++++--------
> 1 file changed, 11 insertions(+), 8 deletions(-)
>
> Index: linux-2.6/drivers/thermal/thermal.c
> ===================================================================
> --- linux-2.6.orig/drivers/thermal/thermal.c
> +++ linux-2.6/drivers/thermal/thermal.c
> @@ -823,12 +823,8 @@ static int __init thermal_init(void)
> int result = 0;
>
> result = class_register(&thermal_class);
> - if (result) {
> - idr_destroy(&thermal_tz_idr);
> - idr_destroy(&thermal_cdev_idr);
> - mutex_destroy(&thermal_idr_lock);
> - mutex_destroy(&thermal_list_lock);
> - }
> + if (result)
> + goto err;
>
> thermal_hwmon = hwmon_device_register(NULL);
> if (IS_ERR(thermal_hwmon)) {
> @@ -836,13 +832,20 @@ static int __init thermal_init(void)
> thermal_hwmon = NULL;
> printk(KERN_ERR PREFIX
> "unable to register hwmon device\n");
> - thermal_exit();
> - return result;
> + class_unregister(&thermal_class);
> + goto err;
> }
>
> result = device_create_file(thermal_hwmon, &dev_attr_name);
>
> return result;
> + err:
> + idr_destroy(&thermal_tz_idr);
> + idr_destroy(&thermal_cdev_idr);
> + mutex_destroy(&thermal_idr_lock);
> + mutex_destroy(&thermal_list_lock);
> +
> + return result;
> }
>
> subsys_initcall(thermal_init);
>
>
I already addressed this by modifying your patch that called thermal_exit() from __init
to simply remove the __exit from thermal_exit().
ie. as Henrique does in thinkpad_acpi.c -- we simply don't reward =y builds
by labeling anything with __exit for the tools to strip.
thanks,
-Len
More information about the lm-sensors
mailing list