Lines Matching refs:enic

20 int enic_addfltr_5t(struct enic *enic, struct flow_keys *keys, u16 rq)  in enic_addfltr_5t()  argument
42 spin_lock_bh(&enic->devcmd_lock); in enic_addfltr_5t()
43 res = vnic_dev_classifier(enic->vdev, CLSF_ADD, &rq, &data); in enic_addfltr_5t()
44 spin_unlock_bh(&enic->devcmd_lock); in enic_addfltr_5t()
57 int enic_delfltr(struct enic *enic, u16 filter_id) in enic_delfltr() argument
61 spin_lock_bh(&enic->devcmd_lock); in enic_delfltr()
62 ret = vnic_dev_classifier(enic->vdev, CLSF_DEL, &filter_id, NULL); in enic_delfltr()
63 spin_unlock_bh(&enic->devcmd_lock); in enic_delfltr()
71 void enic_rfs_flw_tbl_init(struct enic *enic) in enic_rfs_flw_tbl_init() argument
75 spin_lock_init(&enic->rfs_h.lock); in enic_rfs_flw_tbl_init()
77 INIT_HLIST_HEAD(&enic->rfs_h.ht_head[i]); in enic_rfs_flw_tbl_init()
78 enic->rfs_h.max = enic->config.num_arfs; in enic_rfs_flw_tbl_init()
79 enic->rfs_h.free = enic->rfs_h.max; in enic_rfs_flw_tbl_init()
80 enic->rfs_h.toclean = 0; in enic_rfs_flw_tbl_init()
81 enic_rfs_timer_start(enic); in enic_rfs_flw_tbl_init()
84 void enic_rfs_flw_tbl_free(struct enic *enic) in enic_rfs_flw_tbl_free() argument
88 enic_rfs_timer_stop(enic); in enic_rfs_flw_tbl_free()
89 spin_lock_bh(&enic->rfs_h.lock); in enic_rfs_flw_tbl_free()
90 enic->rfs_h.free = 0; in enic_rfs_flw_tbl_free()
96 hhead = &enic->rfs_h.ht_head[i]; in enic_rfs_flw_tbl_free()
98 enic_delfltr(enic, n->fltr_id); in enic_rfs_flw_tbl_free()
103 spin_unlock_bh(&enic->rfs_h.lock); in enic_rfs_flw_tbl_free()
106 struct enic_rfs_fltr_node *htbl_fltr_search(struct enic *enic, u16 fltr_id) in htbl_fltr_search() argument
115 hhead = &enic->rfs_h.ht_head[i]; in htbl_fltr_search()
127 struct enic *enic = (struct enic *)data; in enic_flow_may_expire() local
131 spin_lock_bh(&enic->rfs_h.lock); in enic_flow_may_expire()
137 hhead = &enic->rfs_h.ht_head[enic->rfs_h.toclean++]; in enic_flow_may_expire()
139 res = rps_may_expire_flow(enic->netdev, n->rq_id, in enic_flow_may_expire()
142 res = enic_delfltr(enic, n->fltr_id); in enic_flow_may_expire()
147 enic->rfs_h.free++; in enic_flow_may_expire()
151 spin_unlock_bh(&enic->rfs_h.lock); in enic_flow_may_expire()
152 mod_timer(&enic->rfs_h.rfs_may_expire, jiffies + HZ/4); in enic_flow_may_expire()
175 struct enic *enic; in enic_rx_flow_steer() local
179 enic = netdev_priv(dev); in enic_rx_flow_steer()
186 spin_lock_bh(&enic->rfs_h.lock); in enic_rx_flow_steer()
187 n = htbl_key_search(&enic->rfs_h.ht_head[tbl_idx], &keys); in enic_rx_flow_steer()
205 i = --enic->rfs_h.free; in enic_rx_flow_steer()
208 enic->rfs_h.free++; in enic_rx_flow_steer()
209 res = enic_delfltr(enic, n->fltr_id); in enic_rx_flow_steer()
212 res = enic_addfltr_5t(enic, &keys, rxq_index); in enic_rx_flow_steer()
215 enic->rfs_h.free++; in enic_rx_flow_steer()
222 res = enic_addfltr_5t(enic, &keys, rxq_index); in enic_rx_flow_steer()
224 enic->rfs_h.free++; in enic_rx_flow_steer()
227 ret = enic_delfltr(enic, n->fltr_id); in enic_rx_flow_steer()
235 head = &enic->rfs_h.ht_head[tbl_idx]; in enic_rx_flow_steer()
243 enic->rfs_h.free++; in enic_rx_flow_steer()
251 i = --enic->rfs_h.free; in enic_rx_flow_steer()
253 enic->rfs_h.free++; in enic_rx_flow_steer()
261 enic->rfs_h.free++; in enic_rx_flow_steer()
265 res = enic_addfltr_5t(enic, &keys, rxq_index); in enic_rx_flow_steer()
268 enic->rfs_h.free++; in enic_rx_flow_steer()
276 hlist_add_head(&n->node, &enic->rfs_h.ht_head[tbl_idx]); in enic_rx_flow_steer()
280 spin_unlock_bh(&enic->rfs_h.lock); in enic_rx_flow_steer()