All of lore.kernel.org
 help / color / mirror / Atom feed
* [thomash:topic/ttm_branch 38/45] drivers/gpu/drm/i915/gem/i915_gem_pages.c:466:1: warning: no previous prototype for '____i915_gem_object_get_sg'
@ 2021-05-03 15:48 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-05-03 15:48 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 5358 bytes --]

tree:   git://people.freedesktop.org/~thomash/linux topic/ttm_branch
head:   0aaa25061a7b6db523bfb7127b3fd83c5bc314d7
commit: 9bcc198d3054f4fd5834415e941d399eef45fd07 [38/45] drm/i915/ttm: Introduce a TTM gem object backend
config: x86_64-rhel-8.3-kselftests (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
        git remote add thomash git://people.freedesktop.org/~thomash/linux
        git fetch --no-tags thomash topic/ttm_branch
        git checkout 9bcc198d3054f4fd5834415e941d399eef45fd07
        # save the attached .config to linux build tree
        make W=1 W=1 ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/gpu/drm/i915/gem/i915_gem_pages.c:466:1: warning: no previous prototype for '____i915_gem_object_get_sg' [-Wmissing-prototypes]
     466 | ____i915_gem_object_get_sg(struct scatterlist *orig_sg,
         | ^~~~~~~~~~~~~~~~~~~~~~~~~~


vim +/____i915_gem_object_get_sg +466 drivers/gpu/drm/i915/gem/i915_gem_pages.c

   462	
   463	
   464	
   465	struct scatterlist *
 > 466	____i915_gem_object_get_sg(struct scatterlist *orig_sg,
   467				   struct i915_gem_object_page_iter *iter,
   468				   unsigned int n,
   469				   unsigned int *offset,
   470				   bool dma,
   471				   bool allow_alloc)
   472	{
   473		struct scatterlist *sg;
   474		unsigned int idx, count;
   475	
   476		might_sleep();
   477	
   478		/* As we iterate forward through the sg, we record each entry in a
   479		 * radixtree for quick repeated (backwards) lookups. If we have seen
   480		 * this index previously, we will have an entry for it.
   481		 *
   482		 * Initial lookup is O(N), but this is amortized to O(1) for
   483		 * sequential page access (where each new request is consecutive
   484		 * to the previous one). Repeated lookups are O(lg(obj->base.size)),
   485		 * i.e. O(1) with a large constant!
   486		 */
   487		if (n < READ_ONCE(iter->sg_idx))
   488			goto lookup;
   489	
   490		if (!allow_alloc)
   491			goto manual_lookup;
   492	
   493		mutex_lock(&iter->lock);
   494	
   495		/* We prefer to reuse the last sg so that repeated lookup of this
   496		 * (or the subsequent) sg are fast - comparing against the last
   497		 * sg is faster than going through the radixtree.
   498		 */
   499	
   500		sg = iter->sg_pos;
   501		idx = iter->sg_idx;
   502		count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg);
   503	
   504		while (idx + count <= n) {
   505			void *entry;
   506			unsigned long i;
   507			int ret;
   508	
   509			/* If we cannot allocate and insert this entry, or the
   510			 * individual pages from this range, cancel updating the
   511			 * sg_idx so that on this lookup we are forced to linearly
   512			 * scan onwards, but on future lookups we will try the
   513			 * insertion again (in which case we need to be careful of
   514			 * the error return reporting that we have already inserted
   515			 * this index).
   516			 */
   517			ret = radix_tree_insert(&iter->radix, idx, sg);
   518			if (ret && ret != -EEXIST)
   519				goto scan;
   520	
   521			entry = xa_mk_value(idx);
   522			for (i = 1; i < count; i++) {
   523				ret = radix_tree_insert(&iter->radix, idx + i, entry);
   524				if (ret && ret != -EEXIST)
   525					goto scan;
   526			}
   527	
   528			idx += count;
   529			sg = ____sg_next(sg);
   530			count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg);
   531		}
   532	
   533	scan:
   534		iter->sg_pos = sg;
   535		iter->sg_idx = idx;
   536	
   537		mutex_unlock(&iter->lock);
   538	
   539		if (unlikely(n < idx)) /* insertion completed by another thread */
   540			goto lookup;
   541	
   542		goto manual_walk;
   543	
   544	manual_lookup:
   545		idx = 0;
   546		sg = orig_sg;
   547		count = __sg_page_count(sg);
   548	
   549	manual_walk:
   550		/*
   551		 * In case we failed to insert the entry into the radixtree, we need
   552		 * to look beyond the current sg.
   553		 */
   554		while (idx + count <= n) {
   555			idx += count;
   556			sg = ____sg_next(sg);
   557			count = dma ? __sg_dma_page_count(sg) : __sg_page_count(sg);
   558		}
   559	
   560		*offset = n - idx;
   561		return sg;
   562	
   563	lookup:
   564		rcu_read_lock();
   565	
   566		sg = radix_tree_lookup(&iter->radix, n);
   567		GEM_BUG_ON(!sg);
   568	
   569		/* If this index is in the middle of multi-page sg entry,
   570		 * the radix tree will contain a value entry that points
   571		 * to the start of that range. We will return the pointer to
   572		 * the base page and the offset of this page within the
   573		 * sg entry's range.
   574		 */
   575		*offset = 0;
   576		if (unlikely(xa_is_value(sg))) {
   577			unsigned long base = xa_to_value(sg);
   578	
   579			sg = radix_tree_lookup(&iter->radix, base);
   580			GEM_BUG_ON(!sg);
   581	
   582			*offset = n - base;
   583		}
   584	
   585		rcu_read_unlock();
   586	
   587		return sg;
   588	}
   589	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 41538 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-05-03 15:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-03 15:48 [thomash:topic/ttm_branch 38/45] drivers/gpu/drm/i915/gem/i915_gem_pages.c:466:1: warning: no previous prototype for '____i915_gem_object_get_sg' kernel test robot

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.