Lines Matching refs:nh_grp

18  *   +------->|vr|<-+   +>|nh_grp|
55 struct prestera_nexthop_group *nh_grp);
58 struct prestera_nexthop_group *nh_grp);
361 struct prestera_nexthop_group *nh_grp;
365 nh_grp = nh_head->this;
366 err = prestera_nexthop_group_set(sw, nh_grp);
396 struct prestera_nexthop_group *nh_grp;
400 nh_grp = kzalloc(sizeof(*nh_grp), GFP_KERNEL);
401 if (!nh_grp)
404 memcpy(&nh_grp->key, key, sizeof(*key));
406 if (!prestera_nh_neigh_key_is_valid(&nh_grp->key.neigh[nh_cnt]))
410 &nh_grp->key.neigh[nh_cnt]);
414 nh_grp->nh_neigh_head[nh_cnt].neigh = nh_neigh;
415 nh_grp->nh_neigh_head[nh_cnt].this = nh_grp;
416 list_add(&nh_grp->nh_neigh_head[nh_cnt].head,
420 err = prestera_hw_nh_group_create(sw, nh_cnt, &nh_grp->grp_id);
424 err = prestera_nexthop_group_set(sw, nh_grp);
429 &nh_grp->ht_node,
435 gid = nh_grp->grp_id;
438 return nh_grp;
442 prestera_hw_nh_group_delete(sw, nh_cnt, nh_grp->grp_id);
446 list_del(&nh_grp->nh_neigh_head[nh_cnt].head);
447 prestera_nh_neigh_put(sw, nh_grp->nh_neigh_head[nh_cnt].neigh);
450 kfree(nh_grp);
457 struct prestera_nexthop_group *nh_grp)
463 &nh_grp->ht_node,
467 nh_neigh = nh_grp->nh_neigh_head[nh_cnt].neigh;
471 list_del(&nh_grp->nh_neigh_head[nh_cnt].head);
475 prestera_hw_nh_group_delete(sw, nh_cnt, nh_grp->grp_id);
476 kfree(nh_grp);
483 struct prestera_nexthop_group *nh_grp;
485 nh_grp = rhashtable_lookup_fast(&sw->router->nexthop_group_ht,
487 return nh_grp;
494 struct prestera_nexthop_group *nh_grp;
496 nh_grp = __prestera_nexthop_group_find(sw, key);
497 if (nh_grp) {
498 refcount_inc(&nh_grp->refcount);
500 nh_grp = __prestera_nexthop_group_create(sw, key);
501 if (!nh_grp)
504 refcount_set(&nh_grp->refcount, 1);
507 return nh_grp;
511 struct prestera_nexthop_group *nh_grp)
513 if (refcount_dec_and_test(&nh_grp->refcount))
514 __prestera_nexthop_group_destroy(sw, nh_grp);
519 struct prestera_nexthop_group *nh_grp)
527 neigh = nh_grp->nh_neigh_head[nh_cnt].neigh;
534 return prestera_hw_nh_entries_set(sw, nh_cnt, &info[0], nh_grp->grp_id);
539 struct prestera_nexthop_group *nh_grp)
543 u32 gid = nh_grp->grp_id;
547 * Prevent situation, when we read state of nh_grp twice in short time,
555 pr_err("Failed to get hw state nh_grp's");
588 prestera_nexthop_group_put(sw, fib_node->info.nh_grp);
652 fib_node->info.nh_grp = prestera_nexthop_group_get(sw,
654 if (IS_ERR(fib_node->info.nh_grp))
657 grp_id = fib_node->info.nh_grp->grp_id;
681 prestera_nexthop_group_put(sw, fib_node->info.nh_grp);