summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/therm/thrmchannel.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2016-12-20 17:11:54 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-01-04 04:44:25 -0500
commitf37f4e27e362629d5c187817104d48d703c380cc (patch)
tree8dddaa1d926016848c6cebc4aa9f4a3612341da1 /drivers/gpu/nvgpu/therm/thrmchannel.c
parent2a95a288b285b0eff16a8825298c416d185693fb (diff)
gpu: nvgpu: Use perf table only VBIOS supports it
We retrieve perf table from VBIOS only if respective HAL op is implemented. Later in code we unconditionally dereference the pointer which can lead to NULL pointer access. Fix by early aborting creation of devinit tables if the perf VBIOS getter is missing. Change-Id: If48aa6dac724056dd1feb2ef520e343736d4db85 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/1279223 GVS: Gerrit_Virtual_Submit Reviewed-by: Thomas Fleury <tfleury@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/therm/thrmchannel.c')
-rw-r--r--drivers/gpu/nvgpu/therm/thrmchannel.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/gpu/nvgpu/therm/thrmchannel.c b/drivers/gpu/nvgpu/therm/thrmchannel.c
index b5a7dfd2..aa40dac8 100644
--- a/drivers/gpu/nvgpu/therm/thrmchannel.c
+++ b/drivers/gpu/nvgpu/therm/thrmchannel.c
@@ -131,13 +131,14 @@ static u32 devinit_get_therm_channel_table(struct gk20a *g,
131 131
132 gk20a_dbg_info(""); 132 gk20a_dbg_info("");
133 133
134 if (g->ops.bios.get_perf_table_ptrs) { 134 if (!g->ops.bios.get_perf_table_ptrs)
135 therm_channel_table_ptr = (u8 *)g->ops.bios.get_perf_table_ptrs(g, 135 return -EINVAL;
136 g->bios.perf_token, THERMAL_CHANNEL_TABLE); 136
137 if (therm_channel_table_ptr == NULL) { 137 therm_channel_table_ptr = (u8 *)g->ops.bios.get_perf_table_ptrs(g,
138 status = -EINVAL; 138 g->bios.perf_token, THERMAL_CHANNEL_TABLE);
139 goto done; 139 if (therm_channel_table_ptr == NULL) {
140 } 140 status = -EINVAL;
141 goto done;
141 } 142 }
142 143
143 memcpy(&therm_channel_table_header, therm_channel_table_ptr, 144 memcpy(&therm_channel_table_header, therm_channel_table_ptr,