Lines Matching refs:subscription
169 * @interval_sub: The interval subscription
173 * subscription. If the mm invokes invalidation during the critical section
194 * If the subscription has a different seq value under the user_lock
197 * If the subscription currently has the same seq value as the
302 struct mmu_notifier *subscription;
310 hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist,
318 if (subscription->ops->release)
319 subscription->ops->release(subscription, mm);
323 subscription = hlist_entry(subscriptions->list.first,
331 hlist_del_init_rcu(&subscription->hlist);
369 struct mmu_notifier *subscription;
373 hlist_for_each_entry_rcu(subscription,
376 if (subscription->ops->clear_flush_young)
377 young |= subscription->ops->clear_flush_young(
378 subscription, mm, start, end);
389 struct mmu_notifier *subscription;
393 hlist_for_each_entry_rcu(subscription,
396 if (subscription->ops->clear_young)
397 young |= subscription->ops->clear_young(subscription,
408 struct mmu_notifier *subscription;
412 hlist_for_each_entry_rcu(subscription,
415 if (subscription->ops->test_young) {
416 young = subscription->ops->test_young(subscription, mm,
430 struct mmu_notifier *subscription;
434 hlist_for_each_entry_rcu(subscription,
437 if (subscription->ops->change_pte)
438 subscription->ops->change_pte(subscription, mm, address,
479 struct mmu_notifier *subscription;
484 hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist,
486 const struct mmu_notifier_ops *ops = subscription->ops;
493 _ret = ops->invalidate_range_start(subscription, range);
522 hlist_for_each_entry_rcu(subscription, &subscriptions->list,
524 if (!subscription->ops->invalidate_range_end)
527 subscription->ops->invalidate_range_end(subscription,
556 struct mmu_notifier *subscription;
560 hlist_for_each_entry_rcu(subscription, &subscriptions->list, hlist,
575 if (!only_end && subscription->ops->invalidate_range)
576 subscription->ops->invalidate_range(subscription,
580 if (subscription->ops->invalidate_range_end) {
583 subscription->ops->invalidate_range_end(subscription,
610 struct mmu_notifier *subscription;
614 hlist_for_each_entry_rcu(subscription,
617 if (subscription->ops->invalidate_range)
618 subscription->ops->invalidate_range(subscription, mm,
629 int __mmu_notifier_register(struct mmu_notifier *subscription,
687 if (subscription) {
690 subscription->mm = mm;
691 subscription->users = 1;
694 hlist_add_head_rcu(&subscription->hlist,
712 * @subscription: The notifier to attach
726 * While the caller has a mmu_notifier get the subscription->mm pointer will remain
729 int mmu_notifier_register(struct mmu_notifier *subscription,
735 ret = __mmu_notifier_register(subscription, mm);
744 struct mmu_notifier *subscription;
747 hlist_for_each_entry_rcu(subscription,
750 if (subscription->ops != ops)
753 if (likely(subscription->users != UINT_MAX))
754 subscription->users++;
756 subscription = ERR_PTR(-EOVERFLOW);
758 return subscription;
784 struct mmu_notifier *subscription;
790 subscription = find_get_mmu_notifier(mm, ops);
791 if (subscription)
792 return subscription;
795 subscription = ops->alloc_notifier(mm);
796 if (IS_ERR(subscription))
797 return subscription;
798 subscription->ops = ops;
799 ret = __mmu_notifier_register(subscription, mm);
802 return subscription;
804 subscription->ops->free_notifier(subscription);
827 void mmu_notifier_unregister(struct mmu_notifier *subscription,
832 if (!hlist_unhashed(&subscription->hlist)) {
844 if (subscription->ops->release)
845 subscription->ops->release(subscription, mm);
853 hlist_del_init_rcu(&subscription->hlist);
871 struct mmu_notifier *subscription =
873 struct mm_struct *mm = subscription->mm;
875 subscription->ops->free_notifier(subscription);
882 * @subscription: The notifier to act on
902 void mmu_notifier_put(struct mmu_notifier *subscription)
904 struct mm_struct *mm = subscription->mm;
907 if (WARN_ON(!subscription->users) || --subscription->users)
909 hlist_del_init_rcu(&subscription->hlist);
912 call_srcu(&srcu, &subscription->rcu, mmu_notifier_free_rcu);
972 * The starting seq for a subscription not under invalidation
988 * @interval_sub: Interval subscription to register
1060 * @interval_sub: Interval subscription to unregister