Lines Matching refs:handler

45 			 struct mmu_rb_handler **handler)
74 *handler = h;
78 void hfi1_mmu_rb_unregister(struct mmu_rb_handler *handler)
86 mmgrab(handler->mn.mm);
89 mmu_notifier_unregister(&handler->mn, handler->mn.mm);
92 * Make sure the wq delete handler is finished running. It will not
95 flush_work(&handler->del_work);
99 spin_lock_irqsave(&handler->lock, flags);
100 while ((node = rb_first_cached(&handler->root))) {
102 rb_erase_cached(node, &handler->root);
106 spin_unlock_irqrestore(&handler->lock, flags);
115 mmdrop(handler->mn.mm);
117 kfree(handler->free_ptr);
120 int hfi1_mmu_rb_insert(struct mmu_rb_handler *handler,
129 if (current->mm != handler->mn.mm)
132 spin_lock_irqsave(&handler->lock, flags);
133 node = __mmu_rb_search(handler, mnode->addr, mnode->len);
138 __mmu_int_rb_insert(mnode, &handler->root);
139 list_add_tail(&mnode->list, &handler->lru_list);
140 mnode->handler = handler;
142 spin_unlock_irqrestore(&handler->lock, flags);
146 /* Caller must hold handler lock */
147 struct mmu_rb_node *hfi1_mmu_rb_get_first(struct mmu_rb_handler *handler,
153 node = __mmu_int_rb_iter_first(&handler->root, addr, (addr + len) - 1);
155 list_move_tail(&node->list, &handler->lru_list);
159 /* Caller must hold handler lock */
160 static struct mmu_rb_node *__mmu_rb_search(struct mmu_rb_handler *handler,
167 if (!handler->ops->filter) {
168 node = __mmu_int_rb_iter_first(&handler->root, addr,
171 for (node = __mmu_int_rb_iter_first(&handler->root, addr,
176 if (handler->ops->filter(node, addr, len))
184 * Must NOT call while holding mnode->handler->lock.
185 * mnode->handler->ops->remove() may sleep and mnode->handler->lock is a
193 mnode->handler->ops->remove(mnode->handler->ops_arg, mnode);
196 /* Caller must hold mnode->handler->lock */
201 list_move(&mnode->list, &mnode->handler->del_list);
202 queue_work(mnode->handler->wq, &mnode->handler->del_work);
207 * Adds mmu_rb_node to mmu_rb_node->handler->del_list and queues
208 * handler->del_work on handler->wq.
209 * Does not remove mmu_rb_node from handler->lru_list or handler->rb_root.
210 * Acquires mmu_rb_node->handler->lock; do not call while already holding
211 * handler->lock.
217 struct mmu_rb_handler *handler = mnode->handler;
220 spin_lock_irqsave(&handler->lock, flags);
221 list_move(&mnode->list, &mnode->handler->del_list);
222 spin_unlock_irqrestore(&handler->lock, flags);
223 queue_work(handler->wq, &handler->del_work);
226 void hfi1_mmu_rb_evict(struct mmu_rb_handler *handler, void *evict_arg)
233 if (current->mm != handler->mn.mm)
238 spin_lock_irqsave(&handler->lock, flags);
239 list_for_each_entry_safe(rbnode, ptr, &handler->lru_list, list) {
244 if (handler->ops->evict(handler->ops_arg, rbnode, evict_arg,
246 __mmu_int_rb_remove(rbnode, &handler->root);
253 spin_unlock_irqrestore(&handler->lock, flags);
264 struct mmu_rb_handler *handler =
266 struct rb_root_cached *root = &handler->root;
270 spin_lock_irqsave(&handler->lock, flags);
282 spin_unlock_irqrestore(&handler->lock, flags);
294 struct mmu_rb_handler *handler = container_of(work,
302 spin_lock_irqsave(&handler->lock, flags);
303 list_replace_init(&handler->del_list, &del_list);
304 spin_unlock_irqrestore(&handler->lock, flags);
310 handler->ops->remove(handler->ops_arg, node);