mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
gpu: nvgpu: free boardobj if construct hits an err
During construct of some VFE/CLK boardobjs, some data is filled after a boardobj allocation is done. Free up boardobj memory if an error is encountered in the data filling. Coverity ID 490171 Coverity ID 490172 Bug 200192125 Change-Id: I20621f7f9f9e379b8dced4905cd417c2ffa905b0 Signed-off-by: Vijayakumar <vsubbu@nvidia.com> Reviewed-on: http://git-master/r/1280700 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
18a5111380
commit
4099785e2d
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
|
||||
* Copyright (c) 2017, 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,
|
||||
@@ -703,14 +703,22 @@ static u32 clk_prog_construct_1x_master_table(struct gk20a *g,
|
||||
pclkprog->p_slave_entries =
|
||||
(struct ctrl_clk_clk_prog_1x_master_table_slave_entry *)
|
||||
kzalloc(slavesize, GFP_KERNEL);
|
||||
if (!pclkprog->p_slave_entries)
|
||||
return -ENOMEM;
|
||||
|
||||
if (!pclkprog->p_slave_entries) {
|
||||
status = -ENOMEM;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
memset(pclkprog->p_slave_entries, CTRL_CLK_CLK_DOMAIN_INDEX_INVALID,
|
||||
slavesize);
|
||||
|
||||
memcpy(pclkprog->p_slave_entries, ptmpprog->p_slave_entries, slavesize);
|
||||
|
||||
exit:
|
||||
if (status) {
|
||||
if (*ppboardobj != NULL)
|
||||
(*ppboardobj)->destruct(*ppboardobj);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
|
||||
* Copyright (c) 2017, 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,
|
||||
@@ -668,12 +668,19 @@ static u32 vfe_var_construct_single_sensed_fuse(struct gk20a *g,
|
||||
if (pvfevar->vfield_info.fuse.segment_count == 0) {
|
||||
gk20a_err(dev_from_gk20a(g), "unable to get fuse reg info %x",
|
||||
pvfevar->vfield_info.v_field_id);
|
||||
return -EINVAL;
|
||||
status = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
if (pvfevar->vfield_ver_info.fuse.segment_count == 0) {
|
||||
gk20a_err(dev_from_gk20a(g), "unable to get fuse reg info %x",
|
||||
pvfevar->vfield_ver_info.v_field_id_ver);
|
||||
return -EINVAL;
|
||||
status = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
exit:
|
||||
if (status) {
|
||||
if (*ppboardobj != NULL)
|
||||
(*ppboardobj)->destruct(*ppboardobj);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user