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()
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->ca, 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
524 priv->tx_sge[0].addr = mapping[0]; in post_send()
525 priv->tx_sge[0].length = skb_headlen(skb); in post_send()
531 priv->tx_sge[i + off].addr = mapping[i + off]; in post_send()
532 priv->tx_sge[i + off].length = skb_frag_size(&frags[i]); in post_send()
534 priv->tx_wr.num_sge = nr_frags + off; in post_send()
535 priv->tx_wr.wr_id = wr_id; in post_send()
536 priv->tx_wr.wr.ud.remote_qpn = qpn; in post_send()
537 priv->tx_wr.wr.ud.ah = address; in post_send()
540 priv->tx_wr.wr.ud.mss = skb_shinfo(skb)->gso_size; in post_send()
541 priv->tx_wr.wr.ud.header = head; in post_send()
542 priv->tx_wr.wr.ud.hlen = hlen; in post_send()
543 priv->tx_wr.opcode = IB_WR_LSO; in post_send()
545 priv->tx_wr.opcode = IB_WR_SEND; in post_send()
547 return ib_post_send(priv->qp, &priv->tx_wr, &bad_wr); in post_send()
553 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_send() local
562 ipoib_warn(priv, "linear data too small\n"); in ipoib_send()
569 if (unlikely(skb->len > priv->mcast_mtu + IPOIB_ENCAP_LEN)) { in ipoib_send()
570 ipoib_warn(priv, "packet len %d (> %d) too long to send, dropping\n", in ipoib_send()
571 skb->len, priv->mcast_mtu + IPOIB_ENCAP_LEN); in ipoib_send()
574 ipoib_cm_skb_too_long(dev, skb, priv->mcast_mtu); in ipoib_send()
581 ipoib_dbg_data(priv, "sending packet, length=%d address=%p qpn=0x%06x\n", in ipoib_send()
591 tx_req = &priv->tx_ring[priv->tx_head & (ipoib_sendq_size - 1)]; in ipoib_send()
593 if (unlikely(ipoib_dma_map_tx(priv->ca, tx_req))) { in ipoib_send()
600 priv->tx_wr.send_flags |= IB_SEND_IP_CSUM; in ipoib_send()
602 priv->tx_wr.send_flags &= ~IB_SEND_IP_CSUM; in ipoib_send()
604 if (++priv->tx_outstanding == ipoib_sendq_size) { in ipoib_send()
605 ipoib_dbg(priv, "TX ring full, stopping kernel net queue\n"); in ipoib_send()
606 if (ib_req_notify_cq(priv->send_cq, IB_CQ_NEXT_COMP)) in ipoib_send()
607 ipoib_warn(priv, "request notify on send CQ failed\n"); in ipoib_send()
614 rc = post_send(priv, priv->tx_head & (ipoib_sendq_size - 1), in ipoib_send()
617 ipoib_warn(priv, "post_send failed, error %d\n", rc); in ipoib_send()
619 --priv->tx_outstanding; in ipoib_send()
620 ipoib_dma_unmap_tx(priv->ca, tx_req); in ipoib_send()
627 address->last_send = priv->tx_head; in ipoib_send()
628 ++priv->tx_head; in ipoib_send()
631 if (unlikely(priv->tx_outstanding > MAX_SEND_CQE)) in ipoib_send()
632 while (poll_tx(priv)) in ipoib_send()
638 struct ipoib_dev_priv *priv = netdev_priv(dev); in __ipoib_reap_ah() local
644 spin_lock_irqsave(&priv->lock, flags); in __ipoib_reap_ah()
646 list_for_each_entry_safe(ah, tah, &priv->dead_ahs, list) in __ipoib_reap_ah()
647 if ((int) priv->tx_tail - (int) ah->last_send >= 0) { in __ipoib_reap_ah()
653 spin_unlock_irqrestore(&priv->lock, flags); in __ipoib_reap_ah()
659 struct ipoib_dev_priv *priv = in ipoib_reap_ah() local
661 struct net_device *dev = priv->dev; in ipoib_reap_ah()
665 if (!test_bit(IPOIB_STOP_REAPER, &priv->flags)) in ipoib_reap_ah()
666 queue_delayed_work(priv->wq, &priv->ah_reap_task, in ipoib_reap_ah()
672 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_flush_ah() local
674 cancel_delayed_work(&priv->ah_reap_task); in ipoib_flush_ah()
675 flush_workqueue(priv->wq); in ipoib_flush_ah()
676 ipoib_reap_ah(&priv->ah_reap_task.work); in ipoib_flush_ah()
681 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_stop_ah() local
683 set_bit(IPOIB_STOP_REAPER, &priv->flags); in ipoib_stop_ah()
694 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_open() local
699 if (!test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags)) { in ipoib_ib_dev_open()
700 ipoib_warn(priv, "P_Key 0x%04x is %s\n", priv->pkey, in ipoib_ib_dev_open()
701 (!(priv->pkey & 0x7fff) ? "Invalid" : "not found")); in ipoib_ib_dev_open()
707 ipoib_warn(priv, "ipoib_init_qp returned %d\n", ret); in ipoib_ib_dev_open()
713 ipoib_warn(priv, "ipoib_ib_post_receives returned %d\n", ret); in ipoib_ib_dev_open()
719 ipoib_warn(priv, "ipoib_cm_dev_open returned %d\n", ret); in ipoib_ib_dev_open()
723 clear_bit(IPOIB_STOP_REAPER, &priv->flags); in ipoib_ib_dev_open()
724 queue_delayed_work(priv->wq, &priv->ah_reap_task, in ipoib_ib_dev_open()
727 if (!test_and_set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags)) in ipoib_ib_dev_open()
728 napi_enable(&priv->napi); in ipoib_ib_dev_open()
732 if (!test_and_set_bit(IPOIB_FLAG_INITIALIZED, &priv->flags)) in ipoib_ib_dev_open()
733 napi_enable(&priv->napi); in ipoib_ib_dev_open()
740 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_pkey_dev_check_presence() local
742 if (!(priv->pkey & 0x7fff) || in ipoib_pkey_dev_check_presence()
743 ib_find_pkey(priv->ca, priv->port, priv->pkey, in ipoib_pkey_dev_check_presence()
744 &priv->pkey_index)) in ipoib_pkey_dev_check_presence()
745 clear_bit(IPOIB_PKEY_ASSIGNED, &priv->flags); in ipoib_pkey_dev_check_presence()
747 set_bit(IPOIB_PKEY_ASSIGNED, &priv->flags); in ipoib_pkey_dev_check_presence()
752 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_up() local
756 if (!test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags)) { in ipoib_ib_dev_up()
757 ipoib_dbg(priv, "PKEY is not assigned.\n"); in ipoib_ib_dev_up()
761 set_bit(IPOIB_FLAG_OPER_UP, &priv->flags); in ipoib_ib_dev_up()
768 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_down() local
770 ipoib_dbg(priv, "downing ib_dev\n"); in ipoib_ib_dev_down()
772 clear_bit(IPOIB_FLAG_OPER_UP, &priv->flags); in ipoib_ib_dev_down()
785 struct ipoib_dev_priv *priv = netdev_priv(dev); in recvs_pending() local
790 if (priv->rx_ring[i].skb) in recvs_pending()
798 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_drain_cq() local
809 n = ib_poll_cq(priv->recv_cq, IPOIB_NUM_WC, priv->ibwc); in ipoib_drain_cq()
816 if (priv->ibwc[i].status == IB_WC_SUCCESS) in ipoib_drain_cq()
817 priv->ibwc[i].status = IB_WC_WR_FLUSH_ERR; in ipoib_drain_cq()
819 if (priv->ibwc[i].wr_id & IPOIB_OP_RECV) { in ipoib_drain_cq()
820 if (priv->ibwc[i].wr_id & IPOIB_OP_CM) in ipoib_drain_cq()
821 ipoib_cm_handle_rx_wc(dev, priv->ibwc + i); in ipoib_drain_cq()
823 ipoib_ib_handle_rx_wc(dev, priv->ibwc + i); in ipoib_drain_cq()
825 ipoib_cm_handle_tx_wc(dev, priv->ibwc + i); in ipoib_drain_cq()
829 while (poll_tx(priv)) in ipoib_drain_cq()
837 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_stop() local
843 if (test_and_clear_bit(IPOIB_FLAG_INITIALIZED, &priv->flags)) in ipoib_ib_dev_stop()
844 napi_disable(&priv->napi); in ipoib_ib_dev_stop()
853 if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE)) in ipoib_ib_dev_stop()
854 ipoib_warn(priv, "Failed to modify QP to ERROR state\n"); in ipoib_ib_dev_stop()
859 while (priv->tx_head != priv->tx_tail || recvs_pending(dev)) { in ipoib_ib_dev_stop()
861 ipoib_warn(priv, "timing out; %d sends %d receives not completed\n", in ipoib_ib_dev_stop()
862 priv->tx_head - priv->tx_tail, recvs_pending(dev)); in ipoib_ib_dev_stop()
868 while ((int) priv->tx_tail - (int) priv->tx_head < 0) { in ipoib_ib_dev_stop()
869 tx_req = &priv->tx_ring[priv->tx_tail & in ipoib_ib_dev_stop()
871 ipoib_dma_unmap_tx(priv->ca, tx_req); in ipoib_ib_dev_stop()
873 ++priv->tx_tail; in ipoib_ib_dev_stop()
874 --priv->tx_outstanding; in ipoib_ib_dev_stop()
880 rx_req = &priv->rx_ring[i]; in ipoib_ib_dev_stop()
883 ipoib_ud_dma_unmap_rx(priv, in ipoib_ib_dev_stop()
884 priv->rx_ring[i].mapping); in ipoib_ib_dev_stop()
897 ipoib_dbg(priv, "All sends and receives done.\n"); in ipoib_ib_dev_stop()
900 del_timer_sync(&priv->poll_timer); in ipoib_ib_dev_stop()
902 if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE)) in ipoib_ib_dev_stop()
903 ipoib_warn(priv, "Failed to modify QP to RESET state\n"); in ipoib_ib_dev_stop()
907 ib_req_notify_cq(priv->recv_cq, IB_CQ_NEXT_COMP); in ipoib_ib_dev_stop()
914 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_init() local
916 priv->ca = ca; in ipoib_ib_dev_init()
917 priv->port = port; in ipoib_ib_dev_init()
918 priv->qp = NULL; in ipoib_ib_dev_init()
925 setup_timer(&priv->poll_timer, ipoib_ib_tx_timer_func, in ipoib_ib_dev_init()
942 static inline int update_parent_pkey(struct ipoib_dev_priv *priv) in update_parent_pkey() argument
947 prev_pkey = priv->pkey; in update_parent_pkey()
948 result = ib_query_pkey(priv->ca, priv->port, 0, &priv->pkey); in update_parent_pkey()
950 ipoib_warn(priv, "ib_query_pkey port %d failed (ret = %d)\n", in update_parent_pkey()
951 priv->port, result); in update_parent_pkey()
955 priv->pkey |= 0x8000; in update_parent_pkey()
957 if (prev_pkey != priv->pkey) { in update_parent_pkey()
958 ipoib_dbg(priv, "pkey changed from 0x%x to 0x%x\n", in update_parent_pkey()
959 prev_pkey, priv->pkey); in update_parent_pkey()
964 priv->dev->broadcast[8] = priv->pkey >> 8; in update_parent_pkey()
965 priv->dev->broadcast[9] = priv->pkey & 0xff; in update_parent_pkey()
974 static inline int update_child_pkey(struct ipoib_dev_priv *priv) in update_child_pkey() argument
976 u16 old_index = priv->pkey_index; in update_child_pkey()
978 priv->pkey_index = 0; in update_child_pkey()
979 ipoib_pkey_dev_check_presence(priv->dev); in update_child_pkey()
981 if (test_bit(IPOIB_PKEY_ASSIGNED, &priv->flags) && in update_child_pkey()
982 (old_index == priv->pkey_index)) in update_child_pkey()
987 static void __ipoib_ib_dev_flush(struct ipoib_dev_priv *priv, in __ipoib_ib_dev_flush() argument
991 struct net_device *dev = priv->dev; in __ipoib_ib_dev_flush()
994 down_read(&priv->vlan_rwsem); in __ipoib_ib_dev_flush()
1000 list_for_each_entry(cpriv, &priv->child_intfs, list) in __ipoib_ib_dev_flush()
1003 up_read(&priv->vlan_rwsem); in __ipoib_ib_dev_flush()
1005 if (!test_bit(IPOIB_FLAG_INITIALIZED, &priv->flags) && in __ipoib_ib_dev_flush()
1007 ipoib_dbg(priv, "Not flushing - IPOIB_FLAG_INITIALIZED not set.\n"); in __ipoib_ib_dev_flush()
1011 if (!test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) { in __ipoib_ib_dev_flush()
1014 if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) in __ipoib_ib_dev_flush()
1015 update_parent_pkey(priv); in __ipoib_ib_dev_flush()
1017 update_child_pkey(priv); in __ipoib_ib_dev_flush()
1019 ipoib_dbg(priv, "Not flushing - IPOIB_FLAG_ADMIN_UP not set.\n"); in __ipoib_ib_dev_flush()
1027 if (test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) { in __ipoib_ib_dev_flush()
1028 result = update_child_pkey(priv); in __ipoib_ib_dev_flush()
1031 ipoib_dbg(priv, "Not flushing - P_Key index not changed.\n"); in __ipoib_ib_dev_flush()
1036 result = update_parent_pkey(priv); in __ipoib_ib_dev_flush()
1039 ipoib_dbg(priv, "Not flushing - P_Key value not changed.\n"); in __ipoib_ib_dev_flush()
1055 if (test_bit(IPOIB_FLAG_INITIALIZED, &priv->flags)) in __ipoib_ib_dev_flush()
1067 if (test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags)) { in __ipoib_ib_dev_flush()
1070 ipoib_mcast_restart_task(&priv->restart_task); in __ipoib_ib_dev_flush()
1076 struct ipoib_dev_priv *priv = in ipoib_ib_dev_flush_light() local
1079 __ipoib_ib_dev_flush(priv, IPOIB_FLUSH_LIGHT); in ipoib_ib_dev_flush_light()
1084 struct ipoib_dev_priv *priv = in ipoib_ib_dev_flush_normal() local
1087 __ipoib_ib_dev_flush(priv, IPOIB_FLUSH_NORMAL); in ipoib_ib_dev_flush_normal()
1092 struct ipoib_dev_priv *priv = in ipoib_ib_dev_flush_heavy() local
1095 __ipoib_ib_dev_flush(priv, IPOIB_FLUSH_HEAVY); in ipoib_ib_dev_flush_heavy()
1100 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_ib_dev_cleanup() local
1102 ipoib_dbg(priv, "cleaning up ib_dev\n"); in ipoib_ib_dev_cleanup()