Lines Matching refs:alink

62 __nfp_abm_reset_root(struct net_device *netdev, struct nfp_abm_link *alink,  in __nfp_abm_reset_root()  argument
68 ret = nfp_abm_ctrl_set_all_q_lvls(alink, init_val); in __nfp_abm_reset_root()
69 memset(alink->qdiscs, 0, sizeof(*alink->qdiscs) * alink->num_qdiscs); in __nfp_abm_reset_root()
71 alink->parent = handle; in __nfp_abm_reset_root()
72 alink->num_qdiscs = qs; in __nfp_abm_reset_root()
79 nfp_abm_reset_root(struct net_device *netdev, struct nfp_abm_link *alink, in nfp_abm_reset_root() argument
82 __nfp_abm_reset_root(netdev, alink, handle, qs, ~0); in nfp_abm_reset_root()
86 nfp_abm_red_find(struct nfp_abm_link *alink, struct tc_red_qopt_offload *opt) in nfp_abm_red_find() argument
92 else if (TC_H_MAJ(alink->parent) == TC_H_MAJ(opt->parent)) in nfp_abm_red_find()
97 if (i >= alink->num_qdiscs || opt->handle != alink->qdiscs[i].handle) in nfp_abm_red_find()
104 nfp_abm_red_destroy(struct net_device *netdev, struct nfp_abm_link *alink, in nfp_abm_red_destroy() argument
109 for (i = 0; i < alink->num_qdiscs; i++) in nfp_abm_red_destroy()
110 if (handle == alink->qdiscs[i].handle) in nfp_abm_red_destroy()
112 if (i == alink->num_qdiscs) in nfp_abm_red_destroy()
115 if (alink->parent == TC_H_ROOT) { in nfp_abm_red_destroy()
116 nfp_abm_reset_root(netdev, alink, TC_H_ROOT, 0); in nfp_abm_red_destroy()
118 nfp_abm_ctrl_set_q_lvl(alink, i, ~0); in nfp_abm_red_destroy()
119 memset(&alink->qdiscs[i], 0, sizeof(*alink->qdiscs)); in nfp_abm_red_destroy()
124 nfp_abm_red_replace(struct net_device *netdev, struct nfp_abm_link *alink, in nfp_abm_red_replace() argument
130 i = nfp_abm_red_find(alink, opt); in nfp_abm_red_replace()
134 nfp_warn(alink->abm->app->cpp, in nfp_abm_red_replace()
141 if (alink->parent == TC_H_ROOT) in nfp_abm_red_replace()
142 err = nfp_abm_ctrl_set_all_q_lvls(alink, opt->set.min); in nfp_abm_red_replace()
144 err = nfp_abm_ctrl_set_q_lvl(alink, i, opt->set.min); in nfp_abm_red_replace()
152 err = __nfp_abm_reset_root(netdev, alink, TC_H_ROOT, 1, in nfp_abm_red_replace()
154 } else if (TC_H_MAJ(alink->parent) == TC_H_MAJ(opt->parent)) { in nfp_abm_red_replace()
156 err = nfp_abm_ctrl_set_q_lvl(alink, i, opt->set.min); in nfp_abm_red_replace()
161 alink->qdiscs[i].handle = opt->handle; in nfp_abm_red_replace()
166 err = nfp_abm_ctrl_read_stats(alink, &alink->qdiscs[i].stats); in nfp_abm_red_replace()
168 err = nfp_abm_ctrl_read_q_stats(alink, i, in nfp_abm_red_replace()
169 &alink->qdiscs[i].stats); in nfp_abm_red_replace()
174 err = nfp_abm_ctrl_read_xstats(alink, in nfp_abm_red_replace()
175 &alink->qdiscs[i].xstats); in nfp_abm_red_replace()
177 err = nfp_abm_ctrl_read_q_xstats(alink, i, in nfp_abm_red_replace()
178 &alink->qdiscs[i].xstats); in nfp_abm_red_replace()
182 alink->qdiscs[i].stats.backlog_pkts = 0; in nfp_abm_red_replace()
183 alink->qdiscs[i].stats.backlog_bytes = 0; in nfp_abm_red_replace()
189 opt->set.qstats->qlen -= alink->qdiscs[i].stats.backlog_pkts; in nfp_abm_red_replace()
191 alink->qdiscs[i].stats.backlog_bytes; in nfp_abm_red_replace()
193 nfp_abm_red_destroy(netdev, alink, opt->handle); in nfp_abm_red_replace()
211 nfp_abm_red_stats(struct nfp_abm_link *alink, struct tc_red_qopt_offload *opt) in nfp_abm_red_stats() argument
217 i = nfp_abm_red_find(alink, opt); in nfp_abm_red_stats()
220 prev_stats = &alink->qdiscs[i].stats; in nfp_abm_red_stats()
222 if (alink->parent == TC_H_ROOT) in nfp_abm_red_stats()
223 err = nfp_abm_ctrl_read_stats(alink, &stats); in nfp_abm_red_stats()
225 err = nfp_abm_ctrl_read_q_stats(alink, i, &stats); in nfp_abm_red_stats()
237 nfp_abm_red_xstats(struct nfp_abm_link *alink, struct tc_red_qopt_offload *opt) in nfp_abm_red_xstats() argument
243 i = nfp_abm_red_find(alink, opt); in nfp_abm_red_xstats()
246 prev_xstats = &alink->qdiscs[i].xstats; in nfp_abm_red_xstats()
248 if (alink->parent == TC_H_ROOT) in nfp_abm_red_xstats()
249 err = nfp_abm_ctrl_read_xstats(alink, &xstats); in nfp_abm_red_xstats()
251 err = nfp_abm_ctrl_read_q_xstats(alink, i, &xstats); in nfp_abm_red_xstats()
264 nfp_abm_setup_tc_red(struct net_device *netdev, struct nfp_abm_link *alink, in nfp_abm_setup_tc_red() argument
269 return nfp_abm_red_replace(netdev, alink, opt); in nfp_abm_setup_tc_red()
271 nfp_abm_red_destroy(netdev, alink, opt->handle); in nfp_abm_setup_tc_red()
274 return nfp_abm_red_stats(alink, opt); in nfp_abm_setup_tc_red()
276 return nfp_abm_red_xstats(alink, opt); in nfp_abm_setup_tc_red()
283 nfp_abm_mq_stats(struct nfp_abm_link *alink, struct tc_mq_qopt_offload *opt) in nfp_abm_mq_stats() argument
289 for (i = 0; i < alink->num_qdiscs; i++) { in nfp_abm_mq_stats()
290 if (alink->qdiscs[i].handle == TC_H_UNSPEC) in nfp_abm_mq_stats()
293 err = nfp_abm_ctrl_read_q_stats(alink, i, &stats); in nfp_abm_mq_stats()
297 nfp_abm_update_stats(&stats, &alink->qdiscs[i].stats, in nfp_abm_mq_stats()
305 nfp_abm_setup_tc_mq(struct net_device *netdev, struct nfp_abm_link *alink, in nfp_abm_setup_tc_mq() argument
310 nfp_abm_reset_root(netdev, alink, opt->handle, in nfp_abm_setup_tc_mq()
311 alink->total_queues); in nfp_abm_setup_tc_mq()
314 if (opt->handle == alink->parent) in nfp_abm_setup_tc_mq()
315 nfp_abm_reset_root(netdev, alink, TC_H_ROOT, 0); in nfp_abm_setup_tc_mq()
318 return nfp_abm_mq_stats(alink, opt); in nfp_abm_setup_tc_mq()
365 nfp_abm_spawn_repr(struct nfp_app *app, struct nfp_abm_link *alink, in nfp_abm_spawn_repr() argument
381 txqs = alink->vnic->max_rx_rings; in nfp_abm_spawn_repr()
388 repr->app_priv = alink; in nfp_abm_spawn_repr()
398 err = nfp_port_init_phy_port(app->pf, app, port, alink->id); in nfp_abm_spawn_repr()
402 port->pf_id = alink->abm->pf_id; in nfp_abm_spawn_repr()
404 port->pf_split_id = alink->id; in nfp_abm_spawn_repr()
405 port->vnic = alink->vnic->dp.ctrl_bar; in nfp_abm_spawn_repr()
408 SET_NETDEV_DEV(netdev, &alink->vnic->pdev->dev); in nfp_abm_spawn_repr()
411 err = nfp_repr_init(app, netdev, nfp_abm_portid(rtype, alink->id), in nfp_abm_spawn_repr()
412 port, alink->vnic->dp.netdev); in nfp_abm_spawn_repr()
417 WARN(nfp_repr_get_locked(app, reprs, alink->id), "duplicate repr"); in nfp_abm_spawn_repr()
418 rcu_assign_pointer(reprs->reprs[alink->id], netdev); in nfp_abm_spawn_repr()
422 alink->id, netdev->name); in nfp_abm_spawn_repr()
434 nfp_abm_kill_repr(struct nfp_app *app, struct nfp_abm_link *alink, in nfp_abm_kill_repr() argument
441 netdev = nfp_repr_get_locked(app, reprs, alink->id); in nfp_abm_kill_repr()
444 rcu_assign_pointer(reprs->reprs[alink->id], NULL); in nfp_abm_kill_repr()
451 nfp_abm_kill_reprs(struct nfp_abm *abm, struct nfp_abm_link *alink) in nfp_abm_kill_reprs() argument
453 nfp_abm_kill_repr(abm->app, alink, NFP_REPR_TYPE_PF); in nfp_abm_kill_reprs()
454 nfp_abm_kill_repr(abm->app, alink, NFP_REPR_TYPE_PHYS_PORT); in nfp_abm_kill_reprs()
500 struct nfp_abm_link *alink = nn->app_priv; in nfp_abm_eswitch_set_switchdev() local
502 err = nfp_abm_spawn_repr(app, alink, NFP_PORT_PHYS_PORT); in nfp_abm_eswitch_set_switchdev()
506 err = nfp_abm_spawn_repr(app, alink, NFP_PORT_PF_PORT); in nfp_abm_eswitch_set_switchdev()
581 struct nfp_abm_link *alink; in nfp_abm_vnic_alloc() local
584 alink = kzalloc(sizeof(*alink), GFP_KERNEL); in nfp_abm_vnic_alloc()
585 if (!alink) in nfp_abm_vnic_alloc()
587 nn->app_priv = alink; in nfp_abm_vnic_alloc()
588 alink->abm = abm; in nfp_abm_vnic_alloc()
589 alink->vnic = nn; in nfp_abm_vnic_alloc()
590 alink->id = id; in nfp_abm_vnic_alloc()
591 alink->parent = TC_H_ROOT; in nfp_abm_vnic_alloc()
592 alink->total_queues = alink->vnic->max_rx_rings; in nfp_abm_vnic_alloc()
593 alink->qdiscs = kvcalloc(alink->total_queues, sizeof(*alink->qdiscs), in nfp_abm_vnic_alloc()
595 if (!alink->qdiscs) { in nfp_abm_vnic_alloc()
610 nfp_abm_ctrl_read_params(alink); in nfp_abm_vnic_alloc()
615 kvfree(alink->qdiscs); in nfp_abm_vnic_alloc()
617 kfree(alink); in nfp_abm_vnic_alloc()
623 struct nfp_abm_link *alink = nn->app_priv; in nfp_abm_vnic_free() local
625 nfp_abm_kill_reprs(alink->abm, alink); in nfp_abm_vnic_free()
626 kvfree(alink->qdiscs); in nfp_abm_vnic_free()
627 kfree(alink); in nfp_abm_vnic_free()
634 struct nfp_abm_link *alink; in nfp_abm_port_get_stats() local
639 alink = repr->app_priv; in nfp_abm_port_get_stats()
640 for (i = 0; i < alink->vnic->dp.num_r_vecs; i++) { in nfp_abm_port_get_stats()
641 *data++ = nfp_abm_ctrl_stat_non_sto(alink, i); in nfp_abm_port_get_stats()
642 *data++ = nfp_abm_ctrl_stat_sto(alink, i); in nfp_abm_port_get_stats()
651 struct nfp_abm_link *alink; in nfp_abm_port_get_stats_count() local
655 alink = repr->app_priv; in nfp_abm_port_get_stats_count()
656 return alink->vnic->dp.num_r_vecs * 2; in nfp_abm_port_get_stats_count()
664 struct nfp_abm_link *alink; in nfp_abm_port_get_stats_strings() local
669 alink = repr->app_priv; in nfp_abm_port_get_stats_strings()
670 for (i = 0; i < alink->vnic->dp.num_r_vecs; i++) { in nfp_abm_port_get_stats_strings()