Lines Matching full: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()
515 struct receiver *rcv = NULL; in can_rx_unregister() local
535 hlist_for_each_entry_rcu(rcv, rcv_list, list) { in can_rx_unregister()
536 if (rcv->can_id == can_id && rcv->mask == mask && in can_rx_unregister()
537 rcv->func == func && rcv->data == data) in can_rx_unregister()
542 * 'rcv' will be NULL if no matching list item was found for removal. in can_rx_unregister()
547 if (!rcv) { in can_rx_unregister()
553 hlist_del_rcu(&rcv->list); in can_rx_unregister()
563 if (rcv) { in can_rx_unregister()
564 if (rcv->sk) in can_rx_unregister()
565 sock_hold(rcv->sk); in can_rx_unregister()
566 call_rcu(&rcv->rcu, can_rx_delete_receiver); in can_rx_unregister()
571 static inline void deliver(struct sk_buff *skb, struct receiver *rcv) in deliver() argument
573 rcv->func(skb, rcv->data); in deliver()
574 rcv->matches++; in deliver()
579 struct receiver *rcv; in can_rcv_filter() local
589 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_ERR], list) { in can_rcv_filter()
590 if (can_id & rcv->mask) { in can_rcv_filter()
591 deliver(skb, rcv); in can_rcv_filter()
599 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_ALL], list) { in can_rcv_filter()
600 deliver(skb, rcv); in can_rcv_filter()
605 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_FIL], list) { in can_rcv_filter()
606 if ((can_id & rcv->mask) == rcv->can_id) { in can_rcv_filter()
607 deliver(skb, rcv); in can_rcv_filter()
613 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_INV], list) { in can_rcv_filter()
614 if ((can_id & rcv->mask) != rcv->can_id) { in can_rcv_filter()
615 deliver(skb, rcv); in can_rcv_filter()
625 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_eff[effhash(can_id)], list) { in can_rcv_filter()
626 if (rcv->can_id == can_id) { in can_rcv_filter()
627 deliver(skb, rcv); in can_rcv_filter()
633 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_sff[can_id], list) { in can_rcv_filter()
634 deliver(skb, rcv); in can_rcv_filter()