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>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 30 May 2017 12:54:52 +0800
From:   kbuild test robot <lkp@...el.com>
To:     Davidlohr Bueso <dave@...olabs.net>
Cc:     kbuild-all@...org, mingo@...nel.org, peterz@...radead.org,
        akpm@...ux-foundation.org, jack@...e.cz,
        kirill.shutemov@...ux.intel.com, ldufour@...ux.vnet.ibm.com,
        mhocko@...e.com, mgorman@...hsingularity.net, dave@...olabs.net,
        linux-kernel@...r.kernel.org, Davidlohr Bueso <dbueso@...e.de>
Subject: Re: [PATCH 5/5] lib/interval_tree: Fast overlap detection

Hi Davidlohr,

[auto build test ERROR on next-20170529]

url:    https://github.com/0day-ci/linux/commits/Davidlohr-Bueso/rbtree-Cache-leftmost-node-internally/20170530-101713
config: x86_64-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   include/linux/compiler.h:260:8: sparse: attribute 'no_sanitize_address': unknown attribute
   drivers/infiniband/hw/hfi1/mmu_rb.c: In function 'hfi1_mmu_rb_insert':
>> drivers/infiniband/hw/hfi1/mmu_rb.c:183:29: error: passing argument 2 of '__mmu_int_rb_insert' from incompatible pointer type [-Werror=incompatible-pointer-types]
     __mmu_int_rb_insert(mnode, &handler->root);
                                ^
   In file included from drivers/infiniband/hw/hfi1/mmu_rb.c:50:0:
   drivers/infiniband/hw/hfi1/mmu_rb.c:90:47: note: expected 'struct rb_root_cached *' but argument is of type 'struct rb_root *'
           mmu_node_start, mmu_node_last, static, __mmu_int_rb);
                                                  ^
   include/linux/interval_tree_generic.h:68:15: note: in definition of macro 'INTERVAL_TREE_DEFINE'
    ITSTATIC void ITPREFIX ## _insert(ITSTRUCT *node,         \
                  ^~~~~~~~
>> drivers/infiniband/hw/hfi1/mmu_rb.c:188:30: error: passing argument 2 of '__mmu_int_rb_remove' from incompatible pointer type [-Werror=incompatible-pointer-types]
      __mmu_int_rb_remove(mnode, &handler->root);
                                 ^
   In file included from drivers/infiniband/hw/hfi1/mmu_rb.c:50:0:
   drivers/infiniband/hw/hfi1/mmu_rb.c:90:47: note: expected 'struct rb_root_cached *' but argument is of type 'struct rb_root *'
           mmu_node_start, mmu_node_last, static, __mmu_int_rb);
                                                  ^
   include/linux/interval_tree_generic.h:95:15: note: in definition of macro 'INTERVAL_TREE_DEFINE'
    ITSTATIC void ITPREFIX ## _remove(ITSTRUCT *node,         \
                  ^~~~~~~~
   drivers/infiniband/hw/hfi1/mmu_rb.c: In function '__mmu_rb_search':
>> drivers/infiniband/hw/hfi1/mmu_rb.c:205:34: error: passing argument 1 of '__mmu_int_rb_iter_first' from incompatible pointer type [-Werror=incompatible-pointer-types]
      node = __mmu_int_rb_iter_first(&handler->root, addr,
                                     ^
   In file included from drivers/infiniband/hw/hfi1/mmu_rb.c:50:0:
   drivers/infiniband/hw/hfi1/mmu_rb.c:90:47: note: expected 'struct rb_root_cached *' but argument is of type 'struct rb_root *'
           mmu_node_start, mmu_node_last, static, __mmu_int_rb);
                                                  ^
   include/linux/interval_tree_generic.h:149:1: note: in definition of macro 'INTERVAL_TREE_DEFINE'
    ITPREFIX ## _iter_first(struct rb_root_cached *root,         \
    ^~~~~~~~
   drivers/infiniband/hw/hfi1/mmu_rb.c:208:39: error: passing argument 1 of '__mmu_int_rb_iter_first' from incompatible pointer type [-Werror=incompatible-pointer-types]
      for (node = __mmu_int_rb_iter_first(&handler->root, addr,
                                          ^
   In file included from drivers/infiniband/hw/hfi1/mmu_rb.c:50:0:
   drivers/infiniband/hw/hfi1/mmu_rb.c:90:47: note: expected 'struct rb_root_cached *' but argument is of type 'struct rb_root *'
           mmu_node_start, mmu_node_last, static, __mmu_int_rb);
                                                  ^
   include/linux/interval_tree_generic.h:149:1: note: in definition of macro 'INTERVAL_TREE_DEFINE'
    ITPREFIX ## _iter_first(struct rb_root_cached *root,         \
    ^~~~~~~~
   drivers/infiniband/hw/hfi1/mmu_rb.c: In function 'hfi1_mmu_rb_extract':
   drivers/infiniband/hw/hfi1/mmu_rb.c:229:29: error: passing argument 2 of '__mmu_int_rb_remove' from incompatible pointer type [-Werror=incompatible-pointer-types]
      __mmu_int_rb_remove(node, &handler->root);
                                ^
   In file included from drivers/infiniband/hw/hfi1/mmu_rb.c:50:0:
   drivers/infiniband/hw/hfi1/mmu_rb.c:90:47: note: expected 'struct rb_root_cached *' but argument is of type 'struct rb_root *'
           mmu_node_start, mmu_node_last, static, __mmu_int_rb);
                                                  ^
   include/linux/interval_tree_generic.h:95:15: note: in definition of macro 'INTERVAL_TREE_DEFINE'
    ITSTATIC void ITPREFIX ## _remove(ITSTRUCT *node,         \
                  ^~~~~~~~
   drivers/infiniband/hw/hfi1/mmu_rb.c: In function 'hfi1_mmu_rb_evict':
   drivers/infiniband/hw/hfi1/mmu_rb.c:251:32: error: passing argument 2 of '__mmu_int_rb_remove' from incompatible pointer type [-Werror=incompatible-pointer-types]
       __mmu_int_rb_remove(rbnode, &handler->root);
                                   ^
   In file included from drivers/infiniband/hw/hfi1/mmu_rb.c:50:0:
   drivers/infiniband/hw/hfi1/mmu_rb.c:90:47: note: expected 'struct rb_root_cached *' but argument is of type 'struct rb_root *'
           mmu_node_start, mmu_node_last, static, __mmu_int_rb);
                                                  ^
   include/linux/interval_tree_generic.h:95:15: note: in definition of macro 'INTERVAL_TREE_DEFINE'
    ITSTATIC void ITPREFIX ## _remove(ITSTRUCT *node,         \
                  ^~~~~~~~
   drivers/infiniband/hw/hfi1/mmu_rb.c: In function 'hfi1_mmu_rb_remove':
   drivers/infiniband/hw/hfi1/mmu_rb.c:281:28: error: passing argument 2 of '__mmu_int_rb_remove' from incompatible pointer type [-Werror=incompatible-pointer-types]
     __mmu_int_rb_remove(node, &handler->root);
                               ^
   In file included from drivers/infiniband/hw/hfi1/mmu_rb.c:50:0:
   drivers/infiniband/hw/hfi1/mmu_rb.c:90:47: note: expected 'struct rb_root_cached *' but argument is of type 'struct rb_root *'
           mmu_node_start, mmu_node_last, static, __mmu_int_rb);
                                                  ^
   include/linux/interval_tree_generic.h:95:15: note: in definition of macro 'INTERVAL_TREE_DEFINE'
    ITSTATIC void ITPREFIX ## _remove(ITSTRUCT *node,         \
                  ^~~~~~~~
   drivers/infiniband/hw/hfi1/mmu_rb.c: In function 'mmu_notifier_mem_invalidate':
   drivers/infiniband/hw/hfi1/mmu_rb.c:314:38: error: passing argument 1 of '__mmu_int_rb_iter_first' from incompatible pointer type [-Werror=incompatible-pointer-types]
     for (node = __mmu_int_rb_iter_first(root, start, end - 1);
                                         ^~~~
   In file included from drivers/infiniband/hw/hfi1/mmu_rb.c:50:0:
   drivers/infiniband/hw/hfi1/mmu_rb.c:90:47: note: expected 'struct rb_root_cached *' but argument is of type 'struct rb_root *'
           mmu_node_start, mmu_node_last, static, __mmu_int_rb);
                                                  ^
   include/linux/interval_tree_generic.h:149:1: note: in definition of macro 'INTERVAL_TREE_DEFINE'
    ITPREFIX ## _iter_first(struct rb_root_cached *root,         \
    ^~~~~~~~
   drivers/infiniband/hw/hfi1/mmu_rb.c:321:30: error: passing argument 2 of '__mmu_int_rb_remove' from incompatible pointer type [-Werror=incompatible-pointer-types]
       __mmu_int_rb_remove(node, root);
                                 ^~~~
   In file included from drivers/infiniband/hw/hfi1/mmu_rb.c:50:0:
   drivers/infiniband/hw/hfi1/mmu_rb.c:90:47: note: expected 'struct rb_root_cached *' but argument is of type 'struct rb_root *'
           mmu_node_start, mmu_node_last, static, __mmu_int_rb);
                                                  ^
   include/linux/interval_tree_generic.h:95:15: note: in definition of macro 'INTERVAL_TREE_DEFINE'
    ITSTATIC void ITPREFIX ## _remove(ITSTRUCT *node,         \
                  ^~~~~~~~
   cc1: some warnings being treated as errors

vim +/__mmu_int_rb_insert +183 drivers/infiniband/hw/hfi1/mmu_rb.c

06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   44   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   45   *
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   46   */
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   47  #include <linux/list.h>
67caea1fe drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-05-12   48  #include <linux/rculist.h>
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   49  #include <linux/mmu_notifier.h>
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  @50  #include <linux/interval_tree_generic.h>
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   51  
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   52  #include "mmu_rb.h"
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   53  #include "trace.h"
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   54  
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   55  struct mmu_rb_handler {
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   56  	struct mmu_notifier mn;
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28   57  	struct rb_root root;
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28   58  	void *ops_arg;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   59  	spinlock_t lock;        /* protect the RB tree */
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   60  	struct mmu_rb_ops *ops;
3faa3d9a3 drivers/infiniband/hw/hfi1/mmu_rb.c Ira Weiny       2016-07-28   61  	struct mm_struct *mm;
0636e9ab8 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28   62  	struct list_head lru_list;
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28   63  	struct work_struct del_work;
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28   64  	struct list_head del_list;
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28   65  	struct workqueue_struct *wq;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   66  };
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   67  
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   68  static unsigned long mmu_node_start(struct mmu_rb_node *);
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   69  static unsigned long mmu_node_last(struct mmu_rb_node *);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   70  static inline void mmu_notifier_page(struct mmu_notifier *, struct mm_struct *,
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   71  				     unsigned long);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   72  static inline void mmu_notifier_range_start(struct mmu_notifier *,
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   73  					    struct mm_struct *,
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   74  					    unsigned long, unsigned long);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   75  static void mmu_notifier_mem_invalidate(struct mmu_notifier *,
f19bd643d drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-04-12   76  					struct mm_struct *,
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   77  					unsigned long, unsigned long);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   78  static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *,
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   79  					   unsigned long, unsigned long);
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28   80  static void do_remove(struct mmu_rb_handler *handler,
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28   81  		      struct list_head *del_list);
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28   82  static void handle_remove(struct work_struct *work);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   83  
0fc859a65 drivers/infiniband/hw/hfi1/mmu_rb.c Bhumika Goyal   2016-11-19   84  static const struct mmu_notifier_ops mn_opts = {
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   85  	.invalidate_page = mmu_notifier_page,
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   86  	.invalidate_range_start = mmu_notifier_range_start,
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   87  };
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   88  
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   89  INTERVAL_TREE_DEFINE(struct mmu_rb_node, node, unsigned long, __last,
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   90  		     mmu_node_start, mmu_node_last, static, __mmu_int_rb);
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   91  
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   92  static unsigned long mmu_node_start(struct mmu_rb_node *node)
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   93  {
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   94  	return node->addr & PAGE_MASK;
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   95  }
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   96  
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   97  static unsigned long mmu_node_last(struct mmu_rb_node *node)
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08   98  {
de79093b2 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-04-12   99  	return PAGE_ALIGN(node->addr + node->len) - 1;
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  100  }
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  101  
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  102  int hfi1_mmu_rb_register(void *ops_arg, struct mm_struct *mm,
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  103  			 struct mmu_rb_ops *ops,
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  104  			 struct workqueue_struct *wq,
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  105  			 struct mmu_rb_handler **handler)
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  106  {
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  107  	struct mmu_rb_handler *handlr;
3faa3d9a3 drivers/infiniband/hw/hfi1/mmu_rb.c Ira Weiny       2016-07-28  108  	int ret;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  109  
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  110  	handlr = kmalloc(sizeof(*handlr), GFP_KERNEL);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  111  	if (!handlr)
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  112  		return -ENOMEM;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  113  
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  114  	handlr->root = RB_ROOT;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  115  	handlr->ops = ops;
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  116  	handlr->ops_arg = ops_arg;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  117  	INIT_HLIST_NODE(&handlr->mn.hlist);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  118  	spin_lock_init(&handlr->lock);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  119  	handlr->mn.ops = &mn_opts;
3faa3d9a3 drivers/infiniband/hw/hfi1/mmu_rb.c Ira Weiny       2016-07-28  120  	handlr->mm = mm;
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  121  	INIT_WORK(&handlr->del_work, handle_remove);
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  122  	INIT_LIST_HEAD(&handlr->del_list);
0636e9ab8 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  123  	INIT_LIST_HEAD(&handlr->lru_list);
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  124  	handlr->wq = wq;
3faa3d9a3 drivers/infiniband/hw/hfi1/mmu_rb.c Ira Weiny       2016-07-28  125  
3faa3d9a3 drivers/infiniband/hw/hfi1/mmu_rb.c Ira Weiny       2016-07-28  126  	ret = mmu_notifier_register(&handlr->mn, handlr->mm);
3faa3d9a3 drivers/infiniband/hw/hfi1/mmu_rb.c Ira Weiny       2016-07-28  127  	if (ret) {
3faa3d9a3 drivers/infiniband/hw/hfi1/mmu_rb.c Ira Weiny       2016-07-28  128  		kfree(handlr);
3faa3d9a3 drivers/infiniband/hw/hfi1/mmu_rb.c Ira Weiny       2016-07-28  129  		return ret;
3faa3d9a3 drivers/infiniband/hw/hfi1/mmu_rb.c Ira Weiny       2016-07-28  130  	}
3faa3d9a3 drivers/infiniband/hw/hfi1/mmu_rb.c Ira Weiny       2016-07-28  131  
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  132  	*handler = handlr;
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  133  	return 0;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  134  }
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  135  
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  136  void hfi1_mmu_rb_unregister(struct mmu_rb_handler *handler)
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  137  {
20a42d083 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  138  	struct mmu_rb_node *rbnode;
20a42d083 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  139  	struct rb_node *node;
c81e1f645 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  140  	unsigned long flags;
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  141  	struct list_head del_list;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  142  
782f6697d drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-04-12  143  	/* Unregister first so we don't get any more notifications. */
3faa3d9a3 drivers/infiniband/hw/hfi1/mmu_rb.c Ira Weiny       2016-07-28  144  	mmu_notifier_unregister(&handler->mn, handler->mm);
782f6697d drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-04-12  145  
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  146  	/*
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  147  	 * Make sure the wq delete handler is finished running.  It will not
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  148  	 * be triggered once the mmu notifiers are unregistered above.
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  149  	 */
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  150  	flush_work(&handler->del_work);
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  151  
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  152  	INIT_LIST_HEAD(&del_list);
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  153  
782f6697d drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-04-12  154  	spin_lock_irqsave(&handler->lock, flags);
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  155  	while ((node = rb_first(&handler->root))) {
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  156  		rbnode = rb_entry(node, struct mmu_rb_node, node);
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  157  		rb_erase(node, &handler->root);
0636e9ab8 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  158  		/* move from LRU list to delete list */
0636e9ab8 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  159  		list_move(&rbnode->list, &del_list);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  160  	}
782f6697d drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-04-12  161  	spin_unlock_irqrestore(&handler->lock, flags);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  162  
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  163  	do_remove(handler, &del_list);
b85ced915 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  164  
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  165  	kfree(handler);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  166  }
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  167  
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  168  int hfi1_mmu_rb_insert(struct mmu_rb_handler *handler,
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  169  		       struct mmu_rb_node *mnode)
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  170  {
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  171  	struct mmu_rb_node *node;
c81e1f645 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  172  	unsigned long flags;
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  173  	int ret = 0;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  174  
c81e1f645 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  175  	spin_lock_irqsave(&handler->lock, flags);
353b71c7c drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  176  	hfi1_cdbg(MMU, "Inserting node addr 0x%llx, len %u", mnode->addr,
353b71c7c drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  177  		  mnode->len);
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  178  	node = __mmu_rb_search(handler, mnode->addr, mnode->len);
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  179  	if (node) {
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  180  		ret = -EINVAL;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  181  		goto unlock;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  182  	}
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28 @183  	__mmu_int_rb_insert(mnode, &handler->root);
0636e9ab8 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  184  	list_add(&mnode->list, &handler->lru_list);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  185  
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  186  	ret = handler->ops->insert(handler->ops_arg, mnode);
0636e9ab8 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  187  	if (ret) {
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28 @188  		__mmu_int_rb_remove(mnode, &handler->root);
0636e9ab8 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  189  		list_del(&mnode->list); /* remove from LRU list */
0636e9ab8 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  190  	}
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  191  unlock:
c81e1f645 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  192  	spin_unlock_irqrestore(&handler->lock, flags);
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  193  	return ret;
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  194  }
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  195  
de82bdff6 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-04-12  196  /* Caller must hold handler lock */
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  197  static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *handler,
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  198  					   unsigned long addr,
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  199  					   unsigned long len)
06e0ffa69 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  200  {
0f310a00e drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  201  	struct mmu_rb_node *node = NULL;
df5a00f81 drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  202  
353b71c7c drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  203  	hfi1_cdbg(MMU, "Searching for addr 0x%llx, len %u", addr, len);
0f310a00e drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  204  	if (!handler->ops->filter) {
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28 @205  		node = __mmu_int_rb_iter_first(&handler->root, addr,
0f310a00e drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  206  					       (addr + len) - 1);
0f310a00e drivers/staging/rdma/hfi1/mmu_rb.c  Mitko Haralanov 2016-03-08  207  	} else {
e0b09ac55 drivers/infiniband/hw/hfi1/mmu_rb.c Dean Luick      2016-07-28  208  		for (node = __mmu_int_rb_iter_first(&handler->root, addr,

:::::: The code at line 183 was first introduced by commit
:::::: e0b09ac55d51bb9bf6a4a320bf4029e40bdabd6c IB/hfi1: Make the cache handler own its rb tree root

:::::: TO: Dean Luick <dean.luick@...el.com>
:::::: CC: Doug Ledford <dledford@...hat.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Download attachment ".config.gz" of type "application/gzip" (60174 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ