Lines Matching refs:path

78 	struct ipoib_path  path;  member
260 struct ipoib_path *path; in __path_find() local
264 path = rb_entry(n, struct ipoib_path, rb_node); in __path_find()
266 ret = memcmp(gid, path->pathrec.dgid.raw, in __path_find()
274 return path; in __path_find()
280 static int __path_add(struct net_device *dev, struct ipoib_path *path) in __path_add() argument
292 ret = memcmp(path->pathrec.dgid.raw, tpath->pathrec.dgid.raw, in __path_add()
302 rb_link_node(&path->rb_node, pn, n); in __path_add()
303 rb_insert_color(&path->rb_node, &priv->path_tree); in __path_add()
305 list_add_tail(&path->list, &priv->path_list); in __path_add()
310 static void path_free(struct net_device *dev, struct ipoib_path *path) in path_free() argument
314 while ((skb = __skb_dequeue(&path->queue))) in path_free()
320 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw); in path_free()
322 if (path->ah) in path_free()
323 ipoib_put_ah(path->ah); in path_free()
325 kfree(path); in path_free()
339 memset(iter->path.pathrec.dgid.raw, 0, 16); in ipoib_path_iter_init()
353 struct ipoib_path *path; in ipoib_path_iter_next() local
361 path = rb_entry(n, struct ipoib_path, rb_node); in ipoib_path_iter_next()
363 if (memcmp(iter->path.pathrec.dgid.raw, path->pathrec.dgid.raw, in ipoib_path_iter_next()
365 iter->path = *path; in ipoib_path_iter_next()
379 struct ipoib_path *path) in ipoib_path_iter_read() argument
381 *path = iter->path; in ipoib_path_iter_read()
389 struct ipoib_path *path, *tp; in ipoib_mark_paths_invalid() local
393 list_for_each_entry_safe(path, tp, &priv->path_list, list) { in ipoib_mark_paths_invalid()
395 be16_to_cpu(path->pathrec.dlid), in ipoib_mark_paths_invalid()
396 path->pathrec.dgid.raw); in ipoib_mark_paths_invalid()
397 path->valid = 0; in ipoib_mark_paths_invalid()
406 struct ipoib_path *path, *tp; in ipoib_flush_paths() local
415 list_for_each_entry(path, &remove_list, list) in ipoib_flush_paths()
416 rb_erase(&path->rb_node, &priv->path_tree); in ipoib_flush_paths()
418 list_for_each_entry_safe(path, tp, &remove_list, list) { in ipoib_flush_paths()
419 if (path->query) in ipoib_flush_paths()
420 ib_sa_cancel_query(path->query_id, path->query); in ipoib_flush_paths()
423 wait_for_completion(&path->done); in ipoib_flush_paths()
424 path_free(dev, path); in ipoib_flush_paths()
437 struct ipoib_path *path = path_ptr; in path_rec_completion() local
438 struct net_device *dev = path->dev; in path_rec_completion()
452 status, path->pathrec.dgid.raw); in path_rec_completion()
466 path->pathrec = *pathrec; in path_rec_completion()
468 old_ah = path->ah; in path_rec_completion()
469 path->ah = ah; in path_rec_completion()
474 while ((skb = __skb_dequeue(&path->queue))) in path_rec_completion()
477 list_for_each_entry_safe(neigh, tn, &path->neigh_list, list) { in path_rec_completion()
489 kref_get(&path->ah->ref); in path_rec_completion()
490 neigh->ah = path->ah; in path_rec_completion()
495 path, in path_rec_completion()
506 path->valid = 1; in path_rec_completion()
509 path->query = NULL; in path_rec_completion()
510 complete(&path->done); in path_rec_completion()
515 ipoib_del_neighs_by_gid(dev, path->pathrec.dgid.raw); in path_rec_completion()
531 struct ipoib_path *path; in path_rec_create() local
536 path = kzalloc(sizeof *path, GFP_ATOMIC); in path_rec_create()
537 if (!path) in path_rec_create()
540 path->dev = dev; in path_rec_create()
542 skb_queue_head_init(&path->queue); in path_rec_create()
544 INIT_LIST_HEAD(&path->neigh_list); in path_rec_create()
546 memcpy(path->pathrec.dgid.raw, gid, sizeof (union ib_gid)); in path_rec_create()
547 path->pathrec.sgid = priv->local_gid; in path_rec_create()
548 path->pathrec.pkey = cpu_to_be16(priv->pkey); in path_rec_create()
549 path->pathrec.numb_path = 1; in path_rec_create()
550 path->pathrec.traffic_class = priv->broadcast->mcmember.traffic_class; in path_rec_create()
552 return path; in path_rec_create()
556 struct ipoib_path *path) in path_rec_start() argument
561 path->pathrec.dgid.raw); in path_rec_start()
563 init_completion(&path->done); in path_rec_start()
565 path->query_id = in path_rec_start()
567 &path->pathrec, in path_rec_start()
575 path, &path->query); in path_rec_start()
576 if (path->query_id < 0) { in path_rec_start()
577 ipoib_warn(priv, "ib_sa_path_rec_get failed: %d\n", path->query_id); in path_rec_start()
578 path->query = NULL; in path_rec_start()
579 complete(&path->done); in path_rec_start()
580 return path->query_id; in path_rec_start()
590 struct ipoib_path *path; in neigh_add_path() local
603 path = __path_find(dev, daddr + 4); in neigh_add_path()
604 if (!path) { in neigh_add_path()
605 path = path_rec_create(dev, daddr + 4); in neigh_add_path()
606 if (!path) in neigh_add_path()
609 __path_add(dev, path); in neigh_add_path()
612 list_add_tail(&neigh->list, &path->neigh_list); in neigh_add_path()
614 if (path->ah) { in neigh_add_path()
615 kref_get(&path->ah->ref); in neigh_add_path()
616 neigh->ah = path->ah; in neigh_add_path()
620 ipoib_cm_set(neigh, ipoib_cm_create_tx(dev, path, neigh)); in neigh_add_path()
634 ipoib_send(dev, skb, path->ah, IPOIB_QPN(daddr)); in neigh_add_path()
641 if (!path->query && path_rec_start(dev, path)) in neigh_add_path()
667 struct ipoib_path *path; in unicast_arp_send() local
672 path = __path_find(dev, cb->hwaddr + 4); in unicast_arp_send()
673 if (!path || !path->valid) { in unicast_arp_send()
676 if (!path) { in unicast_arp_send()
677 path = path_rec_create(dev, cb->hwaddr + 4); in unicast_arp_send()
680 if (path) { in unicast_arp_send()
681 if (skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) { in unicast_arp_send()
682 __skb_queue_tail(&path->queue, skb); in unicast_arp_send()
688 if (!path->query && path_rec_start(dev, path)) { in unicast_arp_send()
691 path_free(dev, path); in unicast_arp_send()
694 __path_add(dev, path); in unicast_arp_send()
704 if (path->ah) { in unicast_arp_send()
706 be16_to_cpu(path->pathrec.dlid)); in unicast_arp_send()
709 ipoib_send(dev, skb, path->ah, IPOIB_QPN(cb->hwaddr)); in unicast_arp_send()
711 } else if ((path->query || !path_rec_start(dev, path)) && in unicast_arp_send()
712 skb_queue_len(&path->queue) < IPOIB_MAX_PATH_REC_QUEUE) { in unicast_arp_send()
713 __skb_queue_tail(&path->queue, skb); in unicast_arp_send()