xen-netback: Add support for multiple queues
[linux-2.6-block.git] / drivers / net / xen-netback / interface.c
1 /*
2  * Network-device interface management.
3  *
4  * Copyright (c) 2004-2005, Keir Fraser
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License version 2
8  * as published by the Free Software Foundation; or, when distributed
9  * separately from the Linux kernel or incorporated into other
10  * software packages, subject to the following license:
11  *
12  * Permission is hereby granted, free of charge, to any person obtaining a copy
13  * of this source file (the "Software"), to deal in the Software without
14  * restriction, including without limitation the rights to use, copy, modify,
15  * merge, publish, distribute, sublicense, and/or sell copies of the Software,
16  * and to permit persons to whom the Software is furnished to do so, subject to
17  * the following conditions:
18  *
19  * The above copyright notice and this permission notice shall be included in
20  * all copies or substantial portions of the Software.
21  *
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
28  * IN THE SOFTWARE.
29  */
30
31 #include "common.h"
32
33 #include <linux/kthread.h>
34 #include <linux/ethtool.h>
35 #include <linux/rtnetlink.h>
36 #include <linux/if_vlan.h>
37
38 #include <xen/events.h>
39 #include <asm/xen/hypercall.h>
40 #include <xen/balloon.h>
41
42 #define XENVIF_QUEUE_LENGTH 32
43 #define XENVIF_NAPI_WEIGHT  64
44
45 static inline void xenvif_stop_queue(struct xenvif_queue *queue)
46 {
47         struct net_device *dev = queue->vif->dev;
48
49         if (!queue->vif->can_queue)
50                 return;
51
52         netif_tx_stop_queue(netdev_get_tx_queue(dev, queue->id));
53 }
54
55 int xenvif_schedulable(struct xenvif *vif)
56 {
57         return netif_running(vif->dev) && netif_carrier_ok(vif->dev);
58 }
59
60 static irqreturn_t xenvif_tx_interrupt(int irq, void *dev_id)
61 {
62         struct xenvif_queue *queue = dev_id;
63
64         if (RING_HAS_UNCONSUMED_REQUESTS(&queue->tx))
65                 napi_schedule(&queue->napi);
66
67         return IRQ_HANDLED;
68 }
69
70 int xenvif_poll(struct napi_struct *napi, int budget)
71 {
72         struct xenvif_queue *queue =
73                 container_of(napi, struct xenvif_queue, napi);
74         int work_done;
75
76         /* This vif is rogue, we pretend we've there is nothing to do
77          * for this vif to deschedule it from NAPI. But this interface
78          * will be turned off in thread context later.
79          */
80         if (unlikely(queue->vif->disabled)) {
81                 napi_complete(napi);
82                 return 0;
83         }
84
85         work_done = xenvif_tx_action(queue, budget);
86
87         if (work_done < budget) {
88                 napi_complete(napi);
89                 xenvif_napi_schedule_or_enable_events(queue);
90         }
91
92         return work_done;
93 }
94
95 static irqreturn_t xenvif_rx_interrupt(int irq, void *dev_id)
96 {
97         struct xenvif_queue *queue = dev_id;
98
99         xenvif_kick_thread(queue);
100
101         return IRQ_HANDLED;
102 }
103
104 static irqreturn_t xenvif_interrupt(int irq, void *dev_id)
105 {
106         xenvif_tx_interrupt(irq, dev_id);
107         xenvif_rx_interrupt(irq, dev_id);
108
109         return IRQ_HANDLED;
110 }
111
112 int xenvif_queue_stopped(struct xenvif_queue *queue)
113 {
114         struct net_device *dev = queue->vif->dev;
115         unsigned int id = queue->id;
116         return netif_tx_queue_stopped(netdev_get_tx_queue(dev, id));
117 }
118
119 void xenvif_wake_queue(struct xenvif_queue *queue)
120 {
121         struct net_device *dev = queue->vif->dev;
122         unsigned int id = queue->id;
123         netif_tx_wake_queue(netdev_get_tx_queue(dev, id));
124 }
125
126 /* Callback to wake the queue and drain it on timeout */
127 static void xenvif_wake_queue_callback(unsigned long data)
128 {
129         struct xenvif_queue *queue = (struct xenvif_queue *)data;
130
131         if (xenvif_queue_stopped(queue)) {
132                 netdev_err(queue->vif->dev, "draining TX queue\n");
133                 queue->rx_queue_purge = true;
134                 xenvif_kick_thread(queue);
135                 xenvif_wake_queue(queue);
136         }
137 }
138
139 static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb,
140                                void *accel_priv, select_queue_fallback_t fallback)
141 {
142         unsigned int num_queues = dev->real_num_tx_queues;
143         u32 hash;
144         u16 queue_index;
145
146         /* First, check if there is only one queue to optimise the
147          * single-queue or old frontend scenario.
148          */
149         if (num_queues == 1) {
150                 queue_index = 0;
151         } else {
152                 /* Use skb_get_hash to obtain an L4 hash if available */
153                 hash = skb_get_hash(skb);
154                 queue_index = hash % num_queues;
155         }
156
157         return queue_index;
158 }
159
160 static int xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev)
161 {
162         struct xenvif *vif = netdev_priv(dev);
163         struct xenvif_queue *queue = NULL;
164         unsigned int num_queues = dev->real_num_tx_queues;
165         u16 index;
166         int min_slots_needed;
167
168         BUG_ON(skb->dev != dev);
169
170         /* Drop the packet if queues are not set up */
171         if (num_queues < 1)
172                 goto drop;
173
174         /* Obtain the queue to be used to transmit this packet */
175         index = skb_get_queue_mapping(skb);
176         if (index >= num_queues) {
177                 pr_warn_ratelimited("Invalid queue %hu for packet on interface %s\n.",
178                                     index, vif->dev->name);
179                 index %= num_queues;
180         }
181         queue = &vif->queues[index];
182
183         /* Drop the packet if queue is not ready */
184         if (queue->task == NULL ||
185             queue->dealloc_task == NULL ||
186             !xenvif_schedulable(vif))
187                 goto drop;
188
189         /* At best we'll need one slot for the header and one for each
190          * frag.
191          */
192         min_slots_needed = 1 + skb_shinfo(skb)->nr_frags;
193
194         /* If the skb is GSO then we'll also need an extra slot for the
195          * metadata.
196          */
197         if (skb_is_gso(skb))
198                 min_slots_needed++;
199
200         /* If the skb can't possibly fit in the remaining slots
201          * then turn off the queue to give the ring a chance to
202          * drain.
203          */
204         if (!xenvif_rx_ring_slots_available(queue, min_slots_needed)) {
205                 queue->wake_queue.function = xenvif_wake_queue_callback;
206                 queue->wake_queue.data = (unsigned long)queue;
207                 xenvif_stop_queue(queue);
208                 mod_timer(&queue->wake_queue,
209                         jiffies + rx_drain_timeout_jiffies);
210         }
211
212         skb_queue_tail(&queue->rx_queue, skb);
213         xenvif_kick_thread(queue);
214
215         return NETDEV_TX_OK;
216
217  drop:
218         vif->dev->stats.tx_dropped++;
219         dev_kfree_skb(skb);
220         return NETDEV_TX_OK;
221 }
222
223 static struct net_device_stats *xenvif_get_stats(struct net_device *dev)
224 {
225         struct xenvif *vif = netdev_priv(dev);
226         struct xenvif_queue *queue = NULL;
227         unsigned int num_queues = dev->real_num_tx_queues;
228         unsigned long rx_bytes = 0;
229         unsigned long rx_packets = 0;
230         unsigned long tx_bytes = 0;
231         unsigned long tx_packets = 0;
232         unsigned int index;
233
234         if (vif->queues == NULL)
235                 goto out;
236
237         /* Aggregate tx and rx stats from each queue */
238         for (index = 0; index < num_queues; ++index) {
239                 queue = &vif->queues[index];
240                 rx_bytes += queue->stats.rx_bytes;
241                 rx_packets += queue->stats.rx_packets;
242                 tx_bytes += queue->stats.tx_bytes;
243                 tx_packets += queue->stats.tx_packets;
244         }
245
246 out:
247         vif->dev->stats.rx_bytes = rx_bytes;
248         vif->dev->stats.rx_packets = rx_packets;
249         vif->dev->stats.tx_bytes = tx_bytes;
250         vif->dev->stats.tx_packets = tx_packets;
251
252         return &vif->dev->stats;
253 }
254
255 static void xenvif_up(struct xenvif *vif)
256 {
257         struct xenvif_queue *queue = NULL;
258         unsigned int num_queues = vif->dev->real_num_tx_queues;
259         unsigned int queue_index;
260
261         for (queue_index = 0; queue_index < num_queues; ++queue_index) {
262                 queue = &vif->queues[queue_index];
263                 napi_enable(&queue->napi);
264                 enable_irq(queue->tx_irq);
265                 if (queue->tx_irq != queue->rx_irq)
266                         enable_irq(queue->rx_irq);
267                 xenvif_napi_schedule_or_enable_events(queue);
268         }
269 }
270
271 static void xenvif_down(struct xenvif *vif)
272 {
273         struct xenvif_queue *queue = NULL;
274         unsigned int num_queues = vif->dev->real_num_tx_queues;
275         unsigned int queue_index;
276
277         for (queue_index = 0; queue_index < num_queues; ++queue_index) {
278                 queue = &vif->queues[queue_index];
279                 napi_disable(&queue->napi);
280                 disable_irq(queue->tx_irq);
281                 if (queue->tx_irq != queue->rx_irq)
282                         disable_irq(queue->rx_irq);
283                 del_timer_sync(&queue->credit_timeout);
284         }
285 }
286
287 static int xenvif_open(struct net_device *dev)
288 {
289         struct xenvif *vif = netdev_priv(dev);
290         if (netif_carrier_ok(dev))
291                 xenvif_up(vif);
292         netif_tx_start_all_queues(dev);
293         return 0;
294 }
295
296 static int xenvif_close(struct net_device *dev)
297 {
298         struct xenvif *vif = netdev_priv(dev);
299         if (netif_carrier_ok(dev))
300                 xenvif_down(vif);
301         netif_tx_stop_all_queues(dev);
302         return 0;
303 }
304
305 static int xenvif_change_mtu(struct net_device *dev, int mtu)
306 {
307         struct xenvif *vif = netdev_priv(dev);
308         int max = vif->can_sg ? 65535 - VLAN_ETH_HLEN : ETH_DATA_LEN;
309
310         if (mtu > max)
311                 return -EINVAL;
312         dev->mtu = mtu;
313         return 0;
314 }
315
316 static netdev_features_t xenvif_fix_features(struct net_device *dev,
317         netdev_features_t features)
318 {
319         struct xenvif *vif = netdev_priv(dev);
320
321         if (!vif->can_sg)
322                 features &= ~NETIF_F_SG;
323         if (~(vif->gso_mask | vif->gso_prefix_mask) & GSO_BIT(TCPV4))
324                 features &= ~NETIF_F_TSO;
325         if (~(vif->gso_mask | vif->gso_prefix_mask) & GSO_BIT(TCPV6))
326                 features &= ~NETIF_F_TSO6;
327         if (!vif->ip_csum)
328                 features &= ~NETIF_F_IP_CSUM;
329         if (!vif->ipv6_csum)
330                 features &= ~NETIF_F_IPV6_CSUM;
331
332         return features;
333 }
334
335 static const struct xenvif_stat {
336         char name[ETH_GSTRING_LEN];
337         u16 offset;
338 } xenvif_stats[] = {
339         {
340                 "rx_gso_checksum_fixup",
341                 offsetof(struct xenvif_stats, rx_gso_checksum_fixup)
342         },
343         /* If (sent != success + fail), there are probably packets never
344          * freed up properly!
345          */
346         {
347                 "tx_zerocopy_sent",
348                 offsetof(struct xenvif_stats, tx_zerocopy_sent),
349         },
350         {
351                 "tx_zerocopy_success",
352                 offsetof(struct xenvif_stats, tx_zerocopy_success),
353         },
354         {
355                 "tx_zerocopy_fail",
356                 offsetof(struct xenvif_stats, tx_zerocopy_fail)
357         },
358         /* Number of packets exceeding MAX_SKB_FRAG slots. You should use
359          * a guest with the same MAX_SKB_FRAG
360          */
361         {
362                 "tx_frag_overflow",
363                 offsetof(struct xenvif_stats, tx_frag_overflow)
364         },
365 };
366
367 static int xenvif_get_sset_count(struct net_device *dev, int string_set)
368 {
369         switch (string_set) {
370         case ETH_SS_STATS:
371                 return ARRAY_SIZE(xenvif_stats);
372         default:
373                 return -EINVAL;
374         }
375 }
376
377 static void xenvif_get_ethtool_stats(struct net_device *dev,
378                                      struct ethtool_stats *stats, u64 * data)
379 {
380         struct xenvif *vif = netdev_priv(dev);
381         unsigned int num_queues = dev->real_num_tx_queues;
382         int i;
383         unsigned int queue_index;
384         struct xenvif_stats *vif_stats;
385
386         for (i = 0; i < ARRAY_SIZE(xenvif_stats); i++) {
387                 unsigned long accum = 0;
388                 for (queue_index = 0; queue_index < num_queues; ++queue_index) {
389                         vif_stats = &vif->queues[queue_index].stats;
390                         accum += *(unsigned long *)(vif_stats + xenvif_stats[i].offset);
391                 }
392                 data[i] = accum;
393         }
394 }
395
396 static void xenvif_get_strings(struct net_device *dev, u32 stringset, u8 * data)
397 {
398         int i;
399
400         switch (stringset) {
401         case ETH_SS_STATS:
402                 for (i = 0; i < ARRAY_SIZE(xenvif_stats); i++)
403                         memcpy(data + i * ETH_GSTRING_LEN,
404                                xenvif_stats[i].name, ETH_GSTRING_LEN);
405                 break;
406         }
407 }
408
409 static const struct ethtool_ops xenvif_ethtool_ops = {
410         .get_link       = ethtool_op_get_link,
411
412         .get_sset_count = xenvif_get_sset_count,
413         .get_ethtool_stats = xenvif_get_ethtool_stats,
414         .get_strings = xenvif_get_strings,
415 };
416
417 static const struct net_device_ops xenvif_netdev_ops = {
418         .ndo_start_xmit = xenvif_start_xmit,
419         .ndo_get_stats  = xenvif_get_stats,
420         .ndo_open       = xenvif_open,
421         .ndo_stop       = xenvif_close,
422         .ndo_change_mtu = xenvif_change_mtu,
423         .ndo_fix_features = xenvif_fix_features,
424         .ndo_set_mac_address = eth_mac_addr,
425         .ndo_validate_addr   = eth_validate_addr,
426         .ndo_select_queue = xenvif_select_queue,
427 };
428
429 struct xenvif *xenvif_alloc(struct device *parent, domid_t domid,
430                             unsigned int handle)
431 {
432         int err;
433         struct net_device *dev;
434         struct xenvif *vif;
435         char name[IFNAMSIZ] = {};
436
437         snprintf(name, IFNAMSIZ - 1, "vif%u.%u", domid, handle);
438         /* Allocate a netdev with the max. supported number of queues.
439          * When the guest selects the desired number, it will be updated
440          * via netif_set_real_num_tx_queues().
441          */
442         dev = alloc_netdev_mq(sizeof(struct xenvif), name, ether_setup,
443                               xenvif_max_queues);
444         if (dev == NULL) {
445                 pr_warn("Could not allocate netdev for %s\n", name);
446                 return ERR_PTR(-ENOMEM);
447         }
448
449         SET_NETDEV_DEV(dev, parent);
450
451         vif = netdev_priv(dev);
452
453         vif->domid  = domid;
454         vif->handle = handle;
455         vif->can_sg = 1;
456         vif->ip_csum = 1;
457         vif->dev = dev;
458         vif->disabled = false;
459
460         /* Start out with no queues. The call below does not require
461          * rtnl_lock() as it happens before register_netdev().
462          */
463         vif->queues = NULL;
464         netif_set_real_num_tx_queues(dev, 0);
465
466         dev->netdev_ops = &xenvif_netdev_ops;
467         dev->hw_features = NETIF_F_SG |
468                 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
469                 NETIF_F_TSO | NETIF_F_TSO6;
470         dev->features = dev->hw_features | NETIF_F_RXCSUM;
471         dev->ethtool_ops = &xenvif_ethtool_ops;
472
473         dev->tx_queue_len = XENVIF_QUEUE_LENGTH;
474
475         /*
476          * Initialise a dummy MAC address. We choose the numerically
477          * largest non-broadcast address to prevent the address getting
478          * stolen by an Ethernet bridge for STP purposes.
479          * (FE:FF:FF:FF:FF:FF)
480          */
481         memset(dev->dev_addr, 0xFF, ETH_ALEN);
482         dev->dev_addr[0] &= ~0x01;
483
484         netif_carrier_off(dev);
485
486         err = register_netdev(dev);
487         if (err) {
488                 netdev_warn(dev, "Could not register device: err=%d\n", err);
489                 free_netdev(dev);
490                 return ERR_PTR(err);
491         }
492
493         netdev_dbg(dev, "Successfully created xenvif\n");
494
495         __module_get(THIS_MODULE);
496
497         return vif;
498 }
499
500 int xenvif_init_queue(struct xenvif_queue *queue)
501 {
502         int err, i;
503
504         queue->credit_bytes = queue->remaining_credit = ~0UL;
505         queue->credit_usec  = 0UL;
506         init_timer(&queue->credit_timeout);
507         queue->credit_window_start = get_jiffies_64();
508
509         skb_queue_head_init(&queue->rx_queue);
510         skb_queue_head_init(&queue->tx_queue);
511
512         queue->pending_cons = 0;
513         queue->pending_prod = MAX_PENDING_REQS;
514         for (i = 0; i < MAX_PENDING_REQS; ++i)
515                 queue->pending_ring[i] = i;
516
517         spin_lock_init(&queue->callback_lock);
518         spin_lock_init(&queue->response_lock);
519
520         /* If ballooning is disabled, this will consume real memory, so you
521          * better enable it. The long term solution would be to use just a
522          * bunch of valid page descriptors, without dependency on ballooning
523          */
524         err = alloc_xenballooned_pages(MAX_PENDING_REQS,
525                                        queue->mmap_pages,
526                                        false);
527         if (err) {
528                 netdev_err(queue->vif->dev, "Could not reserve mmap_pages\n");
529                 return -ENOMEM;
530         }
531
532         for (i = 0; i < MAX_PENDING_REQS; i++) {
533                 queue->pending_tx_info[i].callback_struct = (struct ubuf_info)
534                         { .callback = xenvif_zerocopy_callback,
535                           .ctx = NULL,
536                           .desc = i };
537                 queue->grant_tx_handle[i] = NETBACK_INVALID_HANDLE;
538         }
539
540         init_timer(&queue->wake_queue);
541
542         netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll,
543                         XENVIF_NAPI_WEIGHT);
544
545         return 0;
546 }
547
548 void xenvif_carrier_on(struct xenvif *vif)
549 {
550         rtnl_lock();
551         if (!vif->can_sg && vif->dev->mtu > ETH_DATA_LEN)
552                 dev_set_mtu(vif->dev, ETH_DATA_LEN);
553         netdev_update_features(vif->dev);
554         netif_carrier_on(vif->dev);
555         if (netif_running(vif->dev))
556                 xenvif_up(vif);
557         rtnl_unlock();
558 }
559
560 int xenvif_connect(struct xenvif_queue *queue, unsigned long tx_ring_ref,
561                    unsigned long rx_ring_ref, unsigned int tx_evtchn,
562                    unsigned int rx_evtchn)
563 {
564         struct task_struct *task;
565         int err = -ENOMEM;
566
567         BUG_ON(queue->tx_irq);
568         BUG_ON(queue->task);
569         BUG_ON(queue->dealloc_task);
570
571         err = xenvif_map_frontend_rings(queue, tx_ring_ref, rx_ring_ref);
572         if (err < 0)
573                 goto err;
574
575         init_waitqueue_head(&queue->wq);
576         init_waitqueue_head(&queue->dealloc_wq);
577
578         if (tx_evtchn == rx_evtchn) {
579                 /* feature-split-event-channels == 0 */
580                 err = bind_interdomain_evtchn_to_irqhandler(
581                         queue->vif->domid, tx_evtchn, xenvif_interrupt, 0,
582                         queue->name, queue);
583                 if (err < 0)
584                         goto err_unmap;
585                 queue->tx_irq = queue->rx_irq = err;
586                 disable_irq(queue->tx_irq);
587         } else {
588                 /* feature-split-event-channels == 1 */
589                 snprintf(queue->tx_irq_name, sizeof(queue->tx_irq_name),
590                          "%s-tx", queue->name);
591                 err = bind_interdomain_evtchn_to_irqhandler(
592                         queue->vif->domid, tx_evtchn, xenvif_tx_interrupt, 0,
593                         queue->tx_irq_name, queue);
594                 if (err < 0)
595                         goto err_unmap;
596                 queue->tx_irq = err;
597                 disable_irq(queue->tx_irq);
598
599                 snprintf(queue->rx_irq_name, sizeof(queue->rx_irq_name),
600                          "%s-rx", queue->name);
601                 err = bind_interdomain_evtchn_to_irqhandler(
602                         queue->vif->domid, rx_evtchn, xenvif_rx_interrupt, 0,
603                         queue->rx_irq_name, queue);
604                 if (err < 0)
605                         goto err_tx_unbind;
606                 queue->rx_irq = err;
607                 disable_irq(queue->rx_irq);
608         }
609
610         task = kthread_create(xenvif_kthread_guest_rx,
611                               (void *)queue, "%s-guest-rx", queue->name);
612         if (IS_ERR(task)) {
613                 pr_warn("Could not allocate kthread for %s\n", queue->name);
614                 err = PTR_ERR(task);
615                 goto err_rx_unbind;
616         }
617         queue->task = task;
618
619         task = kthread_create(xenvif_dealloc_kthread,
620                               (void *)queue, "%s-dealloc", queue->name);
621         if (IS_ERR(task)) {
622                 pr_warn("Could not allocate kthread for %s\n", queue->name);
623                 err = PTR_ERR(task);
624                 goto err_rx_unbind;
625         }
626         queue->dealloc_task = task;
627
628         wake_up_process(queue->task);
629         wake_up_process(queue->dealloc_task);
630
631         return 0;
632
633 err_rx_unbind:
634         unbind_from_irqhandler(queue->rx_irq, queue);
635         queue->rx_irq = 0;
636 err_tx_unbind:
637         unbind_from_irqhandler(queue->tx_irq, queue);
638         queue->tx_irq = 0;
639 err_unmap:
640         xenvif_unmap_frontend_rings(queue);
641 err:
642         module_put(THIS_MODULE);
643         return err;
644 }
645
646 void xenvif_carrier_off(struct xenvif *vif)
647 {
648         struct net_device *dev = vif->dev;
649
650         rtnl_lock();
651         netif_carrier_off(dev); /* discard queued packets */
652         if (netif_running(dev))
653                 xenvif_down(vif);
654         rtnl_unlock();
655 }
656
657 static void xenvif_wait_unmap_timeout(struct xenvif_queue *queue,
658                                       unsigned int worst_case_skb_lifetime)
659 {
660         int i, unmap_timeout = 0;
661
662         for (i = 0; i < MAX_PENDING_REQS; ++i) {
663                 if (queue->grant_tx_handle[i] != NETBACK_INVALID_HANDLE) {
664                         unmap_timeout++;
665                         schedule_timeout(msecs_to_jiffies(1000));
666                         if (unmap_timeout > worst_case_skb_lifetime &&
667                             net_ratelimit())
668                                 netdev_err(queue->vif->dev,
669                                            "Page still granted! Index: %x\n",
670                                            i);
671                         i = -1;
672                 }
673         }
674 }
675
676 void xenvif_disconnect(struct xenvif *vif)
677 {
678         struct xenvif_queue *queue = NULL;
679         unsigned int num_queues = vif->dev->real_num_tx_queues;
680         unsigned int queue_index;
681
682         if (netif_carrier_ok(vif->dev))
683                 xenvif_carrier_off(vif);
684
685         for (queue_index = 0; queue_index < num_queues; ++queue_index) {
686                 queue = &vif->queues[queue_index];
687
688                 if (queue->task) {
689                         del_timer_sync(&queue->wake_queue);
690                         kthread_stop(queue->task);
691                         queue->task = NULL;
692                 }
693
694                 if (queue->dealloc_task) {
695                         kthread_stop(queue->dealloc_task);
696                         queue->dealloc_task = NULL;
697                 }
698
699                 if (queue->tx_irq) {
700                         if (queue->tx_irq == queue->rx_irq)
701                                 unbind_from_irqhandler(queue->tx_irq, queue);
702                         else {
703                                 unbind_from_irqhandler(queue->tx_irq, queue);
704                                 unbind_from_irqhandler(queue->rx_irq, queue);
705                         }
706                         queue->tx_irq = 0;
707                 }
708
709                 xenvif_unmap_frontend_rings(queue);
710         }
711 }
712
713 /* Reverse the relevant parts of xenvif_init_queue().
714  * Used for queue teardown from xenvif_free(), and on the
715  * error handling paths in xenbus.c:connect().
716  */
717 void xenvif_deinit_queue(struct xenvif_queue *queue)
718 {
719         free_xenballooned_pages(MAX_PENDING_REQS, queue->mmap_pages);
720         netif_napi_del(&queue->napi);
721 }
722
723 void xenvif_free(struct xenvif *vif)
724 {
725         struct xenvif_queue *queue = NULL;
726         unsigned int num_queues = vif->dev->real_num_tx_queues;
727         unsigned int queue_index;
728         /* Here we want to avoid timeout messages if an skb can be legitimately
729          * stuck somewhere else. Realistically this could be an another vif's
730          * internal or QDisc queue. That another vif also has this
731          * rx_drain_timeout_msecs timeout, but the timer only ditches the
732          * internal queue. After that, the QDisc queue can put in worst case
733          * XEN_NETIF_RX_RING_SIZE / MAX_SKB_FRAGS skbs into that another vif's
734          * internal queue, so we need several rounds of such timeouts until we
735          * can be sure that no another vif should have skb's from us. We are
736          * not sending more skb's, so newly stuck packets are not interesting
737          * for us here.
738          */
739         unsigned int worst_case_skb_lifetime = (rx_drain_timeout_msecs/1000) *
740                 DIV_ROUND_UP(XENVIF_QUEUE_LENGTH, (XEN_NETIF_RX_RING_SIZE / MAX_SKB_FRAGS));
741
742         unregister_netdev(vif->dev);
743
744         for (queue_index = 0; queue_index < num_queues; ++queue_index) {
745                 queue = &vif->queues[queue_index];
746                 xenvif_wait_unmap_timeout(queue, worst_case_skb_lifetime);
747                 xenvif_deinit_queue(queue);
748         }
749
750         /* Free the array of queues. The call below does not require
751          * rtnl_lock() because it happens after unregister_netdev().
752          */
753         netif_set_real_num_tx_queues(vif->dev, 0);
754         vfree(vif->queues);
755         vif->queues = NULL;
756
757         free_netdev(vif->dev);
758
759         module_put(THIS_MODULE);
760 }