/* Callback to wake the queue's thread and turn the carrier off on timeout */ static void xenvif_rx_stalled(unsigned long data) { struct xenvif_queue *queue = (struct xenvif_queue *)data; if (xenvif_queue_stopped(queue)) { set_bit(QUEUE_STATUS_RX_PURGE_EVENT, &queue->status); xenvif_kick_thread(queue); } }
/* Callback to wake the queue and drain it on timeout */ static void xenvif_wake_queue_callback(unsigned long data) { struct xenvif_queue *queue = (struct xenvif_queue *)data; if (xenvif_queue_stopped(queue)) { netdev_err(queue->vif->dev, "draining TX queue\n"); queue->rx_queue_purge = true; xenvif_kick_thread(queue); xenvif_wake_queue(queue); } }