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: mm/cma.c:509:3-5: opportunity for str_plural(nr)
Date: Sat, 19 Apr 2025 19:28:13 +0800	[thread overview]
Message-ID: <202504191949.RsRida7L-lkp@intel.com> (raw)

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Frank van der Linden <fvdl@google.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   8560697b23dc2f405cb463af2b17256a9888129d
commit: c009da4258f9885c5a3749fc004870db9c0e7a99 mm, cma: support multiple contiguous ranges, if requested
date:   5 weeks ago
:::::: branch date: 8 hours ago
:::::: commit date: 5 weeks ago
config: hexagon-randconfig-r064-20250419 (https://download.01.org/0day-ci/archive/20250419/202504191949.RsRida7L-lkp@intel.com/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)

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/202504191949.RsRida7L-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> mm/cma.c:509:3-5: opportunity for str_plural(nr)

vim +509 mm/cma.c

c009da4258f9885 Frank van der Linden 2025-02-28  319  
c009da4258f9885 Frank van der Linden 2025-02-28  320  /*
c009da4258f9885 Frank van der Linden 2025-02-28  321   * Create CMA areas with a total size of @total_size. A normal allocation
c009da4258f9885 Frank van der Linden 2025-02-28  322   * for one area is tried first. If that fails, the biggest memblock
c009da4258f9885 Frank van der Linden 2025-02-28  323   * ranges above 4G are selected, and allocated bottom up.
c009da4258f9885 Frank van der Linden 2025-02-28  324   *
c009da4258f9885 Frank van der Linden 2025-02-28  325   * The complexity here is not great, but this function will only be
c009da4258f9885 Frank van der Linden 2025-02-28  326   * called during boot, and the lists operated on have fewer than
c009da4258f9885 Frank van der Linden 2025-02-28  327   * CMA_MAX_RANGES elements (default value: 8).
c009da4258f9885 Frank van der Linden 2025-02-28  328   */
c009da4258f9885 Frank van der Linden 2025-02-28  329  int __init cma_declare_contiguous_multi(phys_addr_t total_size,
c009da4258f9885 Frank van der Linden 2025-02-28  330  			phys_addr_t align, unsigned int order_per_bit,
c009da4258f9885 Frank van der Linden 2025-02-28  331  			const char *name, struct cma **res_cma, int nid)
c009da4258f9885 Frank van der Linden 2025-02-28  332  {
c009da4258f9885 Frank van der Linden 2025-02-28  333  	phys_addr_t start, end;
c009da4258f9885 Frank van der Linden 2025-02-28  334  	phys_addr_t size, sizesum, sizeleft;
c009da4258f9885 Frank van der Linden 2025-02-28  335  	struct cma_init_memrange *mrp, *mlp, *failed;
c009da4258f9885 Frank van der Linden 2025-02-28  336  	struct cma_memrange *cmrp;
c009da4258f9885 Frank van der Linden 2025-02-28  337  	LIST_HEAD(ranges);
c009da4258f9885 Frank van der Linden 2025-02-28  338  	LIST_HEAD(final_ranges);
c009da4258f9885 Frank van der Linden 2025-02-28  339  	struct list_head *mp, *next;
c009da4258f9885 Frank van der Linden 2025-02-28  340  	int ret, nr = 1;
c009da4258f9885 Frank van der Linden 2025-02-28  341  	u64 i;
c009da4258f9885 Frank van der Linden 2025-02-28  342  	struct cma *cma;
c009da4258f9885 Frank van der Linden 2025-02-28  343  
c009da4258f9885 Frank van der Linden 2025-02-28  344  	/*
c009da4258f9885 Frank van der Linden 2025-02-28  345  	 * First, try it the normal way, producing just one range.
c009da4258f9885 Frank van der Linden 2025-02-28  346  	 */
c009da4258f9885 Frank van der Linden 2025-02-28  347  	ret = __cma_declare_contiguous_nid(0, total_size, 0, align,
c009da4258f9885 Frank van der Linden 2025-02-28  348  			order_per_bit, false, name, res_cma, nid);
c009da4258f9885 Frank van der Linden 2025-02-28  349  	if (ret != -ENOMEM)
c009da4258f9885 Frank van der Linden 2025-02-28  350  		goto out;
c009da4258f9885 Frank van der Linden 2025-02-28  351  
c009da4258f9885 Frank van der Linden 2025-02-28  352  	/*
c009da4258f9885 Frank van der Linden 2025-02-28  353  	 * Couldn't find one range that fits our needs, so try multiple
c009da4258f9885 Frank van der Linden 2025-02-28  354  	 * ranges.
c009da4258f9885 Frank van der Linden 2025-02-28  355  	 *
c009da4258f9885 Frank van der Linden 2025-02-28  356  	 * No need to do the alignment checks here, the call to
c009da4258f9885 Frank van der Linden 2025-02-28  357  	 * cma_declare_contiguous_nid above would have caught
c009da4258f9885 Frank van der Linden 2025-02-28  358  	 * any issues. With the checks, we know that:
c009da4258f9885 Frank van der Linden 2025-02-28  359  	 *
c009da4258f9885 Frank van der Linden 2025-02-28  360  	 * - @align is a power of 2
c009da4258f9885 Frank van der Linden 2025-02-28  361  	 * - @align is >= pageblock alignment
c009da4258f9885 Frank van der Linden 2025-02-28  362  	 * - @size is aligned to @align and to @order_per_bit
c009da4258f9885 Frank van der Linden 2025-02-28  363  	 *
c009da4258f9885 Frank van der Linden 2025-02-28  364  	 * So, as long as we create ranges that have a base
c009da4258f9885 Frank van der Linden 2025-02-28  365  	 * aligned to @align, and a size that is aligned to
c009da4258f9885 Frank van der Linden 2025-02-28  366  	 * both @align and @order_to_bit, things will work out.
c009da4258f9885 Frank van der Linden 2025-02-28  367  	 */
c009da4258f9885 Frank van der Linden 2025-02-28  368  	nr = 0;
c009da4258f9885 Frank van der Linden 2025-02-28  369  	sizesum = 0;
c009da4258f9885 Frank van der Linden 2025-02-28  370  	failed = NULL;
c009da4258f9885 Frank van der Linden 2025-02-28  371  
c009da4258f9885 Frank van der Linden 2025-02-28  372  	ret = cma_new_area(name, total_size, order_per_bit, &cma);
c009da4258f9885 Frank van der Linden 2025-02-28  373  	if (ret != 0)
c009da4258f9885 Frank van der Linden 2025-02-28  374  		goto out;
c009da4258f9885 Frank van der Linden 2025-02-28  375  
c009da4258f9885 Frank van der Linden 2025-02-28  376  	align = max_t(phys_addr_t, align, CMA_MIN_ALIGNMENT_BYTES);
c009da4258f9885 Frank van der Linden 2025-02-28  377  	/*
c009da4258f9885 Frank van der Linden 2025-02-28  378  	 * Create a list of ranges above 4G, largest range first.
c009da4258f9885 Frank van der Linden 2025-02-28  379  	 */
c009da4258f9885 Frank van der Linden 2025-02-28  380  	for_each_free_mem_range(i, nid, MEMBLOCK_NONE, &start, &end, NULL) {
c009da4258f9885 Frank van der Linden 2025-02-28  381  		if (upper_32_bits(start) == 0)
c009da4258f9885 Frank van der Linden 2025-02-28  382  			continue;
c009da4258f9885 Frank van der Linden 2025-02-28  383  
c009da4258f9885 Frank van der Linden 2025-02-28  384  		start = ALIGN(start, align);
c009da4258f9885 Frank van der Linden 2025-02-28  385  		if (start >= end)
c009da4258f9885 Frank van der Linden 2025-02-28  386  			continue;
c009da4258f9885 Frank van der Linden 2025-02-28  387  
c009da4258f9885 Frank van der Linden 2025-02-28  388  		end = ALIGN_DOWN(end, align);
c009da4258f9885 Frank van der Linden 2025-02-28  389  		if (end <= start)
c009da4258f9885 Frank van der Linden 2025-02-28  390  			continue;
c009da4258f9885 Frank van der Linden 2025-02-28  391  
c009da4258f9885 Frank van der Linden 2025-02-28  392  		size = end - start;
c009da4258f9885 Frank van der Linden 2025-02-28  393  		size = ALIGN_DOWN(size, (PAGE_SIZE << order_per_bit));
c009da4258f9885 Frank van der Linden 2025-02-28  394  		if (!size)
c009da4258f9885 Frank van der Linden 2025-02-28  395  			continue;
c009da4258f9885 Frank van der Linden 2025-02-28  396  		sizesum += size;
c009da4258f9885 Frank van der Linden 2025-02-28  397  
c009da4258f9885 Frank van der Linden 2025-02-28  398  		pr_debug("consider %016llx - %016llx\n", (u64)start, (u64)end);
c009da4258f9885 Frank van der Linden 2025-02-28  399  
c009da4258f9885 Frank van der Linden 2025-02-28  400  		/*
c009da4258f9885 Frank van der Linden 2025-02-28  401  		 * If we don't yet have used the maximum number of
c009da4258f9885 Frank van der Linden 2025-02-28  402  		 * areas, grab a new one.
c009da4258f9885 Frank van der Linden 2025-02-28  403  		 *
c009da4258f9885 Frank van der Linden 2025-02-28  404  		 * If we can't use anymore, see if this range is not
c009da4258f9885 Frank van der Linden 2025-02-28  405  		 * smaller than the smallest one already recorded. If
c009da4258f9885 Frank van der Linden 2025-02-28  406  		 * not, re-use the smallest element.
c009da4258f9885 Frank van der Linden 2025-02-28  407  		 */
c009da4258f9885 Frank van der Linden 2025-02-28  408  		if (nr < CMA_MAX_RANGES)
c009da4258f9885 Frank van der Linden 2025-02-28  409  			mrp = &memranges[nr++];
c009da4258f9885 Frank van der Linden 2025-02-28  410  		else {
c009da4258f9885 Frank van der Linden 2025-02-28  411  			mrp = list_last_entry(&ranges,
c009da4258f9885 Frank van der Linden 2025-02-28  412  					      struct cma_init_memrange, list);
c009da4258f9885 Frank van der Linden 2025-02-28  413  			if (size < mrp->size)
c009da4258f9885 Frank van der Linden 2025-02-28  414  				continue;
c009da4258f9885 Frank van der Linden 2025-02-28  415  			list_del(&mrp->list);
c009da4258f9885 Frank van der Linden 2025-02-28  416  			sizesum -= mrp->size;
c009da4258f9885 Frank van der Linden 2025-02-28  417  			pr_debug("deleted %016llx - %016llx from the list\n",
c009da4258f9885 Frank van der Linden 2025-02-28  418  				(u64)mrp->base, (u64)mrp->base + size);
c009da4258f9885 Frank van der Linden 2025-02-28  419  		}
c009da4258f9885 Frank van der Linden 2025-02-28  420  		mrp->base = start;
c009da4258f9885 Frank van der Linden 2025-02-28  421  		mrp->size = size;
c009da4258f9885 Frank van der Linden 2025-02-28  422  
c009da4258f9885 Frank van der Linden 2025-02-28  423  		/*
c009da4258f9885 Frank van der Linden 2025-02-28  424  		 * Now do a sorted insert.
c009da4258f9885 Frank van der Linden 2025-02-28  425  		 */
c009da4258f9885 Frank van der Linden 2025-02-28  426  		list_insert_sorted(&ranges, mrp, revsizecmp);
c009da4258f9885 Frank van der Linden 2025-02-28  427  		pr_debug("added %016llx - %016llx to the list\n",
c009da4258f9885 Frank van der Linden 2025-02-28  428  		    (u64)mrp->base, (u64)mrp->base + size);
c009da4258f9885 Frank van der Linden 2025-02-28  429  		pr_debug("total size now %llu\n", (u64)sizesum);
c009da4258f9885 Frank van der Linden 2025-02-28  430  	}
c009da4258f9885 Frank van der Linden 2025-02-28  431  
c009da4258f9885 Frank van der Linden 2025-02-28  432  	/*
c009da4258f9885 Frank van der Linden 2025-02-28  433  	 * There is not enough room in the CMA_MAX_RANGES largest
c009da4258f9885 Frank van der Linden 2025-02-28  434  	 * ranges, so bail out.
c009da4258f9885 Frank van der Linden 2025-02-28  435  	 */
c009da4258f9885 Frank van der Linden 2025-02-28  436  	if (sizesum < total_size) {
c009da4258f9885 Frank van der Linden 2025-02-28  437  		cma_drop_area(cma);
c009da4258f9885 Frank van der Linden 2025-02-28  438  		ret = -ENOMEM;
c009da4258f9885 Frank van der Linden 2025-02-28  439  		goto out;
c009da4258f9885 Frank van der Linden 2025-02-28  440  	}
c009da4258f9885 Frank van der Linden 2025-02-28  441  
c009da4258f9885 Frank van der Linden 2025-02-28  442  	/*
c009da4258f9885 Frank van der Linden 2025-02-28  443  	 * Found ranges that provide enough combined space.
c009da4258f9885 Frank van der Linden 2025-02-28  444  	 * Now, sorted them by address, smallest first, because we
c009da4258f9885 Frank van der Linden 2025-02-28  445  	 * want to mimic a bottom-up memblock allocation.
c009da4258f9885 Frank van der Linden 2025-02-28  446  	 */
c009da4258f9885 Frank van der Linden 2025-02-28  447  	sizesum = 0;
c009da4258f9885 Frank van der Linden 2025-02-28  448  	list_for_each_safe(mp, next, &ranges) {
c009da4258f9885 Frank van der Linden 2025-02-28  449  		mlp = list_entry(mp, struct cma_init_memrange, list);
c009da4258f9885 Frank van der Linden 2025-02-28  450  		list_del(mp);
c009da4258f9885 Frank van der Linden 2025-02-28  451  		list_insert_sorted(&final_ranges, mlp, basecmp);
c009da4258f9885 Frank van der Linden 2025-02-28  452  		sizesum += mlp->size;
c009da4258f9885 Frank van der Linden 2025-02-28  453  		if (sizesum >= total_size)
c009da4258f9885 Frank van der Linden 2025-02-28  454  			break;
c009da4258f9885 Frank van der Linden 2025-02-28  455  	}
c009da4258f9885 Frank van der Linden 2025-02-28  456  
c009da4258f9885 Frank van der Linden 2025-02-28  457  	/*
c009da4258f9885 Frank van der Linden 2025-02-28  458  	 * Walk the final list, and add a CMA range for
c009da4258f9885 Frank van der Linden 2025-02-28  459  	 * each range, possibly not using the last one fully.
c009da4258f9885 Frank van der Linden 2025-02-28  460  	 */
c009da4258f9885 Frank van der Linden 2025-02-28  461  	nr = 0;
c009da4258f9885 Frank van der Linden 2025-02-28  462  	sizeleft = total_size;
c009da4258f9885 Frank van der Linden 2025-02-28  463  	list_for_each(mp, &final_ranges) {
c009da4258f9885 Frank van der Linden 2025-02-28  464  		mlp = list_entry(mp, struct cma_init_memrange, list);
c009da4258f9885 Frank van der Linden 2025-02-28  465  		size = min(sizeleft, mlp->size);
c009da4258f9885 Frank van der Linden 2025-02-28  466  		if (memblock_reserve(mlp->base, size)) {
c009da4258f9885 Frank van der Linden 2025-02-28  467  			/*
c009da4258f9885 Frank van der Linden 2025-02-28  468  			 * Unexpected error. Could go on to
c009da4258f9885 Frank van der Linden 2025-02-28  469  			 * the next one, but just abort to
c009da4258f9885 Frank van der Linden 2025-02-28  470  			 * be safe.
c009da4258f9885 Frank van der Linden 2025-02-28  471  			 */
c009da4258f9885 Frank van der Linden 2025-02-28  472  			failed = mlp;
c009da4258f9885 Frank van der Linden 2025-02-28  473  			break;
c009da4258f9885 Frank van der Linden 2025-02-28  474  		}
c009da4258f9885 Frank van der Linden 2025-02-28  475  
c009da4258f9885 Frank van der Linden 2025-02-28  476  		pr_debug("created region %d: %016llx - %016llx\n",
c009da4258f9885 Frank van der Linden 2025-02-28  477  		    nr, (u64)mlp->base, (u64)mlp->base + size);
c009da4258f9885 Frank van der Linden 2025-02-28  478  		cmrp = &cma->ranges[nr++];
c009da4258f9885 Frank van der Linden 2025-02-28  479  		cmrp->base_pfn = PHYS_PFN(mlp->base);
c009da4258f9885 Frank van der Linden 2025-02-28  480  		cmrp->count = size >> PAGE_SHIFT;
c009da4258f9885 Frank van der Linden 2025-02-28  481  
c009da4258f9885 Frank van der Linden 2025-02-28  482  		sizeleft -= size;
c009da4258f9885 Frank van der Linden 2025-02-28  483  		if (sizeleft == 0)
c009da4258f9885 Frank van der Linden 2025-02-28  484  			break;
c009da4258f9885 Frank van der Linden 2025-02-28  485  	}
c009da4258f9885 Frank van der Linden 2025-02-28  486  
c009da4258f9885 Frank van der Linden 2025-02-28  487  	if (failed) {
c009da4258f9885 Frank van der Linden 2025-02-28  488  		list_for_each(mp, &final_ranges) {
c009da4258f9885 Frank van der Linden 2025-02-28  489  			mlp = list_entry(mp, struct cma_init_memrange, list);
c009da4258f9885 Frank van der Linden 2025-02-28  490  			if (mlp == failed)
c009da4258f9885 Frank van der Linden 2025-02-28  491  				break;
c009da4258f9885 Frank van der Linden 2025-02-28  492  			memblock_phys_free(mlp->base, mlp->size);
c009da4258f9885 Frank van der Linden 2025-02-28  493  		}
c009da4258f9885 Frank van der Linden 2025-02-28  494  		cma_drop_area(cma);
c009da4258f9885 Frank van der Linden 2025-02-28  495  		ret = -ENOMEM;
c009da4258f9885 Frank van der Linden 2025-02-28  496  		goto out;
c009da4258f9885 Frank van der Linden 2025-02-28  497  	}
c009da4258f9885 Frank van der Linden 2025-02-28  498  
c009da4258f9885 Frank van der Linden 2025-02-28  499  	cma->nranges = nr;
de9e14eebf33a60 Marek Szyprowski     2014-10-13  500  	*res_cma = cma;
de9e14eebf33a60 Marek Szyprowski     2014-10-13  501  
c009da4258f9885 Frank van der Linden 2025-02-28  502  out:
c009da4258f9885 Frank van der Linden 2025-02-28  503  	if (ret != 0)
c009da4258f9885 Frank van der Linden 2025-02-28  504  		pr_err("Failed to reserve %lu MiB\n",
c009da4258f9885 Frank van der Linden 2025-02-28  505  			(unsigned long)total_size / SZ_1M);
c009da4258f9885 Frank van der Linden 2025-02-28  506  	else
c009da4258f9885 Frank van der Linden 2025-02-28  507  		pr_info("Reserved %lu MiB in %d range%s\n",
c009da4258f9885 Frank van der Linden 2025-02-28  508  			(unsigned long)total_size / SZ_1M, nr,
c009da4258f9885 Frank van der Linden 2025-02-28 @509  			nr > 1 ? "s" : "");
c009da4258f9885 Frank van der Linden 2025-02-28  510  
c009da4258f9885 Frank van der Linden 2025-02-28  511  	return ret;
de9e14eebf33a60 Marek Szyprowski     2014-10-13  512  }
de9e14eebf33a60 Marek Szyprowski     2014-10-13  513  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2025-04-19 11:28 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=202504191949.RsRida7L-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.