Lines Matching full:vif
72 static int xenvif_schedulable(struct xenvif *vif) in xenvif_schedulable() argument
74 return netif_running(vif->dev) && in xenvif_schedulable()
75 test_bit(VIF_STATUS_CONNECTED, &vif->status) && in xenvif_schedulable()
76 !vif->disabled; in xenvif_schedulable()
111 /* This vif is rogue, we pretend we've there is nothing to do in xenvif_poll()
112 * for this vif to deschedule it from NAPI. But this interface in xenvif_poll()
115 if (unlikely(queue->vif->disabled)) { in xenvif_poll()
183 struct xenvif *vif = netdev_priv(dev); in xenvif_select_queue() local
184 unsigned int size = vif->hash.size; in xenvif_select_queue()
189 num_queues = READ_ONCE(vif->num_queues); in xenvif_select_queue()
193 if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE) in xenvif_select_queue()
197 xenvif_set_skb_hash(vif, skb); in xenvif_select_queue()
202 return vif->hash.mapping[vif->hash.mapping_sel] in xenvif_select_queue()
209 struct xenvif *vif = netdev_priv(dev); in xenvif_start_xmit() local
221 num_queues = READ_ONCE(vif->num_queues); in xenvif_start_xmit()
229 index, vif->dev->name); in xenvif_start_xmit()
232 queue = &vif->queues[index]; in xenvif_start_xmit()
237 !xenvif_schedulable(vif)) in xenvif_start_xmit()
240 if (vif->multicast_control && skb->pkt_type == PACKET_MULTICAST) { in xenvif_start_xmit()
243 if (!xenvif_mcast_match(vif, eth->h_dest)) in xenvif_start_xmit()
248 cb->expires = jiffies + vif->drain_timeout; in xenvif_start_xmit()
254 if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE) in xenvif_start_xmit()
265 vif->dev->stats.tx_dropped++; in xenvif_start_xmit()
272 struct xenvif *vif = netdev_priv(dev); in xenvif_get_stats() local
282 num_queues = READ_ONCE(vif->num_queues); in xenvif_get_stats()
286 queue = &vif->queues[index]; in xenvif_get_stats()
295 vif->dev->stats.rx_bytes = rx_bytes; in xenvif_get_stats()
296 vif->dev->stats.rx_packets = rx_packets; in xenvif_get_stats()
297 vif->dev->stats.tx_bytes = tx_bytes; in xenvif_get_stats()
298 vif->dev->stats.tx_packets = tx_packets; in xenvif_get_stats()
300 return &vif->dev->stats; in xenvif_get_stats()
303 static void xenvif_up(struct xenvif *vif) in xenvif_up() argument
306 unsigned int num_queues = vif->num_queues; in xenvif_up()
310 queue = &vif->queues[queue_index]; in xenvif_up()
319 static void xenvif_down(struct xenvif *vif) in xenvif_down() argument
322 unsigned int num_queues = vif->num_queues; in xenvif_down()
326 queue = &vif->queues[queue_index]; in xenvif_down()
337 struct xenvif *vif = netdev_priv(dev); in xenvif_open() local
338 if (test_bit(VIF_STATUS_CONNECTED, &vif->status)) in xenvif_open()
339 xenvif_up(vif); in xenvif_open()
346 struct xenvif *vif = netdev_priv(dev); in xenvif_close() local
347 if (test_bit(VIF_STATUS_CONNECTED, &vif->status)) in xenvif_close()
348 xenvif_down(vif); in xenvif_close()
355 struct xenvif *vif = netdev_priv(dev); in xenvif_change_mtu() local
356 int max = vif->can_sg ? ETH_MAX_MTU - VLAN_ETH_HLEN : ETH_DATA_LEN; in xenvif_change_mtu()
367 struct xenvif *vif = netdev_priv(dev); in xenvif_fix_features() local
369 if (!vif->can_sg) in xenvif_fix_features()
371 if (~(vif->gso_mask) & GSO_BIT(TCPV4)) in xenvif_fix_features()
373 if (~(vif->gso_mask) & GSO_BIT(TCPV6)) in xenvif_fix_features()
375 if (!vif->ip_csum) in xenvif_fix_features()
377 if (!vif->ipv6_csum) in xenvif_fix_features()
428 struct xenvif *vif = netdev_priv(dev); in xenvif_get_ethtool_stats() local
434 num_queues = READ_ONCE(vif->num_queues); in xenvif_get_ethtool_stats()
439 void *vif_stats = &vif->queues[queue_index].stats; in xenvif_get_ethtool_stats()
486 struct xenvif *vif; in xenvif_alloc() local
489 snprintf(name, IFNAMSIZ - 1, "vif%u.%u", domid, handle); in xenvif_alloc()
503 vif = netdev_priv(dev); in xenvif_alloc()
505 vif->domid = domid; in xenvif_alloc()
506 vif->handle = handle; in xenvif_alloc()
507 vif->can_sg = 1; in xenvif_alloc()
508 vif->ip_csum = 1; in xenvif_alloc()
509 vif->dev = dev; in xenvif_alloc()
510 vif->disabled = false; in xenvif_alloc()
511 vif->drain_timeout = msecs_to_jiffies(rx_drain_timeout_msecs); in xenvif_alloc()
512 vif->stall_timeout = msecs_to_jiffies(rx_stall_timeout_msecs); in xenvif_alloc()
515 vif->queues = NULL; in xenvif_alloc()
516 vif->num_queues = 0; in xenvif_alloc()
518 vif->xdp_headroom = 0; in xenvif_alloc()
520 spin_lock_init(&vif->lock); in xenvif_alloc()
521 INIT_LIST_HEAD(&vif->fe_mcast_addr); in xenvif_alloc()
555 return vif; in xenvif_alloc()
587 netdev_err(queue->vif->dev, "Could not reserve mmap_pages\n"); in xenvif_init_queue()
602 void xenvif_carrier_on(struct xenvif *vif) in xenvif_carrier_on() argument
605 if (!vif->can_sg && vif->dev->mtu > ETH_DATA_LEN) in xenvif_carrier_on()
606 dev_set_mtu(vif->dev, ETH_DATA_LEN); in xenvif_carrier_on()
607 netdev_update_features(vif->dev); in xenvif_carrier_on()
608 set_bit(VIF_STATUS_CONNECTED, &vif->status); in xenvif_carrier_on()
609 if (netif_running(vif->dev)) in xenvif_carrier_on()
610 xenvif_up(vif); in xenvif_carrier_on()
614 int xenvif_connect_ctrl(struct xenvif *vif, grant_ref_t ring_ref, in xenvif_connect_ctrl() argument
617 struct net_device *dev = vif->dev; in xenvif_connect_ctrl()
623 err = xenbus_map_ring_valloc(xenvif_to_xenbus_device(vif), in xenvif_connect_ctrl()
632 BACK_RING_ATTACH(&vif->ctrl, shared, rsp_prod, XEN_PAGE_SIZE); in xenvif_connect_ctrl()
635 if (req_prod - rsp_prod > RING_SIZE(&vif->ctrl)) in xenvif_connect_ctrl()
638 err = bind_interdomain_evtchn_to_irq_lateeoi(vif->domid, evtchn); in xenvif_connect_ctrl()
642 vif->ctrl_irq = err; in xenvif_connect_ctrl()
644 xenvif_init_hash(vif); in xenvif_connect_ctrl()
646 err = request_threaded_irq(vif->ctrl_irq, NULL, xenvif_ctrl_irq_fn, in xenvif_connect_ctrl()
647 IRQF_ONESHOT, "xen-netback-ctrl", vif); in xenvif_connect_ctrl()
656 xenvif_deinit_hash(vif); in xenvif_connect_ctrl()
657 unbind_from_irqhandler(vif->ctrl_irq, vif); in xenvif_connect_ctrl()
658 vif->ctrl_irq = 0; in xenvif_connect_ctrl()
661 xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif), in xenvif_connect_ctrl()
662 vif->ctrl.sring); in xenvif_connect_ctrl()
663 vif->ctrl.sring = NULL; in xenvif_connect_ctrl()
724 netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll, in xenvif_connect_data()
749 queue->vif->domid, tx_evtchn, xenvif_interrupt, 0, in xenvif_connect_data()
760 queue->vif->domid, tx_evtchn, xenvif_tx_interrupt, 0, in xenvif_connect_data()
770 queue->vif->domid, rx_evtchn, xenvif_rx_interrupt, 0, in xenvif_connect_data()
788 void xenvif_carrier_off(struct xenvif *vif) in xenvif_carrier_off() argument
790 struct net_device *dev = vif->dev; in xenvif_carrier_off()
793 if (test_and_clear_bit(VIF_STATUS_CONNECTED, &vif->status)) { in xenvif_carrier_off()
796 xenvif_down(vif); in xenvif_carrier_off()
801 void xenvif_disconnect_data(struct xenvif *vif) in xenvif_disconnect_data() argument
804 unsigned int num_queues = vif->num_queues; in xenvif_disconnect_data()
807 xenvif_carrier_off(vif); in xenvif_disconnect_data()
810 queue = &vif->queues[queue_index]; in xenvif_disconnect_data()
815 xenvif_mcast_addr_list_free(vif); in xenvif_disconnect_data()
818 void xenvif_disconnect_ctrl(struct xenvif *vif) in xenvif_disconnect_ctrl() argument
820 if (vif->ctrl_irq) { in xenvif_disconnect_ctrl()
821 xenvif_deinit_hash(vif); in xenvif_disconnect_ctrl()
822 unbind_from_irqhandler(vif->ctrl_irq, vif); in xenvif_disconnect_ctrl()
823 vif->ctrl_irq = 0; in xenvif_disconnect_ctrl()
826 if (vif->ctrl.sring) { in xenvif_disconnect_ctrl()
827 xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif), in xenvif_disconnect_ctrl()
828 vif->ctrl.sring); in xenvif_disconnect_ctrl()
829 vif->ctrl.sring = NULL; in xenvif_disconnect_ctrl()
842 void xenvif_free(struct xenvif *vif) in xenvif_free() argument
844 struct xenvif_queue *queues = vif->queues; in xenvif_free()
845 unsigned int num_queues = vif->num_queues; in xenvif_free()
848 unregister_netdev(vif->dev); in xenvif_free()
849 free_netdev(vif->dev); in xenvif_free()