From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Julia Lawall <julia.lawall@inria.fr>
Subject: drivers/gpu/drm/nouveau/nvkm/engine/gr/gv100.c:153:33-34: WARNING opportunity for max()
Date: Sun, 24 Dec 2023 11:53:26 +0800 [thread overview]
Message-ID: <202312241110.HuCnnbZr-lkp@intel.com> (raw)
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Ben Skeggs <bskeggs@redhat.com>
CC: Lyude Paul <lyude@redhat.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 3f82f1c3a03694800a4104ca6b6d3282bd4e213d
commit: 3ffa6f329b610029b44ebd7bc2320a92468a0e42 drm/nouveau/gr/gv100-: port smid mapping code from nvgpu
date: 1 year, 1 month ago
:::::: branch date: 8 hours ago
:::::: commit date: 1 year, 1 month ago
config: loongarch-randconfig-r062-20231222 (https://download.01.org/0day-ci/archive/20231224/202312241110.HuCnnbZr-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 13.2.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202312241110.HuCnnbZr-lkp@intel.com/
cocci warnings: (new ones prefixed by >>)
>> drivers/gpu/drm/nouveau/nvkm/engine/gr/gv100.c:153:33-34: WARNING opportunity for max()
vim +153 drivers/gpu/drm/nouveau/nvkm/engine/gr/gv100.c
3ffa6f329b6100 Ben Skeggs 2022-06-01 104
3ffa6f329b6100 Ben Skeggs 2022-06-01 105 static int
3ffa6f329b6100 Ben Skeggs 2022-06-01 106 gv100_gr_scg_estimate_perf(struct gf100_gr *gr, unsigned long *gpc_tpc_mask,
3ffa6f329b6100 Ben Skeggs 2022-06-01 107 u32 disable_gpc, u32 disable_tpc, int *perf)
3ffa6f329b6100 Ben Skeggs 2022-06-01 108 {
3ffa6f329b6100 Ben Skeggs 2022-06-01 109 const u32 scale_factor = 512UL; /* Use fx23.9 */
3ffa6f329b6100 Ben Skeggs 2022-06-01 110 const u32 pix_scale = 1024*1024UL; /* Pix perf in [29:20] */
3ffa6f329b6100 Ben Skeggs 2022-06-01 111 const u32 world_scale = 1024UL; /* World performance in [19:10] */
3ffa6f329b6100 Ben Skeggs 2022-06-01 112 const u32 tpc_scale = 1; /* TPC balancing in [9:0] */
3ffa6f329b6100 Ben Skeggs 2022-06-01 113 u32 scg_num_pes = 0;
3ffa6f329b6100 Ben Skeggs 2022-06-01 114 u32 min_scg_gpc_pix_perf = scale_factor; /* Init perf as maximum */
3ffa6f329b6100 Ben Skeggs 2022-06-01 115 u32 average_tpcs = 0; /* Average of # of TPCs per GPC */
3ffa6f329b6100 Ben Skeggs 2022-06-01 116 u32 deviation; /* absolute diff between TPC# and average_tpcs, averaged across GPCs */
3ffa6f329b6100 Ben Skeggs 2022-06-01 117 u32 norm_tpc_deviation; /* deviation/max_tpc_per_gpc */
3ffa6f329b6100 Ben Skeggs 2022-06-01 118 u32 tpc_balance;
3ffa6f329b6100 Ben Skeggs 2022-06-01 119 u32 scg_gpc_pix_perf;
3ffa6f329b6100 Ben Skeggs 2022-06-01 120 u32 scg_world_perf;
3ffa6f329b6100 Ben Skeggs 2022-06-01 121 u32 gpc;
3ffa6f329b6100 Ben Skeggs 2022-06-01 122 u32 pes;
3ffa6f329b6100 Ben Skeggs 2022-06-01 123 int diff;
3ffa6f329b6100 Ben Skeggs 2022-06-01 124 bool tpc_removed_gpc = false;
3ffa6f329b6100 Ben Skeggs 2022-06-01 125 bool tpc_removed_pes = false;
3ffa6f329b6100 Ben Skeggs 2022-06-01 126 u32 max_tpc_gpc = 0;
3ffa6f329b6100 Ben Skeggs 2022-06-01 127 u32 num_tpc_mask;
3ffa6f329b6100 Ben Skeggs 2022-06-01 128 u32 *num_tpc_gpc;
3ffa6f329b6100 Ben Skeggs 2022-06-01 129 int ret = -EINVAL;
3ffa6f329b6100 Ben Skeggs 2022-06-01 130
3ffa6f329b6100 Ben Skeggs 2022-06-01 131 if (!(num_tpc_gpc = kcalloc(gr->gpc_nr, sizeof(*num_tpc_gpc), GFP_KERNEL)))
3ffa6f329b6100 Ben Skeggs 2022-06-01 132 return -ENOMEM;
3ffa6f329b6100 Ben Skeggs 2022-06-01 133
3ffa6f329b6100 Ben Skeggs 2022-06-01 134 /* Calculate pix-perf-reduction-rate per GPC and find bottleneck TPC */
3ffa6f329b6100 Ben Skeggs 2022-06-01 135 for (gpc = 0; gpc < gr->gpc_nr; gpc++) {
3ffa6f329b6100 Ben Skeggs 2022-06-01 136 num_tpc_mask = gpc_tpc_mask[gpc];
3ffa6f329b6100 Ben Skeggs 2022-06-01 137
3ffa6f329b6100 Ben Skeggs 2022-06-01 138 if ((gpc == disable_gpc) && num_tpc_mask & BIT(disable_tpc)) {
3ffa6f329b6100 Ben Skeggs 2022-06-01 139 /* Safety check if a TPC is removed twice */
3ffa6f329b6100 Ben Skeggs 2022-06-01 140 if (WARN_ON(tpc_removed_gpc))
3ffa6f329b6100 Ben Skeggs 2022-06-01 141 goto done;
3ffa6f329b6100 Ben Skeggs 2022-06-01 142
3ffa6f329b6100 Ben Skeggs 2022-06-01 143 /* Remove logical TPC from set */
3ffa6f329b6100 Ben Skeggs 2022-06-01 144 num_tpc_mask &= ~BIT(disable_tpc);
3ffa6f329b6100 Ben Skeggs 2022-06-01 145 tpc_removed_gpc = true;
3ffa6f329b6100 Ben Skeggs 2022-06-01 146 }
3ffa6f329b6100 Ben Skeggs 2022-06-01 147
3ffa6f329b6100 Ben Skeggs 2022-06-01 148 /* track balancing of tpcs across gpcs */
3ffa6f329b6100 Ben Skeggs 2022-06-01 149 num_tpc_gpc[gpc] = hweight32(num_tpc_mask);
3ffa6f329b6100 Ben Skeggs 2022-06-01 150 average_tpcs += num_tpc_gpc[gpc];
3ffa6f329b6100 Ben Skeggs 2022-06-01 151
3ffa6f329b6100 Ben Skeggs 2022-06-01 152 /* save the maximum numer of gpcs */
3ffa6f329b6100 Ben Skeggs 2022-06-01 @153 max_tpc_gpc = num_tpc_gpc[gpc] > max_tpc_gpc ? num_tpc_gpc[gpc] : max_tpc_gpc;
3ffa6f329b6100 Ben Skeggs 2022-06-01 154
3ffa6f329b6100 Ben Skeggs 2022-06-01 155 /*
3ffa6f329b6100 Ben Skeggs 2022-06-01 156 * Calculate ratio between TPC count and post-FS and post-SCG
3ffa6f329b6100 Ben Skeggs 2022-06-01 157 *
3ffa6f329b6100 Ben Skeggs 2022-06-01 158 * ratio represents relative throughput of the GPC
3ffa6f329b6100 Ben Skeggs 2022-06-01 159 */
3ffa6f329b6100 Ben Skeggs 2022-06-01 160 scg_gpc_pix_perf = scale_factor * num_tpc_gpc[gpc] / gr->tpc_nr[gpc];
3ffa6f329b6100 Ben Skeggs 2022-06-01 161 if (min_scg_gpc_pix_perf > scg_gpc_pix_perf)
3ffa6f329b6100 Ben Skeggs 2022-06-01 162 min_scg_gpc_pix_perf = scg_gpc_pix_perf;
3ffa6f329b6100 Ben Skeggs 2022-06-01 163
3ffa6f329b6100 Ben Skeggs 2022-06-01 164 /* Calculate # of surviving PES */
3ffa6f329b6100 Ben Skeggs 2022-06-01 165 for (pes = 0; pes < gr->ppc_nr[gpc]; pes++) {
3ffa6f329b6100 Ben Skeggs 2022-06-01 166 /* Count the number of TPC on the set */
3ffa6f329b6100 Ben Skeggs 2022-06-01 167 num_tpc_mask = gr->ppc_tpc_mask[gpc][pes] & gpc_tpc_mask[gpc];
3ffa6f329b6100 Ben Skeggs 2022-06-01 168
3ffa6f329b6100 Ben Skeggs 2022-06-01 169 if ((gpc == disable_gpc) && (num_tpc_mask & BIT(disable_tpc))) {
3ffa6f329b6100 Ben Skeggs 2022-06-01 170 if (WARN_ON(tpc_removed_pes))
3ffa6f329b6100 Ben Skeggs 2022-06-01 171 goto done;
3ffa6f329b6100 Ben Skeggs 2022-06-01 172
3ffa6f329b6100 Ben Skeggs 2022-06-01 173 num_tpc_mask &= ~BIT(disable_tpc);
3ffa6f329b6100 Ben Skeggs 2022-06-01 174 tpc_removed_pes = true;
3ffa6f329b6100 Ben Skeggs 2022-06-01 175 }
3ffa6f329b6100 Ben Skeggs 2022-06-01 176
3ffa6f329b6100 Ben Skeggs 2022-06-01 177 if (hweight32(num_tpc_mask))
3ffa6f329b6100 Ben Skeggs 2022-06-01 178 scg_num_pes++;
3ffa6f329b6100 Ben Skeggs 2022-06-01 179 }
3ffa6f329b6100 Ben Skeggs 2022-06-01 180 }
3ffa6f329b6100 Ben Skeggs 2022-06-01 181
3ffa6f329b6100 Ben Skeggs 2022-06-01 182 if (WARN_ON(!tpc_removed_gpc || !tpc_removed_pes))
3ffa6f329b6100 Ben Skeggs 2022-06-01 183 goto done;
3ffa6f329b6100 Ben Skeggs 2022-06-01 184
3ffa6f329b6100 Ben Skeggs 2022-06-01 185 if (max_tpc_gpc == 0) {
3ffa6f329b6100 Ben Skeggs 2022-06-01 186 *perf = 0;
3ffa6f329b6100 Ben Skeggs 2022-06-01 187 goto done_ok;
3ffa6f329b6100 Ben Skeggs 2022-06-01 188 }
3ffa6f329b6100 Ben Skeggs 2022-06-01 189
3ffa6f329b6100 Ben Skeggs 2022-06-01 190 /* Now calculate perf */
3ffa6f329b6100 Ben Skeggs 2022-06-01 191 scg_world_perf = (scale_factor * scg_num_pes) / gr->ppc_total;
3ffa6f329b6100 Ben Skeggs 2022-06-01 192 deviation = 0;
3ffa6f329b6100 Ben Skeggs 2022-06-01 193 average_tpcs = scale_factor * average_tpcs / gr->gpc_nr;
3ffa6f329b6100 Ben Skeggs 2022-06-01 194 for (gpc = 0; gpc < gr->gpc_nr; gpc++) {
3ffa6f329b6100 Ben Skeggs 2022-06-01 195 diff = average_tpcs - scale_factor * num_tpc_gpc[gpc];
3ffa6f329b6100 Ben Skeggs 2022-06-01 196 if (diff < 0)
3ffa6f329b6100 Ben Skeggs 2022-06-01 197 diff = -diff;
3ffa6f329b6100 Ben Skeggs 2022-06-01 198
3ffa6f329b6100 Ben Skeggs 2022-06-01 199 deviation += diff;
3ffa6f329b6100 Ben Skeggs 2022-06-01 200 }
3ffa6f329b6100 Ben Skeggs 2022-06-01 201
3ffa6f329b6100 Ben Skeggs 2022-06-01 202 deviation /= gr->gpc_nr;
3ffa6f329b6100 Ben Skeggs 2022-06-01 203
3ffa6f329b6100 Ben Skeggs 2022-06-01 204 norm_tpc_deviation = deviation / max_tpc_gpc;
3ffa6f329b6100 Ben Skeggs 2022-06-01 205
3ffa6f329b6100 Ben Skeggs 2022-06-01 206 tpc_balance = scale_factor - norm_tpc_deviation;
3ffa6f329b6100 Ben Skeggs 2022-06-01 207
3ffa6f329b6100 Ben Skeggs 2022-06-01 208 if ((tpc_balance > scale_factor) ||
3ffa6f329b6100 Ben Skeggs 2022-06-01 209 (scg_world_perf > scale_factor) ||
3ffa6f329b6100 Ben Skeggs 2022-06-01 210 (min_scg_gpc_pix_perf > scale_factor) ||
3ffa6f329b6100 Ben Skeggs 2022-06-01 211 (norm_tpc_deviation > scale_factor)) {
3ffa6f329b6100 Ben Skeggs 2022-06-01 212 WARN_ON(1);
3ffa6f329b6100 Ben Skeggs 2022-06-01 213 goto done;
3ffa6f329b6100 Ben Skeggs 2022-06-01 214 }
3ffa6f329b6100 Ben Skeggs 2022-06-01 215
3ffa6f329b6100 Ben Skeggs 2022-06-01 216 *perf = (pix_scale * min_scg_gpc_pix_perf) +
3ffa6f329b6100 Ben Skeggs 2022-06-01 217 (world_scale * scg_world_perf) +
3ffa6f329b6100 Ben Skeggs 2022-06-01 218 (tpc_scale * tpc_balance);
3ffa6f329b6100 Ben Skeggs 2022-06-01 219 done_ok:
3ffa6f329b6100 Ben Skeggs 2022-06-01 220 ret = 0;
3ffa6f329b6100 Ben Skeggs 2022-06-01 221 done:
3ffa6f329b6100 Ben Skeggs 2022-06-01 222 kfree(num_tpc_gpc);
3ffa6f329b6100 Ben Skeggs 2022-06-01 223 return ret;
3ffa6f329b6100 Ben Skeggs 2022-06-01 224 }
3ffa6f329b6100 Ben Skeggs 2022-06-01 225
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2023-12-24 3:55 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-24 3:53 kernel test robot [this message]
2023-12-28 11:36 drivers/gpu/drm/nouveau/nvkm/engine/gr/gv100.c:153:33-34: WARNING opportunity for max() kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202312241110.HuCnnbZr-lkp@intel.com \
--to=lkp@intel.com \
--cc=julia.lawall@inria.fr \
--cc=oe-kbuild@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.