Lines Matching refs:rcv

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