lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:   Sat, 12 Feb 2022 01:58:01 +0800
From:   kernel test robot <lkp@...el.com>
To:     "Liam R. Howlett" <Liam.Howlett@...cle.com>
Cc:     kbuild-all@...ts.01.org, linux-kernel@...r.kernel.org,
        "Matthew Wilcox (Oracle)" <willy@...radead.org>
Subject: [dhowells-fs:netfs-maple 27/48] lib/maple_tree.c:6514:6: warning: no
 previous prototype for 'mt_dump_range'

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git netfs-maple
head:   429e2bb6fb190f390ed23afc0d2308e877c43be5
commit: ae818d3bce322321c0987d493e6687aefffe7c63 [27/48] Maple Tree: Add new data structure
config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20220211/202202112145.NLi7L3SB-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/commit/?id=ae818d3bce322321c0987d493e6687aefffe7c63
        git remote add dhowells-fs https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git
        git fetch --no-tags dhowells-fs netfs-maple
        git checkout ae818d3bce322321c0987d493e6687aefffe7c63
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=m68k SHELL=/bin/bash

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

All warnings (new ones prefixed by >>):

   lib/maple_tree.c:5557:6: warning: no previous prototype for 'mas_wr_store_setup' [-Wmissing-prototypes]
    5557 | void mas_wr_store_setup(struct ma_wr_state *wr_mas)
         |      ^~~~~~~~~~~~~~~~~~
   lib/maple_tree.c:6172:5: warning: no previous prototype for 'mtree_alloc_range' [-Wmissing-prototypes]
    6172 | int mtree_alloc_range(struct maple_tree *mt, unsigned long *startp,
         |     ^~~~~~~~~~~~~~~~~
   lib/maple_tree.c:6207:5: warning: no previous prototype for 'mtree_alloc_rrange' [-Wmissing-prototypes]
    6207 | int mtree_alloc_rrange(struct maple_tree *mt, unsigned long *startp,
         |     ^~~~~~~~~~~~~~~~~~
>> lib/maple_tree.c:6514:6: warning: no previous prototype for 'mt_dump_range' [-Wmissing-prototypes]
    6514 | void mt_dump_range(unsigned long min, unsigned long max, unsigned int depth)
         |      ^~~~~~~~~~~~~
>> lib/maple_tree.c:6524:6: warning: no previous prototype for 'mt_dump_entry' [-Wmissing-prototypes]
    6524 | void mt_dump_entry(void *entry, unsigned long min, unsigned long max,
         |      ^~~~~~~~~~~~~
>> lib/maple_tree.c:6540:6: warning: no previous prototype for 'mt_dump_range64' [-Wmissing-prototypes]
    6540 | void mt_dump_range64(const struct maple_tree *mt, void *entry,
         |      ^~~~~~~~~~~~~~~
>> lib/maple_tree.c:6579:6: warning: no previous prototype for 'mt_dump_arange64' [-Wmissing-prototypes]
    6579 | void mt_dump_arange64(const struct maple_tree *mt, void *entry,
         |      ^~~~~~~~~~~~~~~~
>> lib/maple_tree.c:6671:6: warning: no previous prototype for 'mas_validate_gaps' [-Wmissing-prototypes]
    6671 | void mas_validate_gaps(struct ma_state *mas)
         |      ^~~~~~~~~~~~~~~~~
>> lib/maple_tree.c:6758:6: warning: no previous prototype for 'mas_validate_parent_slot' [-Wmissing-prototypes]
    6758 | void mas_validate_parent_slot(struct ma_state *mas)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~
>> lib/maple_tree.c:6791:6: warning: no previous prototype for 'mas_validate_child_slot' [-Wmissing-prototypes]
    6791 | void mas_validate_child_slot(struct ma_state *mas)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
>> lib/maple_tree.c:6829:6: warning: no previous prototype for 'mas_validate_limits' [-Wmissing-prototypes]
    6829 | void mas_validate_limits(struct ma_state *mas)
         |      ^~~~~~~~~~~~~~~~~~~
>> lib/maple_tree.c:6879:6: warning: no previous prototype for 'mt_validate_nulls' [-Wmissing-prototypes]
    6879 | void mt_validate_nulls(struct maple_tree *mt)
         |      ^~~~~~~~~~~~~~~~~
>> lib/maple_tree.c:6920:6: warning: no previous prototype for 'mt_validate' [-Wmissing-prototypes]
    6920 | void mt_validate(struct maple_tree *mt)
         |      ^~~~~~~~~~~


vim +/mt_dump_range +6514 lib/maple_tree.c

  6510	
  6511	/* Tree validations */
  6512	void mt_dump_node(const struct maple_tree *mt, void *entry, unsigned long min,
  6513			unsigned long max, unsigned int depth);
> 6514	void mt_dump_range(unsigned long min, unsigned long max, unsigned int depth)
  6515	{
  6516		static const char spaces[] = "                                ";
  6517	
  6518		if (min == max)
  6519			pr_info("%.*s%lu: ", depth * 2, spaces, min);
  6520		else
  6521			pr_info("%.*s%lu-%lu: ", depth * 2, spaces, min, max);
  6522	}
  6523	
> 6524	void mt_dump_entry(void *entry, unsigned long min, unsigned long max,
  6525			unsigned int depth)
  6526	{
  6527		mt_dump_range(min, max, depth);
  6528	
  6529		if (xa_is_value(entry))
  6530			pr_cont("value %ld (0x%lx) ["MA_PTR"]\n", xa_to_value(entry),
  6531					xa_to_value(entry), entry);
  6532		else if (xa_is_zero(entry))
  6533			pr_cont("zero (%ld)\n", xa_to_internal(entry));
  6534		else if (mt_is_reserved(entry))
  6535			pr_cont("UNKNOWN ENTRY ("MA_PTR")\n", entry);
  6536		else
  6537			pr_cont(""MA_PTR"\n", entry);
  6538	}
  6539	
> 6540	void mt_dump_range64(const struct maple_tree *mt, void *entry,
  6541			unsigned long min, unsigned long max, unsigned int depth)
  6542	{
  6543		struct maple_range_64 *node = &mte_to_node(entry)->mr64;
  6544		bool leaf = mte_is_leaf(entry);
  6545		unsigned long first = min;
  6546		int i;
  6547	
  6548		pr_cont(" contents: ");
  6549		for (i = 0; i < MAPLE_RANGE64_SLOTS - 1; i++)
  6550			pr_cont(""MA_PTR" %lu ", node->slot[i], node->pivot[i]);
  6551		pr_cont(""MA_PTR"\n", node->slot[i]);
  6552		for (i = 0; i < MAPLE_RANGE64_SLOTS; i++) {
  6553			unsigned long last = max;
  6554	
  6555			if (i < (MAPLE_RANGE64_SLOTS - 1))
  6556				last = node->pivot[i];
  6557			else if (!node->slot[i] && max != mt_max[mte_node_type(entry)])
  6558				break;
  6559			if (last == 0 && i > 0)
  6560				break;
  6561			if (leaf)
  6562				mt_dump_entry(mt_slot(mt, node->slot, i),
  6563						first, last, depth + 1);
  6564			else if (node->slot[i])
  6565				mt_dump_node(mt, mt_slot(mt, node->slot, i),
  6566						first, last, depth + 1);
  6567	
  6568			if (last == max)
  6569				break;
  6570			if (last > max) {
  6571				pr_err("node "MA_PTR" last (%lu) > max (%lu) at pivot %d!\n",
  6572						node, last, max, i);
  6573				break;
  6574			}
  6575			first = last + 1;
  6576		}
  6577	}
  6578	
> 6579	void mt_dump_arange64(const struct maple_tree *mt, void *entry,
  6580			unsigned long min, unsigned long max, unsigned int depth)
  6581	{
  6582		struct maple_arange_64 *node = &mte_to_node(entry)->ma64;
  6583		bool leaf = mte_is_leaf(entry);
  6584		unsigned long first = min;
  6585		int i;
  6586	
  6587		pr_cont(" contents: ");
  6588		for (i = 0; i < MAPLE_ARANGE64_SLOTS; i++)
  6589			pr_cont("%lu ", node->gap[i]);
  6590		pr_cont("| %02X %02X| ", node->meta.end, node->meta.gap);
  6591		for (i = 0; i < MAPLE_ARANGE64_SLOTS - 1; i++)
  6592			pr_cont(MA_PTR" %lu ", node->slot[i], node->pivot[i]);
  6593		pr_cont(MA_PTR"\n", node->slot[i]);
  6594		for (i = 0; i < MAPLE_ARANGE64_SLOTS; i++) {
  6595			unsigned long last = max;
  6596	
  6597			if (i < (MAPLE_ARANGE64_SLOTS - 1))
  6598				last = node->pivot[i];
  6599			else if (!node->slot[i])
  6600				break;
  6601			if (last == 0 && i > 0)
  6602				break;
  6603			if (leaf)
  6604				mt_dump_entry(mt_slot(mt, node->slot, i),
  6605						first, last, depth + 1);
  6606			else if (node->slot[i])
  6607				mt_dump_node(mt, mt_slot(mt, node->slot, i),
  6608						first, last, depth + 1);
  6609	
  6610			if (last == max)
  6611				break;
  6612			if (last > max) {
  6613				pr_err("node "MA_PTR" last (%lu) > max (%lu) at pivot %d!\n",
  6614						node, last, max, i);
  6615				break;
  6616			}
  6617			first = last + 1;
  6618		}
  6619	}
  6620	
  6621	void mt_dump_node(const struct maple_tree *mt, void *entry, unsigned long min,
  6622			unsigned long max, unsigned int depth)
  6623	{
  6624		struct maple_node *node = mte_to_node(entry);
  6625		unsigned int type = mte_node_type(entry);
  6626		unsigned int i;
  6627	
  6628		mt_dump_range(min, max, depth);
  6629	
  6630		pr_cont("node "MA_PTR" depth %d type %d parent "MA_PTR, node, depth, type,
  6631				node ? node->parent : NULL);
  6632		switch (type) {
  6633		case maple_dense:
  6634			pr_cont("\n");
  6635			for (i = 0; i < MAPLE_NODE_SLOTS; i++) {
  6636				if (min + i > max)
  6637					pr_cont("OUT OF RANGE: ");
  6638				mt_dump_entry(mt_slot(mt, node->slot, i),
  6639						min + i, min + i, depth);
  6640			}
  6641			break;
  6642		case maple_leaf_64:
  6643		case maple_range_64:
  6644			mt_dump_range64(mt, entry, min, max, depth);
  6645			break;
  6646		case maple_arange_64:
  6647			mt_dump_arange64(mt, entry, min, max, depth);
  6648			break;
  6649	
  6650		default:
  6651			pr_cont(" UNKNOWN TYPE\n");
  6652		}
  6653	}
  6654	
  6655	void mt_dump(const struct maple_tree *mt)
  6656	{
  6657		void *entry = rcu_dereference_check(mt->ma_root, mt_locked(mt));
  6658	
  6659		pr_info("maple_tree("MA_PTR") flags %X, height %u root "MA_PTR"\n",
  6660			 mt, mt->ma_flags, mt_height(mt), entry);
  6661		if (!xa_is_node(entry))
  6662			mt_dump_entry(entry, 0, 0, 0);
  6663		else if (entry)
  6664			mt_dump_node(mt, entry, 0, mt_max[mte_node_type(entry)], 0);
  6665	}
  6666	
  6667	/*
  6668	 * Calculate the maximum gap in a node and check if that's what is reported in
  6669	 * the parent (unless root).
  6670	 */
> 6671	void mas_validate_gaps(struct ma_state *mas)
  6672	{
  6673		struct maple_enode *mte = mas->node;
  6674		struct maple_node *p_mn;
  6675		unsigned long gap = 0, max_gap = 0;
  6676		unsigned long p_end, p_start = mas->min;
  6677		unsigned char p_slot;
  6678		unsigned long *gaps = NULL;
  6679		unsigned long *pivots = ma_pivots(mte_to_node(mte), mte_node_type(mte));
  6680		int i;
  6681	
  6682		if (ma_is_dense(mte_node_type(mte))) {
  6683			for (i = 0; i < mt_slot_count(mte); i++) {
  6684				if (mas_get_slot(mas, i)) {
  6685					if (gap > max_gap)
  6686						max_gap = gap;
  6687					gap = 0;
  6688					continue;
  6689				}
  6690				gap++;
  6691			}
  6692			goto counted;
  6693		}
  6694	
  6695		if (!mte_is_leaf(mte))
  6696			gaps = ma_gaps(mte_to_node(mte), mte_node_type(mte));
  6697	
  6698		for (i = 0; i < mt_slot_count(mte); i++) {
  6699			p_end = mas_logical_pivot(mas, pivots, i, mte_node_type(mte));
  6700	
  6701			if (!gaps) {
  6702				if (mas_get_slot(mas, i)) {
  6703					gap = 0;
  6704					goto not_empty;
  6705				}
  6706	
  6707				gap += p_end - p_start + 1;
  6708			} else {
  6709				void *entry = mas_get_slot(mas, i);
  6710	
  6711				gap = gaps[i];
  6712				if (!entry) {
  6713					if (gap != p_end - p_start + 1) {
  6714						pr_err(MA_PTR"[%u] -> "MA_PTR" %lu != %lu - %lu + 1\n",
  6715							mas_mn(mas), i,
  6716							mas_get_slot(mas, i), gap,
  6717							p_end, p_start);
  6718						mt_dump(mas->tree);
  6719	
  6720						MT_BUG_ON(mas->tree,
  6721							gap != p_end - p_start + 1);
  6722					}
  6723				} else {
  6724					if (gap > p_end - p_start + 1) {
  6725						pr_err(MA_PTR"[%u] %lu >= %lu - %lu + 1 (%lu)\n",
  6726						mas_mn(mas), i, gap, p_end, p_start,
  6727						p_end - p_start + 1);
  6728						MT_BUG_ON(mas->tree,
  6729							gap > p_end - p_start + 1);
  6730					}
  6731				}
  6732			}
  6733	
  6734			if (gap > max_gap)
  6735				max_gap = gap;
  6736	not_empty:
  6737			p_start = p_end + 1;
  6738			if (p_end >= mas->max)
  6739				break;
  6740		}
  6741	
  6742	counted:
  6743		if (mte_is_root(mte))
  6744			return;
  6745	
  6746		p_slot = mte_parent_slot(mas->node);
  6747		p_mn = mte_parent(mte);
  6748		MT_BUG_ON(mas->tree, max_gap > mas->max);
  6749		if (ma_gaps(p_mn, mas_parent_enum(mas, mte))[p_slot] != max_gap) {
  6750			pr_err("gap "MA_PTR"[%u] != %lu\n", p_mn, p_slot, max_gap);
  6751			mt_dump(mas->tree);
  6752		}
  6753	
  6754		MT_BUG_ON(mas->tree,
  6755			  ma_gaps(p_mn, mas_parent_enum(mas, mte))[p_slot] != max_gap);
  6756	}
  6757	

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ