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,
562 if (subscription->ops->invalidate_range_end) {
565 subscription->ops->invalidate_range_end(subscription,
591 struct mmu_notifier *subscription;
595 hlist_for_each_entry_rcu(subscription,
598 if (subscription->ops->arch_invalidate_secondary_tlbs)
599 subscription->ops->arch_invalidate_secondary_tlbs(
600 subscription, mm,
611 int __mmu_notifier_register(struct mmu_notifier *subscription,
624 if (WARN_ON_ONCE(subscription &&
625 (subscription->ops->arch_invalidate_secondary_tlbs &&
626 (subscription->ops->invalidate_range_start ||
627 subscription->ops->invalidate_range_end))))
672 if (subscription) {
675 subscription->mm = mm;
676 subscription->users = 1;
679 hlist_add_head_rcu(&subscription->hlist,
697 * @subscription: The notifier to attach
711 * While the caller has a mmu_notifier get the subscription->mm pointer will remain
714 int mmu_notifier_register(struct mmu_notifier *subscription,
720 ret = __mmu_notifier_register(subscription, mm);
729 struct mmu_notifier *subscription;
732 hlist_for_each_entry_rcu(subscription,
735 if (subscription->ops != ops)
738 if (likely(subscription->users != UINT_MAX))
739 subscription->users++;
741 subscription = ERR_PTR(-EOVERFLOW);
743 return subscription;
769 struct mmu_notifier *subscription;
775 subscription = find_get_mmu_notifier(mm, ops);
776 if (subscription)
777 return subscription;
780 subscription = ops->alloc_notifier(mm);
781 if (IS_ERR(subscription))
782 return subscription;
783 subscription->ops = ops;
784 ret = __mmu_notifier_register(subscription, mm);
787 return subscription;
789 subscription->ops->free_notifier(subscription);
812 void mmu_notifier_unregister(struct mmu_notifier *subscription,
817 if (!hlist_unhashed(&subscription->hlist)) {
829 if (subscription->ops->release)
830 subscription->ops->release(subscription, mm);
838 hlist_del_init_rcu(&subscription->hlist);
856 struct mmu_notifier *subscription =
858 struct mm_struct *mm = subscription->mm;
860 subscription->ops->free_notifier(subscription);
867 * @subscription: The notifier to act on
887 void mmu_notifier_put(struct mmu_notifier *subscription)
889 struct mm_struct *mm = subscription->mm;
892 if (WARN_ON(!subscription->users) || --subscription->users)
894 hlist_del_init_rcu(&subscription->hlist);
897 call_srcu(&srcu, &subscription->rcu, mmu_notifier_free_rcu);
957 * The starting seq for a subscription not under invalidation
973 * @interval_sub: Interval subscription to register
1045 * @interval_sub: Interval subscription to unregister