Lines Matching refs:priv
85 struct ipoib_dev_priv *priv = netdev_priv(ah->dev); in ipoib_free_ah() local
89 spin_lock_irqsave(&priv->lock, flags); in ipoib_free_ah()
90 list_add_tail(&ah->list, &priv->dead_ahs); in ipoib_free_ah()
91 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_free_ah()
94 static void ipoib_ud_dma_unmap_rx(struct ipoib_dev_priv *priv, in ipoib_ud_dma_unmap_rx() argument
97 ib_dma_unmap_single(priv->ca, mapping[0], in ipoib_ud_dma_unmap_rx()
98 IPOIB_UD_BUF_SIZE(priv->max_ib_mtu), in ipoib_ud_dma_unmap_rx()
104 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_post_receive() local
108 priv->rx_wr.wr_id = id | IPOIB_OP_RECV; in ipoib_ib_post_receive()
109 priv->rx_sge[0].addr = priv->rx_ring[id].mapping[0]; in ipoib_ib_post_receive()
110 priv->rx_sge[1].addr = priv->rx_ring[id].mapping[1]; in ipoib_ib_post_receive()
113 ret = ib_post_recv(priv->qp, &priv->rx_wr, &bad_wr); in ipoib_ib_post_receive()
115 ipoib_warn(priv, "receive failed for buf %d (%d)\n", id, ret); in ipoib_ib_post_receive()
116 ipoib_ud_dma_unmap_rx(priv, priv->rx_ring[id].mapping); in ipoib_ib_post_receive()
117 dev_kfree_skb_any(priv->rx_ring[id].skb); in ipoib_ib_post_receive()
118 priv->rx_ring[id].skb = NULL; in ipoib_ib_post_receive()
126 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_alloc_rx_skb() local
131 buf_size = IPOIB_UD_BUF_SIZE(priv->max_ib_mtu); in ipoib_alloc_rx_skb()
144 mapping = priv->rx_ring[id].mapping; in ipoib_alloc_rx_skb()
145 mapping[0] = ib_dma_map_single(priv->ca, skb->data, buf_size, in ipoib_alloc_rx_skb()
147 if (unlikely(ib_dma_mapping_error(priv->ca, mapping[0]))) in ipoib_alloc_rx_skb()
150 priv->rx_ring[id].skb = skb; in ipoib_alloc_rx_skb()
159 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_post_receives() local
164 ipoib_warn(priv, "failed to allocate receive buffer %d\n", i); in ipoib_ib_post_receives()
168 ipoib_warn(priv, "ipoib_ib_post_receive failed for buf %d\n", i); in ipoib_ib_post_receives()
178 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_handle_rx_wc() local
184 ipoib_dbg_data(priv, "recv completion: id %d, status: %d\n", in ipoib_ib_handle_rx_wc()
188 ipoib_warn(priv, "recv completion event with wrid %d (> %d)\n", in ipoib_ib_handle_rx_wc()
193 skb = priv->rx_ring[wr_id].skb; in ipoib_ib_handle_rx_wc()
197 ipoib_warn(priv, "failed recv event " in ipoib_ib_handle_rx_wc()
200 ipoib_ud_dma_unmap_rx(priv, priv->rx_ring[wr_id].mapping); in ipoib_ib_handle_rx_wc()
202 priv->rx_ring[wr_id].skb = NULL; in ipoib_ib_handle_rx_wc()
210 if (wc->slid == priv->local_lid && wc->src_qp == priv->qp->qp_num) in ipoib_ib_handle_rx_wc()
213 memcpy(mapping, priv->rx_ring[wr_id].mapping, in ipoib_ib_handle_rx_wc()
225 ipoib_dbg_data(priv, "received %d bytes, SLID 0x%04x\n", in ipoib_ib_handle_rx_wc()
228 ipoib_ud_dma_unmap_rx(priv, mapping); in ipoib_ib_handle_rx_wc()
258 napi_gro_receive(&priv->napi, skb); in ipoib_ib_handle_rx_wc()
262 ipoib_warn(priv, "ipoib_ib_post_receive failed " in ipoib_ib_handle_rx_wc()
307 void ipoib_dma_unmap_tx(struct ipoib_dev_priv *priv, in ipoib_dma_unmap_tx() argument
316 ib_dma_unmap_single(priv->ca, mapping[0], skb_headlen(skb), in ipoib_dma_unmap_tx()
325 ib_dma_unmap_page(priv->ca, mapping[i + off], in ipoib_dma_unmap_tx()
340 struct ipoib_dev_priv *priv = qp_work->priv; in ipoib_qp_state_validate_work() local
345 ret = ib_query_qp(priv->qp, &qp_attr, IB_QP_STATE, &query_init_attr); in ipoib_qp_state_validate_work()
347 ipoib_warn(priv, "%s: Failed to query QP ret: %d\n", in ipoib_qp_state_validate_work()
352 __func__, priv->qp->qp_num, qp_attr.qp_state); in ipoib_qp_state_validate_work()
358 ret = ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE); in ipoib_qp_state_validate_work()
361 ret, priv->qp->qp_num); in ipoib_qp_state_validate_work()
365 __func__, priv->qp->qp_num); in ipoib_qp_state_validate_work()
368 priv->qp->qp_num, qp_attr.qp_state); in ipoib_qp_state_validate_work()
377 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_handle_tx_wc() local
381 ipoib_dbg_data(priv, "send completion: id %d, status: %d\n", in ipoib_ib_handle_tx_wc()
385 ipoib_warn(priv, "send completion event with wrid %d (> %d)\n", in ipoib_ib_handle_tx_wc()
390 tx_req = &priv->tx_ring[wr_id]; in ipoib_ib_handle_tx_wc()
392 ipoib_dma_unmap_tx(priv, tx_req); in ipoib_ib_handle_tx_wc()
399 ++priv->tx_tail; in ipoib_ib_handle_tx_wc()
400 if (unlikely(--priv->tx_outstanding == ipoib_sendq_size >> 1) && in ipoib_ib_handle_tx_wc()
402 test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) in ipoib_ib_handle_tx_wc()
408 ipoib_warn(priv, "failed send event " in ipoib_ib_handle_tx_wc()
413 ipoib_warn(priv, "%s Failed alloc ipoib_qp_state_validate for qp: 0x%x\n", in ipoib_ib_handle_tx_wc()
414 __func__, priv->qp->qp_num); in ipoib_ib_handle_tx_wc()
419 qp_work->priv = priv; in ipoib_ib_handle_tx_wc()
420 queue_work(priv->wq, &qp_work->work); in ipoib_ib_handle_tx_wc()
424 static int poll_tx(struct ipoib_dev_priv *priv) in poll_tx() argument
428 n = ib_poll_cq(priv->send_cq, MAX_SEND_CQE, priv->send_wc); in poll_tx()
430 ipoib_ib_handle_tx_wc(priv->dev, priv->send_wc + i); in poll_tx()
437 struct ipoib_dev_priv *priv = container_of(napi, struct ipoib_dev_priv, napi); in ipoib_poll() local
438 struct net_device *dev = priv->dev; in ipoib_poll()
450 n = ib_poll_cq(priv->recv_cq, t, priv->ibwc); in ipoib_poll()
453 struct ib_wc *wc = priv->ibwc + i; in ipoib_poll()
462 ipoib_cm_handle_tx_wc(priv->dev, wc); in ipoib_poll()
471 if (unlikely(ib_req_notify_cq(priv->recv_cq, in ipoib_poll()
484 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_completion() local
486 napi_schedule(&priv->napi); in ipoib_ib_completion()
491 struct ipoib_dev_priv *priv = netdev_priv(dev); in drain_tx_cq() local
494 while (poll_tx(priv)) in drain_tx_cq()
498 mod_timer(&priv->poll_timer, jiffies + 1); in drain_tx_cq()
505 struct ipoib_dev_priv *priv = netdev_priv(dev_ptr); in ipoib_send_comp_handler() local
507 mod_timer(&priv->poll_timer, jiffies); in ipoib_send_comp_handler()
510 static inline int post_send(struct ipoib_dev_priv *priv, in post_send() argument
519 ipoib_build_sge(priv, tx_req); in post_send()
521 priv->tx_wr.wr.wr_id = wr_id; in post_send()
522 priv->tx_wr.remote_qpn = qpn; in post_send()
523 priv->tx_wr.ah = address; in post_send()
526 priv->tx_wr.mss = skb_shinfo(skb)->gso_size; in post_send()
527 priv->tx_wr.header = head; in post_send()
528 priv->tx_wr.hlen = hlen; in post_send()
529 priv->tx_wr.wr.opcode = IB_WR_LSO; in post_send()
531 priv->tx_wr.wr.opcode = IB_WR_SEND; in post_send()
533 return ib_post_send(priv->qp, &priv->tx_wr.wr, &bad_wr); in post_send()
539 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_send() local
548 ipoib_warn(priv, "linear data too small\n"); in ipoib_send()
555 if (unlikely(skb->len > priv->mcast_mtu + IPOIB_ENCAP_LEN)) { in ipoib_send()
556 ipoib_warn(priv, "packet len %d (> %d) too long to send, dropping\n", in ipoib_send()
557 skb->len, priv->mcast_mtu + IPOIB_ENCAP_LEN); in ipoib_send()
560 ipoib_cm_skb_too_long(dev, skb, priv->mcast_mtu); in ipoib_send()
567 ipoib_dbg_data(priv, "sending packet, length=%d address=%p qpn=0x%06x\n", in ipoib_send()
577 tx_req = &priv->tx_ring[priv->tx_head & (ipoib_sendq_size - 1)]; in ipoib_send()
579 if (unlikely(ipoib_dma_map_tx(priv->ca, tx_req))) { in ipoib_send()
586 priv->tx_wr.wr.send_flags |= IB_SEND_IP_CSUM; in ipoib_send()
588 priv->tx_wr.wr.send_flags &= ~IB_SEND_IP_CSUM; in ipoib_send()
590 if (++priv->tx_outstanding == ipoib_sendq_size) { in ipoib_send()
591 ipoib_dbg(priv, "TX ring full, stopping kernel net queue\n"); in ipoib_send()
592 if (ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP)) in ipoib_send()
593 ipoib_warn(priv, "request notify on send CQ failed\n"); in ipoib_send()
600 rc = post_send(priv, priv->tx_head & (ipoib_sendq_size - 1), in ipoib_send()
603 ipoib_warn(priv, "post_send failed, error %d\n", rc); in ipoib_send()
605 --priv->tx_outstanding; in ipoib_send()
606 ipoib_dma_unmap_tx(priv, tx_req); in ipoib_send()
613 address->last_send = priv->tx_head; in ipoib_send()
614 ++priv->tx_head; in ipoib_send()
617 if (unlikely(priv->tx_outstanding > MAX_SEND_CQE)) in ipoib_send()
618 while (poll_tx(priv)) in ipoib_send()
624 struct ipoib_dev_priv *priv = netdev_priv(dev); in __ipoib_reap_ah() local
630 spin_lock_irqsave(&priv->lock, flags); in __ipoib_reap_ah()
632 list_for_each_entry_safe(ah, tah, &priv->dead_ahs, list) in __ipoib_reap_ah()
633 if ((int) priv->tx_tail - (int) ah->last_send >= 0) { in __ipoib_reap_ah()
639 spin_unlock_irqrestore(&priv->lock, flags); in __ipoib_reap_ah()
645 struct ipoib_dev_priv *priv = in ipoib_reap_ah() local
647 struct net_device *dev = priv->dev; in ipoib_reap_ah()
651 if (!test_bit(IPOIB_STOP_REAPER, &priv->flags)) in ipoib_reap_ah()
652 queue_delayed_work(priv->wq, &priv->ah_reap_task, in ipoib_reap_ah()
658 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_flush_ah() local
660 cancel_delayed_work(&priv->ah_reap_task); in ipoib_flush_ah()
661 flush_workqueue(priv->wq); in ipoib_flush_ah()
662 ipoib_reap_ah(&priv->ah_reap_task.work); in ipoib_flush_ah()
667 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_stop_ah() local
669 set_bit(IPOIB_STOP_REAPER, &priv->flags); in ipoib_stop_ah()
680 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_open() local
685 if (!test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags)) { in ipoib_ib_dev_open()
686 ipoib_warn(priv, "P_Key 0x%04x is %s\n", priv->pkey, in ipoib_ib_dev_open()
687 (!(priv->pkey & 0x7fff) ? "Invalid" : "not found")); in ipoib_ib_dev_open()
693 ipoib_warn(priv, "ipoib_init_qp returned %d\n", ret); in ipoib_ib_dev_open()
699 ipoib_warn(priv, "ipoib_ib_post_receives returned %d\n", ret); in ipoib_ib_dev_open()
705 ipoib_warn(priv, "ipoib_cm_dev_open returned %d\n", ret); in ipoib_ib_dev_open()
709 clear_bit(IPOIB_STOP_REAPER, &priv->flags); in ipoib_ib_dev_open()
710 queue_delayed_work(priv->wq, &priv->ah_reap_task, in ipoib_ib_dev_open()
713 if (!test_and_set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags)) in ipoib_ib_dev_open()
714 napi_enable(&priv->napi); in ipoib_ib_dev_open()
718 if (!test_and_set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags)) in ipoib_ib_dev_open()
719 napi_enable(&priv->napi); in ipoib_ib_dev_open()
726 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_pkey_dev_check_presence() local
728 if (!(priv->pkey & 0x7fff) || in ipoib_pkey_dev_check_presence()
729 ib_find_pkey(priv->ca, priv->port, priv->pkey, in ipoib_pkey_dev_check_presence()
730 &priv->pkey_index)) in ipoib_pkey_dev_check_presence()
731 clear_bit(IPOIB_PKEY_ASSIGNED, &priv->flags); in ipoib_pkey_dev_check_presence()
733 set_bit(IPOIB_PKEY_ASSIGNED, &priv->flags); in ipoib_pkey_dev_check_presence()
738 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_up() local
742 if (!test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags)) { in ipoib_ib_dev_up()
743 ipoib_dbg(priv, "PKEY is not assigned.\n"); in ipoib_ib_dev_up()
747 set_bit(IPOIB_FLAG_OPER_UP, &priv->flags); in ipoib_ib_dev_up()
754 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_down() local
756 ipoib_dbg(priv, "downing ib_dev\n"); in ipoib_ib_dev_down()
758 clear_bit(IPOIB_FLAG_OPER_UP, &priv->flags); in ipoib_ib_dev_down()
771 struct ipoib_dev_priv *priv = netdev_priv(dev); in recvs_pending() local
776 if (priv->rx_ring[i].skb) in recvs_pending()
784 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_drain_cq() local
795 n = ib_poll_cq(priv->recv_cq, IPOIB_NUM_WC, priv->ibwc); in ipoib_drain_cq()
802 if (priv->ibwc[i].status == IB_WC_SUCCESS) in ipoib_drain_cq()
803 priv->ibwc[i].status = IB_WC_WR_FLUSH_ERR; in ipoib_drain_cq()
805 if (priv->ibwc[i].wr_id & IPOIB_OP_RECV) { in ipoib_drain_cq()
806 if (priv->ibwc[i].wr_id & IPOIB_OP_CM) in ipoib_drain_cq()
807 ipoib_cm_handle_rx_wc(dev, priv->ibwc + i); in ipoib_drain_cq()
809 ipoib_ib_handle_rx_wc(dev, priv->ibwc + i); in ipoib_drain_cq()
811 ipoib_cm_handle_tx_wc(dev, priv->ibwc + i); in ipoib_drain_cq()
815 while (poll_tx(priv)) in ipoib_drain_cq()
823 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_stop() local
829 if (test_and_clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags)) in ipoib_ib_dev_stop()
830 napi_disable(&priv->napi); in ipoib_ib_dev_stop()
839 if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE)) in ipoib_ib_dev_stop()
840 ipoib_warn(priv, "Failed to modify QP to ERROR state\n"); in ipoib_ib_dev_stop()
845 while (priv->tx_head != priv->tx_tail || recvs_pending(dev)) { in ipoib_ib_dev_stop()
847 ipoib_warn(priv, "timing out; %d sends %d receives not completed\n", in ipoib_ib_dev_stop()
848 priv->tx_head - priv->tx_tail, recvs_pending(dev)); in ipoib_ib_dev_stop()
854 while ((int) priv->tx_tail - (int) priv->tx_head < 0) { in ipoib_ib_dev_stop()
855 tx_req = &priv->tx_ring[priv->tx_tail & in ipoib_ib_dev_stop()
857 ipoib_dma_unmap_tx(priv, tx_req); in ipoib_ib_dev_stop()
859 ++priv->tx_tail; in ipoib_ib_dev_stop()
860 --priv->tx_outstanding; in ipoib_ib_dev_stop()
866 rx_req = &priv->rx_ring[i]; in ipoib_ib_dev_stop()
869 ipoib_ud_dma_unmap_rx(priv, in ipoib_ib_dev_stop()
870 priv->rx_ring[i].mapping); in ipoib_ib_dev_stop()
883 ipoib_dbg(priv, "All sends and receives done.\n"); in ipoib_ib_dev_stop()
886 del_timer_sync(&priv->poll_timer); in ipoib_ib_dev_stop()
888 if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE)) in ipoib_ib_dev_stop()
889 ipoib_warn(priv, "Failed to modify QP to RESET state\n"); in ipoib_ib_dev_stop()
893 ib_req_notify_cq(priv->recv_cq, IB_CQ_NEXT_COMP); in ipoib_ib_dev_stop()
900 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_init() local
902 priv->ca = ca; in ipoib_ib_dev_init()
903 priv->port = port; in ipoib_ib_dev_init()
904 priv->qp = NULL; in ipoib_ib_dev_init()
911 setup_timer(&priv->poll_timer, ipoib_ib_tx_timer_func, in ipoib_ib_dev_init()
928 static inline int update_parent_pkey(struct ipoib_dev_priv *priv) in update_parent_pkey() argument
933 prev_pkey = priv->pkey; in update_parent_pkey()
934 result = ib_query_pkey(priv->ca, priv->port, 0, &priv->pkey); in update_parent_pkey()
936 ipoib_warn(priv, "ib_query_pkey port %d failed (ret = %d)\n", in update_parent_pkey()
937 priv->port, result); in update_parent_pkey()
941 priv->pkey |= 0x8000; in update_parent_pkey()
943 if (prev_pkey != priv->pkey) { in update_parent_pkey()
944 ipoib_dbg(priv, "pkey changed from 0x%x to 0x%x\n", in update_parent_pkey()
945 prev_pkey, priv->pkey); in update_parent_pkey()
950 priv->dev->broadcast[8] = priv->pkey >> 8; in update_parent_pkey()
951 priv->dev->broadcast[9] = priv->pkey & 0xff; in update_parent_pkey()
960 static inline int update_child_pkey(struct ipoib_dev_priv *priv) in update_child_pkey() argument
962 u16 old_index = priv->pkey_index; in update_child_pkey()
964 priv->pkey_index = 0; in update_child_pkey()
965 ipoib_pkey_dev_check_presence(priv->dev); in update_child_pkey()
967 if (test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags) && in update_child_pkey()
968 (old_index == priv->pkey_index)) in update_child_pkey()
973 static void __ipoib_ib_dev_flush(struct ipoib_dev_priv *priv, in __ipoib_ib_dev_flush() argument
978 struct net_device *dev = priv->dev; in __ipoib_ib_dev_flush()
981 down_read_nested(&priv->vlan_rwsem, nesting); in __ipoib_ib_dev_flush()
987 list_for_each_entry(cpriv, &priv->child_intfs, list) in __ipoib_ib_dev_flush()
990 up_read(&priv->vlan_rwsem); in __ipoib_ib_dev_flush()
992 if (!test_bit(IPOIB_FLAG_INITIALIZED, &priv->flags) && in __ipoib_ib_dev_flush()
994 ipoib_dbg(priv, "Not flushing - IPOIB_FLAG_INITIALIZED not set.\n"); in __ipoib_ib_dev_flush()
998 if (!test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) { in __ipoib_ib_dev_flush()
1001 if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) in __ipoib_ib_dev_flush()
1002 update_parent_pkey(priv); in __ipoib_ib_dev_flush()
1004 update_child_pkey(priv); in __ipoib_ib_dev_flush()
1006 ipoib_dbg(priv, "Not flushing - IPOIB_FLAG_ADMIN_UP not set.\n"); in __ipoib_ib_dev_flush()
1014 if (test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) { in __ipoib_ib_dev_flush()
1015 result = update_child_pkey(priv); in __ipoib_ib_dev_flush()
1018 ipoib_dbg(priv, "Not flushing - P_Key index not changed.\n"); in __ipoib_ib_dev_flush()
1023 result = update_parent_pkey(priv); in __ipoib_ib_dev_flush()
1026 ipoib_dbg(priv, "Not flushing - P_Key value not changed.\n"); in __ipoib_ib_dev_flush()
1042 if (test_bit(IPOIB_FLAG_INITIALIZED, &priv->flags)) in __ipoib_ib_dev_flush()
1054 if (test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) { in __ipoib_ib_dev_flush()
1057 ipoib_mcast_restart_task(&priv->restart_task); in __ipoib_ib_dev_flush()
1063 struct ipoib_dev_priv *priv = in ipoib_ib_dev_flush_light() local
1066 __ipoib_ib_dev_flush(priv, IPOIB_FLUSH_LIGHT, 0); in ipoib_ib_dev_flush_light()
1071 struct ipoib_dev_priv *priv = in ipoib_ib_dev_flush_normal() local
1074 __ipoib_ib_dev_flush(priv, IPOIB_FLUSH_NORMAL, 0); in ipoib_ib_dev_flush_normal()
1079 struct ipoib_dev_priv *priv = in ipoib_ib_dev_flush_heavy() local
1082 __ipoib_ib_dev_flush(priv, IPOIB_FLUSH_HEAVY, 0); in ipoib_ib_dev_flush_heavy()
1087 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_cleanup() local
1089 ipoib_dbg(priv, "cleaning up ib_dev\n"); in ipoib_ib_dev_cleanup()