• Home
  • Raw
  • Download

Lines Matching refs:path

76 	struct ipoib_path  path;  member
561 struct ipoib_path *path; in __path_find() local
565 path = rb_entry(n, struct ipoib_path, rb_node); in __path_find()
567 ret = memcmp(gid, path->pathrec.dgid.raw, in __path_find()
575 return path; in __path_find()
581 static int __path_add(struct net_device *dev, struct ipoib_path *path) in __path_add() argument
593 ret = memcmp(path->pathrec.dgid.raw, tpath->pathrec.dgid.raw, in __path_add()
603 rb_link_node(&path->rb_node, pn, n); in __path_add()
604 rb_insert_color(&path->rb_node, &priv->path_tree); in __path_add()
606 list_add_tail(&path->list, &priv->path_list); in __path_add()
611 static void path_free(struct net_device *dev, struct ipoib_path *path) in path_free() argument
615 while ((skb = __skb_dequeue(&path->queue))) in path_free()
621 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw); in path_free()
623 if (path->ah) in path_free()
624 ipoib_put_ah(path->ah); in path_free()
626 kfree(path); in path_free()
640 memset(iter->path.pathrec.dgid.raw, 0, 16); in ipoib_path_iter_init()
654 struct ipoib_path *path; in ipoib_path_iter_next() local
662 path = rb_entry(n, struct ipoib_path, rb_node); in ipoib_path_iter_next()
664 if (memcmp(iter->path.pathrec.dgid.raw, path->pathrec.dgid.raw, in ipoib_path_iter_next()
666 iter->path = *path; in ipoib_path_iter_next()
680 struct ipoib_path *path) in ipoib_path_iter_read() argument
682 *path = iter->path; in ipoib_path_iter_read()
690 struct ipoib_path *path, *tp; in ipoib_mark_paths_invalid() local
694 list_for_each_entry_safe(path, tp, &priv->path_list, list) { in ipoib_mark_paths_invalid()
696 be32_to_cpu(sa_path_get_dlid(&path->pathrec)), in ipoib_mark_paths_invalid()
697 path->pathrec.dgid.raw); in ipoib_mark_paths_invalid()
698 if (path->ah) in ipoib_mark_paths_invalid()
699 path->ah->valid = 0; in ipoib_mark_paths_invalid()
716 struct ipoib_path *path, *tp; in ipoib_flush_paths() local
725 list_for_each_entry(path, &remove_list, list) in ipoib_flush_paths()
726 rb_erase(&path->rb_node, &priv->path_tree); in ipoib_flush_paths()
728 list_for_each_entry_safe(path, tp, &remove_list, list) { in ipoib_flush_paths()
729 if (path->query) in ipoib_flush_paths()
730 ib_sa_cancel_query(path->query_id, path->query); in ipoib_flush_paths()
733 wait_for_completion(&path->done); in ipoib_flush_paths()
734 path_free(dev, path); in ipoib_flush_paths()
747 struct ipoib_path *path = path_ptr; in path_rec_completion() local
748 struct net_device *dev = path->dev; in path_rec_completion()
763 status, path->pathrec.dgid.raw); in path_rec_completion()
785 if (memcmp(pathrec->dgid.raw, path->pathrec.dgid.raw, in path_rec_completion()
791 path->pathrec.dgid.raw); in path_rec_completion()
792 memcpy(pathrec->dgid.raw, path->pathrec.dgid.raw, in path_rec_completion()
796 path->pathrec = *pathrec; in path_rec_completion()
798 old_ah = path->ah; in path_rec_completion()
799 path->ah = ah; in path_rec_completion()
805 while ((skb = __skb_dequeue(&path->queue))) in path_rec_completion()
808 list_for_each_entry_safe(neigh, tn, &path->neigh_list, list) { in path_rec_completion()
820 kref_get(&path->ah->ref); in path_rec_completion()
821 neigh->ah = path->ah; in path_rec_completion()
826 path, in path_rec_completion()
837 path->ah->valid = 1; in path_rec_completion()
840 path->query = NULL; in path_rec_completion()
841 complete(&path->done); in path_rec_completion()
846 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw); in path_rec_completion()
861 static void init_path_rec(struct ipoib_dev_priv *priv, struct ipoib_path *path, in init_path_rec() argument
864 path->dev = priv->dev; in init_path_rec()
867 path->pathrec.rec_type = SA_PATH_REC_TYPE_OPA; in init_path_rec()
869 path->pathrec.rec_type = SA_PATH_REC_TYPE_IB; in init_path_rec()
871 memcpy(path->pathrec.dgid.raw, gid, sizeof(union ib_gid)); in init_path_rec()
872 path->pathrec.sgid = priv->local_gid; in init_path_rec()
873 path->pathrec.pkey = cpu_to_be16(priv->pkey); in init_path_rec()
874 path->pathrec.numb_path = 1; in init_path_rec()
875 path->pathrec.traffic_class = priv->broadcast->mcmember.traffic_class; in init_path_rec()
881 struct ipoib_path *path; in path_rec_create() local
886 path = kzalloc(sizeof(*path), GFP_ATOMIC); in path_rec_create()
887 if (!path) in path_rec_create()
890 skb_queue_head_init(&path->queue); in path_rec_create()
892 INIT_LIST_HEAD(&path->neigh_list); in path_rec_create()
894 init_path_rec(priv, path, gid); in path_rec_create()
896 return path; in path_rec_create()
900 struct ipoib_path *path) in path_rec_start() argument
905 path->pathrec.dgid.raw); in path_rec_start()
907 init_completion(&path->done); in path_rec_start()
909 path->query_id = in path_rec_start()
911 &path->pathrec, in path_rec_start()
919 path, &path->query); in path_rec_start()
920 if (path->query_id < 0) { in path_rec_start()
921 ipoib_warn(priv, "ib_sa_path_rec_get failed: %d\n", path->query_id); in path_rec_start()
922 path->query = NULL; in path_rec_start()
923 complete(&path->done); in path_rec_start()
924 return path->query_id; in path_rec_start()
934 struct ipoib_path *path; in neigh_refresh_path() local
939 path = __path_find(dev, daddr + 4); in neigh_refresh_path()
940 if (!path) in neigh_refresh_path()
942 if (!path->query) in neigh_refresh_path()
943 path_rec_start(dev, path); in neigh_refresh_path()
953 struct ipoib_path *path; in neigh_add_path() local
974 path = __path_find(dev, daddr + 4); in neigh_add_path()
975 if (!path) { in neigh_add_path()
976 path = path_rec_create(dev, daddr + 4); in neigh_add_path()
977 if (!path) in neigh_add_path()
980 __path_add(dev, path); in neigh_add_path()
983 list_add_tail(&neigh->list, &path->neigh_list); in neigh_add_path()
985 if (path->ah && path->ah->valid) { in neigh_add_path()
986 kref_get(&path->ah->ref); in neigh_add_path()
987 neigh->ah = path->ah; in neigh_add_path()
991 ipoib_cm_set(neigh, ipoib_cm_create_tx(dev, path, neigh)); in neigh_add_path()
1007 path->ah->last_send = rn->send(dev, skb, path->ah->ah, in neigh_add_path()
1015 if (!path->query && path_rec_start(dev, path)) in neigh_add_path()
1046 struct ipoib_path *path; in unicast_arp_send() local
1055 path = __path_find(dev, phdr->hwaddr + 4); in unicast_arp_send()
1056 if (!path || !path->ah || !path->ah->valid) { in unicast_arp_send()
1057 if (!path) { in unicast_arp_send()
1058 path = path_rec_create(dev, phdr->hwaddr + 4); in unicast_arp_send()
1059 if (!path) in unicast_arp_send()
1061 __path_add(dev, path); in unicast_arp_send()
1067 init_path_rec(priv, path, phdr->hwaddr + 4); in unicast_arp_send()
1069 if (!path->query && path_rec_start(dev, path)) { in unicast_arp_send()
1073 if (skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) { in unicast_arp_send()
1075 __skb_queue_tail(&path->queue, skb); in unicast_arp_send()
1084 be32_to_cpu(sa_path_get_dlid(&path->pathrec))); in unicast_arp_send()
1085 path->ah->last_send = rn->send(dev, skb, path->ah->ah, in unicast_arp_send()