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.wr.ud.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()
398 ipoib_dbg_mcast(priv, "%smulticast join failed for %pI6, status %d\n", in ipoib_mcast_join_complete()
402 ipoib_warn(priv, "%smulticast join failed for %pI6, status %d\n", in ipoib_mcast_join_complete()
427 spin_lock_irq(&priv->lock); in ipoib_mcast_join_complete()
429 __ipoib_mcast_schedule_join_thread(priv, mcast, 1); in ipoib_mcast_join_complete()
434 spin_lock_irq(&priv->lock); in ipoib_mcast_join_complete()
445 spin_unlock_irq(&priv->lock); in ipoib_mcast_join_complete()
454 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_join() local
462 ipoib_dbg_mcast(priv, "joining MGID %pI6\n", mcast->mcmember.mgid.raw); in ipoib_mcast_join()
465 rec.port_gid = priv->local_gid; in ipoib_mcast_join()
466 rec.pkey = cpu_to_be16(priv->pkey); in ipoib_mcast_join()
486 rec.qkey = priv->broadcast->mcmember.qkey; in ipoib_mcast_join()
488 rec.mtu = priv->broadcast->mcmember.mtu; in ipoib_mcast_join()
489 rec.traffic_class = priv->broadcast->mcmember.traffic_class; in ipoib_mcast_join()
491 rec.rate = priv->broadcast->mcmember.rate; in ipoib_mcast_join()
492 rec.sl = priv->broadcast->mcmember.sl; in ipoib_mcast_join()
493 rec.flow_label = priv->broadcast->mcmember.flow_label; in ipoib_mcast_join()
494 rec.hop_limit = priv->broadcast->mcmember.hop_limit; in ipoib_mcast_join()
497 multicast = ib_sa_join_multicast(&ipoib_sa_client, priv->ca, priv->port, in ipoib_mcast_join()
502 ipoib_warn(priv, "ib_sa_join_multicast failed, status %d\n", ret); in ipoib_mcast_join()
503 spin_lock_irq(&priv->lock); in ipoib_mcast_join()
505 __ipoib_mcast_schedule_join_thread(priv, mcast, 1); in ipoib_mcast_join()
507 spin_unlock_irq(&priv->lock); in ipoib_mcast_join()
514 struct ipoib_dev_priv *priv = in ipoib_mcast_join_task() local
516 struct net_device *dev = priv->dev; in ipoib_mcast_join_task()
522 if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) in ipoib_mcast_join_task()
525 if (ib_query_port(priv->ca, priv->port, &port_attr) || in ipoib_mcast_join_task()
527 ipoib_dbg(priv, "port state is not ACTIVE (state = %d) suspending join task\n", in ipoib_mcast_join_task()
531 priv->local_lid = port_attr.lid; in ipoib_mcast_join_task()
533 if (ib_query_gid(priv->ca, priv->port, 0, &priv->local_gid)) in ipoib_mcast_join_task()
534 ipoib_warn(priv, "ib_query_gid() failed\n"); in ipoib_mcast_join_task()
536 memcpy(priv->dev->dev_addr + 4, priv->local_gid.raw, sizeof (union ib_gid)); in ipoib_mcast_join_task()
538 spin_lock_irq(&priv->lock); in ipoib_mcast_join_task()
539 if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) in ipoib_mcast_join_task()
542 if (!priv->broadcast) { in ipoib_mcast_join_task()
547 ipoib_warn(priv, "failed to allocate broadcast group\n"); in ipoib_mcast_join_task()
554 __ipoib_mcast_schedule_join_thread(priv, NULL, 1); in ipoib_mcast_join_task()
558 memcpy(broadcast->mcmember.mgid.raw, priv->dev->broadcast + 4, in ipoib_mcast_join_task()
560 priv->broadcast = broadcast; in ipoib_mcast_join_task()
562 __ipoib_mcast_add(dev, priv->broadcast); in ipoib_mcast_join_task()
565 if (!test_bit(IPOIB_MCAST_FLAG_ATTACHED, &priv->broadcast->flags)) { in ipoib_mcast_join_task()
566 if (IS_ERR_OR_NULL(priv->broadcast->mc) && in ipoib_mcast_join_task()
567 !test_bit(IPOIB_MCAST_FLAG_BUSY, &priv->broadcast->flags)) { in ipoib_mcast_join_task()
568 mcast = priv->broadcast; in ipoib_mcast_join_task()
583 list_for_each_entry(mcast, &priv->multicast_list, list) { in ipoib_mcast_join_task()
597 spin_unlock_irq(&priv->lock); in ipoib_mcast_join_task()
599 spin_lock_irq(&priv->lock); in ipoib_mcast_join_task()
607 ipoib_dbg_mcast(priv, "successfully started all multicast joins\n"); in ipoib_mcast_join_task()
611 cancel_delayed_work(&priv->mcast_task); in ipoib_mcast_join_task()
612 queue_delayed_work(priv->wq, &priv->mcast_task, in ipoib_mcast_join_task()
619 spin_unlock_irq(&priv->lock); in ipoib_mcast_join_task()
626 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_start_thread() local
629 ipoib_dbg_mcast(priv, "starting multicast thread\n"); in ipoib_mcast_start_thread()
631 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_start_thread()
632 __ipoib_mcast_schedule_join_thread(priv, NULL, 0); in ipoib_mcast_start_thread()
633 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_start_thread()
640 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_stop_thread() local
643 ipoib_dbg_mcast(priv, "stopping multicast thread\n"); in ipoib_mcast_stop_thread()
645 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_stop_thread()
646 cancel_delayed_work(&priv->mcast_task); in ipoib_mcast_stop_thread()
647 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_stop_thread()
649 flush_workqueue(priv->wq); in ipoib_mcast_stop_thread()
656 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_leave() local
660 ipoib_warn(priv, "ipoib_mcast_leave on an in-flight join\n"); in ipoib_mcast_leave()
666 ipoib_dbg_mcast(priv, "leaving MGID %pI6\n", in ipoib_mcast_leave()
670 ret = ib_detach_mcast(priv->qp, &mcast->mcmember.mgid, in ipoib_mcast_leave()
673 ipoib_warn(priv, "ib_detach_mcast failed (result = %d)\n", ret); in ipoib_mcast_leave()
675 ipoib_dbg(priv, "leaving with no mcmember but not a " in ipoib_mcast_leave()
683 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_send() local
688 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_send()
690 if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags) || in ipoib_mcast_send()
691 !priv->broadcast || in ipoib_mcast_send()
692 !test_bit(IPOIB_MCAST_FLAG_ATTACHED, &priv->broadcast->flags)) { in ipoib_mcast_send()
702 ipoib_dbg_mcast(priv, "setting up send only multicast group for %pI6\n", in ipoib_mcast_send()
707 ipoib_warn(priv, "unable to allocate memory " in ipoib_mcast_send()
718 list_add_tail(&mcast->list, &priv->multicast_list); in ipoib_mcast_send()
727 __ipoib_mcast_schedule_join_thread(priv, NULL, 0); in ipoib_mcast_send()
732 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_send()
734 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_send()
743 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_send()
751 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_send()
756 struct ipoib_dev_priv *priv = netdev_priv(dev); in ipoib_mcast_dev_flush() local
761 ipoib_dbg_mcast(priv, "flushing multicast list\n"); in ipoib_mcast_dev_flush()
763 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_dev_flush()
765 list_for_each_entry_safe(mcast, tmcast, &priv->multicast_list, list) { in ipoib_mcast_dev_flush()
767 rb_erase(&mcast->rb_node, &priv->multicast_tree); in ipoib_mcast_dev_flush()
771 if (priv->broadcast) { in ipoib_mcast_dev_flush()
772 rb_erase(&priv->broadcast->rb_node, &priv->multicast_tree); in ipoib_mcast_dev_flush()
773 list_add_tail(&priv->broadcast->list, &remove_list); in ipoib_mcast_dev_flush()
774 priv->broadcast = NULL; in ipoib_mcast_dev_flush()
777 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_dev_flush()
806 struct ipoib_dev_priv *priv = in ipoib_mcast_restart_task() local
808 struct net_device *dev = priv->dev; in ipoib_mcast_restart_task()
815 if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) in ipoib_mcast_restart_task()
822 ipoib_dbg_mcast(priv, "restarting multicast task\n"); in ipoib_mcast_restart_task()
826 spin_lock(&priv->lock); in ipoib_mcast_restart_task()
835 list_for_each_entry(mcast, &priv->multicast_list, list) in ipoib_mcast_restart_task()
852 if (test_bit(IPOIB_FLAG_UMCAST, &priv->flags) && in ipoib_mcast_restart_task()
853 !ib_sa_get_mcmember_rec(priv->ca, priv->port, &mgid, &rec)) { in ipoib_mcast_restart_task()
854 ipoib_dbg_mcast(priv, "ignoring multicast entry for mgid %pI6\n", in ipoib_mcast_restart_task()
860 ipoib_dbg_mcast(priv, "adding multicast entry for mgid %pI6\n", in ipoib_mcast_restart_task()
865 ipoib_warn(priv, "unable to allocate memory for multicast structure\n"); in ipoib_mcast_restart_task()
879 &priv->multicast_tree); in ipoib_mcast_restart_task()
883 list_add_tail(&nmcast->list, &priv->multicast_list); in ipoib_mcast_restart_task()
891 list_for_each_entry_safe(mcast, tmcast, &priv->multicast_list, list) { in ipoib_mcast_restart_task()
894 ipoib_dbg_mcast(priv, "deleting multicast group %pI6\n", in ipoib_mcast_restart_task()
897 rb_erase(&mcast->rb_node, &priv->multicast_tree); in ipoib_mcast_restart_task()
904 spin_unlock(&priv->lock); in ipoib_mcast_restart_task()
924 if (test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) { in ipoib_mcast_restart_task()
925 spin_lock_irqsave(&priv->lock, flags); in ipoib_mcast_restart_task()
926 __ipoib_mcast_schedule_join_thread(priv, NULL, 0); in ipoib_mcast_restart_task()
927 spin_unlock_irqrestore(&priv->lock, flags); in ipoib_mcast_restart_task()
954 struct ipoib_dev_priv *priv = netdev_priv(iter->dev); in ipoib_mcast_iter_next() local
959 spin_lock_irq(&priv->lock); in ipoib_mcast_iter_next()
961 n = rb_first(&priv->multicast_tree); in ipoib_mcast_iter_next()
982 spin_unlock_irq(&priv->lock); in ipoib_mcast_iter_next()