Lines Matching refs:vif
73 int xenvif_schedulable(struct xenvif *vif) in xenvif_schedulable() argument
75 return netif_running(vif->dev) && in xenvif_schedulable()
76 test_bit(VIF_STATUS_CONNECTED, &vif->status) && in xenvif_schedulable()
77 !vif->disabled; in xenvif_schedulable()
116 if (unlikely(queue->vif->disabled)) { in xenvif_poll()
181 struct net_device *dev = queue->vif->dev; in xenvif_queue_stopped()
188 struct net_device *dev = queue->vif->dev; in xenvif_wake_queue()
196 struct xenvif *vif = netdev_priv(dev); in xenvif_select_queue() local
197 unsigned int size = vif->hash.size; in xenvif_select_queue()
202 num_queues = READ_ONCE(vif->num_queues); in xenvif_select_queue()
206 if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE) in xenvif_select_queue()
210 xenvif_set_skb_hash(vif, skb); in xenvif_select_queue()
215 return vif->hash.mapping[vif->hash.mapping_sel] in xenvif_select_queue()
222 struct xenvif *vif = netdev_priv(dev); in xenvif_start_xmit() local
234 num_queues = READ_ONCE(vif->num_queues); in xenvif_start_xmit()
242 index, vif->dev->name); in xenvif_start_xmit()
245 queue = &vif->queues[index]; in xenvif_start_xmit()
250 !xenvif_schedulable(vif)) in xenvif_start_xmit()
253 if (vif->multicast_control && skb->pkt_type == PACKET_MULTICAST) { in xenvif_start_xmit()
256 if (!xenvif_mcast_match(vif, eth->h_dest)) in xenvif_start_xmit()
261 cb->expires = jiffies + vif->drain_timeout; in xenvif_start_xmit()
267 if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE) in xenvif_start_xmit()
276 vif->dev->stats.tx_dropped++; in xenvif_start_xmit()
283 struct xenvif *vif = netdev_priv(dev); in xenvif_get_stats() local
293 num_queues = READ_ONCE(vif->num_queues); in xenvif_get_stats()
297 queue = &vif->queues[index]; in xenvif_get_stats()
306 vif->dev->stats.rx_bytes = rx_bytes; in xenvif_get_stats()
307 vif->dev->stats.rx_packets = rx_packets; in xenvif_get_stats()
308 vif->dev->stats.tx_bytes = tx_bytes; in xenvif_get_stats()
309 vif->dev->stats.tx_packets = tx_packets; in xenvif_get_stats()
311 return &vif->dev->stats; in xenvif_get_stats()
314 static void xenvif_up(struct xenvif *vif) in xenvif_up() argument
317 unsigned int num_queues = vif->num_queues; in xenvif_up()
321 queue = &vif->queues[queue_index]; in xenvif_up()
330 static void xenvif_down(struct xenvif *vif) in xenvif_down() argument
333 unsigned int num_queues = vif->num_queues; in xenvif_down()
337 queue = &vif->queues[queue_index]; in xenvif_down()
348 struct xenvif *vif = netdev_priv(dev); in xenvif_open() local
349 if (test_bit(VIF_STATUS_CONNECTED, &vif->status)) in xenvif_open()
350 xenvif_up(vif); in xenvif_open()
357 struct xenvif *vif = netdev_priv(dev); in xenvif_close() local
358 if (test_bit(VIF_STATUS_CONNECTED, &vif->status)) in xenvif_close()
359 xenvif_down(vif); in xenvif_close()
366 struct xenvif *vif = netdev_priv(dev); in xenvif_change_mtu() local
367 int max = vif->can_sg ? ETH_MAX_MTU - VLAN_ETH_HLEN : ETH_DATA_LEN; in xenvif_change_mtu()
378 struct xenvif *vif = netdev_priv(dev); in xenvif_fix_features() local
380 if (!vif->can_sg) in xenvif_fix_features()
382 if (~(vif->gso_mask) & GSO_BIT(TCPV4)) in xenvif_fix_features()
384 if (~(vif->gso_mask) & GSO_BIT(TCPV6)) in xenvif_fix_features()
386 if (!vif->ip_csum) in xenvif_fix_features()
388 if (!vif->ipv6_csum) in xenvif_fix_features()
439 struct xenvif *vif = netdev_priv(dev); in xenvif_get_ethtool_stats() local
445 num_queues = READ_ONCE(vif->num_queues); in xenvif_get_ethtool_stats()
450 void *vif_stats = &vif->queues[queue_index].stats; in xenvif_get_ethtool_stats()
497 struct xenvif *vif; in xenvif_alloc() local
514 vif = netdev_priv(dev); in xenvif_alloc()
516 vif->domid = domid; in xenvif_alloc()
517 vif->handle = handle; in xenvif_alloc()
518 vif->can_sg = 1; in xenvif_alloc()
519 vif->ip_csum = 1; in xenvif_alloc()
520 vif->dev = dev; in xenvif_alloc()
521 vif->disabled = false; in xenvif_alloc()
522 vif->drain_timeout = msecs_to_jiffies(rx_drain_timeout_msecs); in xenvif_alloc()
523 vif->stall_timeout = msecs_to_jiffies(rx_stall_timeout_msecs); in xenvif_alloc()
526 vif->queues = NULL; in xenvif_alloc()
527 vif->num_queues = 0; in xenvif_alloc()
529 vif->xdp_headroom = 0; in xenvif_alloc()
531 spin_lock_init(&vif->lock); in xenvif_alloc()
532 INIT_LIST_HEAD(&vif->fe_mcast_addr); in xenvif_alloc()
568 return vif; in xenvif_alloc()
600 netdev_err(queue->vif->dev, "Could not reserve mmap_pages\n"); in xenvif_init_queue()
615 void xenvif_carrier_on(struct xenvif *vif) in xenvif_carrier_on() argument
618 if (!vif->can_sg && vif->dev->mtu > ETH_DATA_LEN) in xenvif_carrier_on()
619 dev_set_mtu(vif->dev, ETH_DATA_LEN); in xenvif_carrier_on()
620 netdev_update_features(vif->dev); in xenvif_carrier_on()
621 set_bit(VIF_STATUS_CONNECTED, &vif->status); in xenvif_carrier_on()
622 if (netif_running(vif->dev)) in xenvif_carrier_on()
623 xenvif_up(vif); in xenvif_carrier_on()
627 int xenvif_connect_ctrl(struct xenvif *vif, grant_ref_t ring_ref, in xenvif_connect_ctrl() argument
630 struct net_device *dev = vif->dev; in xenvif_connect_ctrl()
636 err = xenbus_map_ring_valloc(xenvif_to_xenbus_device(vif), in xenvif_connect_ctrl()
645 BACK_RING_ATTACH(&vif->ctrl, shared, rsp_prod, XEN_PAGE_SIZE); in xenvif_connect_ctrl()
648 if (req_prod - rsp_prod > RING_SIZE(&vif->ctrl)) in xenvif_connect_ctrl()
651 err = bind_interdomain_evtchn_to_irq_lateeoi(vif->domid, evtchn); in xenvif_connect_ctrl()
655 vif->ctrl_irq = err; in xenvif_connect_ctrl()
657 xenvif_init_hash(vif); in xenvif_connect_ctrl()
659 err = request_threaded_irq(vif->ctrl_irq, NULL, xenvif_ctrl_irq_fn, in xenvif_connect_ctrl()
660 IRQF_ONESHOT, "xen-netback-ctrl", vif); in xenvif_connect_ctrl()
669 xenvif_deinit_hash(vif); in xenvif_connect_ctrl()
670 unbind_from_irqhandler(vif->ctrl_irq, vif); in xenvif_connect_ctrl()
671 vif->ctrl_irq = 0; in xenvif_connect_ctrl()
674 xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif), in xenvif_connect_ctrl()
675 vif->ctrl.sring); in xenvif_connect_ctrl()
676 vif->ctrl.sring = NULL; in xenvif_connect_ctrl()
736 netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll, in xenvif_connect_data()
756 queue->vif->domid, tx_evtchn, xenvif_interrupt, 0, in xenvif_connect_data()
767 queue->vif->domid, tx_evtchn, xenvif_tx_interrupt, 0, in xenvif_connect_data()
777 queue->vif->domid, rx_evtchn, xenvif_rx_interrupt, 0, in xenvif_connect_data()
795 void xenvif_carrier_off(struct xenvif *vif) in xenvif_carrier_off() argument
797 struct net_device *dev = vif->dev; in xenvif_carrier_off()
800 if (test_and_clear_bit(VIF_STATUS_CONNECTED, &vif->status)) { in xenvif_carrier_off()
803 xenvif_down(vif); in xenvif_carrier_off()
808 void xenvif_disconnect_data(struct xenvif *vif) in xenvif_disconnect_data() argument
811 unsigned int num_queues = vif->num_queues; in xenvif_disconnect_data()
814 xenvif_carrier_off(vif); in xenvif_disconnect_data()
817 queue = &vif->queues[queue_index]; in xenvif_disconnect_data()
822 xenvif_mcast_addr_list_free(vif); in xenvif_disconnect_data()
825 void xenvif_disconnect_ctrl(struct xenvif *vif) in xenvif_disconnect_ctrl() argument
827 if (vif->ctrl_irq) { in xenvif_disconnect_ctrl()
828 xenvif_deinit_hash(vif); in xenvif_disconnect_ctrl()
829 unbind_from_irqhandler(vif->ctrl_irq, vif); in xenvif_disconnect_ctrl()
830 vif->ctrl_irq = 0; in xenvif_disconnect_ctrl()
833 if (vif->ctrl.sring) { in xenvif_disconnect_ctrl()
834 xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif), in xenvif_disconnect_ctrl()
835 vif->ctrl.sring); in xenvif_disconnect_ctrl()
836 vif->ctrl.sring = NULL; in xenvif_disconnect_ctrl()
849 void xenvif_free(struct xenvif *vif) in xenvif_free() argument
851 struct xenvif_queue *queues = vif->queues; in xenvif_free()
852 unsigned int num_queues = vif->num_queues; in xenvif_free()
855 unregister_netdev(vif->dev); in xenvif_free()
856 free_netdev(vif->dev); in xenvif_free()