Lines Matching refs:queue

54 void xenvif_skb_zerocopy_prepare(struct xenvif_queue *queue,  in xenvif_skb_zerocopy_prepare()  argument
58 atomic_inc(&queue->inflight_packets); in xenvif_skb_zerocopy_prepare()
61 void xenvif_skb_zerocopy_complete(struct xenvif_queue *queue) in xenvif_skb_zerocopy_complete() argument
63 atomic_dec(&queue->inflight_packets); in xenvif_skb_zerocopy_complete()
69 wake_up(&queue->dealloc_wq); in xenvif_skb_zerocopy_complete()
81 struct xenvif_queue *queue = dev_id; in xenvif_tx_interrupt() local
83 if (RING_HAS_UNCONSUMED_REQUESTS(&queue->tx)) in xenvif_tx_interrupt()
84 napi_schedule(&queue->napi); in xenvif_tx_interrupt()
91 struct xenvif_queue *queue = in xenvif_poll() local
99 if (unlikely(queue->vif->disabled)) { in xenvif_poll()
104 work_done = xenvif_tx_action(queue, budget); in xenvif_poll()
108 xenvif_napi_schedule_or_enable_events(queue); in xenvif_poll()
116 struct xenvif_queue *queue = dev_id; in xenvif_rx_interrupt() local
118 xenvif_kick_thread(queue); in xenvif_rx_interrupt()
131 int xenvif_queue_stopped(struct xenvif_queue *queue) in xenvif_queue_stopped() argument
133 struct net_device *dev = queue->vif->dev; in xenvif_queue_stopped()
134 unsigned int id = queue->id; in xenvif_queue_stopped()
138 void xenvif_wake_queue(struct xenvif_queue *queue) in xenvif_wake_queue() argument
140 struct net_device *dev = queue->vif->dev; in xenvif_wake_queue()
141 unsigned int id = queue->id; in xenvif_wake_queue()
148 struct xenvif_queue *queue = NULL; in xenvif_start_xmit() local
166 queue = &vif->queues[index]; in xenvif_start_xmit()
169 if (queue->task == NULL || in xenvif_start_xmit()
170 queue->dealloc_task == NULL || in xenvif_start_xmit()
184 xenvif_rx_queue_tail(queue, skb); in xenvif_start_xmit()
185 xenvif_kick_thread(queue); in xenvif_start_xmit()
198 struct xenvif_queue *queue = NULL; in xenvif_get_stats() local
211 queue = &vif->queues[index]; in xenvif_get_stats()
212 rx_bytes += queue->stats.rx_bytes; in xenvif_get_stats()
213 rx_packets += queue->stats.rx_packets; in xenvif_get_stats()
214 tx_bytes += queue->stats.tx_bytes; in xenvif_get_stats()
215 tx_packets += queue->stats.tx_packets; in xenvif_get_stats()
229 struct xenvif_queue *queue = NULL; in xenvif_up() local
234 queue = &vif->queues[queue_index]; in xenvif_up()
235 napi_enable(&queue->napi); in xenvif_up()
236 enable_irq(queue->tx_irq); in xenvif_up()
237 if (queue->tx_irq != queue->rx_irq) in xenvif_up()
238 enable_irq(queue->rx_irq); in xenvif_up()
239 xenvif_napi_schedule_or_enable_events(queue); in xenvif_up()
245 struct xenvif_queue *queue = NULL; in xenvif_down() local
250 queue = &vif->queues[queue_index]; in xenvif_down()
251 disable_irq(queue->tx_irq); in xenvif_down()
252 if (queue->tx_irq != queue->rx_irq) in xenvif_down()
253 disable_irq(queue->rx_irq); in xenvif_down()
254 napi_disable(&queue->napi); in xenvif_down()
255 del_timer_sync(&queue->credit_timeout); in xenvif_down()
473 int xenvif_init_queue(struct xenvif_queue *queue) in xenvif_init_queue() argument
477 queue->credit_bytes = queue->remaining_credit = ~0UL; in xenvif_init_queue()
478 queue->credit_usec = 0UL; in xenvif_init_queue()
479 init_timer(&queue->credit_timeout); in xenvif_init_queue()
480 queue->credit_timeout.function = xenvif_tx_credit_callback; in xenvif_init_queue()
481 queue->credit_window_start = get_jiffies_64(); in xenvif_init_queue()
483 queue->rx_queue_max = XENVIF_RX_QUEUE_BYTES; in xenvif_init_queue()
485 skb_queue_head_init(&queue->rx_queue); in xenvif_init_queue()
486 skb_queue_head_init(&queue->tx_queue); in xenvif_init_queue()
488 queue->pending_cons = 0; in xenvif_init_queue()
489 queue->pending_prod = MAX_PENDING_REQS; in xenvif_init_queue()
491 queue->pending_ring[i] = i; in xenvif_init_queue()
493 spin_lock_init(&queue->callback_lock); in xenvif_init_queue()
494 spin_lock_init(&queue->response_lock); in xenvif_init_queue()
501 queue->mmap_pages); in xenvif_init_queue()
503 netdev_err(queue->vif->dev, "Could not reserve mmap_pages\n"); in xenvif_init_queue()
508 queue->pending_tx_info[i].callback_struct = (struct ubuf_info) in xenvif_init_queue()
512 queue->grant_tx_handle[i] = NETBACK_INVALID_HANDLE; in xenvif_init_queue()
530 int xenvif_connect(struct xenvif_queue *queue, unsigned long tx_ring_ref, in xenvif_connect() argument
537 BUG_ON(queue->tx_irq); in xenvif_connect()
538 BUG_ON(queue->task); in xenvif_connect()
539 BUG_ON(queue->dealloc_task); in xenvif_connect()
541 err = xenvif_map_frontend_rings(queue, tx_ring_ref, rx_ring_ref); in xenvif_connect()
545 init_waitqueue_head(&queue->wq); in xenvif_connect()
546 init_waitqueue_head(&queue->dealloc_wq); in xenvif_connect()
547 atomic_set(&queue->inflight_packets, 0); in xenvif_connect()
549 netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll, in xenvif_connect()
555 queue->vif->domid, tx_evtchn, xenvif_interrupt, 0, in xenvif_connect()
556 queue->name, queue); in xenvif_connect()
559 queue->tx_irq = queue->rx_irq = err; in xenvif_connect()
560 disable_irq(queue->tx_irq); in xenvif_connect()
563 snprintf(queue->tx_irq_name, sizeof(queue->tx_irq_name), in xenvif_connect()
564 "%s-tx", queue->name); in xenvif_connect()
566 queue->vif->domid, tx_evtchn, xenvif_tx_interrupt, 0, in xenvif_connect()
567 queue->tx_irq_name, queue); in xenvif_connect()
570 queue->tx_irq = err; in xenvif_connect()
571 disable_irq(queue->tx_irq); in xenvif_connect()
573 snprintf(queue->rx_irq_name, sizeof(queue->rx_irq_name), in xenvif_connect()
574 "%s-rx", queue->name); in xenvif_connect()
576 queue->vif->domid, rx_evtchn, xenvif_rx_interrupt, 0, in xenvif_connect()
577 queue->rx_irq_name, queue); in xenvif_connect()
580 queue->rx_irq = err; in xenvif_connect()
581 disable_irq(queue->rx_irq); in xenvif_connect()
584 queue->stalled = true; in xenvif_connect()
587 (void *)queue, "%s-guest-rx", queue->name); in xenvif_connect()
589 pr_warn("Could not allocate kthread for %s\n", queue->name); in xenvif_connect()
593 queue->task = task; in xenvif_connect()
597 (void *)queue, "%s-dealloc", queue->name); in xenvif_connect()
599 pr_warn("Could not allocate kthread for %s\n", queue->name); in xenvif_connect()
603 queue->dealloc_task = task; in xenvif_connect()
605 wake_up_process(queue->task); in xenvif_connect()
606 wake_up_process(queue->dealloc_task); in xenvif_connect()
611 unbind_from_irqhandler(queue->rx_irq, queue); in xenvif_connect()
612 queue->rx_irq = 0; in xenvif_connect()
614 unbind_from_irqhandler(queue->tx_irq, queue); in xenvif_connect()
615 queue->tx_irq = 0; in xenvif_connect()
617 xenvif_unmap_frontend_rings(queue); in xenvif_connect()
638 struct xenvif_queue *queue = NULL; in xenvif_disconnect() local
645 queue = &vif->queues[queue_index]; in xenvif_disconnect()
647 netif_napi_del(&queue->napi); in xenvif_disconnect()
649 if (queue->task) { in xenvif_disconnect()
650 kthread_stop(queue->task); in xenvif_disconnect()
651 put_task_struct(queue->task); in xenvif_disconnect()
652 queue->task = NULL; in xenvif_disconnect()
655 if (queue->dealloc_task) { in xenvif_disconnect()
656 kthread_stop(queue->dealloc_task); in xenvif_disconnect()
657 queue->dealloc_task = NULL; in xenvif_disconnect()
660 if (queue->tx_irq) { in xenvif_disconnect()
661 if (queue->tx_irq == queue->rx_irq) in xenvif_disconnect()
662 unbind_from_irqhandler(queue->tx_irq, queue); in xenvif_disconnect()
664 unbind_from_irqhandler(queue->tx_irq, queue); in xenvif_disconnect()
665 unbind_from_irqhandler(queue->rx_irq, queue); in xenvif_disconnect()
667 queue->tx_irq = 0; in xenvif_disconnect()
670 xenvif_unmap_frontend_rings(queue); in xenvif_disconnect()
680 void xenvif_deinit_queue(struct xenvif_queue *queue) in xenvif_deinit_queue() argument
682 gnttab_free_pages(MAX_PENDING_REQS, queue->mmap_pages); in xenvif_deinit_queue()
687 struct xenvif_queue *queue = NULL; in xenvif_free() local
694 queue = &vif->queues[queue_index]; in xenvif_free()
695 xenvif_deinit_queue(queue); in xenvif_free()