Lines Matching defs:path
76 struct ipoib_path path;
561 struct ipoib_path *path;
565 path = rb_entry(n, struct ipoib_path, rb_node);
567 ret = memcmp(gid, path->pathrec.dgid.raw,
575 return path;
581 static int __path_add(struct net_device *dev, struct ipoib_path *path)
593 ret = memcmp(path->pathrec.dgid.raw, tpath->pathrec.dgid.raw,
603 rb_link_node(&path->rb_node, pn, n);
604 rb_insert_color(&path->rb_node, &priv->path_tree);
606 list_add_tail(&path->list, &priv->path_list);
611 static void path_free(struct net_device *dev, struct ipoib_path *path)
615 while ((skb = __skb_dequeue(&path->queue)))
620 /* remove all neigh connected to this path */
621 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw);
623 if (path->ah)
624 ipoib_put_ah(path->ah);
626 kfree(path);
640 memset(iter->path.pathrec.dgid.raw, 0, 16);
654 struct ipoib_path *path;
662 path = rb_entry(n, struct ipoib_path, rb_node);
664 if (memcmp(iter->path.pathrec.dgid.raw, path->pathrec.dgid.raw,
666 iter->path = *path;
680 struct ipoib_path *path)
682 *path = iter->path;
690 struct ipoib_path *path, *tp;
694 list_for_each_entry_safe(path, tp, &priv->path_list, list) {
695 ipoib_dbg(priv, "mark path LID 0x%08x GID %pI6 invalid\n",
696 be32_to_cpu(sa_path_get_dlid(&path->pathrec)),
697 path->pathrec.dgid.raw);
698 if (path->ah)
699 path->ah->valid = 0;
716 struct ipoib_path *path, *tp;
725 list_for_each_entry(path, &remove_list, list)
726 rb_erase(&path->rb_node, &priv->path_tree);
728 list_for_each_entry_safe(path, tp, &remove_list, list) {
729 if (path->query)
730 ib_sa_cancel_query(path->query_id, path->query);
733 wait_for_completion(&path->done);
734 path_free(dev, path);
747 struct ipoib_path *path = path_ptr;
748 struct net_device *dev = path->dev;
763 status, path->pathrec.dgid.raw);
785 if (memcmp(pathrec->dgid.raw, path->pathrec.dgid.raw,
791 path->pathrec.dgid.raw);
792 memcpy(pathrec->dgid.raw, path->pathrec.dgid.raw,
796 path->pathrec = *pathrec;
798 old_ah = path->ah;
799 path->ah = ah;
805 while ((skb = __skb_dequeue(&path->queue)))
808 list_for_each_entry_safe(neigh, tn, &path->neigh_list, list) {
815 * the original value of path->ah (ie
820 kref_get(&path->ah->ref);
821 neigh->ah = path->ah;
826 path,
837 path->ah->valid = 1;
840 path->query = NULL;
841 complete(&path->done);
846 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw);
861 static void init_path_rec(struct ipoib_dev_priv *priv, struct ipoib_path *path,
864 path->dev = priv->dev;
867 path->pathrec.rec_type = SA_PATH_REC_TYPE_OPA;
869 path->pathrec.rec_type = SA_PATH_REC_TYPE_IB;
871 memcpy(path->pathrec.dgid.raw, gid, sizeof(union ib_gid));
872 path->pathrec.sgid = priv->local_gid;
873 path->pathrec.pkey = cpu_to_be16(priv->pkey);
874 path->pathrec.numb_path = 1;
875 path->pathrec.traffic_class = priv->broadcast->mcmember.traffic_class;
881 struct ipoib_path *path;
886 path = kzalloc(sizeof(*path), GFP_ATOMIC);
887 if (!path)
890 skb_queue_head_init(&path->queue);
892 INIT_LIST_HEAD(&path->neigh_list);
894 init_path_rec(priv, path, gid);
896 return path;
900 struct ipoib_path *path)
904 ipoib_dbg(priv, "Start path record lookup for %pI6\n",
905 path->pathrec.dgid.raw);
907 init_completion(&path->done);
909 path->query_id =
911 &path->pathrec,
919 path, &path->query);
920 if (path->query_id < 0) {
921 ipoib_warn(priv, "ib_sa_path_rec_get failed: %d\n", path->query_id);
922 path->query = NULL;
923 complete(&path->done);
924 return path->query_id;
934 struct ipoib_path *path;
939 path = __path_find(dev, daddr + 4);
940 if (!path)
942 if (!path->query)
943 path_rec_start(dev, path);
953 struct ipoib_path *path;
974 path = __path_find(dev, daddr + 4);
975 if (!path) {
976 path = path_rec_create(dev, daddr + 4);
977 if (!path)
980 __path_add(dev, path);
983 list_add_tail(&neigh->list, &path->neigh_list);
985 if (path->ah && path->ah->valid) {
986 kref_get(&path->ah->ref);
987 neigh->ah = path->ah;
991 ipoib_cm_set(neigh, ipoib_cm_create_tx(dev, path, neigh));
1007 path->ah->last_send = rn->send(dev, skb, path->ah->ah,
1015 if (!path->query && path_rec_start(dev, path))
1046 struct ipoib_path *path;
1055 path = __path_find(dev, phdr->hwaddr + 4);
1056 if (!path || !path->ah || !path->ah->valid) {
1057 if (!path) {
1058 path = path_rec_create(dev, phdr->hwaddr + 4);
1059 if (!path)
1061 __path_add(dev, path);
1065 * path record
1067 init_path_rec(priv, path, phdr->hwaddr + 4);
1069 if (!path->query && path_rec_start(dev, path)) {
1073 if (skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) {
1075 __skb_queue_tail(&path->queue, skb);
1084 be32_to_cpu(sa_path_get_dlid(&path->pathrec)));
1085 path->ah->last_send = rn->send(dev, skb, path->ah->ah,
1146 /* for unicast ARP and RARP should always perform path find */
1344 /* remove from path/mc list */
1570 /* remove all neigh connected to a given path or mcast */
1633 /* remove from path/mc list */