From bc6625b9b2a2e5ef05cedf0888c28819d3c3f412 Mon Sep 17 00:00:00 2001 From: Scott Long Date: Thu, 23 Aug 2018 10:55:04 -0700 Subject: gpu: nvgpu: fix zbc MISRA 10.1 violations The gr_gk20a_add_zbc() routine returns a signed error (errno) status value. Current callers of this function use a bitwise OR to collect the returned error status values to generate a single value to return. Bitwise OR on signed status values is flagged as a violation of MISRA Rule 10.1 (not to mention that in this case it potentially results in a garbage return value). To eliminate such violations this change modifies the following routines to fail immediately on the first error from a call to gr_gk20a_add_zbc(): * gr_gk20a_load_zbc_default_table() * gr_gv11b_load_stencil_default_tbl() JIRA NVGPU-650 Change-Id: If733c1bb0e05943ff5d0355de729133c89233583 Signed-off-by: Scott Long Reviewed-on: https://git-master.nvidia.com/r/1805501 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 50 +++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 19 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a') diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index d4c461af..dbf9ff05 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -3985,7 +3985,8 @@ static int gr_gk20a_load_zbc_table(struct gk20a *g, struct gr_gk20a *gr) int gr_gk20a_load_zbc_default_table(struct gk20a *g, struct gr_gk20a *gr) { struct zbc_entry zbc_val; - u32 i, err; + u32 i; + int err; nvgpu_mutex_init(&gr->zbc_lock); @@ -4001,6 +4002,9 @@ int gr_gk20a_load_zbc_default_table(struct gk20a *g, struct gr_gk20a *gr) zbc_val.color_l2[0] = 0xff000000; zbc_val.color_ds[3] = 0x3f800000; err = gr_gk20a_add_zbc(g, gr, &zbc_val); + if (err != 0) { + goto color_fail; + } /* Transparent black = (fmt 1 = zero) */ zbc_val.format = gr_ds_zbc_color_fmt_val_zero_v(); @@ -4008,7 +4012,10 @@ int gr_gk20a_load_zbc_default_table(struct gk20a *g, struct gr_gk20a *gr) zbc_val.color_ds[i] = 0; zbc_val.color_l2[i] = 0; } - err |= gr_gk20a_add_zbc(g, gr, &zbc_val); + err = gr_gk20a_add_zbc(g, gr, &zbc_val); + if (err != 0) { + goto color_fail; + } /* Opaque white (i.e. solid white) = (fmt 2 = uniform 1) */ zbc_val.format = gr_ds_zbc_color_fmt_val_unorm_one_v(); @@ -4016,42 +4023,47 @@ int gr_gk20a_load_zbc_default_table(struct gk20a *g, struct gr_gk20a *gr) zbc_val.color_ds[i] = 0x3f800000; zbc_val.color_l2[i] = 0xffffffff; } - err |= gr_gk20a_add_zbc(g, gr, &zbc_val); - - if (!err) - gr->max_default_color_index = 3; - else { - nvgpu_err(g, - "fail to load default zbc color table"); - return err; + err = gr_gk20a_add_zbc(g, gr, &zbc_val); + if (err != 0) { + goto color_fail; } + gr->max_default_color_index = 3; + /* load default depth table */ zbc_val.type = GK20A_ZBC_TYPE_DEPTH; zbc_val.format = gr_ds_zbc_z_fmt_val_fp32_v(); zbc_val.depth = 0x3f800000; err = gr_gk20a_add_zbc(g, gr, &zbc_val); + if (err != 0) { + goto depth_fail; + } zbc_val.format = gr_ds_zbc_z_fmt_val_fp32_v(); zbc_val.depth = 0; - err |= gr_gk20a_add_zbc(g, gr, &zbc_val); - - if (!err) - gr->max_default_depth_index = 2; - else { - nvgpu_err(g, - "fail to load default zbc depth table"); - return err; + err = gr_gk20a_add_zbc(g, gr, &zbc_val); + if (err != 0) { + goto depth_fail; } + gr->max_default_depth_index = 2; + if (g->ops.gr.load_zbc_s_default_tbl) { err = g->ops.gr.load_zbc_s_default_tbl(g, gr); - if (err) + if (err != 0) { return err; + } } return 0; + +color_fail: + nvgpu_err(g, "fail to load default zbc color table"); + return err; +depth_fail: + nvgpu_err(g, "fail to load default zbc depth table"); + return err; } int _gk20a_gr_zbc_set_table(struct gk20a *g, struct gr_gk20a *gr, -- cgit v1.2.2