From a870ff1d294126a3b46db4e0fdc14276035a2840 Mon Sep 17 00:00:00 2001 From: Konsta Holtta Date: Thu, 2 Oct 2014 15:25:53 +0300 Subject: gpu: nvgpu: Remove get and put client routines gk20a_get_client() and gk20a_put_client() routines are effectively dead code. The GPU has been using pm_runtime for reference counting whether the device should be turned on or off, and gk20a_get_client() and gk20a_put_client() have had no positive effect on the behaviour. In worst case these functions trigger some issues as they may trigger code paths that should not be run. There is also a race between get/put and busy/idle. This patch removes the functions and reworks as_gk20a.c to correctly use gk20a_busy()/gk20a_idle() where put/get was required. Additionally, finalize_poweron() is moved to gk20a_busy(), similarly as it was with gk20a_get_client(). If pm_runtime is not in use, the device is only powered on and never off. Currently this affects vgpu power management since it does not use pm_runtime yet. Bug 1562096 Change-Id: I3162655f83457e9caccd9264eed36b5d51e60c52 Signed-off-by: Arto Merilainen Signed-off-by: Konsta Holtta Reviewed-on: http://git-master/r/414998 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Seshendra Gadagottu Tested-by: Seshendra Gadagottu GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c b/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c index 6969a3a7..fbc93fc3 100644 --- a/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/ctrl_gk20a.c @@ -25,7 +25,6 @@ int gk20a_ctrl_dev_open(struct inode *inode, struct file *filp) { - int err; struct gk20a *g; gk20a_dbg_fn(""); @@ -35,22 +34,13 @@ int gk20a_ctrl_dev_open(struct inode *inode, struct file *filp) filp->private_data = g->dev; - err = gk20a_get_client(g); - if (err) { - gk20a_dbg_fn("fail to get channel!"); - return err; - } - return 0; } int gk20a_ctrl_dev_release(struct inode *inode, struct file *filp) { - struct platform_device *dev = filp->private_data; - gk20a_dbg_fn(""); - gk20a_put_client(get_gk20a(dev)); return 0; } @@ -177,21 +167,15 @@ static int gk20a_ctrl_alloc_as( } fd_install(fd, file); - err = gk20a_get_client(g); - if (err) - goto clean_up; - err = gk20a_as_alloc_share(&g->as, args->big_page_size, &as_share); if (err) - goto clean_up_client; + goto clean_up; file->private_data = as_share; args->as_fd = fd; return 0; -clean_up_client: - gk20a_put_client(g); clean_up: put_unused_fd(fd); return err; -- cgit v1.2.2