gpu: nvgpu: add gk20a_scale_exit()

When removing the module, remove the device from devfreq and free
resources allocated when scaling is initialized.

Bug 1476801

Change-Id: I7bb0f8112a5bf7e5ce2fc56cf8af7059d910002c
Signed-off-by: Konsta Holtta <kholtta@nvidia.com>
Reviewed-on: http://git-master/r/594444
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
Konsta Holtta
2014-11-05 18:18:52 +02:00
committed by Dan Willemsen
parent 6049301229
commit e99b59d14a
3 changed files with 26 additions and 0 deletions

View File

@@ -1460,6 +1460,9 @@ static int __exit gk20a_remove(struct platform_device *dev)
cfb_remove_device(&dev->dev);
#endif
if (IS_ENABLED(CONFIG_GK20A_DEVFREQ))
gk20a_scale_exit(dev);
if (g->remove_support)
g->remove_support(dev);

View File

@@ -312,6 +312,28 @@ err_get_freqs:
g->scale_profile = NULL;
}
void gk20a_scale_exit(struct platform_device *pdev)
{
struct gk20a_platform *platform = platform_get_drvdata(pdev);
struct gk20a *g = platform->g;
int err;
if (platform->qos_id < PM_QOS_NUM_CLASSES &&
platform->qos_id != PM_QOS_RESERVED &&
platform->postscale) {
pm_qos_remove_notifier(platform->qos_id,
&g->scale_profile->qos_notify_block);
}
if (platform->devfreq_governor) {
err = devfreq_remove_device(g->devfreq);
g->devfreq = NULL;
}
kfree(g->scale_profile);
g->scale_profile = NULL;
}
/*
* gk20a_scale_hw_init(dev)
*

View File

@@ -35,6 +35,7 @@ struct gk20a_scale_profile {
/* Initialization and de-initialization for module */
void gk20a_scale_init(struct platform_device *);
void gk20a_scale_exit(struct platform_device *);
void gk20a_scale_hw_init(struct platform_device *pdev);
#ifdef CONFIG_GK20A_DEVFREQ