xref: /linux/drivers/net/xen-netback/interface.c (revision 8ed1faf0156e569c46f1b3d59e74c9cbd5e557ff)
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/sched/task.h>
35  #include <linux/ethtool.h>
36  #include <linux/rtnetlink.h>
37  #include <linux/if_vlan.h>
38  #include <linux/vmalloc.h>
39  
40  #include <xen/events.h>
41  #include <asm/xen/hypercall.h>
42  #include <xen/balloon.h>
43  
44  #define XENVIF_QUEUE_LENGTH 32
45  #define XENVIF_NAPI_WEIGHT  64
46  
47  /* Number of bytes allowed on the internal guest Rx queue. */
48  #define XENVIF_RX_QUEUE_BYTES (XEN_NETIF_RX_RING_SIZE/2 * PAGE_SIZE)
49  
50  /* This function is used to set SKBTX_DEV_ZEROCOPY as well as
51   * increasing the inflight counter. We need to increase the inflight
52   * counter because core driver calls into xenvif_zerocopy_callback
53   * which calls xenvif_skb_zerocopy_complete.
54   */
55  void xenvif_skb_zerocopy_prepare(struct xenvif_queue *queue,
56  				 struct sk_buff *skb)
57  {
58  	skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY;
59  	atomic_inc(&queue->inflight_packets);
60  }
61  
62  void xenvif_skb_zerocopy_complete(struct xenvif_queue *queue)
63  {
64  	atomic_dec(&queue->inflight_packets);
65  
66  	/* Wake the dealloc thread _after_ decrementing inflight_packets so
67  	 * that if kthread_stop() has already been called, the dealloc thread
68  	 * does not wait forever with nothing to wake it.
69  	 */
70  	wake_up(&queue->dealloc_wq);
71  }
72  
73  int xenvif_schedulable(struct xenvif *vif)
74  {
75  	return netif_running(vif->dev) &&
76  		test_bit(VIF_STATUS_CONNECTED, &vif->status) &&
77  		!vif->disabled;
78  }
79  
80  static irqreturn_t xenvif_tx_interrupt(int irq, void *dev_id)
81  {
82  	struct xenvif_queue *queue = dev_id;
83  
84  	if (RING_HAS_UNCONSUMED_REQUESTS(&queue->tx))
85  		napi_schedule(&queue->napi);
86  
87  	return IRQ_HANDLED;
88  }
89  
90  static int xenvif_poll(struct napi_struct *napi, int budget)
91  {
92  	struct xenvif_queue *queue =
93  		container_of(napi, struct xenvif_queue, napi);
94  	int work_done;
95  
96  	/* This vif is rogue, we pretend we've there is nothing to do
97  	 * for this vif to deschedule it from NAPI. But this interface
98  	 * will be turned off in thread context later.
99  	 */
100  	if (unlikely(queue->vif->disabled)) {
101  		napi_complete(napi);
102  		return 0;
103  	}
104  
105  	work_done = xenvif_tx_action(queue, budget);
106  
107  	if (work_done < budget) {
108  		napi_complete_done(napi, work_done);
109  		/* If the queue is rate-limited, it shall be
110  		 * rescheduled in the timer callback.
111  		 */
112  		if (likely(!queue->rate_limited))
113  			xenvif_napi_schedule_or_enable_events(queue);
114  	}
115  
116  	return work_done;
117  }
118  
119  static irqreturn_t xenvif_rx_interrupt(int irq, void *dev_id)
120  {
121  	struct xenvif_queue *queue = dev_id;
122  
123  	xenvif_kick_thread(queue);
124  
125  	return IRQ_HANDLED;
126  }
127  
128  irqreturn_t xenvif_interrupt(int irq, void *dev_id)
129  {
130  	xenvif_tx_interrupt(irq, dev_id);
131  	xenvif_rx_interrupt(irq, dev_id);
132  
133  	return IRQ_HANDLED;
134  }
135  
136  int xenvif_queue_stopped(struct xenvif_queue *queue)
137  {
138  	struct net_device *dev = queue->vif->dev;
139  	unsigned int id = queue->id;
140  	return netif_tx_queue_stopped(netdev_get_tx_queue(dev, id));
141  }
142  
143  void xenvif_wake_queue(struct xenvif_queue *queue)
144  {
145  	struct net_device *dev = queue->vif->dev;
146  	unsigned int id = queue->id;
147  	netif_tx_wake_queue(netdev_get_tx_queue(dev, id));
148  }
149  
150  static u16 xenvif_select_queue(struct net_device *dev, struct sk_buff *skb,
151  			       struct net_device *sb_dev)
152  {
153  	struct xenvif *vif = netdev_priv(dev);
154  	unsigned int size = vif->hash.size;
155  	unsigned int num_queues;
156  
157  	/* If queues are not set up internally - always return 0
158  	 * as the packet going to be dropped anyway */
159  	num_queues = READ_ONCE(vif->num_queues);
160  	if (num_queues < 1)
161  		return 0;
162  
163  	if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE)
164  		return netdev_pick_tx(dev, skb, NULL) %
165  		       dev->real_num_tx_queues;
166  
167  	xenvif_set_skb_hash(vif, skb);
168  
169  	if (size == 0)
170  		return skb_get_hash_raw(skb) % dev->real_num_tx_queues;
171  
172  	return vif->hash.mapping[vif->hash.mapping_sel]
173  				[skb_get_hash_raw(skb) % size];
174  }
175  
176  static netdev_tx_t
177  xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev)
178  {
179  	struct xenvif *vif = netdev_priv(dev);
180  	struct xenvif_queue *queue = NULL;
181  	unsigned int num_queues;
182  	u16 index;
183  	struct xenvif_rx_cb *cb;
184  
185  	BUG_ON(skb->dev != dev);
186  
187  	/* Drop the packet if queues are not set up.
188  	 * This handler should be called inside an RCU read section
189  	 * so we don't need to enter it here explicitly.
190  	 */
191  	num_queues = READ_ONCE(vif->num_queues);
192  	if (num_queues < 1)
193  		goto drop;
194  
195  	/* Obtain the queue to be used to transmit this packet */
196  	index = skb_get_queue_mapping(skb);
197  	if (index >= num_queues) {
198  		pr_warn_ratelimited("Invalid queue %hu for packet on interface %s\n",
199  				    index, vif->dev->name);
200  		index %= num_queues;
201  	}
202  	queue = &vif->queues[index];
203  
204  	/* Drop the packet if queue is not ready */
205  	if (queue->task == NULL ||
206  	    queue->dealloc_task == NULL ||
207  	    !xenvif_schedulable(vif))
208  		goto drop;
209  
210  	if (vif->multicast_control && skb->pkt_type == PACKET_MULTICAST) {
211  		struct ethhdr *eth = (struct ethhdr *)skb->data;
212  
213  		if (!xenvif_mcast_match(vif, eth->h_dest))
214  			goto drop;
215  	}
216  
217  	cb = XENVIF_RX_CB(skb);
218  	cb->expires = jiffies + vif->drain_timeout;
219  
220  	/* If there is no hash algorithm configured then make sure there
221  	 * is no hash information in the socket buffer otherwise it
222  	 * would be incorrectly forwarded to the frontend.
223  	 */
224  	if (vif->hash.alg == XEN_NETIF_CTRL_HASH_ALGORITHM_NONE)
225  		skb_clear_hash(skb);
226  
227  	xenvif_rx_queue_tail(queue, skb);
228  	xenvif_kick_thread(queue);
229  
230  	return NETDEV_TX_OK;
231  
232   drop:
233  	vif->dev->stats.tx_dropped++;
234  	dev_kfree_skb(skb);
235  	return NETDEV_TX_OK;
236  }
237  
238  static struct net_device_stats *xenvif_get_stats(struct net_device *dev)
239  {
240  	struct xenvif *vif = netdev_priv(dev);
241  	struct xenvif_queue *queue = NULL;
242  	unsigned int num_queues;
243  	u64 rx_bytes = 0;
244  	u64 rx_packets = 0;
245  	u64 tx_bytes = 0;
246  	u64 tx_packets = 0;
247  	unsigned int index;
248  
249  	rcu_read_lock();
250  	num_queues = READ_ONCE(vif->num_queues);
251  
252  	/* Aggregate tx and rx stats from each queue */
253  	for (index = 0; index < num_queues; ++index) {
254  		queue = &vif->queues[index];
255  		rx_bytes += queue->stats.rx_bytes;
256  		rx_packets += queue->stats.rx_packets;
257  		tx_bytes += queue->stats.tx_bytes;
258  		tx_packets += queue->stats.tx_packets;
259  	}
260  
261  	rcu_read_unlock();
262  
263  	vif->dev->stats.rx_bytes = rx_bytes;
264  	vif->dev->stats.rx_packets = rx_packets;
265  	vif->dev->stats.tx_bytes = tx_bytes;
266  	vif->dev->stats.tx_packets = tx_packets;
267  
268  	return &vif->dev->stats;
269  }
270  
271  static void xenvif_up(struct xenvif *vif)
272  {
273  	struct xenvif_queue *queue = NULL;
274  	unsigned int num_queues = vif->num_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_enable(&queue->napi);
280  		enable_irq(queue->tx_irq);
281  		if (queue->tx_irq != queue->rx_irq)
282  			enable_irq(queue->rx_irq);
283  		xenvif_napi_schedule_or_enable_events(queue);
284  	}
285  }
286  
287  static void xenvif_down(struct xenvif *vif)
288  {
289  	struct xenvif_queue *queue = NULL;
290  	unsigned int num_queues = vif->num_queues;
291  	unsigned int queue_index;
292  
293  	for (queue_index = 0; queue_index < num_queues; ++queue_index) {
294  		queue = &vif->queues[queue_index];
295  		disable_irq(queue->tx_irq);
296  		if (queue->tx_irq != queue->rx_irq)
297  			disable_irq(queue->rx_irq);
298  		napi_disable(&queue->napi);
299  		del_timer_sync(&queue->credit_timeout);
300  	}
301  }
302  
303  static int xenvif_open(struct net_device *dev)
304  {
305  	struct xenvif *vif = netdev_priv(dev);
306  	if (test_bit(VIF_STATUS_CONNECTED, &vif->status))
307  		xenvif_up(vif);
308  	netif_tx_start_all_queues(dev);
309  	return 0;
310  }
311  
312  static int xenvif_close(struct net_device *dev)
313  {
314  	struct xenvif *vif = netdev_priv(dev);
315  	if (test_bit(VIF_STATUS_CONNECTED, &vif->status))
316  		xenvif_down(vif);
317  	netif_tx_stop_all_queues(dev);
318  	return 0;
319  }
320  
321  static int xenvif_change_mtu(struct net_device *dev, int mtu)
322  {
323  	struct xenvif *vif = netdev_priv(dev);
324  	int max = vif->can_sg ? ETH_MAX_MTU - VLAN_ETH_HLEN : ETH_DATA_LEN;
325  
326  	if (mtu > max)
327  		return -EINVAL;
328  	dev->mtu = mtu;
329  	return 0;
330  }
331  
332  static netdev_features_t xenvif_fix_features(struct net_device *dev,
333  	netdev_features_t features)
334  {
335  	struct xenvif *vif = netdev_priv(dev);
336  
337  	if (!vif->can_sg)
338  		features &= ~NETIF_F_SG;
339  	if (~(vif->gso_mask) & GSO_BIT(TCPV4))
340  		features &= ~NETIF_F_TSO;
341  	if (~(vif->gso_mask) & GSO_BIT(TCPV6))
342  		features &= ~NETIF_F_TSO6;
343  	if (!vif->ip_csum)
344  		features &= ~NETIF_F_IP_CSUM;
345  	if (!vif->ipv6_csum)
346  		features &= ~NETIF_F_IPV6_CSUM;
347  
348  	return features;
349  }
350  
351  static const struct xenvif_stat {
352  	char name[ETH_GSTRING_LEN];
353  	u16 offset;
354  } xenvif_stats[] = {
355  	{
356  		"rx_gso_checksum_fixup",
357  		offsetof(struct xenvif_stats, rx_gso_checksum_fixup)
358  	},
359  	/* If (sent != success + fail), there are probably packets never
360  	 * freed up properly!
361  	 */
362  	{
363  		"tx_zerocopy_sent",
364  		offsetof(struct xenvif_stats, tx_zerocopy_sent),
365  	},
366  	{
367  		"tx_zerocopy_success",
368  		offsetof(struct xenvif_stats, tx_zerocopy_success),
369  	},
370  	{
371  		"tx_zerocopy_fail",
372  		offsetof(struct xenvif_stats, tx_zerocopy_fail)
373  	},
374  	/* Number of packets exceeding MAX_SKB_FRAG slots. You should use
375  	 * a guest with the same MAX_SKB_FRAG
376  	 */
377  	{
378  		"tx_frag_overflow",
379  		offsetof(struct xenvif_stats, tx_frag_overflow)
380  	},
381  };
382  
383  static int xenvif_get_sset_count(struct net_device *dev, int string_set)
384  {
385  	switch (string_set) {
386  	case ETH_SS_STATS:
387  		return ARRAY_SIZE(xenvif_stats);
388  	default:
389  		return -EINVAL;
390  	}
391  }
392  
393  static void xenvif_get_ethtool_stats(struct net_device *dev,
394  				     struct ethtool_stats *stats, u64 * data)
395  {
396  	struct xenvif *vif = netdev_priv(dev);
397  	unsigned int num_queues;
398  	int i;
399  	unsigned int queue_index;
400  
401  	rcu_read_lock();
402  	num_queues = READ_ONCE(vif->num_queues);
403  
404  	for (i = 0; i < ARRAY_SIZE(xenvif_stats); i++) {
405  		unsigned long accum = 0;
406  		for (queue_index = 0; queue_index < num_queues; ++queue_index) {
407  			void *vif_stats = &vif->queues[queue_index].stats;
408  			accum += *(unsigned long *)(vif_stats + xenvif_stats[i].offset);
409  		}
410  		data[i] = accum;
411  	}
412  
413  	rcu_read_unlock();
414  }
415  
416  static void xenvif_get_strings(struct net_device *dev, u32 stringset, u8 * data)
417  {
418  	int i;
419  
420  	switch (stringset) {
421  	case ETH_SS_STATS:
422  		for (i = 0; i < ARRAY_SIZE(xenvif_stats); i++)
423  			memcpy(data + i * ETH_GSTRING_LEN,
424  			       xenvif_stats[i].name, ETH_GSTRING_LEN);
425  		break;
426  	}
427  }
428  
429  static const struct ethtool_ops xenvif_ethtool_ops = {
430  	.get_link	= ethtool_op_get_link,
431  
432  	.get_sset_count = xenvif_get_sset_count,
433  	.get_ethtool_stats = xenvif_get_ethtool_stats,
434  	.get_strings = xenvif_get_strings,
435  };
436  
437  static const struct net_device_ops xenvif_netdev_ops = {
438  	.ndo_select_queue = xenvif_select_queue,
439  	.ndo_start_xmit	= xenvif_start_xmit,
440  	.ndo_get_stats	= xenvif_get_stats,
441  	.ndo_open	= xenvif_open,
442  	.ndo_stop	= xenvif_close,
443  	.ndo_change_mtu	= xenvif_change_mtu,
444  	.ndo_fix_features = xenvif_fix_features,
445  	.ndo_set_mac_address = eth_mac_addr,
446  	.ndo_validate_addr   = eth_validate_addr,
447  };
448  
449  struct xenvif *xenvif_alloc(struct device *parent, domid_t domid,
450  			    unsigned int handle)
451  {
452  	int err;
453  	struct net_device *dev;
454  	struct xenvif *vif;
455  	char name[IFNAMSIZ] = {};
456  
457  	snprintf(name, IFNAMSIZ - 1, "vif%u.%u", domid, handle);
458  	/* Allocate a netdev with the max. supported number of queues.
459  	 * When the guest selects the desired number, it will be updated
460  	 * via netif_set_real_num_*_queues().
461  	 */
462  	dev = alloc_netdev_mq(sizeof(struct xenvif), name, NET_NAME_UNKNOWN,
463  			      ether_setup, xenvif_max_queues);
464  	if (dev == NULL) {
465  		pr_warn("Could not allocate netdev for %s\n", name);
466  		return ERR_PTR(-ENOMEM);
467  	}
468  
469  	SET_NETDEV_DEV(dev, parent);
470  
471  	vif = netdev_priv(dev);
472  
473  	vif->domid  = domid;
474  	vif->handle = handle;
475  	vif->can_sg = 1;
476  	vif->ip_csum = 1;
477  	vif->dev = dev;
478  	vif->disabled = false;
479  	vif->drain_timeout = msecs_to_jiffies(rx_drain_timeout_msecs);
480  	vif->stall_timeout = msecs_to_jiffies(rx_stall_timeout_msecs);
481  
482  	/* Start out with no queues. */
483  	vif->queues = NULL;
484  	vif->num_queues = 0;
485  
486  	spin_lock_init(&vif->lock);
487  	INIT_LIST_HEAD(&vif->fe_mcast_addr);
488  
489  	dev->netdev_ops	= &xenvif_netdev_ops;
490  	dev->hw_features = NETIF_F_SG |
491  		NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
492  		NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_FRAGLIST;
493  	dev->features = dev->hw_features | NETIF_F_RXCSUM;
494  	dev->ethtool_ops = &xenvif_ethtool_ops;
495  
496  	dev->tx_queue_len = XENVIF_QUEUE_LENGTH;
497  
498  	dev->min_mtu = ETH_MIN_MTU;
499  	dev->max_mtu = ETH_MAX_MTU - VLAN_ETH_HLEN;
500  
501  	/*
502  	 * Initialise a dummy MAC address. We choose the numerically
503  	 * largest non-broadcast address to prevent the address getting
504  	 * stolen by an Ethernet bridge for STP purposes.
505  	 * (FE:FF:FF:FF:FF:FF)
506  	 */
507  	eth_broadcast_addr(dev->dev_addr);
508  	dev->dev_addr[0] &= ~0x01;
509  
510  	netif_carrier_off(dev);
511  
512  	err = register_netdev(dev);
513  	if (err) {
514  		netdev_warn(dev, "Could not register device: err=%d\n", err);
515  		free_netdev(dev);
516  		return ERR_PTR(err);
517  	}
518  
519  	netdev_dbg(dev, "Successfully created xenvif\n");
520  
521  	__module_get(THIS_MODULE);
522  
523  	return vif;
524  }
525  
526  int xenvif_init_queue(struct xenvif_queue *queue)
527  {
528  	int err, i;
529  
530  	queue->credit_bytes = queue->remaining_credit = ~0UL;
531  	queue->credit_usec  = 0UL;
532  	timer_setup(&queue->credit_timeout, xenvif_tx_credit_callback, 0);
533  	queue->credit_window_start = get_jiffies_64();
534  
535  	queue->rx_queue_max = XENVIF_RX_QUEUE_BYTES;
536  
537  	skb_queue_head_init(&queue->rx_queue);
538  	skb_queue_head_init(&queue->tx_queue);
539  
540  	queue->pending_cons = 0;
541  	queue->pending_prod = MAX_PENDING_REQS;
542  	for (i = 0; i < MAX_PENDING_REQS; ++i)
543  		queue->pending_ring[i] = i;
544  
545  	spin_lock_init(&queue->callback_lock);
546  	spin_lock_init(&queue->response_lock);
547  
548  	/* If ballooning is disabled, this will consume real memory, so you
549  	 * better enable it. The long term solution would be to use just a
550  	 * bunch of valid page descriptors, without dependency on ballooning
551  	 */
552  	err = gnttab_alloc_pages(MAX_PENDING_REQS,
553  				 queue->mmap_pages);
554  	if (err) {
555  		netdev_err(queue->vif->dev, "Could not reserve mmap_pages\n");
556  		return -ENOMEM;
557  	}
558  
559  	for (i = 0; i < MAX_PENDING_REQS; i++) {
560  		queue->pending_tx_info[i].callback_struct = (struct ubuf_info)
561  			{ .callback = xenvif_zerocopy_callback,
562  			  { { .ctx = NULL,
563  			      .desc = i } } };
564  		queue->grant_tx_handle[i] = NETBACK_INVALID_HANDLE;
565  	}
566  
567  	return 0;
568  }
569  
570  void xenvif_carrier_on(struct xenvif *vif)
571  {
572  	rtnl_lock();
573  	if (!vif->can_sg && vif->dev->mtu > ETH_DATA_LEN)
574  		dev_set_mtu(vif->dev, ETH_DATA_LEN);
575  	netdev_update_features(vif->dev);
576  	set_bit(VIF_STATUS_CONNECTED, &vif->status);
577  	if (netif_running(vif->dev))
578  		xenvif_up(vif);
579  	rtnl_unlock();
580  }
581  
582  int xenvif_connect_ctrl(struct xenvif *vif, grant_ref_t ring_ref,
583  			unsigned int evtchn)
584  {
585  	struct net_device *dev = vif->dev;
586  	void *addr;
587  	struct xen_netif_ctrl_sring *shared;
588  	RING_IDX rsp_prod, req_prod;
589  	int err;
590  
591  	err = xenbus_map_ring_valloc(xenvif_to_xenbus_device(vif),
592  				     &ring_ref, 1, &addr);
593  	if (err)
594  		goto err;
595  
596  	shared = (struct xen_netif_ctrl_sring *)addr;
597  	rsp_prod = READ_ONCE(shared->rsp_prod);
598  	req_prod = READ_ONCE(shared->req_prod);
599  
600  	BACK_RING_ATTACH(&vif->ctrl, shared, rsp_prod, XEN_PAGE_SIZE);
601  
602  	err = -EIO;
603  	if (req_prod - rsp_prod > RING_SIZE(&vif->ctrl))
604  		goto err_unmap;
605  
606  	err = bind_interdomain_evtchn_to_irq(vif->domid, evtchn);
607  	if (err < 0)
608  		goto err_unmap;
609  
610  	vif->ctrl_irq = err;
611  
612  	xenvif_init_hash(vif);
613  
614  	err = request_threaded_irq(vif->ctrl_irq, NULL, xenvif_ctrl_irq_fn,
615  				   IRQF_ONESHOT, "xen-netback-ctrl", vif);
616  	if (err) {
617  		pr_warn("Could not setup irq handler for %s\n", dev->name);
618  		goto err_deinit;
619  	}
620  
621  	return 0;
622  
623  err_deinit:
624  	xenvif_deinit_hash(vif);
625  	unbind_from_irqhandler(vif->ctrl_irq, vif);
626  	vif->ctrl_irq = 0;
627  
628  err_unmap:
629  	xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif),
630  				vif->ctrl.sring);
631  	vif->ctrl.sring = NULL;
632  
633  err:
634  	return err;
635  }
636  
637  static void xenvif_disconnect_queue(struct xenvif_queue *queue)
638  {
639  	if (queue->task) {
640  		kthread_stop(queue->task);
641  		queue->task = NULL;
642  	}
643  
644  	if (queue->dealloc_task) {
645  		kthread_stop(queue->dealloc_task);
646  		queue->dealloc_task = NULL;
647  	}
648  
649  	if (queue->napi.poll) {
650  		netif_napi_del(&queue->napi);
651  		queue->napi.poll = NULL;
652  	}
653  
654  	if (queue->tx_irq) {
655  		unbind_from_irqhandler(queue->tx_irq, queue);
656  		if (queue->tx_irq == queue->rx_irq)
657  			queue->rx_irq = 0;
658  		queue->tx_irq = 0;
659  	}
660  
661  	if (queue->rx_irq) {
662  		unbind_from_irqhandler(queue->rx_irq, queue);
663  		queue->rx_irq = 0;
664  	}
665  
666  	xenvif_unmap_frontend_data_rings(queue);
667  }
668  
669  int xenvif_connect_data(struct xenvif_queue *queue,
670  			unsigned long tx_ring_ref,
671  			unsigned long rx_ring_ref,
672  			unsigned int tx_evtchn,
673  			unsigned int rx_evtchn)
674  {
675  	struct task_struct *task;
676  	int err;
677  
678  	BUG_ON(queue->tx_irq);
679  	BUG_ON(queue->task);
680  	BUG_ON(queue->dealloc_task);
681  
682  	err = xenvif_map_frontend_data_rings(queue, tx_ring_ref,
683  					     rx_ring_ref);
684  	if (err < 0)
685  		goto err;
686  
687  	init_waitqueue_head(&queue->wq);
688  	init_waitqueue_head(&queue->dealloc_wq);
689  	atomic_set(&queue->inflight_packets, 0);
690  
691  	netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll,
692  			XENVIF_NAPI_WEIGHT);
693  
694  	queue->stalled = true;
695  
696  	task = kthread_run(xenvif_kthread_guest_rx, queue,
697  			   "%s-guest-rx", queue->name);
698  	if (IS_ERR(task))
699  		goto kthread_err;
700  	queue->task = task;
701  
702  	task = kthread_run(xenvif_dealloc_kthread, queue,
703  			   "%s-dealloc", queue->name);
704  	if (IS_ERR(task))
705  		goto kthread_err;
706  	queue->dealloc_task = task;
707  
708  	if (tx_evtchn == rx_evtchn) {
709  		/* feature-split-event-channels == 0 */
710  		err = bind_interdomain_evtchn_to_irqhandler(
711  			queue->vif->domid, tx_evtchn, xenvif_interrupt, 0,
712  			queue->name, queue);
713  		if (err < 0)
714  			goto err;
715  		queue->tx_irq = queue->rx_irq = err;
716  		disable_irq(queue->tx_irq);
717  	} else {
718  		/* feature-split-event-channels == 1 */
719  		snprintf(queue->tx_irq_name, sizeof(queue->tx_irq_name),
720  			 "%s-tx", queue->name);
721  		err = bind_interdomain_evtchn_to_irqhandler(
722  			queue->vif->domid, tx_evtchn, xenvif_tx_interrupt, 0,
723  			queue->tx_irq_name, queue);
724  		if (err < 0)
725  			goto err;
726  		queue->tx_irq = err;
727  		disable_irq(queue->tx_irq);
728  
729  		snprintf(queue->rx_irq_name, sizeof(queue->rx_irq_name),
730  			 "%s-rx", queue->name);
731  		err = bind_interdomain_evtchn_to_irqhandler(
732  			queue->vif->domid, rx_evtchn, xenvif_rx_interrupt, 0,
733  			queue->rx_irq_name, queue);
734  		if (err < 0)
735  			goto err;
736  		queue->rx_irq = err;
737  		disable_irq(queue->rx_irq);
738  	}
739  
740  	return 0;
741  
742  kthread_err:
743  	pr_warn("Could not allocate kthread for %s\n", queue->name);
744  	err = PTR_ERR(task);
745  err:
746  	xenvif_disconnect_queue(queue);
747  	return err;
748  }
749  
750  void xenvif_carrier_off(struct xenvif *vif)
751  {
752  	struct net_device *dev = vif->dev;
753  
754  	rtnl_lock();
755  	if (test_and_clear_bit(VIF_STATUS_CONNECTED, &vif->status)) {
756  		netif_carrier_off(dev); /* discard queued packets */
757  		if (netif_running(dev))
758  			xenvif_down(vif);
759  	}
760  	rtnl_unlock();
761  }
762  
763  void xenvif_disconnect_data(struct xenvif *vif)
764  {
765  	struct xenvif_queue *queue = NULL;
766  	unsigned int num_queues = vif->num_queues;
767  	unsigned int queue_index;
768  
769  	xenvif_carrier_off(vif);
770  
771  	for (queue_index = 0; queue_index < num_queues; ++queue_index) {
772  		queue = &vif->queues[queue_index];
773  
774  		xenvif_disconnect_queue(queue);
775  	}
776  
777  	xenvif_mcast_addr_list_free(vif);
778  }
779  
780  void xenvif_disconnect_ctrl(struct xenvif *vif)
781  {
782  	if (vif->ctrl_irq) {
783  		xenvif_deinit_hash(vif);
784  		unbind_from_irqhandler(vif->ctrl_irq, vif);
785  		vif->ctrl_irq = 0;
786  	}
787  
788  	if (vif->ctrl.sring) {
789  		xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif),
790  					vif->ctrl.sring);
791  		vif->ctrl.sring = NULL;
792  	}
793  }
794  
795  /* Reverse the relevant parts of xenvif_init_queue().
796   * Used for queue teardown from xenvif_free(), and on the
797   * error handling paths in xenbus.c:connect().
798   */
799  void xenvif_deinit_queue(struct xenvif_queue *queue)
800  {
801  	gnttab_free_pages(MAX_PENDING_REQS, queue->mmap_pages);
802  }
803  
804  void xenvif_free(struct xenvif *vif)
805  {
806  	struct xenvif_queue *queues = vif->queues;
807  	unsigned int num_queues = vif->num_queues;
808  	unsigned int queue_index;
809  
810  	unregister_netdev(vif->dev);
811  	free_netdev(vif->dev);
812  
813  	for (queue_index = 0; queue_index < num_queues; ++queue_index)
814  		xenvif_deinit_queue(&queues[queue_index]);
815  	vfree(queues);
816  
817  	module_put(THIS_MODULE);
818  }
819