mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 01:50:07 +03:00
While removing nvgpu driver, devm mapped reg mappings are released on driver_unregister. For iGPU, these regs are explicitly unmapped with iounmap(). This results in "Trying to vfree() nonexistent vm area" warnings on driver removal. Address this by using devm* variants to map all IO regions of both iGPU and dGPU and let the driver unregister release these mappings. Also, lock out GPU regs in driver removal path. Bug 1987855 Change-Id: I0388daf90bea3eaf8752255059cfd3ceabf66e7d Signed-off-by: Nitin Kumbhar <nkumbhar@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1730539 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
35 lines
1.3 KiB
C
35 lines
1.3 KiB
C
/*
|
|
* Copyright (c) 2011-2018, NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms and conditions of the GNU General Public License,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*/
|
|
#ifndef __NVGPU_COMMON_LINUX_MODULE_H__
|
|
#define __NVGPU_COMMON_LINUX_MODULE_H__
|
|
|
|
struct gk20a;
|
|
struct device;
|
|
struct nvgpu_os_linux;
|
|
|
|
int gk20a_pm_finalize_poweron(struct device *dev);
|
|
int nvgpu_finalize_poweron_linux(struct nvgpu_os_linux *l);
|
|
void gk20a_remove_support(struct gk20a *g);
|
|
void gk20a_driver_start_unload(struct gk20a *g);
|
|
int nvgpu_quiesce(struct gk20a *g);
|
|
int nvgpu_remove(struct device *dev, struct class *class);
|
|
void nvgpu_free_irq(struct gk20a *g);
|
|
struct device_node *nvgpu_get_node(struct gk20a *g);
|
|
void __iomem *nvgpu_devm_ioremap_resource(struct platform_device *dev, int i,
|
|
struct resource **out);
|
|
void __iomem *nvgpu_devm_ioremap(struct device *dev, resource_size_t offset,
|
|
resource_size_t size);
|
|
extern struct class nvgpu_class;
|
|
|
|
#endif
|