Lines Matching defs:neigh

619 	/* remove all neigh connected to this path */
751 struct ipoib_neigh *neigh, *tn;
807 list_for_each_entry_safe(neigh, tn, &path->neigh_list, list) {
808 if (neigh->ah) {
809 WARN_ON(neigh->ah != old_ah);
817 ipoib_put_ah(neigh->ah);
820 neigh->ah = path->ah;
822 if (ipoib_cm_enabled(dev, neigh->daddr)) {
823 if (!ipoib_cm_get(neigh))
824 ipoib_cm_set(neigh, ipoib_cm_create_tx(dev,
826 neigh));
827 if (!ipoib_cm_get(neigh)) {
828 ipoib_neigh_free(neigh);
833 while ((skb = __skb_dequeue(&neigh->queue)))
929 static void neigh_refresh_path(struct ipoib_neigh *neigh, u8 *daddr,
953 struct ipoib_neigh *neigh;
957 neigh = ipoib_neigh_alloc(daddr, dev);
958 if (!neigh) {
966 * neigh will be added only once.
968 if (unlikely(!list_empty(&neigh->list))) {
970 return neigh;
982 list_add_tail(&neigh->list, &path->neigh_list);
986 neigh->ah = path->ah;
988 if (ipoib_cm_enabled(dev, neigh->daddr)) {
989 if (!ipoib_cm_get(neigh))
990 ipoib_cm_set(neigh, ipoib_cm_create_tx(dev, path, neigh));
991 if (!ipoib_cm_get(neigh)) {
992 ipoib_neigh_free(neigh);
995 if (skb_queue_len(&neigh->queue) <
997 push_pseudo_header(skb, neigh->daddr);
998 __skb_queue_tail(&neigh->queue, skb);
1001 skb_queue_len(&neigh->queue));
1008 ipoib_neigh_put(neigh);
1012 neigh->ah = NULL;
1016 if (skb_queue_len(&neigh->queue) < IPOIB_MAX_PATH_REC_QUEUE) {
1017 push_pseudo_header(skb, neigh->daddr);
1018 __skb_queue_tail(&neigh->queue, skb);
1025 ipoib_neigh_put(neigh);
1029 ipoib_neigh_free(neigh);
1035 ipoib_neigh_put(neigh);
1099 struct ipoib_neigh *neigh;
1124 neigh = ipoib_neigh_get(dev, phdr->hwaddr);
1125 if (likely(neigh))
1136 neigh = ipoib_neigh_get(dev, phdr->hwaddr);
1137 if (unlikely(!neigh)) {
1138 neigh = neigh_add_path(skb, phdr->hwaddr, dev);
1139 if (likely(!neigh))
1156 /* note we now hold a ref to neigh */
1157 if (ipoib_cm_get(neigh)) {
1158 if (ipoib_cm_up(neigh)) {
1159 ipoib_cm_send(dev, skb, ipoib_cm_get(neigh));
1162 } else if (neigh->ah && neigh->ah->valid) {
1163 neigh->ah->last_send = rn->send(dev, skb, neigh->ah->ah,
1166 } else if (neigh->ah) {
1167 neigh_refresh_path(neigh, phdr->hwaddr, dev);
1170 if (skb_queue_len(&neigh->queue) < IPOIB_MAX_PATH_REC_QUEUE) {
1173 __skb_queue_tail(&neigh->queue, skb);
1181 ipoib_neigh_put(neigh);
1301 struct ipoib_neigh *neigh = NULL;
1312 for (neigh = rcu_dereference_bh(htbl->buckets[hash_val]);
1313 neigh != NULL;
1314 neigh = rcu_dereference_bh(neigh->hnext)) {
1315 if (memcmp(daddr, neigh->daddr, INFINIBAND_ALEN) == 0) {
1317 if (!refcount_inc_not_zero(&neigh->refcnt)) {
1319 neigh = NULL;
1323 if (likely(skb_queue_len(&neigh->queue) < IPOIB_MAX_PATH_REC_QUEUE))
1324 neigh->alive = jiffies;
1331 return neigh;
1352 /* neigh is obsolete if it was idle for two GC periods */
1357 struct ipoib_neigh *neigh;
1360 while ((neigh = rcu_dereference_protected(*np,
1362 /* was the neigh idle for two GC periods */
1363 if (time_after(neigh_obsolete, neigh->alive)) {
1365 ipoib_check_and_add_mcast_sendonly(priv, neigh->daddr + 4, &remove_list);
1368 rcu_dereference_protected(neigh->hnext,
1371 list_del_init(&neigh->list);
1372 call_rcu(&neigh->rcu, ipoib_neigh_reclaim);
1374 np = &neigh->hnext;
1400 struct ipoib_neigh *neigh;
1402 neigh = kzalloc(sizeof(*neigh), GFP_ATOMIC);
1403 if (!neigh)
1406 neigh->dev = dev;
1407 memcpy(&neigh->daddr, daddr, sizeof(neigh->daddr));
1408 skb_queue_head_init(&neigh->queue);
1409 INIT_LIST_HEAD(&neigh->list);
1410 ipoib_cm_set(neigh, NULL);
1412 refcount_set(&neigh->refcnt, 1);
1414 return neigh;
1423 struct ipoib_neigh *neigh;
1429 neigh = NULL;
1433 /* need to add a new neigh, but maybe some other thread succeeded?
1437 for (neigh = rcu_dereference_protected(htbl->buckets[hash_val],
1439 neigh != NULL;
1440 neigh = rcu_dereference_protected(neigh->hnext,
1442 if (memcmp(daddr, neigh->daddr, INFINIBAND_ALEN) == 0) {
1444 if (!refcount_inc_not_zero(&neigh->refcnt)) {
1446 neigh = NULL;
1449 neigh->alive = jiffies;
1454 neigh = ipoib_neigh_ctor(daddr, dev);
1455 if (!neigh)
1459 refcount_inc(&neigh->refcnt);
1460 neigh->alive = jiffies;
1462 rcu_assign_pointer(neigh->hnext,
1465 rcu_assign_pointer(htbl->buckets[hash_val], neigh);
1470 return neigh;
1473 void ipoib_neigh_dtor(struct ipoib_neigh *neigh)
1475 /* neigh reference count was dropprd to zero */
1476 struct net_device *dev = neigh->dev;
1479 if (neigh->ah)
1480 ipoib_put_ah(neigh->ah);
1481 while ((skb = __skb_dequeue(&neigh->queue))) {
1485 if (ipoib_cm_get(neigh))
1486 ipoib_cm_destroy_tx(ipoib_cm_get(neigh));
1488 "neigh free for %06x %pI6\n",
1489 IPOIB_QPN(neigh->daddr),
1490 neigh->daddr + 4);
1491 kfree(neigh);
1501 struct ipoib_neigh *neigh = container_of(rp, struct ipoib_neigh, rcu);
1503 ipoib_neigh_put(neigh);
1506 void ipoib_neigh_free(struct ipoib_neigh *neigh)
1508 struct net_device *dev = neigh->dev;
1521 hash_val = ipoib_addr_hash(htbl, neigh->daddr);
1528 if (n == neigh) {
1531 rcu_dereference_protected(neigh->hnext,
1534 list_del_init(&neigh->list);
1535 call_rcu(&neigh->rcu, ipoib_neigh_reclaim);
1596 /* remove all neigh connected to a given path or mcast */
1606 struct ipoib_neigh *neigh;
1609 while ((neigh = rcu_dereference_protected(*np,
1612 if (!memcmp(gid, neigh->daddr + 4, sizeof (union ib_gid))) {
1614 rcu_dereference_protected(neigh->hnext,
1617 list_del_init(&neigh->list);
1618 call_rcu(&neigh->rcu, ipoib_neigh_reclaim);
1620 np = &neigh->hnext;
1651 struct ipoib_neigh *neigh;
1654 while ((neigh = rcu_dereference_protected(*np,
1657 rcu_dereference_protected(neigh->hnext,
1660 list_del_init(&neigh->list);
1661 call_rcu(&neigh->rcu, ipoib_neigh_reclaim);
1816 pr_warn("%s failed to init neigh hash\n", dev->name);