Lines Matching full:rcv

448 	struct receiver *rcv;  in can_rx_register()  local
461 rcv = kmem_cache_alloc(rcv_cache, GFP_KERNEL); in can_rx_register()
462 if (!rcv) in can_rx_register()
470 rcv->can_id = can_id; in can_rx_register()
471 rcv->mask = mask; in can_rx_register()
472 rcv->matches = 0; in can_rx_register()
473 rcv->func = func; in can_rx_register()
474 rcv->data = data; in can_rx_register()
475 rcv->ident = ident; in can_rx_register()
476 rcv->sk = sk; in can_rx_register()
478 hlist_add_head_rcu(&rcv->list, rcv_list); in can_rx_register()
493 struct receiver *rcv = container_of(rp, struct receiver, rcu); in can_rx_delete_receiver() local
494 struct sock *sk = rcv->sk; in can_rx_delete_receiver()
496 kmem_cache_free(rcv_cache, rcv); in can_rx_delete_receiver()
517 struct receiver *rcv = NULL; in can_rx_unregister() local
537 hlist_for_each_entry_rcu(rcv, rcv_list, list) { in can_rx_unregister()
538 if (rcv->can_id == can_id && rcv->mask == mask && in can_rx_unregister()
539 rcv->func == func && rcv->data == data) in can_rx_unregister()
544 * 'rcv' will be NULL if no matching list item was found for removal. in can_rx_unregister()
549 if (!rcv) { in can_rx_unregister()
555 hlist_del_rcu(&rcv->list); in can_rx_unregister()
565 if (rcv) { in can_rx_unregister()
566 if (rcv->sk) in can_rx_unregister()
567 sock_hold(rcv->sk); in can_rx_unregister()
568 call_rcu(&rcv->rcu, can_rx_delete_receiver); in can_rx_unregister()
573 static inline void deliver(struct sk_buff *skb, struct receiver *rcv) in deliver() argument
575 rcv->func(skb, rcv->data); in deliver()
576 rcv->matches++; in deliver()
581 struct receiver *rcv; in can_rcv_filter() local
591 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_ERR], list) { in can_rcv_filter()
592 if (can_id & rcv->mask) { in can_rcv_filter()
593 deliver(skb, rcv); in can_rcv_filter()
601 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_ALL], list) { in can_rcv_filter()
602 deliver(skb, rcv); in can_rcv_filter()
607 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_FIL], list) { in can_rcv_filter()
608 if ((can_id & rcv->mask) == rcv->can_id) { in can_rcv_filter()
609 deliver(skb, rcv); in can_rcv_filter()
615 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_INV], list) { in can_rcv_filter()
616 if ((can_id & rcv->mask) != rcv->can_id) { in can_rcv_filter()
617 deliver(skb, rcv); in can_rcv_filter()
627 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_eff[effhash(can_id)], list) { in can_rcv_filter()
628 if (rcv->can_id == can_id) { in can_rcv_filter()
629 deliver(skb, rcv); in can_rcv_filter()
635 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_sff[can_id], list) { in can_rcv_filter()
636 deliver(skb, rcv); in can_rcv_filter()