All of lore.kernel.org
 help / color / mirror / Atom feed
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

             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.