gpu: nvgpu: split away power node removal

Presently, gk20a_user_deinit is used to remove all device nodes
including "power" node as well.

Split removal of power node into a separate function
gk20a_power_node_deinit to enable other device removal during the
normal runtime_suspend path to facilitate the fast path for MIG
reconfiguration. Powernode can be removed only during a call to
Rmmod. This also enables separately powering off the device nodes
in the unlikely case of a poweron failure.

Bug 3308828
Jira NVGPU-6920

Change-Id: Ib045a09a992a63c468492a837b273cca41e20f15
Signed-off-by: Debarshi Dutta <ddutta@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2543014
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Reviewed-by: svcacv <svcacv@nvidia.com>
Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com>
Reviewed-by: Dinesh T <dt@nvidia.com>
Reviewed-by: Lakshmanan M <lm@nvidia.com>
Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Debarshi Dutta
2021-06-11 11:40:07 +05:30
committed by mobile promotions
parent a1d0957a9b
commit 8f9ac1dea9
5 changed files with 63 additions and 35 deletions

View File

@@ -442,7 +442,7 @@ int gk20a_pm_finalize_poweron(struct device *dev)
}
if (!l->dev_nodes_created) {
err = gk20a_user_init(dev);
err = gk20a_user_nodes_init(dev);
if (err) {
goto done;
}
@@ -542,7 +542,7 @@ done:
nvgpu_disable_irqs(g);
nvgpu_remove_sim_support_linux(g);
if (l->dev_nodes_created) {
gk20a_user_deinit(dev);
gk20a_user_nodes_deinit(dev);
}
}
@@ -1783,7 +1783,9 @@ int nvgpu_remove(struct device *dev)
nvgpu_clk_arb_cleanup_arbiter(g);
gk20a_user_deinit(dev);
gk20a_user_nodes_deinit(dev_from_gk20a(g));
gk20a_power_node_deinit(dev_from_gk20a(g));
gk20a_debug_deinit(g);