Lines Matching refs:rcv
446 struct receiver *rcv;
460 rcv = kmem_cache_alloc(rcv_cache, GFP_KERNEL);
461 if (!rcv)
469 rcv->can_id = can_id;
470 rcv->mask = mask;
471 rcv->matches = 0;
472 rcv->func = func;
473 rcv->data = data;
474 rcv->ident = ident;
475 rcv->sk = sk;
477 hlist_add_head_rcu(&rcv->list, rcv_list);
492 struct receiver *rcv = container_of(rp, struct receiver, rcu);
493 struct sock *sk = rcv->sk;
495 kmem_cache_free(rcv_cache, rcv);
516 struct receiver *rcv = NULL;
536 hlist_for_each_entry_rcu(rcv, rcv_list, list) {
537 if (rcv->can_id == can_id && rcv->mask == mask &&
538 rcv->func == func && rcv->data == data)
543 * 'rcv' will be NULL if no matching list item was found for removal.
548 if (!rcv) {
554 hlist_del_rcu(&rcv->list);
564 if (rcv) {
565 if (rcv->sk)
566 sock_hold(rcv->sk);
567 call_rcu(&rcv->rcu, can_rx_delete_receiver);
572 static inline void deliver(struct sk_buff *skb, struct receiver *rcv)
574 rcv->func(skb, rcv->data);
575 rcv->matches++;
580 struct receiver *rcv;
590 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_ERR], list) {
591 if (can_id & rcv->mask) {
592 deliver(skb, rcv);
600 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_ALL], list) {
601 deliver(skb, rcv);
606 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_FIL], list) {
607 if ((can_id & rcv->mask) == rcv->can_id) {
608 deliver(skb, rcv);
614 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx[RX_INV], list) {
615 if ((can_id & rcv->mask) != rcv->can_id) {
616 deliver(skb, rcv);
626 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_eff[effhash(can_id)], list) {
627 if (rcv->can_id == can_id) {
628 deliver(skb, rcv);
634 hlist_for_each_entry_rcu(rcv, &dev_rcv_lists->rx_sff[can_id], list) {
635 deliver(skb, rcv);