Lines Matching refs:priv
70 static void __ipoib_mcast_schedule_join_thread(struct ipoib_dev_priv *priv, in __ipoib_mcast_schedule_join_thread() argument
74 if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) in __ipoib_mcast_schedule_join_thread()
81 cancel_delayed_work(&priv->mcast_task); in __ipoib_mcast_schedule_join_thread()
97 queue_delayed_work(priv->wq, &priv->mcast_task, 0); in __ipoib_mcast_schedule_join_thread()
104 queue_delayed_work(priv->wq, &priv->mcast_task, HZ); in __ipoib_mcast_schedule_join_thread()
106 queue_delayed_work(priv->wq, &priv->mcast_task, 0); in __ipoib_mcast_schedule_join_thread()
158 struct ipoib_dev_priv *priv = netdev_priv(dev); in __ipoib_mcast_find() local
159 struct rb_node *n = priv->multicast_tree.rb_node; in __ipoib_mcast_find()
182 struct ipoib_dev_priv *priv = netdev_priv(dev); in __ipoib_mcast_add() local
183 struct rb_node **n = &priv->multicast_tree.rb_node, *pn = NULL; in __ipoib_mcast_add()
203 rb_insert_color(&mcast->rb_node, &priv->multicast_tree); in __ipoib_mcast_add()
212 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_join_finish() local
222 if (!memcmp(mcast->mcmember.mgid.raw, priv->dev->broadcast + 4, in ipoib_mcast_join_finish()
224 spin_lock_irq(&priv->lock); in ipoib_mcast_join_finish()
225 if (!priv->broadcast) { in ipoib_mcast_join_finish()
226 spin_unlock_irq(&priv->lock); in ipoib_mcast_join_finish()
230 priv->broadcast->mcmember.qkey = mcmember->qkey; in ipoib_mcast_join_finish()
231 priv->broadcast->mcmember.mtu = mcmember->mtu; in ipoib_mcast_join_finish()
232 priv->broadcast->mcmember.traffic_class = mcmember->traffic_class; in ipoib_mcast_join_finish()
233 priv->broadcast->mcmember.rate = mcmember->rate; in ipoib_mcast_join_finish()
234 priv->broadcast->mcmember.sl = mcmember->sl; in ipoib_mcast_join_finish()
235 priv->broadcast->mcmember.flow_label = mcmember->flow_label; in ipoib_mcast_join_finish()
236 priv->broadcast->mcmember.hop_limit = mcmember->hop_limit; in ipoib_mcast_join_finish()
238 if (priv->mcast_mtu == priv->admin_mtu) in ipoib_mcast_join_finish()
239 priv->admin_mtu = in ipoib_mcast_join_finish()
240 priv->mcast_mtu = in ipoib_mcast_join_finish()
241 IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu)); in ipoib_mcast_join_finish()
243 priv->mcast_mtu = in ipoib_mcast_join_finish()
244 IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu)); in ipoib_mcast_join_finish()
246 priv->qkey = be32_to_cpu(priv->broadcast->mcmember.qkey); in ipoib_mcast_join_finish()
247 spin_unlock_irq(&priv->lock); in ipoib_mcast_join_finish()
248 priv->tx_wr.remote_qkey = priv->qkey; in ipoib_mcast_join_finish()
254 ipoib_warn(priv, "multicast group %pI6 already attached\n", in ipoib_mcast_join_finish()
263 ipoib_warn(priv, "couldn't attach QP to multicast group %pI6\n", in ipoib_mcast_join_finish()
274 .port_num = priv->port, in ipoib_mcast_join_finish()
287 ah = ipoib_create_ah(dev, priv->pd, &av); in ipoib_mcast_join_finish()
289 ipoib_warn(priv, "ib_address_create failed %ld\n", in ipoib_mcast_join_finish()
294 spin_lock_irq(&priv->lock); in ipoib_mcast_join_finish()
296 spin_unlock_irq(&priv->lock); in ipoib_mcast_join_finish()
298 ipoib_dbg_mcast(priv, "MGID %pI6 AV %p, LID 0x%04x, SL %d\n", in ipoib_mcast_join_finish()
315 ipoib_warn(priv, "dev_queue_xmit failed to requeue packet\n"); in ipoib_mcast_join_finish()
326 struct ipoib_dev_priv *priv = container_of(work, struct ipoib_dev_priv, in ipoib_mcast_carrier_on_task() local
330 if (ib_query_port(priv->ca, priv->port, &attr) || in ipoib_mcast_carrier_on_task()
332 ipoib_dbg(priv, "Keeping carrier off until IB port is active\n"); in ipoib_mcast_carrier_on_task()
346 if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) in ipoib_mcast_carrier_on_task()
351 if (!ipoib_cm_admin_enabled(priv->dev)) in ipoib_mcast_carrier_on_task()
352 dev_set_mtu(priv->dev, min(priv->mcast_mtu, priv->admin_mtu)); in ipoib_mcast_carrier_on_task()
353 netif_carrier_on(priv->dev); in ipoib_mcast_carrier_on_task()
362 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_join_complete() local
364 ipoib_dbg_mcast(priv, "%sjoin completion for %pI6 (status %d)\n", in ipoib_mcast_join_complete()
389 if (mcast == priv->broadcast) { in ipoib_mcast_join_complete()
390 spin_lock_irq(&priv->lock); in ipoib_mcast_join_complete()
391 queue_work(priv->wq, &priv->carrier_on_task); in ipoib_mcast_join_complete()
392 __ipoib_mcast_schedule_join_thread(priv, NULL, 0); in ipoib_mcast_join_complete()
403 ipoib_dbg_mcast(priv, "%smulticast join failed for %pI6, status %d\n", in ipoib_mcast_join_complete()
407 ipoib_warn(priv, "%smulticast join failed for %pI6, status %d\n", in ipoib_mcast_join_complete()
435 spin_lock_irq(&priv->lock); in ipoib_mcast_join_complete()
437 __ipoib_mcast_schedule_join_thread(priv, mcast, 1); in ipoib_mcast_join_complete()
442 spin_lock_irq(&priv->lock); in ipoib_mcast_join_complete()
453 spin_unlock_irq(&priv->lock); in ipoib_mcast_join_complete()
464 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_join() local
472 if (!priv->broadcast || in ipoib_mcast_join()
473 !test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) in ipoib_mcast_join()
476 ipoib_dbg_mcast(priv, "joining MGID %pI6\n", mcast->mcmember.mgid.raw); in ipoib_mcast_join()
479 rec.port_gid = priv->local_gid; in ipoib_mcast_join()
480 rec.pkey = cpu_to_be16(priv->pkey); in ipoib_mcast_join()
488 if (mcast != priv->broadcast) { in ipoib_mcast_join()
507 rec.qkey = priv->broadcast->mcmember.qkey; in ipoib_mcast_join()
509 rec.mtu = priv->broadcast->mcmember.mtu; in ipoib_mcast_join()
510 rec.traffic_class = priv->broadcast->mcmember.traffic_class; in ipoib_mcast_join()
512 rec.rate = priv->broadcast->mcmember.rate; in ipoib_mcast_join()
513 rec.sl = priv->broadcast->mcmember.sl; in ipoib_mcast_join()
514 rec.flow_label = priv->broadcast->mcmember.flow_label; in ipoib_mcast_join()
515 rec.hop_limit = priv->broadcast->mcmember.hop_limit; in ipoib_mcast_join()
535 spin_unlock_irq(&priv->lock); in ipoib_mcast_join()
537 multicast = ib_sa_join_multicast(&ipoib_sa_client, priv->ca, priv->port, in ipoib_mcast_join()
540 spin_lock_irq(&priv->lock); in ipoib_mcast_join()
543 ipoib_warn(priv, "ib_sa_join_multicast failed, status %d\n", ret); in ipoib_mcast_join()
545 __ipoib_mcast_schedule_join_thread(priv, mcast, 1); in ipoib_mcast_join()
547 spin_unlock_irq(&priv->lock); in ipoib_mcast_join()
549 spin_lock_irq(&priv->lock); in ipoib_mcast_join()
556 struct ipoib_dev_priv *priv = in ipoib_mcast_join_task() local
558 struct net_device *dev = priv->dev; in ipoib_mcast_join_task()
563 if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) in ipoib_mcast_join_task()
566 if (ib_query_port(priv->ca, priv->port, &port_attr) || in ipoib_mcast_join_task()
568 ipoib_dbg(priv, "port state is not ACTIVE (state = %d) suspending join task\n", in ipoib_mcast_join_task()
572 priv->local_lid = port_attr.lid; in ipoib_mcast_join_task()
574 if (ib_query_gid(priv->ca, priv->port, 0, &priv->local_gid, NULL)) in ipoib_mcast_join_task()
575 ipoib_warn(priv, "ib_query_gid() failed\n"); in ipoib_mcast_join_task()
577 memcpy(priv->dev->dev_addr + 4, priv->local_gid.raw, sizeof (union ib_gid)); in ipoib_mcast_join_task()
579 spin_lock_irq(&priv->lock); in ipoib_mcast_join_task()
580 if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) in ipoib_mcast_join_task()
583 if (!priv->broadcast) { in ipoib_mcast_join_task()
588 ipoib_warn(priv, "failed to allocate broadcast group\n"); in ipoib_mcast_join_task()
595 __ipoib_mcast_schedule_join_thread(priv, NULL, 1); in ipoib_mcast_join_task()
599 memcpy(broadcast->mcmember.mgid.raw, priv->dev->broadcast + 4, in ipoib_mcast_join_task()
601 priv->broadcast = broadcast; in ipoib_mcast_join_task()
603 __ipoib_mcast_add(dev, priv->broadcast); in ipoib_mcast_join_task()
606 if (!test_bit(IPOIB_MCAST_FLAG_ATTACHED, &priv->broadcast->flags)) { in ipoib_mcast_join_task()
607 if (IS_ERR_OR_NULL(priv->broadcast->mc) && in ipoib_mcast_join_task()
608 !test_bit(IPOIB_MCAST_FLAG_BUSY, &priv->broadcast->flags)) { in ipoib_mcast_join_task()
609 mcast = priv->broadcast; in ipoib_mcast_join_task()
623 list_for_each_entry(mcast, &priv->multicast_list, list) { in ipoib_mcast_join_task()
634 spin_unlock_irq(&priv->lock); in ipoib_mcast_join_task()
644 ipoib_dbg_mcast(priv, "successfully started all multicast joins\n"); in ipoib_mcast_join_task()
648 cancel_delayed_work(&priv->mcast_task); in ipoib_mcast_join_task()
649 queue_delayed_work(priv->wq, &priv->mcast_task, in ipoib_mcast_join_task()
657 spin_unlock_irq(&priv->lock); in ipoib_mcast_join_task()
662 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_start_thread() local
665 ipoib_dbg_mcast(priv, "starting multicast thread\n"); in ipoib_mcast_start_thread()
667 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_start_thread()
668 __ipoib_mcast_schedule_join_thread(priv, NULL, 0); in ipoib_mcast_start_thread()
669 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_start_thread()
676 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_stop_thread() local
679 ipoib_dbg_mcast(priv, "stopping multicast thread\n"); in ipoib_mcast_stop_thread()
681 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_stop_thread()
682 cancel_delayed_work(&priv->mcast_task); in ipoib_mcast_stop_thread()
683 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_stop_thread()
685 flush_workqueue(priv->wq); in ipoib_mcast_stop_thread()
692 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_leave() local
696 ipoib_warn(priv, "ipoib_mcast_leave on an in-flight join\n"); in ipoib_mcast_leave()
702 ipoib_dbg_mcast(priv, "leaving MGID %pI6\n", in ipoib_mcast_leave()
706 ret = ib_detach_mcast(priv->qp, &mcast->mcmember.mgid, in ipoib_mcast_leave()
709 ipoib_warn(priv, "ib_detach_mcast failed (result = %d)\n", ret); in ipoib_mcast_leave()
711 ipoib_dbg(priv, "leaving with no mcmember but not a " in ipoib_mcast_leave()
719 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_send() local
724 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_send()
726 if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags) || in ipoib_mcast_send()
727 !priv->broadcast || in ipoib_mcast_send()
728 !test_bit(IPOIB_MCAST_FLAG_ATTACHED, &priv->broadcast->flags)) { in ipoib_mcast_send()
738 ipoib_dbg_mcast(priv, "setting up send only multicast group for %pI6\n", in ipoib_mcast_send()
743 ipoib_warn(priv, "unable to allocate memory " in ipoib_mcast_send()
754 list_add_tail(&mcast->list, &priv->multicast_list); in ipoib_mcast_send()
763 __ipoib_mcast_schedule_join_thread(priv, NULL, 0); in ipoib_mcast_send()
768 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_send()
770 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_send()
779 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_send()
787 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_send()
792 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_dev_flush() local
797 ipoib_dbg_mcast(priv, "flushing multicast list\n"); in ipoib_mcast_dev_flush()
799 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_dev_flush()
801 list_for_each_entry_safe(mcast, tmcast, &priv->multicast_list, list) { in ipoib_mcast_dev_flush()
803 rb_erase(&mcast->rb_node, &priv->multicast_tree); in ipoib_mcast_dev_flush()
807 if (priv->broadcast) { in ipoib_mcast_dev_flush()
808 rb_erase(&priv->broadcast->rb_node, &priv->multicast_tree); in ipoib_mcast_dev_flush()
809 list_add_tail(&priv->broadcast->list, &remove_list); in ipoib_mcast_dev_flush()
810 priv->broadcast = NULL; in ipoib_mcast_dev_flush()
813 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_dev_flush()
842 struct ipoib_dev_priv *priv = in ipoib_mcast_restart_task() local
844 struct net_device *dev = priv->dev; in ipoib_mcast_restart_task()
851 if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) in ipoib_mcast_restart_task()
858 ipoib_dbg_mcast(priv, "restarting multicast task\n"); in ipoib_mcast_restart_task()
862 spin_lock(&priv->lock); in ipoib_mcast_restart_task()
871 list_for_each_entry(mcast, &priv->multicast_list, list) in ipoib_mcast_restart_task()
888 if (test_bit(IPOIB_FLAG_UMCAST, &priv->flags) && in ipoib_mcast_restart_task()
889 !ib_sa_get_mcmember_rec(priv->ca, priv->port, &mgid, &rec)) { in ipoib_mcast_restart_task()
890 ipoib_dbg_mcast(priv, "ignoring multicast entry for mgid %pI6\n", in ipoib_mcast_restart_task()
896 ipoib_dbg_mcast(priv, "adding multicast entry for mgid %pI6\n", in ipoib_mcast_restart_task()
901 ipoib_warn(priv, "unable to allocate memory for multicast structure\n"); in ipoib_mcast_restart_task()
915 &priv->multicast_tree); in ipoib_mcast_restart_task()
919 list_add_tail(&nmcast->list, &priv->multicast_list); in ipoib_mcast_restart_task()
927 list_for_each_entry_safe(mcast, tmcast, &priv->multicast_list, list) { in ipoib_mcast_restart_task()
930 ipoib_dbg_mcast(priv, "deleting multicast group %pI6\n", in ipoib_mcast_restart_task()
933 rb_erase(&mcast->rb_node, &priv->multicast_tree); in ipoib_mcast_restart_task()
940 spin_unlock(&priv->lock); in ipoib_mcast_restart_task()
960 if (test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) { in ipoib_mcast_restart_task()
961 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_restart_task()
962 __ipoib_mcast_schedule_join_thread(priv, NULL, 0); in ipoib_mcast_restart_task()
963 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_restart_task()
990 struct ipoib_dev_priv *priv = netdev_priv(iter->dev); in ipoib_mcast_iter_next() local
995 spin_lock_irq(&priv->lock); in ipoib_mcast_iter_next()
997 n = rb_first(&priv->multicast_tree); in ipoib_mcast_iter_next()
1018 spin_unlock_irq(&priv->lock); in ipoib_mcast_iter_next()