Lines Matching refs:path

81 	struct ipoib_path  path;  member
488 struct ipoib_path *path; in __path_find() local
492 path = rb_entry(n, struct ipoib_path, rb_node); in __path_find()
494 ret = memcmp(gid, path->pathrec.dgid.raw, in __path_find()
502 return path; in __path_find()
508 static int __path_add(struct net_device *dev, struct ipoib_path *path) in __path_add() argument
520 ret = memcmp(path->pathrec.dgid.raw, tpath->pathrec.dgid.raw, in __path_add()
530 rb_link_node(&path->rb_node, pn, n); in __path_add()
531 rb_insert_color(&path->rb_node, &priv->path_tree); in __path_add()
533 list_add_tail(&path->list, &priv->path_list); in __path_add()
538 static void path_free(struct net_device *dev, struct ipoib_path *path) in path_free() argument
542 while ((skb = __skb_dequeue(&path->queue))) in path_free()
548 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw); in path_free()
550 if (path->ah) in path_free()
551 ipoib_put_ah(path->ah); in path_free()
553 kfree(path); in path_free()
567 memset(iter->path.pathrec.dgid.raw, 0, 16); in ipoib_path_iter_init()
581 struct ipoib_path *path; in ipoib_path_iter_next() local
589 path = rb_entry(n, struct ipoib_path, rb_node); in ipoib_path_iter_next()
591 if (memcmp(iter->path.pathrec.dgid.raw, path->pathrec.dgid.raw, in ipoib_path_iter_next()
593 iter->path = *path; in ipoib_path_iter_next()
607 struct ipoib_path *path) in ipoib_path_iter_read() argument
609 *path = iter->path; in ipoib_path_iter_read()
617 struct ipoib_path *path, *tp; in ipoib_mark_paths_invalid() local
621 list_for_each_entry_safe(path, tp, &priv->path_list, list) { in ipoib_mark_paths_invalid()
623 be16_to_cpu(path->pathrec.dlid), in ipoib_mark_paths_invalid()
624 path->pathrec.dgid.raw); in ipoib_mark_paths_invalid()
625 path->valid = 0; in ipoib_mark_paths_invalid()
634 struct ipoib_path *path, *tp; in ipoib_flush_paths() local
643 list_for_each_entry(path, &remove_list, list) in ipoib_flush_paths()
644 rb_erase(&path->rb_node, &priv->path_tree); in ipoib_flush_paths()
646 list_for_each_entry_safe(path, tp, &remove_list, list) { in ipoib_flush_paths()
647 if (path->query) in ipoib_flush_paths()
648 ib_sa_cancel_query(path->query_id, path->query); in ipoib_flush_paths()
651 wait_for_completion(&path->done); in ipoib_flush_paths()
652 path_free(dev, path); in ipoib_flush_paths()
665 struct ipoib_path *path = path_ptr; in path_rec_completion() local
666 struct net_device *dev = path->dev; in path_rec_completion()
680 status, path->pathrec.dgid.raw); in path_rec_completion()
694 path->pathrec = *pathrec; in path_rec_completion()
696 old_ah = path->ah; in path_rec_completion()
697 path->ah = ah; in path_rec_completion()
702 while ((skb = __skb_dequeue(&path->queue))) in path_rec_completion()
705 list_for_each_entry_safe(neigh, tn, &path->neigh_list, list) { in path_rec_completion()
717 kref_get(&path->ah->ref); in path_rec_completion()
718 neigh->ah = path->ah; in path_rec_completion()
723 path, in path_rec_completion()
734 path->valid = 1; in path_rec_completion()
737 path->query = NULL; in path_rec_completion()
738 complete(&path->done); in path_rec_completion()
743 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw); in path_rec_completion()
759 struct ipoib_path *path; in path_rec_create() local
764 path = kzalloc(sizeof *path, GFP_ATOMIC); in path_rec_create()
765 if (!path) in path_rec_create()
768 path->dev = dev; in path_rec_create()
770 skb_queue_head_init(&path->queue); in path_rec_create()
772 INIT_LIST_HEAD(&path->neigh_list); in path_rec_create()
774 memcpy(path->pathrec.dgid.raw, gid, sizeof (union ib_gid)); in path_rec_create()
775 path->pathrec.sgid = priv->local_gid; in path_rec_create()
776 path->pathrec.pkey = cpu_to_be16(priv->pkey); in path_rec_create()
777 path->pathrec.numb_path = 1; in path_rec_create()
778 path->pathrec.traffic_class = priv->broadcast->mcmember.traffic_class; in path_rec_create()
780 return path; in path_rec_create()
784 struct ipoib_path *path) in path_rec_start() argument
789 path->pathrec.dgid.raw); in path_rec_start()
791 init_completion(&path->done); in path_rec_start()
793 path->query_id = in path_rec_start()
795 &path->pathrec, in path_rec_start()
803 path, &path->query); in path_rec_start()
804 if (path->query_id < 0) { in path_rec_start()
805 ipoib_warn(priv, "ib_sa_path_rec_get failed: %d\n", path->query_id); in path_rec_start()
806 path->query = NULL; in path_rec_start()
807 complete(&path->done); in path_rec_start()
808 return path->query_id; in path_rec_start()
818 struct ipoib_path *path; in neigh_add_path() local
831 path = __path_find(dev, daddr + 4); in neigh_add_path()
832 if (!path) { in neigh_add_path()
833 path = path_rec_create(dev, daddr + 4); in neigh_add_path()
834 if (!path) in neigh_add_path()
837 __path_add(dev, path); in neigh_add_path()
840 list_add_tail(&neigh->list, &path->neigh_list); in neigh_add_path()
842 if (path->ah) { in neigh_add_path()
843 kref_get(&path->ah->ref); in neigh_add_path()
844 neigh->ah = path->ah; in neigh_add_path()
848 ipoib_cm_set(neigh, ipoib_cm_create_tx(dev, path, neigh)); in neigh_add_path()
862 ipoib_send(dev, skb, path->ah, IPOIB_QPN(daddr)); in neigh_add_path()
869 if (!path->query && path_rec_start(dev, path)) in neigh_add_path()
895 struct ipoib_path *path; in unicast_arp_send() local
900 path = __path_find(dev, cb->hwaddr + 4); in unicast_arp_send()
901 if (!path || !path->valid) { in unicast_arp_send()
904 if (!path) { in unicast_arp_send()
905 path = path_rec_create(dev, cb->hwaddr + 4); in unicast_arp_send()
908 if (path) { in unicast_arp_send()
909 if (skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) { in unicast_arp_send()
910 __skb_queue_tail(&path->queue, skb); in unicast_arp_send()
916 if (!path->query && path_rec_start(dev, path)) { in unicast_arp_send()
919 path_free(dev, path); in unicast_arp_send()
922 __path_add(dev, path); in unicast_arp_send()
932 if (path->ah) { in unicast_arp_send()
934 be16_to_cpu(path->pathrec.dlid)); in unicast_arp_send()
937 ipoib_send(dev, skb, path->ah, IPOIB_QPN(cb->hwaddr)); in unicast_arp_send()
939 } else if ((path->query || !path_rec_start(dev, path)) && in unicast_arp_send()
940 skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) { in unicast_arp_send()
941 __skb_queue_tail(&path->queue, skb); in unicast_arp_send()