Lines Matching refs:nf
150 struct ssam_event_notifier *nf; in ssam_nfblk_call_chain() local
155 list_for_each_entry_rcu(nf, &nh->head, base.node, in ssam_nfblk_call_chain()
157 if (ssam_event_matches_notifier(nf, event)) { in ssam_nfblk_call_chain()
158 ret = (ret & SSAM_NOTIF_STATE_MASK) | nf->base.fn(nf, event); in ssam_nfblk_call_chain()
315 ssam_nf_refcount_inc(struct ssam_nf *nf, struct ssam_event_registry reg, in ssam_nf_refcount_inc() argument
320 struct rb_node **link = &nf->refcount.rb_node; in ssam_nf_refcount_inc()
324 lockdep_assert_held(&nf->lock); in ssam_nf_refcount_inc()
355 rb_insert_color(&entry->node, &nf->refcount); in ssam_nf_refcount_inc()
377 ssam_nf_refcount_dec(struct ssam_nf *nf, struct ssam_event_registry reg, in ssam_nf_refcount_dec() argument
382 struct rb_node *node = nf->refcount.rb_node; in ssam_nf_refcount_dec()
385 lockdep_assert_held(&nf->lock); in ssam_nf_refcount_dec()
401 rb_erase(&entry->node, &nf->refcount); in ssam_nf_refcount_dec()
422 static void ssam_nf_refcount_dec_free(struct ssam_nf *nf, in ssam_nf_refcount_dec_free() argument
428 lockdep_assert_held(&nf->lock); in ssam_nf_refcount_dec_free()
430 entry = ssam_nf_refcount_dec(nf, reg, id); in ssam_nf_refcount_dec_free()
440 static bool ssam_nf_refcount_empty(struct ssam_nf *nf) in ssam_nf_refcount_empty() argument
442 return RB_EMPTY_ROOT(&nf->refcount); in ssam_nf_refcount_empty()
464 static void ssam_nf_call(struct ssam_nf *nf, struct device *dev, u16 rqid, in ssam_nf_call() argument
475 nf_head = &nf->head[ssh_rqid_to_event(rqid)]; in ssam_nf_call()
496 static int ssam_nf_init(struct ssam_nf *nf) in ssam_nf_init() argument
501 status = ssam_nf_head_init(&nf->head[i]); in ssam_nf_init()
508 ssam_nf_head_destroy(&nf->head[i]); in ssam_nf_init()
513 mutex_init(&nf->lock); in ssam_nf_init()
521 static void ssam_nf_destroy(struct ssam_nf *nf) in ssam_nf_destroy() argument
526 ssam_nf_head_destroy(&nf->head[i]); in ssam_nf_destroy()
528 mutex_destroy(&nf->lock); in ssam_nf_destroy()
780 struct ssam_nf *nf; in ssam_event_queue_work_fn() local
785 nf = &queue->cplt->event.notif; in ssam_event_queue_work_fn()
794 ssam_nf_call(nf, dev, item->rqid, &item->event); in ssam_event_queue_work_fn()
2178 struct ssam_nf *nf = &ctrl->cplt.event.notif; in ssam_nf_refcount_enable() local
2181 lockdep_assert_held(&nf->lock); in ssam_nf_refcount_enable()
2242 struct ssam_nf *nf = &ctrl->cplt.event.notif; in ssam_nf_refcount_disable_free() local
2245 lockdep_assert_held(&nf->lock); in ssam_nf_refcount_disable_free()
2293 struct ssam_nf *nf; in ssam_notifier_register() local
2299 nf = &ctrl->cplt.event.notif; in ssam_notifier_register()
2300 nf_head = &nf->head[ssh_rqid_to_event(rqid)]; in ssam_notifier_register()
2302 mutex_lock(&nf->lock); in ssam_notifier_register()
2305 entry = ssam_nf_refcount_inc(nf, n->event.reg, n->event.id); in ssam_notifier_register()
2307 mutex_unlock(&nf->lock); in ssam_notifier_register()
2315 ssam_nf_refcount_dec_free(nf, n->event.reg, n->event.id); in ssam_notifier_register()
2317 mutex_unlock(&nf->lock); in ssam_notifier_register()
2325 ssam_nf_refcount_dec_free(nf, n->event.reg, n->event.id); in ssam_notifier_register()
2326 mutex_unlock(&nf->lock); in ssam_notifier_register()
2332 mutex_unlock(&nf->lock); in ssam_notifier_register()
2362 struct ssam_nf *nf; in __ssam_notifier_unregister() local
2368 nf = &ctrl->cplt.event.notif; in __ssam_notifier_unregister()
2369 nf_head = &nf->head[ssh_rqid_to_event(rqid)]; in __ssam_notifier_unregister()
2371 mutex_lock(&nf->lock); in __ssam_notifier_unregister()
2374 mutex_unlock(&nf->lock); in __ssam_notifier_unregister()
2383 entry = ssam_nf_refcount_dec(nf, n->event.reg, n->event.id); in __ssam_notifier_unregister()
2400 mutex_unlock(&nf->lock); in __ssam_notifier_unregister()
2433 struct ssam_nf *nf = &ctrl->cplt.event.notif; in ssam_controller_event_enable() local
2440 mutex_lock(&nf->lock); in ssam_controller_event_enable()
2442 entry = ssam_nf_refcount_inc(nf, reg, id); in ssam_controller_event_enable()
2444 mutex_unlock(&nf->lock); in ssam_controller_event_enable()
2450 ssam_nf_refcount_dec_free(nf, reg, id); in ssam_controller_event_enable()
2451 mutex_unlock(&nf->lock); in ssam_controller_event_enable()
2455 mutex_unlock(&nf->lock); in ssam_controller_event_enable()
2484 struct ssam_nf *nf = &ctrl->cplt.event.notif; in ssam_controller_event_disable() local
2491 mutex_lock(&nf->lock); in ssam_controller_event_disable()
2493 entry = ssam_nf_refcount_dec(nf, reg, id); in ssam_controller_event_disable()
2495 mutex_unlock(&nf->lock); in ssam_controller_event_disable()
2501 mutex_unlock(&nf->lock); in ssam_controller_event_disable()
2529 struct ssam_nf *nf = &ctrl->cplt.event.notif; in ssam_notifier_disable_registered() local
2533 mutex_lock(&nf->lock); in ssam_notifier_disable_registered()
2534 for (n = rb_first(&nf->refcount); n; n = rb_next(n)) { in ssam_notifier_disable_registered()
2543 mutex_unlock(&nf->lock); in ssam_notifier_disable_registered()
2554 mutex_unlock(&nf->lock); in ssam_notifier_disable_registered()
2574 struct ssam_nf *nf = &ctrl->cplt.event.notif; in ssam_notifier_restore_registered() local
2577 mutex_lock(&nf->lock); in ssam_notifier_restore_registered()
2578 for (n = rb_first(&nf->refcount); n; n = rb_next(n)) { in ssam_notifier_restore_registered()
2586 mutex_unlock(&nf->lock); in ssam_notifier_restore_registered()
2598 struct ssam_nf *nf = &ctrl->cplt.event.notif; in ssam_notifier_is_empty() local
2601 mutex_lock(&nf->lock); in ssam_notifier_is_empty()
2602 result = ssam_nf_refcount_empty(nf); in ssam_notifier_is_empty()
2603 mutex_unlock(&nf->lock); in ssam_notifier_is_empty()
2619 struct ssam_nf *nf = &ctrl->cplt.event.notif; in ssam_notifier_unregister_all() local
2622 mutex_lock(&nf->lock); in ssam_notifier_unregister_all()
2623 rbtree_postorder_for_each_entry_safe(e, n, &nf->refcount, node) { in ssam_notifier_unregister_all()
2628 nf->refcount = RB_ROOT; in ssam_notifier_unregister_all()
2629 mutex_unlock(&nf->lock); in ssam_notifier_unregister_all()