Lines Matching refs:path

78 	struct ipoib_path  path;  member
601 struct ipoib_path *path; in __path_find() local
605 path = rb_entry(n, struct ipoib_path, rb_node); in __path_find()
607 ret = memcmp(gid, path->pathrec.dgid.raw, in __path_find()
615 return path; in __path_find()
621 static int __path_add(struct net_device *dev, struct ipoib_path *path) in __path_add() argument
633 ret = memcmp(path->pathrec.dgid.raw, tpath->pathrec.dgid.raw, in __path_add()
643 rb_link_node(&path->rb_node, pn, n); in __path_add()
644 rb_insert_color(&path->rb_node, &priv->path_tree); in __path_add()
646 list_add_tail(&path->list, &priv->path_list); in __path_add()
651 static void path_free(struct net_device *dev, struct ipoib_path *path) in path_free() argument
655 while ((skb = __skb_dequeue(&path->queue))) in path_free()
661 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw); in path_free()
663 if (path->ah) in path_free()
664 ipoib_put_ah(path->ah); in path_free()
666 kfree(path); in path_free()
680 memset(iter->path.pathrec.dgid.raw, 0, 16); in ipoib_path_iter_init()
694 struct ipoib_path *path; in ipoib_path_iter_next() local
702 path = rb_entry(n, struct ipoib_path, rb_node); in ipoib_path_iter_next()
704 if (memcmp(iter->path.pathrec.dgid.raw, path->pathrec.dgid.raw, in ipoib_path_iter_next()
706 iter->path = *path; in ipoib_path_iter_next()
720 struct ipoib_path *path) in ipoib_path_iter_read() argument
722 *path = iter->path; in ipoib_path_iter_read()
730 struct ipoib_path *path, *tp; in ipoib_mark_paths_invalid() local
734 list_for_each_entry_safe(path, tp, &priv->path_list, list) { in ipoib_mark_paths_invalid()
736 be32_to_cpu(sa_path_get_dlid(&path->pathrec)), in ipoib_mark_paths_invalid()
737 path->pathrec.dgid.raw); in ipoib_mark_paths_invalid()
738 if (path->ah) in ipoib_mark_paths_invalid()
739 path->ah->valid = 0; in ipoib_mark_paths_invalid()
756 struct ipoib_path *path, *tp; in ipoib_flush_paths() local
765 list_for_each_entry(path, &remove_list, list) in ipoib_flush_paths()
766 rb_erase(&path->rb_node, &priv->path_tree); in ipoib_flush_paths()
768 list_for_each_entry_safe(path, tp, &remove_list, list) { in ipoib_flush_paths()
769 if (path->query) in ipoib_flush_paths()
770 ib_sa_cancel_query(path->query_id, path->query); in ipoib_flush_paths()
773 wait_for_completion(&path->done); in ipoib_flush_paths()
774 path_free(dev, path); in ipoib_flush_paths()
787 struct ipoib_path *path = path_ptr; in path_rec_completion() local
788 struct net_device *dev = path->dev; in path_rec_completion()
803 status, path->pathrec.dgid.raw); in path_rec_completion()
825 if (memcmp(pathrec->dgid.raw, path->pathrec.dgid.raw, in path_rec_completion()
831 path->pathrec.dgid.raw); in path_rec_completion()
832 memcpy(pathrec->dgid.raw, path->pathrec.dgid.raw, in path_rec_completion()
836 path->pathrec = *pathrec; in path_rec_completion()
838 old_ah = path->ah; in path_rec_completion()
839 path->ah = ah; in path_rec_completion()
845 while ((skb = __skb_dequeue(&path->queue))) in path_rec_completion()
848 list_for_each_entry_safe(neigh, tn, &path->neigh_list, list) { in path_rec_completion()
860 kref_get(&path->ah->ref); in path_rec_completion()
861 neigh->ah = path->ah; in path_rec_completion()
866 path, in path_rec_completion()
877 path->ah->valid = 1; in path_rec_completion()
880 path->query = NULL; in path_rec_completion()
881 complete(&path->done); in path_rec_completion()
886 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw); in path_rec_completion()
901 static void init_path_rec(struct ipoib_dev_priv *priv, struct ipoib_path *path, in init_path_rec() argument
904 path->dev = priv->dev; in init_path_rec()
907 path->pathrec.rec_type = SA_PATH_REC_TYPE_OPA; in init_path_rec()
909 path->pathrec.rec_type = SA_PATH_REC_TYPE_IB; in init_path_rec()
911 memcpy(path->pathrec.dgid.raw, gid, sizeof(union ib_gid)); in init_path_rec()
912 path->pathrec.sgid = priv->local_gid; in init_path_rec()
913 path->pathrec.pkey = cpu_to_be16(priv->pkey); in init_path_rec()
914 path->pathrec.numb_path = 1; in init_path_rec()
915 path->pathrec.traffic_class = priv->broadcast->mcmember.traffic_class; in init_path_rec()
921 struct ipoib_path *path; in path_rec_create() local
926 path = kzalloc(sizeof(*path), GFP_ATOMIC); in path_rec_create()
927 if (!path) in path_rec_create()
930 skb_queue_head_init(&path->queue); in path_rec_create()
932 INIT_LIST_HEAD(&path->neigh_list); in path_rec_create()
934 init_path_rec(priv, path, gid); in path_rec_create()
936 return path; in path_rec_create()
940 struct ipoib_path *path) in path_rec_start() argument
945 path->pathrec.dgid.raw); in path_rec_start()
947 init_completion(&path->done); in path_rec_start()
949 path->query_id = in path_rec_start()
951 &path->pathrec, in path_rec_start()
959 path, &path->query); in path_rec_start()
960 if (path->query_id < 0) { in path_rec_start()
961 ipoib_warn(priv, "ib_sa_path_rec_get failed: %d\n", path->query_id); in path_rec_start()
962 path->query = NULL; in path_rec_start()
963 complete(&path->done); in path_rec_start()
964 return path->query_id; in path_rec_start()
974 struct ipoib_path *path; in neigh_refresh_path() local
979 path = __path_find(dev, daddr + 4); in neigh_refresh_path()
980 if (!path) in neigh_refresh_path()
982 if (!path->query) in neigh_refresh_path()
983 path_rec_start(dev, path); in neigh_refresh_path()
993 struct ipoib_path *path; in neigh_add_path() local
1014 path = __path_find(dev, daddr + 4); in neigh_add_path()
1015 if (!path) { in neigh_add_path()
1016 path = path_rec_create(dev, daddr + 4); in neigh_add_path()
1017 if (!path) in neigh_add_path()
1020 __path_add(dev, path); in neigh_add_path()
1023 list_add_tail(&neigh->list, &path->neigh_list); in neigh_add_path()
1025 if (path->ah && path->ah->valid) { in neigh_add_path()
1026 kref_get(&path->ah->ref); in neigh_add_path()
1027 neigh->ah = path->ah; in neigh_add_path()
1031 ipoib_cm_set(neigh, ipoib_cm_create_tx(dev, path, neigh)); in neigh_add_path()
1047 path->ah->last_send = rn->send(dev, skb, path->ah->ah, in neigh_add_path()
1055 if (!path->query && path_rec_start(dev, path)) in neigh_add_path()
1086 struct ipoib_path *path; in unicast_arp_send() local
1095 path = __path_find(dev, phdr->hwaddr + 4); in unicast_arp_send()
1096 if (!path || !path->ah || !path->ah->valid) { in unicast_arp_send()
1097 if (!path) { in unicast_arp_send()
1098 path = path_rec_create(dev, phdr->hwaddr + 4); in unicast_arp_send()
1099 if (!path) in unicast_arp_send()
1101 __path_add(dev, path); in unicast_arp_send()
1107 init_path_rec(priv, path, phdr->hwaddr + 4); in unicast_arp_send()
1109 if (!path->query && path_rec_start(dev, path)) { in unicast_arp_send()
1113 if (skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) { in unicast_arp_send()
1115 __skb_queue_tail(&path->queue, skb); in unicast_arp_send()
1124 be32_to_cpu(sa_path_get_dlid(&path->pathrec))); in unicast_arp_send()
1125 path->ah->last_send = rn->send(dev, skb, path->ah->ah, in unicast_arp_send()