Lines Matching +full:lock +full:- +full:status
14 * - Redistributions of source code must retain the above
18 * - Redistributions in binary form must reproduce the above
45 int status; in usnic_fwd_devcmd_locked() local
46 struct net_device *netdev = ufdev->netdev; in usnic_fwd_devcmd_locked()
48 lockdep_assert_held(&ufdev->lock); in usnic_fwd_devcmd_locked()
50 status = enic_api_devcmd_proxy_by_index(netdev, in usnic_fwd_devcmd_locked()
55 if (status) { in usnic_fwd_devcmd_locked()
56 if (status == ERR_EINVAL && cmd == CMD_DEL_FILTER) { in usnic_fwd_devcmd_locked()
58 ufdev->name, vnic_idx, cmd); in usnic_fwd_devcmd_locked()
60 usnic_err("Dev %s vnic idx %u cmd %u failed with status %d\n", in usnic_fwd_devcmd_locked()
61 ufdev->name, vnic_idx, cmd, in usnic_fwd_devcmd_locked()
62 status); in usnic_fwd_devcmd_locked()
66 ufdev->name, vnic_idx, cmd); in usnic_fwd_devcmd_locked()
69 return status; in usnic_fwd_devcmd_locked()
75 int status; in usnic_fwd_devcmd() local
77 spin_lock(&ufdev->lock); in usnic_fwd_devcmd()
78 status = usnic_fwd_devcmd_locked(ufdev, vnic_idx, cmd, a0, a1); in usnic_fwd_devcmd()
79 spin_unlock(&ufdev->lock); in usnic_fwd_devcmd()
81 return status; in usnic_fwd_devcmd()
92 ufdev->pdev = pdev; in usnic_fwd_dev_alloc()
93 ufdev->netdev = pci_get_drvdata(pdev); in usnic_fwd_dev_alloc()
94 spin_lock_init(&ufdev->lock); in usnic_fwd_dev_alloc()
95 BUILD_BUG_ON(sizeof(ufdev->name) != sizeof(ufdev->netdev->name)); in usnic_fwd_dev_alloc()
96 strcpy(ufdev->name, ufdev->netdev->name); in usnic_fwd_dev_alloc()
108 spin_lock(&ufdev->lock); in usnic_fwd_set_mac()
109 memcpy(&ufdev->mac, mac, sizeof(ufdev->mac)); in usnic_fwd_set_mac()
110 spin_unlock(&ufdev->lock); in usnic_fwd_set_mac()
115 spin_lock(&ufdev->lock); in usnic_fwd_add_ipaddr()
116 if (!ufdev->inaddr) in usnic_fwd_add_ipaddr()
117 ufdev->inaddr = inaddr; in usnic_fwd_add_ipaddr()
118 spin_unlock(&ufdev->lock); in usnic_fwd_add_ipaddr()
123 spin_lock(&ufdev->lock); in usnic_fwd_del_ipaddr()
124 ufdev->inaddr = 0; in usnic_fwd_del_ipaddr()
125 spin_unlock(&ufdev->lock); in usnic_fwd_del_ipaddr()
130 spin_lock(&ufdev->lock); in usnic_fwd_carrier_up()
131 ufdev->link_up = 1; in usnic_fwd_carrier_up()
132 spin_unlock(&ufdev->lock); in usnic_fwd_carrier_up()
137 spin_lock(&ufdev->lock); in usnic_fwd_carrier_down()
138 ufdev->link_up = 0; in usnic_fwd_carrier_down()
139 spin_unlock(&ufdev->lock); in usnic_fwd_carrier_down()
144 spin_lock(&ufdev->lock); in usnic_fwd_set_mtu()
145 ufdev->mtu = mtu; in usnic_fwd_set_mtu()
146 spin_unlock(&ufdev->lock); in usnic_fwd_set_mtu()
151 lockdep_assert_held(&ufdev->lock); in usnic_fwd_dev_ready_locked()
153 if (!ufdev->link_up) in usnic_fwd_dev_ready_locked()
154 return -EPERM; in usnic_fwd_dev_ready_locked()
163 lockdep_assert_held(&ufdev->lock); in validate_filter_locked()
165 if (filter->type == FILTER_IPV4_5TUPLE) { in validate_filter_locked()
166 if (!(filter->u.ipv4.flags & FILTER_FIELD_5TUP_DST_AD)) in validate_filter_locked()
167 return -EACCES; in validate_filter_locked()
168 if (!(filter->u.ipv4.flags & FILTER_FIELD_5TUP_DST_PT)) in validate_filter_locked()
169 return -EBUSY; in validate_filter_locked()
170 else if (ufdev->inaddr == 0) in validate_filter_locked()
171 return -EINVAL; in validate_filter_locked()
172 else if (filter->u.ipv4.dst_port == 0) in validate_filter_locked()
173 return -ERANGE; in validate_filter_locked()
174 else if (ntohl(ufdev->inaddr) != filter->u.ipv4.dst_addr) in validate_filter_locked()
175 return -EFAULT; in validate_filter_locked()
186 tlv->type = CLSF_TLV_FILTER; in fill_tlv()
187 tlv->length = sizeof(struct filter); in fill_tlv()
188 *((struct filter *)&tlv->val) = *filter; in fill_tlv()
192 tlv->type = CLSF_TLV_ACTION; in fill_tlv()
193 tlv->length = sizeof(struct filter_action); in fill_tlv()
194 *((struct filter_action *)&tlv->val) = *action; in fill_tlv()
207 int status; in usnic_fwd_alloc_flow() local
209 pdev = ufdev->pdev; in usnic_fwd_alloc_flow()
215 return ERR_PTR(-ENOMEM); in usnic_fwd_alloc_flow()
217 tlv = dma_alloc_coherent(&pdev->dev, tlv_size, &tlv_pa, GFP_ATOMIC); in usnic_fwd_alloc_flow()
220 status = -ENOMEM; in usnic_fwd_alloc_flow()
224 fill_tlv(tlv, filter, &uaction->action); in usnic_fwd_alloc_flow()
226 spin_lock(&ufdev->lock); in usnic_fwd_alloc_flow()
227 status = usnic_fwd_dev_ready_locked(ufdev); in usnic_fwd_alloc_flow()
228 if (status) { in usnic_fwd_alloc_flow()
229 usnic_err("Forwarding dev %s not ready with status %d\n", in usnic_fwd_alloc_flow()
230 ufdev->name, status); in usnic_fwd_alloc_flow()
234 status = validate_filter_locked(ufdev, filter); in usnic_fwd_alloc_flow()
235 if (status) { in usnic_fwd_alloc_flow()
236 usnic_err("Failed to validate filter with status %d\n", in usnic_fwd_alloc_flow()
237 status); in usnic_fwd_alloc_flow()
244 status = usnic_fwd_devcmd_locked(ufdev, uaction->vnic_idx, in usnic_fwd_alloc_flow()
246 if (status) { in usnic_fwd_alloc_flow()
247 usnic_err("VF %s Filter add failed with status:%d", in usnic_fwd_alloc_flow()
248 ufdev->name, status); in usnic_fwd_alloc_flow()
249 status = -EFAULT; in usnic_fwd_alloc_flow()
252 usnic_dbg("VF %s FILTER ID:%llu", ufdev->name, a0); in usnic_fwd_alloc_flow()
255 flow->flow_id = (uint32_t) a0; in usnic_fwd_alloc_flow()
256 flow->vnic_idx = uaction->vnic_idx; in usnic_fwd_alloc_flow()
257 flow->ufdev = ufdev; in usnic_fwd_alloc_flow()
260 spin_unlock(&ufdev->lock); in usnic_fwd_alloc_flow()
261 dma_free_coherent(&pdev->dev, tlv_size, tlv, tlv_pa); in usnic_fwd_alloc_flow()
262 if (!status) in usnic_fwd_alloc_flow()
266 return ERR_PTR(status); in usnic_fwd_alloc_flow()
271 int status; in usnic_fwd_dealloc_flow() local
274 a0 = flow->flow_id; in usnic_fwd_dealloc_flow()
276 status = usnic_fwd_devcmd(flow->ufdev, flow->vnic_idx, in usnic_fwd_dealloc_flow()
278 if (status) { in usnic_fwd_dealloc_flow()
279 if (status == ERR_EINVAL) { in usnic_fwd_dealloc_flow()
280 usnic_dbg("Filter %u already deleted for VF Idx %u pf: %s status: %d", in usnic_fwd_dealloc_flow()
281 flow->flow_id, flow->vnic_idx, in usnic_fwd_dealloc_flow()
282 flow->ufdev->name, status); in usnic_fwd_dealloc_flow()
284 usnic_err("PF %s VF Idx %u Filter: %u FILTER DELETE failed with status %d", in usnic_fwd_dealloc_flow()
285 flow->ufdev->name, flow->vnic_idx, in usnic_fwd_dealloc_flow()
286 flow->flow_id, status); in usnic_fwd_dealloc_flow()
288 status = 0; in usnic_fwd_dealloc_flow()
296 flow->ufdev->name, flow->vnic_idx, in usnic_fwd_dealloc_flow()
297 flow->flow_id); in usnic_fwd_dealloc_flow()
301 return status; in usnic_fwd_dealloc_flow()
306 int status; in usnic_fwd_enable_qp() local
310 pf_netdev = ufdev->netdev; in usnic_fwd_enable_qp()
314 status = usnic_fwd_devcmd(ufdev, vnic_idx, CMD_QP_ENABLE, in usnic_fwd_enable_qp()
316 if (status) { in usnic_fwd_enable_qp()
317 usnic_err("PF %s VNIC Index %u RQ Index: %u ENABLE Failed with status %d", in usnic_fwd_enable_qp()
321 status); in usnic_fwd_enable_qp()
328 return status; in usnic_fwd_enable_qp()
333 int status; in usnic_fwd_disable_qp() local
337 pf_netdev = ufdev->netdev; in usnic_fwd_disable_qp()
341 status = usnic_fwd_devcmd(ufdev, vnic_idx, CMD_QP_DISABLE, in usnic_fwd_disable_qp()
343 if (status) { in usnic_fwd_disable_qp()
344 usnic_err("PF %s VNIC Index %u RQ Index: %u DISABLE Failed with status %d", in usnic_fwd_disable_qp()
348 status); in usnic_fwd_disable_qp()
356 return status; in usnic_fwd_disable_qp()