Lines Matching refs:queue
55 void xenvif_skb_zerocopy_prepare(struct xenvif_queue *queue, in xenvif_skb_zerocopy_prepare() argument
59 atomic_inc(&queue->inflight_packets); in xenvif_skb_zerocopy_prepare()
62 void xenvif_skb_zerocopy_complete(struct xenvif_queue *queue) in xenvif_skb_zerocopy_complete() argument
64 atomic_dec(&queue->inflight_packets); in xenvif_skb_zerocopy_complete()
70 wake_up(&queue->dealloc_wq); in xenvif_skb_zerocopy_complete()
82 struct xenvif_queue *queue = dev_id; in xenvif_tx_interrupt() local
84 if (RING_HAS_UNCONSUMED_REQUESTS(&queue->tx)) in xenvif_tx_interrupt()
85 napi_schedule(&queue->napi); in xenvif_tx_interrupt()
92 struct xenvif_queue *queue = in xenvif_poll() local
100 if (unlikely(queue->vif->disabled)) { in xenvif_poll()
105 work_done = xenvif_tx_action(queue, budget); in xenvif_poll()
112 if (likely(!queue->rate_limited)) in xenvif_poll()
113 xenvif_napi_schedule_or_enable_events(queue); in xenvif_poll()
121 struct xenvif_queue *queue = dev_id; in xenvif_rx_interrupt() local
123 xenvif_kick_thread(queue); in xenvif_rx_interrupt()
136 int xenvif_queue_stopped(struct xenvif_queue *queue) in xenvif_queue_stopped() argument
138 struct net_device *dev = queue->vif->dev; in xenvif_queue_stopped()
139 unsigned int id = queue->id; in xenvif_queue_stopped()
143 void xenvif_wake_queue(struct xenvif_queue *queue) in xenvif_wake_queue() argument
145 struct net_device *dev = queue->vif->dev; in xenvif_wake_queue()
146 unsigned int id = queue->id; in xenvif_wake_queue()
172 struct xenvif_queue *queue = NULL; in xenvif_start_xmit() local
194 queue = &vif->queues[index]; in xenvif_start_xmit()
197 if (queue->task == NULL || in xenvif_start_xmit()
198 queue->dealloc_task == NULL || in xenvif_start_xmit()
219 xenvif_rx_queue_tail(queue, skb); in xenvif_start_xmit()
220 xenvif_kick_thread(queue); in xenvif_start_xmit()
233 struct xenvif_queue *queue = NULL; in xenvif_get_stats() local
246 queue = &vif->queues[index]; in xenvif_get_stats()
247 rx_bytes += queue->stats.rx_bytes; in xenvif_get_stats()
248 rx_packets += queue->stats.rx_packets; in xenvif_get_stats()
249 tx_bytes += queue->stats.tx_bytes; in xenvif_get_stats()
250 tx_packets += queue->stats.tx_packets; in xenvif_get_stats()
265 struct xenvif_queue *queue = NULL; in xenvif_up() local
270 queue = &vif->queues[queue_index]; in xenvif_up()
271 napi_enable(&queue->napi); in xenvif_up()
272 enable_irq(queue->tx_irq); in xenvif_up()
273 if (queue->tx_irq != queue->rx_irq) in xenvif_up()
274 enable_irq(queue->rx_irq); in xenvif_up()
275 xenvif_napi_schedule_or_enable_events(queue); in xenvif_up()
281 struct xenvif_queue *queue = NULL; in xenvif_down() local
286 queue = &vif->queues[queue_index]; in xenvif_down()
287 disable_irq(queue->tx_irq); in xenvif_down()
288 if (queue->tx_irq != queue->rx_irq) in xenvif_down()
289 disable_irq(queue->rx_irq); in xenvif_down()
290 napi_disable(&queue->napi); in xenvif_down()
291 del_timer_sync(&queue->credit_timeout); in xenvif_down()
518 int xenvif_init_queue(struct xenvif_queue *queue) in xenvif_init_queue() argument
522 queue->credit_bytes = queue->remaining_credit = ~0UL; in xenvif_init_queue()
523 queue->credit_usec = 0UL; in xenvif_init_queue()
524 timer_setup(&queue->credit_timeout, xenvif_tx_credit_callback, 0); in xenvif_init_queue()
525 queue->credit_window_start = get_jiffies_64(); in xenvif_init_queue()
527 queue->rx_queue_max = XENVIF_RX_QUEUE_BYTES; in xenvif_init_queue()
529 skb_queue_head_init(&queue->rx_queue); in xenvif_init_queue()
530 skb_queue_head_init(&queue->tx_queue); in xenvif_init_queue()
532 queue->pending_cons = 0; in xenvif_init_queue()
533 queue->pending_prod = MAX_PENDING_REQS; in xenvif_init_queue()
535 queue->pending_ring[i] = i; in xenvif_init_queue()
537 spin_lock_init(&queue->callback_lock); in xenvif_init_queue()
538 spin_lock_init(&queue->response_lock); in xenvif_init_queue()
545 queue->mmap_pages); in xenvif_init_queue()
547 netdev_err(queue->vif->dev, "Could not reserve mmap_pages\n"); in xenvif_init_queue()
552 queue->pending_tx_info[i].callback_struct = (struct ubuf_info) in xenvif_init_queue()
556 queue->grant_tx_handle[i] = NETBACK_INVALID_HANDLE; in xenvif_init_queue()
621 int xenvif_connect_data(struct xenvif_queue *queue, in xenvif_connect_data() argument
630 BUG_ON(queue->tx_irq); in xenvif_connect_data()
631 BUG_ON(queue->task); in xenvif_connect_data()
632 BUG_ON(queue->dealloc_task); in xenvif_connect_data()
634 err = xenvif_map_frontend_data_rings(queue, tx_ring_ref, in xenvif_connect_data()
639 init_waitqueue_head(&queue->wq); in xenvif_connect_data()
640 init_waitqueue_head(&queue->dealloc_wq); in xenvif_connect_data()
641 atomic_set(&queue->inflight_packets, 0); in xenvif_connect_data()
643 netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll, in xenvif_connect_data()
649 queue->vif->domid, tx_evtchn, xenvif_interrupt, 0, in xenvif_connect_data()
650 queue->name, queue); in xenvif_connect_data()
653 queue->tx_irq = queue->rx_irq = err; in xenvif_connect_data()
654 disable_irq(queue->tx_irq); in xenvif_connect_data()
657 snprintf(queue->tx_irq_name, sizeof(queue->tx_irq_name), in xenvif_connect_data()
658 "%s-tx", queue->name); in xenvif_connect_data()
660 queue->vif->domid, tx_evtchn, xenvif_tx_interrupt, 0, in xenvif_connect_data()
661 queue->tx_irq_name, queue); in xenvif_connect_data()
664 queue->tx_irq = err; in xenvif_connect_data()
665 disable_irq(queue->tx_irq); in xenvif_connect_data()
667 snprintf(queue->rx_irq_name, sizeof(queue->rx_irq_name), in xenvif_connect_data()
668 "%s-rx", queue->name); in xenvif_connect_data()
670 queue->vif->domid, rx_evtchn, xenvif_rx_interrupt, 0, in xenvif_connect_data()
671 queue->rx_irq_name, queue); in xenvif_connect_data()
674 queue->rx_irq = err; in xenvif_connect_data()
675 disable_irq(queue->rx_irq); in xenvif_connect_data()
678 queue->stalled = true; in xenvif_connect_data()
681 (void *)queue, "%s-guest-rx", queue->name); in xenvif_connect_data()
683 pr_warn("Could not allocate kthread for %s\n", queue->name); in xenvif_connect_data()
687 queue->task = task; in xenvif_connect_data()
691 (void *)queue, "%s-dealloc", queue->name); in xenvif_connect_data()
693 pr_warn("Could not allocate kthread for %s\n", queue->name); in xenvif_connect_data()
697 queue->dealloc_task = task; in xenvif_connect_data()
699 wake_up_process(queue->task); in xenvif_connect_data()
700 wake_up_process(queue->dealloc_task); in xenvif_connect_data()
705 unbind_from_irqhandler(queue->rx_irq, queue); in xenvif_connect_data()
706 queue->rx_irq = 0; in xenvif_connect_data()
708 unbind_from_irqhandler(queue->tx_irq, queue); in xenvif_connect_data()
709 queue->tx_irq = 0; in xenvif_connect_data()
711 xenvif_unmap_frontend_data_rings(queue); in xenvif_connect_data()
712 netif_napi_del(&queue->napi); in xenvif_connect_data()
733 struct xenvif_queue *queue = NULL; in xenvif_disconnect_data() local
740 queue = &vif->queues[queue_index]; in xenvif_disconnect_data()
742 netif_napi_del(&queue->napi); in xenvif_disconnect_data()
744 if (queue->task) { in xenvif_disconnect_data()
745 kthread_stop(queue->task); in xenvif_disconnect_data()
746 put_task_struct(queue->task); in xenvif_disconnect_data()
747 queue->task = NULL; in xenvif_disconnect_data()
750 if (queue->dealloc_task) { in xenvif_disconnect_data()
751 kthread_stop(queue->dealloc_task); in xenvif_disconnect_data()
752 queue->dealloc_task = NULL; in xenvif_disconnect_data()
755 if (queue->tx_irq) { in xenvif_disconnect_data()
756 if (queue->tx_irq == queue->rx_irq) in xenvif_disconnect_data()
757 unbind_from_irqhandler(queue->tx_irq, queue); in xenvif_disconnect_data()
759 unbind_from_irqhandler(queue->tx_irq, queue); in xenvif_disconnect_data()
760 unbind_from_irqhandler(queue->rx_irq, queue); in xenvif_disconnect_data()
762 queue->tx_irq = 0; in xenvif_disconnect_data()
765 xenvif_unmap_frontend_data_rings(queue); in xenvif_disconnect_data()
790 void xenvif_deinit_queue(struct xenvif_queue *queue) in xenvif_deinit_queue() argument
792 gnttab_free_pages(MAX_PENDING_REQS, queue->mmap_pages); in xenvif_deinit_queue()