Lines Matching refs:rcv

445 	struct receiver *rcv;  in can_rx_register()  local
459 rcv = kmem_cache_alloc(rcv_cache, GFP_KERNEL); in can_rx_register()
460 if (!rcv) in can_rx_register()
468 rcv->can_id = can_id; in can_rx_register()
469 rcv->mask = mask; in can_rx_register()
470 rcv->matches = 0; in can_rx_register()
471 rcv->func = func; in can_rx_register()
472 rcv->data = data; in can_rx_register()
473 rcv->ident = ident; in can_rx_register()
474 rcv->sk = sk; in can_rx_register()
476 hlist_add_head_rcu(&rcv->list, rcv_list); in can_rx_register()
491 struct receiver *rcv = container_of(rp, struct receiver, rcu); in can_rx_delete_receiver() local
492 struct sock *sk = rcv->sk; in can_rx_delete_receiver()
494 kmem_cache_free(rcv_cache, rcv); in can_rx_delete_receiver()
514 struct receiver *rcv = NULL; in can_rx_unregister() local
534 hlist_for_each_entry_rcu(rcv, rcv_list, list) { in can_rx_unregister()
535 if (rcv->can_id == can_id && rcv->mask == mask && in can_rx_unregister()
536 rcv->func == func && rcv->data == data) in can_rx_unregister()
543 if (!rcv) { in can_rx_unregister()
549 hlist_del_rcu(&rcv->list); in can_rx_unregister()
559 if (rcv) { in can_rx_unregister()
560 if (rcv->sk) in can_rx_unregister()
561 sock_hold(rcv->sk); in can_rx_unregister()
562 call_rcu(&rcv->rcu, can_rx_delete_receiver); in can_rx_unregister()
567 static inline void deliver(struct sk_buff *skb, struct receiver *rcv) in deliver() argument
569 rcv->func(skb, rcv->data); in deliver()
570 rcv->matches++; in deliver()
575 struct receiver *rcv; in can_rcv_filter() local
585 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_ERR], list) { in can_rcv_filter()
586 if (can_id & rcv->mask) { in can_rcv_filter()
587 deliver(skb, rcv); in can_rcv_filter()
595 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_ALL], list) { in can_rcv_filter()
596 deliver(skb, rcv); in can_rcv_filter()
601 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_FIL], list) { in can_rcv_filter()
602 if ((can_id & rcv->mask) == rcv->can_id) { in can_rcv_filter()
603 deliver(skb, rcv); in can_rcv_filter()
609 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_INV], list) { in can_rcv_filter()
610 if ((can_id & rcv->mask) != rcv->can_id) { in can_rcv_filter()
611 deliver(skb, rcv); in can_rcv_filter()
621 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_eff[effhash(can_id)], list) { in can_rcv_filter()
622 if (rcv->can_id == can_id) { in can_rcv_filter()
623 deliver(skb, rcv); in can_rcv_filter()
629 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_sff[can_id], list) { in can_rcv_filter()
630 deliver(skb, rcv); in can_rcv_filter()