[lm-sensors] Converting vt8231 to a platform driver
Roger Lucas
roger at planbit.co.uk
Sat Jun 9 12:58:32 CEST 2007
Hi Jean,
I have converted the vt8231 driver to a platform driver as you requested and
it seems to be working OK except for a "Trying to free nonexistent resource"
error message when I rmmod the driver.
I am running with a 2.6.16.20 kernel and my "remove/exit" functions in the
revised vt8231 driver are:
static int vt8231_remove(struct platform_device *pdev)
{
struct vt8231_data *data = platform_get_drvdata(pdev);
int i;
hwmon_device_unregister(data->class_dev);
for(i = 0; i < ARRAY_SIZE(vt8231_group_volts); i++)
sysfs_remove_group(&pdev->dev.kobj, &vt8231_group_volts[i]);
for(i = 0; i < ARRAY_SIZE(vt8231_group_temps); i++)
sysfs_remove_group(&pdev->dev.kobj, &vt8231_group_temps[i]);
sysfs_remove_group(&pdev->dev.kobj, &vt8231_group);
release_region(data->addr, VT8231_EXTENT);
platform_set_drvdata(pdev,NULL);
kfree(data);
return 0;
}
static void __exit sm_vt8231_exit(void)
{
pci_unregister_driver(&vt8231_pci_driver);
if (s_bridge != NULL) {
platform_device_unregister(pdev);
platform_driver_unregister(&vt8231_driver);
pci_dev_put(s_bridge);
s_bridge = NULL;
}
}
This seems to be correct compared to the patch that you put in for the
via686a driver as referenced in your e-mail below. I believe that I am
correctly requesting the region in the vt8231_probe() function and the only
other place it is released is in the vt8231_probe() error cleanup code.
I have seen some comments from you about this error along with a kernel
patch to change the re-ordering in platform_device_del().
http://lists.lm-sensors.org/pipermail/lm-sensors/2007-February/018937.html
I think they are relevant here because I suspect that with the above code
and your patch, the vt8231_remove() function would be called _before_ the
platform_device_del() function automatically frees any allocated resources
and therefore should work without error. With the above code but without
your patch, platform_device_del() has already automatically freed the region
before the vt8231_remove() function is called and so the region gets
released twice.
Given that the cleanup code in platform_device_del() releases the region
automatically (although the exact ordering depends on the patch), isn't the
call to release_region() in vt8231_remove() unnecessary?
Thanks,
Roger
> -----Original Message-----
> From: Jean Delvare [mailto:khali at linux-fr.org]
> Sent: 03 June 2007 12:58
> To: Roger Lucas
> Cc: LM Sensors
> Subject: Converting vt8231 to a platform driver
>
> Hi Roger,
>
> I would like to get rid of i2c-isa soon now. One of the last few users
> is your vt8231 driver. It needs to be converted to a platform driver
> before I can delete i2c-isa. Would you possibly take care of it? The
> conversion should be similar to what I did for the via686a driver a few
> days ago:
> http://lists.lm-sensors.org/pipermail/lm-sensors/2007-May/019838.html
>
> Thanks,
> --
> Jean Delvare
More information about the lm-sensors
mailing list