Message ID | 1397580275-11967-1-git-send-email-alexander.deucher@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Am 15.04.2014 18:44, schrieb Alex Deucher: > Need to properly unregister the hwmon device on driver > unload. > > v2: minor clean up > > bug: > https://bugzilla.kernel.org/show_bug.cgi?id=73931 > > Signed-off-by: Alex Deucher <alexander.deucher@amd.com> > Cc: stable@vger.kernel.org Added to my 3.15 queue. Sorry for the delay, those patches somehow got lost in my inbox. Christian. > --- > drivers/gpu/drm/radeon/radeon_pm.c | 21 +++++++++++++++------ > 1 file changed, 15 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c > index ee738a5..e0a664d 100644 > --- a/drivers/gpu/drm/radeon/radeon_pm.c > +++ b/drivers/gpu/drm/radeon/radeon_pm.c > @@ -603,7 +603,6 @@ static const struct attribute_group *hwmon_groups[] = { > static int radeon_hwmon_init(struct radeon_device *rdev) > { > int err = 0; > - struct device *hwmon_dev; > > switch (rdev->pm.int_thermal_type) { > case THERMAL_TYPE_RV6XX: > @@ -616,11 +615,11 @@ static int radeon_hwmon_init(struct radeon_device *rdev) > case THERMAL_TYPE_KV: > if (rdev->asic->pm.get_temperature == NULL) > return err; > - hwmon_dev = hwmon_device_register_with_groups(rdev->dev, > - "radeon", rdev, > - hwmon_groups); > - if (IS_ERR(hwmon_dev)) { > - err = PTR_ERR(hwmon_dev); > + rdev->pm.int_hwmon_dev = hwmon_device_register_with_groups(rdev->dev, > + "radeon", rdev, > + hwmon_groups); > + if (IS_ERR(rdev->pm.int_hwmon_dev)) { > + err = PTR_ERR(rdev->pm.int_hwmon_dev); > dev_err(rdev->dev, > "Unable to register hwmon device: %d\n", err); > } > @@ -632,6 +631,12 @@ static int radeon_hwmon_init(struct radeon_device *rdev) > return err; > } > > +static void radeon_hwmon_fini(struct radeon_device *rdev) > +{ > + if (rdev->pm.int_hwmon_dev) > + hwmon_device_unregister(rdev->pm.int_hwmon_dev); > +} > + > static void radeon_dpm_thermal_work_handler(struct work_struct *work) > { > struct radeon_device *rdev = > @@ -1353,6 +1358,8 @@ static void radeon_pm_fini_old(struct radeon_device *rdev) > device_remove_file(rdev->dev, &dev_attr_power_method); > } > > + radeon_hwmon_fini(rdev); > + > if (rdev->pm.power_state) > kfree(rdev->pm.power_state); > } > @@ -1372,6 +1379,8 @@ static void radeon_pm_fini_dpm(struct radeon_device *rdev) > } > radeon_dpm_fini(rdev); > > + radeon_hwmon_fini(rdev); > + > if (rdev->pm.power_state) > kfree(rdev->pm.power_state); > }
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c index ee738a5..e0a664d 100644 --- a/drivers/gpu/drm/radeon/radeon_pm.c +++ b/drivers/gpu/drm/radeon/radeon_pm.c @@ -603,7 +603,6 @@ static const struct attribute_group *hwmon_groups[] = { static int radeon_hwmon_init(struct radeon_device *rdev) { int err = 0; - struct device *hwmon_dev; switch (rdev->pm.int_thermal_type) { case THERMAL_TYPE_RV6XX: @@ -616,11 +615,11 @@ static int radeon_hwmon_init(struct radeon_device *rdev) case THERMAL_TYPE_KV: if (rdev->asic->pm.get_temperature == NULL) return err; - hwmon_dev = hwmon_device_register_with_groups(rdev->dev, - "radeon", rdev, - hwmon_groups); - if (IS_ERR(hwmon_dev)) { - err = PTR_ERR(hwmon_dev); + rdev->pm.int_hwmon_dev = hwmon_device_register_with_groups(rdev->dev, + "radeon", rdev, + hwmon_groups); + if (IS_ERR(rdev->pm.int_hwmon_dev)) { + err = PTR_ERR(rdev->pm.int_hwmon_dev); dev_err(rdev->dev, "Unable to register hwmon device: %d\n", err); } @@ -632,6 +631,12 @@ static int radeon_hwmon_init(struct radeon_device *rdev) return err; } +static void radeon_hwmon_fini(struct radeon_device *rdev) +{ + if (rdev->pm.int_hwmon_dev) + hwmon_device_unregister(rdev->pm.int_hwmon_dev); +} + static void radeon_dpm_thermal_work_handler(struct work_struct *work) { struct radeon_device *rdev = @@ -1353,6 +1358,8 @@ static void radeon_pm_fini_old(struct radeon_device *rdev) device_remove_file(rdev->dev, &dev_attr_power_method); } + radeon_hwmon_fini(rdev); + if (rdev->pm.power_state) kfree(rdev->pm.power_state); } @@ -1372,6 +1379,8 @@ static void radeon_pm_fini_dpm(struct radeon_device *rdev) } radeon_dpm_fini(rdev); + radeon_hwmon_fini(rdev); + if (rdev->pm.power_state) kfree(rdev->pm.power_state); }
Need to properly unregister the hwmon device on driver unload. v2: minor clean up bug: https://bugzilla.kernel.org/show_bug.cgi?id=73931 Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org --- drivers/gpu/drm/radeon/radeon_pm.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-)