Lines Matching refs:path
76 struct ipoib_path path;
557 struct ipoib_path *path;
561 path = rb_entry(n, struct ipoib_path, rb_node);
563 ret = memcmp(gid, path->pathrec.dgid.raw,
571 return path;
577 static int __path_add(struct net_device *dev, struct ipoib_path *path)
589 ret = memcmp(path->pathrec.dgid.raw, tpath->pathrec.dgid.raw,
599 rb_link_node(&path->rb_node, pn, n);
600 rb_insert_color(&path->rb_node, &priv->path_tree);
602 list_add_tail(&path->list, &priv->path_list);
607 static void path_free(struct net_device *dev, struct ipoib_path *path)
611 while ((skb = __skb_dequeue(&path->queue)))
616 /* remove all neigh connected to this path */
617 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw);
619 if (path->ah)
620 ipoib_put_ah(path->ah);
622 kfree(path);
636 memset(iter->path.pathrec.dgid.raw, 0, 16);
650 struct ipoib_path *path;
658 path = rb_entry(n, struct ipoib_path, rb_node);
660 if (memcmp(iter->path.pathrec.dgid.raw, path->pathrec.dgid.raw,
662 iter->path = *path;
676 struct ipoib_path *path)
678 *path = iter->path;
686 struct ipoib_path *path, *tp;
690 list_for_each_entry_safe(path, tp, &priv->path_list, list) {
691 ipoib_dbg(priv, "mark path LID 0x%08x GID %pI6 invalid\n",
692 be32_to_cpu(sa_path_get_dlid(&path->pathrec)),
693 path->pathrec.dgid.raw);
694 if (path->ah)
695 path->ah->valid = 0;
712 struct ipoib_path *path, *tp;
721 list_for_each_entry(path, &remove_list, list)
722 rb_erase(&path->rb_node, &priv->path_tree);
724 list_for_each_entry_safe(path, tp, &remove_list, list) {
725 if (path->query)
726 ib_sa_cancel_query(path->query_id, path->query);
729 wait_for_completion(&path->done);
730 path_free(dev, path);
743 struct ipoib_path *path = path_ptr;
744 struct net_device *dev = path->dev;
759 status, path->pathrec.dgid.raw);
781 if (memcmp(pathrec->dgid.raw, path->pathrec.dgid.raw,
787 path->pathrec.dgid.raw);
788 memcpy(pathrec->dgid.raw, path->pathrec.dgid.raw,
792 path->pathrec = *pathrec;
794 old_ah = path->ah;
795 path->ah = ah;
801 while ((skb = __skb_dequeue(&path->queue)))
804 list_for_each_entry_safe(neigh, tn, &path->neigh_list, list) {
811 * the original value of path->ah (ie
816 kref_get(&path->ah->ref);
817 neigh->ah = path->ah;
822 path,
833 path->ah->valid = 1;
836 path->query = NULL;
837 complete(&path->done);
842 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw);
857 static void init_path_rec(struct ipoib_dev_priv *priv, struct ipoib_path *path,
860 path->dev = priv->dev;
863 path->pathrec.rec_type = SA_PATH_REC_TYPE_OPA;
865 path->pathrec.rec_type = SA_PATH_REC_TYPE_IB;
867 memcpy(path->pathrec.dgid.raw, gid, sizeof(union ib_gid));
868 path->pathrec.sgid = priv->local_gid;
869 path->pathrec.pkey = cpu_to_be16(priv->pkey);
870 path->pathrec.numb_path = 1;
871 path->pathrec.traffic_class = priv->broadcast->mcmember.traffic_class;
877 struct ipoib_path *path;
882 path = kzalloc(sizeof(*path), GFP_ATOMIC);
883 if (!path)
886 skb_queue_head_init(&path->queue);
888 INIT_LIST_HEAD(&path->neigh_list);
890 init_path_rec(priv, path, gid);
892 return path;
896 struct ipoib_path *path)
900 ipoib_dbg(priv, "Start path record lookup for %pI6\n",
901 path->pathrec.dgid.raw);
903 init_completion(&path->done);
905 path->query_id =
907 &path->pathrec,
915 path, &path->query);
916 if (path->query_id < 0) {
917 ipoib_warn(priv, "ib_sa_path_rec_get failed: %d\n", path->query_id);
918 path->query = NULL;
919 complete(&path->done);
920 return path->query_id;
930 struct ipoib_path *path;
935 path = __path_find(dev, daddr + 4);
936 if (!path)
938 if (!path->query)
939 path_rec_start(dev, path);
949 struct ipoib_path *path;
970 path = __path_find(dev, daddr + 4);
971 if (!path) {
972 path = path_rec_create(dev, daddr + 4);
973 if (!path)
976 __path_add(dev, path);
979 list_add_tail(&neigh->list, &path->neigh_list);
981 if (path->ah && path->ah->valid) {
982 kref_get(&path->ah->ref);
983 neigh->ah = path->ah;
987 ipoib_cm_set(neigh, ipoib_cm_create_tx(dev, path, neigh));
1003 path->ah->last_send = rn->send(dev, skb, path->ah->ah,
1011 if (!path->query && path_rec_start(dev, path))
1042 struct ipoib_path *path;
1051 path = __path_find(dev, phdr->hwaddr + 4);
1052 if (!path || !path->ah || !path->ah->valid) {
1053 if (!path) {
1054 path = path_rec_create(dev, phdr->hwaddr + 4);
1055 if (!path)
1057 __path_add(dev, path);
1061 * path record
1063 init_path_rec(priv, path, phdr->hwaddr + 4);
1065 if (!path->query && path_rec_start(dev, path)) {
1069 if (skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) {
1071 __skb_queue_tail(&path->queue, skb);
1080 be32_to_cpu(sa_path_get_dlid(&path->pathrec)));
1081 path->ah->last_send = rn->send(dev, skb, path->ah->ah,
1142 /* for unicast ARP and RARP should always perform path find */
1335 /* remove from path/mc list */
1561 /* remove all neigh connected to a given path or mcast */
1624 /* remove from path/mc list */