netback.c 45.9 KB
Newer Older
I
Ian Campbell 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
/*
 * Back-end of the driver for virtual network devices. This portion of the
 * driver exports a 'unified' network-device interface that can be accessed
 * by any operating system that implements a compatible front end. A
 * reference front-end implementation can be found in:
 *  drivers/net/xen-netfront.c
 *
 * Copyright (c) 2002-2005, K A Fraser
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version 2
 * as published by the Free Software Foundation; or, when distributed
 * separately from the Linux kernel or incorporated into other
 * software packages, subject to the following license:
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this source file (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use, copy, modify,
 * merge, publish, distribute, sublicense, and/or sell copies of the Software,
 * and to permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 */

#include "common.h"

#include <linux/kthread.h>
#include <linux/if_vlan.h>
#include <linux/udp.h>
40
#include <linux/highmem.h>
I
Ian Campbell 已提交
41 42 43

#include <net/tcp.h>

S
Stefano Stabellini 已提交
44
#include <xen/xen.h>
I
Ian Campbell 已提交
45 46
#include <xen/events.h>
#include <xen/interface/memory.h>
47
#include <xen/page.h>
I
Ian Campbell 已提交
48 49 50

#include <asm/xen/hypercall.h>

51 52 53 54
/* Provide an option to disable split event channels at load time as
 * event channels are limited resource. Split event channels are
 * enabled by default.
 */
55
bool separate_tx_rx_irq = true;
56 57
module_param(separate_tx_rx_irq, bool, 0644);

58 59
/* The time that packets can stay on the guest Rx internal queue
 * before they are dropped.
60 61 62 63
 */
unsigned int rx_drain_timeout_msecs = 10000;
module_param(rx_drain_timeout_msecs, uint, 0444);

64 65 66
/* The length of time before the frontend is considered unresponsive
 * because it isn't providing Rx slots.
 */
67
unsigned int rx_stall_timeout_msecs = 60000;
68 69
module_param(rx_stall_timeout_msecs, uint, 0444);

70
#define MAX_QUEUES_DEFAULT 8
71 72 73 74 75
unsigned int xenvif_max_queues;
module_param_named(max_queues, xenvif_max_queues, uint, 0644);
MODULE_PARM_DESC(max_queues,
		 "Maximum number of queues per virtual interface");

76 77 78 79
/*
 * This is the maximum slots a skb can have. If a guest sends a skb
 * which exceeds this limit it is considered malicious.
 */
80 81 82 83
#define FATAL_SKB_SLOTS_DEFAULT 20
static unsigned int fatal_skb_slots = FATAL_SKB_SLOTS_DEFAULT;
module_param(fatal_skb_slots, uint, 0444);

84 85 86 87 88 89 90 91 92
/* The amount to copy out of the first guest Tx slot into the skb's
 * linear area.  If the first slot has more data, it will be mapped
 * and put into the first frag.
 *
 * This is sized to avoid pulling headers from the frags for most
 * TCP/IP packets.
 */
#define XEN_NETBACK_TX_COPY_LEN 128

93 94 95 96 97
/* This is the maximum number of flows in the hash cache. */
#define XENVIF_HASH_CACHE_SIZE_DEFAULT 64
unsigned int xenvif_hash_cache_size = XENVIF_HASH_CACHE_SIZE_DEFAULT;
module_param_named(hash_cache_size, xenvif_hash_cache_size, uint, 0644);
MODULE_PARM_DESC(hash_cache_size, "Number of flows in the hash cache");
98

99 100 101 102 103 104 105
/* The module parameter tells that we have to put data
 * for xen-netfront with the XDP_PACKET_HEADROOM offset
 * needed for XDP processing
 */
bool provides_xdp_headroom = true;
module_param(provides_xdp_headroom, bool, 0644);

106
static void xenvif_idx_release(struct xenvif_queue *queue, u16 pending_idx,
W
Wei Liu 已提交
107 108
			       u8 status);

109
static void make_tx_response(struct xenvif_queue *queue,
I
Ian Campbell 已提交
110
			     struct xen_netif_tx_request *txp,
111
			     unsigned int extra_count,
I
Ian Campbell 已提交
112
			     s8       st);
113
static void push_tx_responses(struct xenvif_queue *queue);
114

115 116
static void xenvif_idx_unmap(struct xenvif_queue *queue, u16 pending_idx);

117
static inline int tx_work_todo(struct xenvif_queue *queue);
118

119
static inline unsigned long idx_to_pfn(struct xenvif_queue *queue,
120
				       u16 idx)
I
Ian Campbell 已提交
121
{
122
	return page_to_pfn(queue->mmap_pages[idx]);
I
Ian Campbell 已提交
123 124
}

125
static inline unsigned long idx_to_kaddr(struct xenvif_queue *queue,
126
					 u16 idx)
I
Ian Campbell 已提交
127
{
128
	return (unsigned long)pfn_to_kaddr(idx_to_pfn(queue, idx));
I
Ian Campbell 已提交
129 130
}

131 132 133
#define callback_param(vif, pending_idx) \
	(vif->pending_tx_info[pending_idx].callback_struct)

134 135
/* Find the containing VIF's structure from a pointer in pending_tx_info array
 */
136
static inline struct xenvif_queue *ubuf_to_queue(const struct ubuf_info_msgzc *ubuf)
137
{
138 139 140 141
	u16 pending_idx = ubuf->desc;
	struct pending_tx_info *temp =
		container_of(ubuf, struct pending_tx_info, callback_struct);
	return container_of(temp - pending_idx,
142
			    struct xenvif_queue,
143
			    pending_tx_info[0]);
144
}
145

146 147
static u16 frag_get_pending_idx(skb_frag_t *frag)
{
J
Jonathan Lemon 已提交
148
	return (u16)skb_frag_off(frag);
149 150 151 152
}

static void frag_set_pending_idx(skb_frag_t *frag, u16 pending_idx)
{
J
Jonathan Lemon 已提交
153
	skb_frag_off_set(frag, pending_idx);
154 155
}

I
Ian Campbell 已提交
156 157 158 159 160
static inline pending_ring_idx_t pending_index(unsigned i)
{
	return i & (MAX_PENDING_REQS-1);
}

161
void xenvif_kick_thread(struct xenvif_queue *queue)
162
{
163
	wake_up(&queue->wq);
164 165
}

166
void xenvif_napi_schedule_or_enable_events(struct xenvif_queue *queue)
I
Ian Campbell 已提交
167 168 169
{
	int more_to_do;

170
	RING_FINAL_CHECK_FOR_REQUESTS(&queue->tx, more_to_do);
I
Ian Campbell 已提交
171 172

	if (more_to_do)
173
		napi_schedule(&queue->napi);
174 175 176 177
	else if (atomic_fetch_andnot(NETBK_TX_EOI | NETBK_COMMON_EOI,
				     &queue->eoi_pending) &
		 (NETBK_TX_EOI | NETBK_COMMON_EOI))
		xen_irq_lateeoi(queue->tx_irq, 0);
I
Ian Campbell 已提交
178 179
}

180
static void tx_add_credit(struct xenvif_queue *queue)
I
Ian Campbell 已提交
181 182 183 184 185 186 187
{
	unsigned long max_burst, max_credit;

	/*
	 * Allow a burst big enough to transmit a jumbo packet of up to 128kB.
	 * Otherwise the interface can seize up due to insufficient credit.
	 */
188
	max_burst = max(131072UL, queue->credit_bytes);
I
Ian Campbell 已提交
189 190

	/* Take care that adding a new chunk of credit doesn't wrap to zero. */
191 192
	max_credit = queue->remaining_credit + queue->credit_bytes;
	if (max_credit < queue->remaining_credit)
I
Ian Campbell 已提交
193 194
		max_credit = ULONG_MAX; /* wrapped: clamp to ULONG_MAX */

195
	queue->remaining_credit = min(max_credit, max_burst);
196
	queue->rate_limited = false;
I
Ian Campbell 已提交
197 198
}

199
void xenvif_tx_credit_callback(struct timer_list *t)
I
Ian Campbell 已提交
200
{
201
	struct xenvif_queue *queue = from_timer(queue, t, credit_timeout);
202 203
	tx_add_credit(queue);
	xenvif_napi_schedule_or_enable_events(queue);
I
Ian Campbell 已提交
204 205
}

206
static void xenvif_tx_err(struct xenvif_queue *queue,
207 208
			  struct xen_netif_tx_request *txp,
			  unsigned int extra_count, RING_IDX end)
I
Ian Campbell 已提交
209
{
210
	RING_IDX cons = queue->tx.req_cons;
211
	unsigned long flags;
I
Ian Campbell 已提交
212 213

	do {
214
		spin_lock_irqsave(&queue->response_lock, flags);
215
		make_tx_response(queue, txp, extra_count, XEN_NETIF_RSP_ERROR);
216
		push_tx_responses(queue);
217
		spin_unlock_irqrestore(&queue->response_lock, flags);
218
		if (cons == end)
I
Ian Campbell 已提交
219
			break;
220
		RING_COPY_REQUEST(&queue->tx, cons++, txp);
221
		extra_count = 0; /* only the first frag can have extras */
I
Ian Campbell 已提交
222
	} while (1);
223
	queue->tx.req_cons = cons;
I
Ian Campbell 已提交
224 225
}

W
Wei Liu 已提交
226
static void xenvif_fatal_tx_err(struct xenvif *vif)
227 228
{
	netdev_err(vif->dev, "fatal error; disabling device\n");
229
	vif->disabled = true;
230
	/* Disable the vif from queue 0's kthread */
231
	if (vif->num_queues)
232
		xenvif_kick_thread(&vif->queues[0]);
233 234
}

235
static int xenvif_count_requests(struct xenvif_queue *queue,
W
Wei Liu 已提交
236
				 struct xen_netif_tx_request *first,
237
				 unsigned int extra_count,
W
Wei Liu 已提交
238 239
				 struct xen_netif_tx_request *txp,
				 int work_to_do)
I
Ian Campbell 已提交
240
{
241
	RING_IDX cons = queue->tx.req_cons;
242 243
	int slots = 0;
	int drop_err = 0;
244
	int more_data;
I
Ian Campbell 已提交
245 246 247 248 249

	if (!(first->flags & XEN_NETTXF_more_data))
		return 0;

	do {
250 251
		struct xen_netif_tx_request dropped_tx = { 0 };

252
		if (slots >= work_to_do) {
253
			netdev_err(queue->vif->dev,
254 255
				   "Asked for %d slots but exceeds this limit\n",
				   work_to_do);
256
			xenvif_fatal_tx_err(queue->vif);
257
			return -ENODATA;
I
Ian Campbell 已提交
258 259
		}

260 261 262
		/* This guest is really using too many slots and
		 * considered malicious.
		 */
263
		if (unlikely(slots >= fatal_skb_slots)) {
264
			netdev_err(queue->vif->dev,
265
				   "Malicious frontend using %d slots, threshold %u\n",
266
				   slots, fatal_skb_slots);
267
			xenvif_fatal_tx_err(queue->vif);
268
			return -E2BIG;
I
Ian Campbell 已提交
269 270
		}

271
		/* Xen network protocol had implicit dependency on
272 273 274 275 276
		 * MAX_SKB_FRAGS. XEN_NETBK_LEGACY_SLOTS_MAX is set to
		 * the historical MAX_SKB_FRAGS value 18 to honor the
		 * same behavior as before. Any packet using more than
		 * 18 slots but less than fatal_skb_slots slots is
		 * dropped
277
		 */
278
		if (!drop_err && slots >= XEN_NETBK_LEGACY_SLOTS_MAX) {
279
			if (net_ratelimit())
280
				netdev_dbg(queue->vif->dev,
281
					   "Too many slots (%d) exceeding limit (%d), dropping packet\n",
282
					   slots, XEN_NETBK_LEGACY_SLOTS_MAX);
283 284 285
			drop_err = -E2BIG;
		}

286 287 288
		if (drop_err)
			txp = &dropped_tx;

289
		RING_COPY_REQUEST(&queue->tx, cons + slots, txp);
290 291 292 293 294 295 296 297 298 299 300 301

		/* If the guest submitted a frame >= 64 KiB then
		 * first->size overflowed and following slots will
		 * appear to be larger than the frame.
		 *
		 * This cannot be fatal error as there are buggy
		 * frontends that do this.
		 *
		 * Consume all slots and drop the packet.
		 */
		if (!drop_err && txp->size > first->size) {
			if (net_ratelimit())
302
				netdev_dbg(queue->vif->dev,
303 304 305
					   "Invalid tx request, slot size %u > remaining size %u\n",
					   txp->size, first->size);
			drop_err = -EIO;
I
Ian Campbell 已提交
306 307 308
		}

		first->size -= txp->size;
309
		slots++;
I
Ian Campbell 已提交
310

311
		if (unlikely((txp->offset + txp->size) > XEN_PAGE_SIZE)) {
312
			netdev_err(queue->vif->dev, "Cross page boundary, txp->offset: %u, size: %u\n",
I
Ian Campbell 已提交
313
				 txp->offset, txp->size);
314
			xenvif_fatal_tx_err(queue->vif);
315
			return -EINVAL;
I
Ian Campbell 已提交
316
		}
317 318 319 320 321 322 323

		more_data = txp->flags & XEN_NETTXF_more_data;

		if (!drop_err)
			txp++;

	} while (more_data);
324 325

	if (drop_err) {
326
		xenvif_tx_err(queue, first, extra_count, cons + slots);
327 328 329 330
		return drop_err;
	}

	return slots;
I
Ian Campbell 已提交
331 332
}

333 334

struct xenvif_tx_cb {
335 336
	u16 copy_pending_idx[XEN_NETBK_LEGACY_SLOTS_MAX + 1];
	u8 copy_count;
337 338 339
};

#define XENVIF_TX_CB(skb) ((struct xenvif_tx_cb *)(skb)->cb)
340 341
#define copy_pending_idx(skb, i) (XENVIF_TX_CB(skb)->copy_pending_idx[i])
#define copy_count(skb) (XENVIF_TX_CB(skb)->copy_count)
342

343
static inline void xenvif_tx_create_map_op(struct xenvif_queue *queue,
344 345 346 347
					   u16 pending_idx,
					   struct xen_netif_tx_request *txp,
					   unsigned int extra_count,
					   struct gnttab_map_grant_ref *mop)
348
{
349 350
	queue->pages_to_map[mop-queue->tx_map_ops] = queue->mmap_pages[pending_idx];
	gnttab_set_map_op(mop, idx_to_kaddr(queue, pending_idx),
351
			  GNTMAP_host_map | GNTMAP_readonly,
352
			  txp->gref, queue->vif->domid);
353

354
	memcpy(&queue->pending_tx_info[pending_idx].req, txp,
355
	       sizeof(*txp));
356
	queue->pending_tx_info[pending_idx].extra_count = extra_count;
357 358
}

359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375
static inline struct sk_buff *xenvif_alloc_skb(unsigned int size)
{
	struct sk_buff *skb =
		alloc_skb(size + NET_SKB_PAD + NET_IP_ALIGN,
			  GFP_ATOMIC | __GFP_NOWARN);
	if (unlikely(skb == NULL))
		return NULL;

	/* Packets passed to netif_rx() must have some headroom. */
	skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN);

	/* Initialize it here to avoid later surprises */
	skb_shinfo(skb)->destructor_arg = NULL;

	return skb;
}

376 377 378 379 380 381 382 383 384 385
static void xenvif_get_requests(struct xenvif_queue *queue,
				struct sk_buff *skb,
				struct xen_netif_tx_request *first,
				struct xen_netif_tx_request *txfrags,
			        unsigned *copy_ops,
			        unsigned *map_ops,
				unsigned int frag_overflow,
				struct sk_buff *nskb,
				unsigned int extra_count,
				unsigned int data_len)
I
Ian Campbell 已提交
386 387 388
{
	struct skb_shared_info *shinfo = skb_shinfo(skb);
	skb_frag_t *frags = shinfo->frags;
389
	u16 pending_idx;
390
	pending_ring_idx_t index;
391
	unsigned int nr_slots;
392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417
	struct gnttab_copy *cop = queue->tx_copy_ops + *copy_ops;
	struct gnttab_map_grant_ref *gop = queue->tx_map_ops + *map_ops;
	struct xen_netif_tx_request *txp = first;

	nr_slots = shinfo->nr_frags + 1;

	copy_count(skb) = 0;

	/* Create copy ops for exactly data_len bytes into the skb head. */
	__skb_put(skb, data_len);
	while (data_len > 0) {
		int amount = data_len > txp->size ? txp->size : data_len;

		cop->source.u.ref = txp->gref;
		cop->source.domid = queue->vif->domid;
		cop->source.offset = txp->offset;

		cop->dest.domid = DOMID_SELF;
		cop->dest.offset = (offset_in_page(skb->data +
						   skb_headlen(skb) -
						   data_len)) & ~XEN_PAGE_MASK;
		cop->dest.u.gmfn = virt_to_gfn(skb->data + skb_headlen(skb)
				               - data_len);

		cop->len = amount;
		cop->flags = GNTCOPY_source_gref;
418

419 420 421 422 423 424 425 426
		index = pending_index(queue->pending_cons);
		pending_idx = queue->pending_ring[index];
		callback_param(queue, pending_idx).ctx = NULL;
		copy_pending_idx(skb, copy_count(skb)) = pending_idx;
		copy_count(skb)++;

		cop++;
		data_len -= amount;
I
Ian Campbell 已提交
427

428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449
		if (amount == txp->size) {
			/* The copy op covered the full tx_request */

			memcpy(&queue->pending_tx_info[pending_idx].req,
			       txp, sizeof(*txp));
			queue->pending_tx_info[pending_idx].extra_count =
				(txp == first) ? extra_count : 0;

			if (txp == first)
				txp = txfrags;
			else
				txp++;
			queue->pending_cons++;
			nr_slots--;
		} else {
			/* The copy op partially covered the tx_request.
			 * The remainder will be mapped.
			 */
			txp->offset += amount;
			txp->size -= amount;
		}
	}
I
Ian Campbell 已提交
450

451 452
	for (shinfo->nr_frags = 0; shinfo->nr_frags < nr_slots;
	     shinfo->nr_frags++, gop++) {
453 454
		index = pending_index(queue->pending_cons++);
		pending_idx = queue->pending_ring[index];
455 456
		xenvif_tx_create_map_op(queue, pending_idx, txp,
				        txp == first ? extra_count : 0, gop);
457
		frag_set_pending_idx(&frags[shinfo->nr_frags], pending_idx);
458 459 460 461 462

		if (txp == first)
			txp = txfrags;
		else
			txp++;
I
Ian Campbell 已提交
463 464
	}

465 466 467 468 469 470 471
	if (frag_overflow) {

		shinfo = skb_shinfo(nskb);
		frags = shinfo->frags;

		for (shinfo->nr_frags = 0; shinfo->nr_frags < frag_overflow;
		     shinfo->nr_frags++, txp++, gop++) {
472 473
			index = pending_index(queue->pending_cons++);
			pending_idx = queue->pending_ring[index];
474 475
			xenvif_tx_create_map_op(queue, pending_idx, txp, 0,
						gop);
476 477 478 479 480 481
			frag_set_pending_idx(&frags[shinfo->nr_frags],
					     pending_idx);
		}

		skb_shinfo(skb)->frag_list = nskb;
	}
482

483 484
	(*copy_ops) = cop - queue->tx_copy_ops;
	(*map_ops) = gop - queue->tx_map_ops;
I
Ian Campbell 已提交
485 486
}

487
static inline void xenvif_grant_handle_set(struct xenvif_queue *queue,
488 489 490
					   u16 pending_idx,
					   grant_handle_t handle)
{
491
	if (unlikely(queue->grant_tx_handle[pending_idx] !=
492
		     NETBACK_INVALID_HANDLE)) {
493
		netdev_err(queue->vif->dev,
494
			   "Trying to overwrite active handle! pending_idx: 0x%x\n",
495 496 497
			   pending_idx);
		BUG();
	}
498
	queue->grant_tx_handle[pending_idx] = handle;
499 500
}

501
static inline void xenvif_grant_handle_reset(struct xenvif_queue *queue,
502 503
					     u16 pending_idx)
{
504
	if (unlikely(queue->grant_tx_handle[pending_idx] ==
505
		     NETBACK_INVALID_HANDLE)) {
506
		netdev_err(queue->vif->dev,
507
			   "Trying to unmap invalid handle! pending_idx: 0x%x\n",
508 509 510
			   pending_idx);
		BUG();
	}
511
	queue->grant_tx_handle[pending_idx] = NETBACK_INVALID_HANDLE;
512 513
}

514
static int xenvif_tx_check_gop(struct xenvif_queue *queue,
W
Wei Liu 已提交
515
			       struct sk_buff *skb,
516 517
			       struct gnttab_map_grant_ref **gopp_map,
			       struct gnttab_copy **gopp_copy)
I
Ian Campbell 已提交
518
{
Z
Zoltan Kiss 已提交
519
	struct gnttab_map_grant_ref *gop_map = *gopp_map;
520
	u16 pending_idx;
521 522 523
	/* This always points to the shinfo of the skb being checked, which
	 * could be either the first or the one on the frag_list
	 */
I
Ian Campbell 已提交
524
	struct skb_shared_info *shinfo = skb_shinfo(skb);
525 526 527 528
	/* If this is non-NULL, we are currently checking the frag_list skb, and
	 * this points to the shinfo of the first one
	 */
	struct skb_shared_info *first_shinfo = NULL;
I
Ian Campbell 已提交
529
	int nr_frags = shinfo->nr_frags;
530
	const bool sharedslot = nr_frags &&
531 532
				frag_get_pending_idx(&shinfo->frags[0]) ==
				    copy_pending_idx(skb, copy_count(skb) - 1);
J
Juergen Gross 已提交
533
	int i, err = 0;
I
Ian Campbell 已提交
534

535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560
	for (i = 0; i < copy_count(skb); i++) {
		int newerr;

		/* Check status of header. */
		pending_idx = copy_pending_idx(skb, i);

		newerr = (*gopp_copy)->status;
		if (likely(!newerr)) {
			/* The first frag might still have this slot mapped */
			if (i < copy_count(skb) - 1 || !sharedslot)
				xenvif_idx_release(queue, pending_idx,
						   XEN_NETIF_RSP_OKAY);
		} else {
			err = newerr;
			if (net_ratelimit())
				netdev_dbg(queue->vif->dev,
					   "Grant copy of header failed! status: %d pending_idx: %u ref: %u\n",
					   (*gopp_copy)->status,
					   pending_idx,
					   (*gopp_copy)->source.u.ref);
			/* The first frag might still have this slot mapped */
			if (i < copy_count(skb) - 1 || !sharedslot)
				xenvif_idx_release(queue, pending_idx,
						   XEN_NETIF_RSP_ERROR);
		}
		(*gopp_copy)++;
561
	}
I
Ian Campbell 已提交
562

563
check_frags:
564
	for (i = 0; i < nr_frags; i++, gop_map++) {
I
Ian Campbell 已提交
565 566
		int j, newerr;

567
		pending_idx = frag_get_pending_idx(&shinfo->frags[i]);
I
Ian Campbell 已提交
568 569

		/* Check error status: if okay then remember grant handle. */
570
		newerr = gop_map->status;
571

I
Ian Campbell 已提交
572
		if (likely(!newerr)) {
573
			xenvif_grant_handle_set(queue,
Z
Zoltan Kiss 已提交
574 575
						pending_idx,
						gop_map->handle);
I
Ian Campbell 已提交
576
			/* Had a previous error? Invalidate this fragment. */
577
			if (unlikely(err)) {
578
				xenvif_idx_unmap(queue, pending_idx);
579 580 581 582
				/* If the mapping of the first frag was OK, but
				 * the header's copy failed, and they are
				 * sharing a slot, send an error
				 */
583
				if (i == 0 && !first_shinfo && sharedslot)
584 585 586 587 588 589
					xenvif_idx_release(queue, pending_idx,
							   XEN_NETIF_RSP_ERROR);
				else
					xenvif_idx_release(queue, pending_idx,
							   XEN_NETIF_RSP_OKAY);
			}
I
Ian Campbell 已提交
590 591 592 593
			continue;
		}

		/* Error on this fragment: respond to client with an error. */
594
		if (net_ratelimit())
595
			netdev_dbg(queue->vif->dev,
596
				   "Grant map of %d. frag failed! status: %d pending_idx: %u ref: %u\n",
597 598 599 600
				   i,
				   gop_map->status,
				   pending_idx,
				   gop_map->ref);
601

602
		xenvif_idx_release(queue, pending_idx, XEN_NETIF_RSP_ERROR);
I
Ian Campbell 已提交
603 604 605 606

		/* Not the first error? Preceding frags already invalidated. */
		if (err)
			continue;
607 608

		/* Invalidate preceding fragments of this skb. */
609
		for (j = 0; j < i; j++) {
610
			pending_idx = frag_get_pending_idx(&shinfo->frags[j]);
611
			xenvif_idx_unmap(queue, pending_idx);
612 613
			xenvif_idx_release(queue, pending_idx,
					   XEN_NETIF_RSP_OKAY);
I
Ian Campbell 已提交
614 615
		}

616 617 618 619 620 621 622
		/* And if we found the error while checking the frag_list, unmap
		 * the first skb's frags
		 */
		if (first_shinfo) {
			for (j = 0; j < first_shinfo->nr_frags; j++) {
				pending_idx = frag_get_pending_idx(&first_shinfo->frags[j]);
				xenvif_idx_unmap(queue, pending_idx);
623 624
				xenvif_idx_release(queue, pending_idx,
						   XEN_NETIF_RSP_OKAY);
625
			}
I
Ian Campbell 已提交
626 627 628 629 630 631
		}

		/* Remember the error: invalidate all subsequent fragments. */
		err = newerr;
	}

632
	if (skb_has_frag_list(skb) && !first_shinfo) {
633 634
		first_shinfo = shinfo;
		shinfo = skb_shinfo(shinfo->frag_list);
635 636 637 638 639
		nr_frags = shinfo->nr_frags;

		goto check_frags;
	}

640
	*gopp_map = gop_map;
I
Ian Campbell 已提交
641 642 643
	return err;
}

644
static void xenvif_fill_frags(struct xenvif_queue *queue, struct sk_buff *skb)
I
Ian Campbell 已提交
645 646 647 648
{
	struct skb_shared_info *shinfo = skb_shinfo(skb);
	int nr_frags = shinfo->nr_frags;
	int i;
649 650
	u16 prev_pending_idx = INVALID_PENDING_IDX;

I
Ian Campbell 已提交
651 652 653
	for (i = 0; i < nr_frags; i++) {
		skb_frag_t *frag = shinfo->frags + i;
		struct xen_netif_tx_request *txp;
654 655
		struct page *page;
		u16 pending_idx;
I
Ian Campbell 已提交
656

657
		pending_idx = frag_get_pending_idx(frag);
I
Ian Campbell 已提交
658

659
		/* If this is not the first frag, chain it to the previous*/
660
		if (prev_pending_idx == INVALID_PENDING_IDX)
661
			skb_shinfo(skb)->destructor_arg =
662
				&callback_param(queue, pending_idx);
663
		else
664 665
			callback_param(queue, prev_pending_idx).ctx =
				&callback_param(queue, pending_idx);
666

667
		callback_param(queue, pending_idx).ctx = NULL;
668 669
		prev_pending_idx = pending_idx;

670 671
		txp = &queue->pending_tx_info[pending_idx].req;
		page = virt_to_page(idx_to_kaddr(queue, pending_idx));
672
		__skb_fill_page_desc(skb, i, page, txp->offset, txp->size);
I
Ian Campbell 已提交
673 674 675 676
		skb->len += txp->size;
		skb->data_len += txp->size;
		skb->truesize += txp->size;

677
		/* Take an extra reference to offset network stack's put_page */
678
		get_page(queue->mmap_pages[pending_idx]);
I
Ian Campbell 已提交
679 680 681
	}
}

682
static int xenvif_get_extras(struct xenvif_queue *queue,
683 684 685
			     struct xen_netif_extra_info *extras,
			     unsigned int *extra_count,
			     int work_to_do)
I
Ian Campbell 已提交
686 687
{
	struct xen_netif_extra_info extra;
688
	RING_IDX cons = queue->tx.req_cons;
I
Ian Campbell 已提交
689 690 691

	do {
		if (unlikely(work_to_do-- <= 0)) {
692 693
			netdev_err(queue->vif->dev, "Missing extra info\n");
			xenvif_fatal_tx_err(queue->vif);
I
Ian Campbell 已提交
694 695 696
			return -EBADR;
		}

697
		RING_COPY_REQUEST(&queue->tx, cons, &extra);
698 699 700 701

		queue->tx.req_cons = ++cons;
		(*extra_count)++;

I
Ian Campbell 已提交
702 703
		if (unlikely(!extra.type ||
			     extra.type >= XEN_NETIF_EXTRA_TYPE_MAX)) {
704
			netdev_err(queue->vif->dev,
I
Ian Campbell 已提交
705
				   "Invalid extra type: %d\n", extra.type);
706
			xenvif_fatal_tx_err(queue->vif);
I
Ian Campbell 已提交
707 708 709 710 711 712 713 714 715
			return -EINVAL;
		}

		memcpy(&extras[extra.type - 1], &extra, sizeof(extra));
	} while (extra.flags & XEN_NETIF_EXTRA_FLAG_MORE);

	return work_to_do;
}

W
Wei Liu 已提交
716 717 718
static int xenvif_set_skb_gso(struct xenvif *vif,
			      struct sk_buff *skb,
			      struct xen_netif_extra_info *gso)
I
Ian Campbell 已提交
719 720
{
	if (!gso->u.gso.size) {
721
		netdev_err(vif->dev, "GSO size must not be zero.\n");
W
Wei Liu 已提交
722
		xenvif_fatal_tx_err(vif);
I
Ian Campbell 已提交
723 724 725
		return -EINVAL;
	}

726 727 728 729 730 731 732 733
	switch (gso->u.gso.type) {
	case XEN_NETIF_GSO_TYPE_TCPV4:
		skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
		break;
	case XEN_NETIF_GSO_TYPE_TCPV6:
		skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
		break;
	default:
734
		netdev_err(vif->dev, "Bad GSO type %d.\n", gso->u.gso.type);
W
Wei Liu 已提交
735
		xenvif_fatal_tx_err(vif);
I
Ian Campbell 已提交
736 737 738 739
		return -EINVAL;
	}

	skb_shinfo(skb)->gso_size = gso->u.gso.size;
740
	/* gso_segs will be calculated later */
I
Ian Campbell 已提交
741 742 743 744

	return 0;
}

745
static int checksum_setup(struct xenvif_queue *queue, struct sk_buff *skb)
746
{
747
	bool recalculate_partial_csum = false;
748 749 750 751 752 753 754

	/* A GSO SKB must be CHECKSUM_PARTIAL. However some buggy
	 * peers can fail to set NETRXF_csum_blank when sending a GSO
	 * frame. In this case force the SKB to CHECKSUM_PARTIAL and
	 * recalculate the partial checksum.
	 */
	if (skb->ip_summed != CHECKSUM_PARTIAL && skb_is_gso(skb)) {
755
		queue->stats.rx_gso_checksum_fixup++;
756
		skb->ip_summed = CHECKSUM_PARTIAL;
757
		recalculate_partial_csum = true;
758 759 760 761 762 763
	}

	/* A non-CHECKSUM_PARTIAL SKB does not require setup. */
	if (skb->ip_summed != CHECKSUM_PARTIAL)
		return 0;

764
	return skb_checksum_setup(skb, recalculate_partial_csum);
765 766
}

767
static bool tx_credit_exceeded(struct xenvif_queue *queue, unsigned size)
I
Ian Campbell 已提交
768
{
769
	u64 now = get_jiffies_64();
770 771
	u64 next_credit = queue->credit_window_start +
		msecs_to_jiffies(queue->credit_usec / 1000);
I
Ian Campbell 已提交
772 773

	/* Timer could already be pending in rare cases. */
774 775
	if (timer_pending(&queue->credit_timeout)) {
		queue->rate_limited = true;
I
Ian Campbell 已提交
776
		return true;
777
	}
I
Ian Campbell 已提交
778 779

	/* Passed the point where we can replenish credit? */
780
	if (time_after_eq64(now, next_credit)) {
781 782
		queue->credit_window_start = now;
		tx_add_credit(queue);
I
Ian Campbell 已提交
783 784 785
	}

	/* Still too big to send right now? Set a callback. */
786 787
	if (size > queue->remaining_credit) {
		mod_timer(&queue->credit_timeout,
I
Ian Campbell 已提交
788
			  next_credit);
789
		queue->credit_window_start = next_credit;
790
		queue->rate_limited = true;
I
Ian Campbell 已提交
791 792 793 794 795 796 797

		return true;
	}

	return false;
}

798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871
/* No locking is required in xenvif_mcast_add/del() as they are
 * only ever invoked from NAPI poll. An RCU list is used because
 * xenvif_mcast_match() is called asynchronously, during start_xmit.
 */

static int xenvif_mcast_add(struct xenvif *vif, const u8 *addr)
{
	struct xenvif_mcast_addr *mcast;

	if (vif->fe_mcast_count == XEN_NETBK_MCAST_MAX) {
		if (net_ratelimit())
			netdev_err(vif->dev,
				   "Too many multicast addresses\n");
		return -ENOSPC;
	}

	mcast = kzalloc(sizeof(*mcast), GFP_ATOMIC);
	if (!mcast)
		return -ENOMEM;

	ether_addr_copy(mcast->addr, addr);
	list_add_tail_rcu(&mcast->entry, &vif->fe_mcast_addr);
	vif->fe_mcast_count++;

	return 0;
}

static void xenvif_mcast_del(struct xenvif *vif, const u8 *addr)
{
	struct xenvif_mcast_addr *mcast;

	list_for_each_entry_rcu(mcast, &vif->fe_mcast_addr, entry) {
		if (ether_addr_equal(addr, mcast->addr)) {
			--vif->fe_mcast_count;
			list_del_rcu(&mcast->entry);
			kfree_rcu(mcast, rcu);
			break;
		}
	}
}

bool xenvif_mcast_match(struct xenvif *vif, const u8 *addr)
{
	struct xenvif_mcast_addr *mcast;

	rcu_read_lock();
	list_for_each_entry_rcu(mcast, &vif->fe_mcast_addr, entry) {
		if (ether_addr_equal(addr, mcast->addr)) {
			rcu_read_unlock();
			return true;
		}
	}
	rcu_read_unlock();

	return false;
}

void xenvif_mcast_addr_list_free(struct xenvif *vif)
{
	/* No need for locking or RCU here. NAPI poll and TX queue
	 * are stopped.
	 */
	while (!list_empty(&vif->fe_mcast_addr)) {
		struct xenvif_mcast_addr *mcast;

		mcast = list_first_entry(&vif->fe_mcast_addr,
					 struct xenvif_mcast_addr,
					 entry);
		--vif->fe_mcast_count;
		list_del(&mcast->entry);
		kfree(mcast);
	}
}

872
static void xenvif_tx_build_gops(struct xenvif_queue *queue,
873 874 875
				     int budget,
				     unsigned *copy_ops,
				     unsigned *map_ops)
I
Ian Campbell 已提交
876
{
877
	struct sk_buff *skb, *nskb;
I
Ian Campbell 已提交
878
	int ret;
879
	unsigned int frag_overflow;
I
Ian Campbell 已提交
880

881
	while (skb_queue_len(&queue->tx_queue) < budget) {
I
Ian Campbell 已提交
882
		struct xen_netif_tx_request txreq;
883
		struct xen_netif_tx_request txfrags[XEN_NETBK_LEGACY_SLOTS_MAX];
I
Ian Campbell 已提交
884
		struct xen_netif_extra_info extras[XEN_NETIF_EXTRA_TYPE_MAX-1];
885
		unsigned int extra_count;
I
Ian Campbell 已提交
886 887 888 889 890 891
		u16 pending_idx;
		RING_IDX idx;
		int work_to_do;
		unsigned int data_len;
		pending_ring_idx_t index;

892
		if (queue->tx.sring->req_prod - queue->tx.req_cons >
893
		    XEN_NETIF_TX_RING_SIZE) {
894
			netdev_err(queue->vif->dev,
895 896
				   "Impossible number of requests. "
				   "req_prod %d, req_cons %d, size %ld\n",
897
				   queue->tx.sring->req_prod, queue->tx.req_cons,
898
				   XEN_NETIF_TX_RING_SIZE);
899
			xenvif_fatal_tx_err(queue->vif);
900
			break;
901 902
		}

903
		work_to_do = XEN_RING_NR_UNCONSUMED_REQUESTS(&queue->tx);
904 905
		if (!work_to_do)
			break;
I
Ian Campbell 已提交
906

907
		idx = queue->tx.req_cons;
I
Ian Campbell 已提交
908
		rmb(); /* Ensure that we see the request before we copy it. */
909
		RING_COPY_REQUEST(&queue->tx, idx, &txreq);
I
Ian Campbell 已提交
910 911

		/* Credit-based scheduling. */
912 913
		if (txreq.size > queue->remaining_credit &&
		    tx_credit_exceeded(queue, txreq.size))
914
			break;
I
Ian Campbell 已提交
915

916
		queue->remaining_credit -= txreq.size;
I
Ian Campbell 已提交
917 918

		work_to_do--;
919
		queue->tx.req_cons = ++idx;
I
Ian Campbell 已提交
920 921

		memset(extras, 0, sizeof(extras));
922
		extra_count = 0;
I
Ian Campbell 已提交
923
		if (txreq.flags & XEN_NETTXF_extra_info) {
924
			work_to_do = xenvif_get_extras(queue, extras,
925
						       &extra_count,
W
Wei Liu 已提交
926
						       work_to_do);
927
			idx = queue->tx.req_cons;
928
			if (unlikely(work_to_do < 0))
929
				break;
I
Ian Campbell 已提交
930 931
		}

932 933 934 935 936 937
		if (extras[XEN_NETIF_EXTRA_TYPE_MCAST_ADD - 1].type) {
			struct xen_netif_extra_info *extra;

			extra = &extras[XEN_NETIF_EXTRA_TYPE_MCAST_ADD - 1];
			ret = xenvif_mcast_add(queue->vif, extra->u.mcast.addr);

938
			make_tx_response(queue, &txreq, extra_count,
939 940 941 942 943 944 945 946 947 948 949 950 951
					 (ret == 0) ?
					 XEN_NETIF_RSP_OKAY :
					 XEN_NETIF_RSP_ERROR);
			push_tx_responses(queue);
			continue;
		}

		if (extras[XEN_NETIF_EXTRA_TYPE_MCAST_DEL - 1].type) {
			struct xen_netif_extra_info *extra;

			extra = &extras[XEN_NETIF_EXTRA_TYPE_MCAST_DEL - 1];
			xenvif_mcast_del(queue->vif, extra->u.mcast.addr);

952 953
			make_tx_response(queue, &txreq, extra_count,
					 XEN_NETIF_RSP_OKAY);
954 955 956 957
			push_tx_responses(queue);
			continue;
		}

958 959 960
		data_len = (txreq.size > XEN_NETBACK_TX_COPY_LEN) ?
			XEN_NETBACK_TX_COPY_LEN : txreq.size;

961 962
		ret = xenvif_count_requests(queue, &txreq, extra_count,
					    txfrags, work_to_do);
963

964
		if (unlikely(ret < 0))
965
			break;
966

I
Ian Campbell 已提交
967 968 969
		idx += ret;

		if (unlikely(txreq.size < ETH_HLEN)) {
970
			netdev_dbg(queue->vif->dev,
I
Ian Campbell 已提交
971
				   "Bad packet size: %d\n", txreq.size);
972
			xenvif_tx_err(queue, &txreq, extra_count, idx);
973
			break;
I
Ian Campbell 已提交
974 975 976
		}

		/* No crossing a page as the payload mustn't fragment. */
977
		if (unlikely((txreq.offset + txreq.size) > XEN_PAGE_SIZE)) {
978
			netdev_err(queue->vif->dev,
979
				   "txreq.offset: %u, size: %u, end: %lu\n",
I
Ian Campbell 已提交
980
				   txreq.offset, txreq.size,
981
				   (unsigned long)(txreq.offset&~XEN_PAGE_MASK) + txreq.size);
982
			xenvif_fatal_tx_err(queue->vif);
983
			break;
I
Ian Campbell 已提交
984 985
		}

986 987
		index = pending_index(queue->pending_cons);
		pending_idx = queue->pending_ring[index];
I
Ian Campbell 已提交
988

989 990
		if (ret >= XEN_NETBK_LEGACY_SLOTS_MAX - 1 && data_len < txreq.size)
			data_len = txreq.size;
I
Ian Campbell 已提交
991

992
		skb = xenvif_alloc_skb(data_len);
I
Ian Campbell 已提交
993
		if (unlikely(skb == NULL)) {
994
			netdev_dbg(queue->vif->dev,
I
Ian Campbell 已提交
995
				   "Can't allocate a skb in start_xmit.\n");
996
			xenvif_tx_err(queue, &txreq, extra_count, idx);
I
Ian Campbell 已提交
997 998 999
			break;
		}

1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011
		skb_shinfo(skb)->nr_frags = ret;
		/* At this point shinfo->nr_frags is in fact the number of
		 * slots, which can be as large as XEN_NETBK_LEGACY_SLOTS_MAX.
		 */
		frag_overflow = 0;
		nskb = NULL;
		if (skb_shinfo(skb)->nr_frags > MAX_SKB_FRAGS) {
			frag_overflow = skb_shinfo(skb)->nr_frags - MAX_SKB_FRAGS;
			BUG_ON(frag_overflow > MAX_SKB_FRAGS);
			skb_shinfo(skb)->nr_frags = MAX_SKB_FRAGS;
			nskb = xenvif_alloc_skb(0);
			if (unlikely(nskb == NULL)) {
1012
				skb_shinfo(skb)->nr_frags = 0;
1013
				kfree_skb(skb);
1014
				xenvif_tx_err(queue, &txreq, extra_count, idx);
1015 1016 1017 1018 1019 1020 1021
				if (net_ratelimit())
					netdev_err(queue->vif->dev,
						   "Can't allocate the frag_list skb.\n");
				break;
			}
		}

I
Ian Campbell 已提交
1022 1023 1024 1025
		if (extras[XEN_NETIF_EXTRA_TYPE_GSO - 1].type) {
			struct xen_netif_extra_info *gso;
			gso = &extras[XEN_NETIF_EXTRA_TYPE_GSO - 1];

1026
			if (xenvif_set_skb_gso(queue->vif, skb, gso)) {
W
Wei Liu 已提交
1027
				/* Failure in xenvif_set_skb_gso is fatal. */
1028
				skb_shinfo(skb)->nr_frags = 0;
I
Ian Campbell 已提交
1029
				kfree_skb(skb);
1030
				kfree_skb(nskb);
1031
				break;
I
Ian Campbell 已提交
1032 1033 1034
			}
		}

1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061
		if (extras[XEN_NETIF_EXTRA_TYPE_HASH - 1].type) {
			struct xen_netif_extra_info *extra;
			enum pkt_hash_types type = PKT_HASH_TYPE_NONE;

			extra = &extras[XEN_NETIF_EXTRA_TYPE_HASH - 1];

			switch (extra->u.hash.type) {
			case _XEN_NETIF_CTRL_HASH_TYPE_IPV4:
			case _XEN_NETIF_CTRL_HASH_TYPE_IPV6:
				type = PKT_HASH_TYPE_L3;
				break;

			case _XEN_NETIF_CTRL_HASH_TYPE_IPV4_TCP:
			case _XEN_NETIF_CTRL_HASH_TYPE_IPV6_TCP:
				type = PKT_HASH_TYPE_L4;
				break;

			default:
				break;
			}

			if (type != PKT_HASH_TYPE_NONE)
				skb_set_hash(skb,
					     *(u32 *)extra->u.hash.value,
					     type);
		}

1062 1063 1064
		xenvif_get_requests(queue, skb, &txreq, txfrags, copy_ops,
				    map_ops, frag_overflow, nskb, extra_count,
				    data_len);
I
Ian Campbell 已提交
1065

1066
		__skb_queue_tail(&queue->tx_queue, skb);
1067

1068
		queue->tx.req_cons = idx;
I
Ian Campbell 已提交
1069

1070
		if ((*map_ops >= ARRAY_SIZE(queue->tx_map_ops)) ||
1071
		    (*copy_ops >= ARRAY_SIZE(queue->tx_copy_ops)))
I
Ian Campbell 已提交
1072 1073 1074
			break;
	}

1075
	return;
I
Ian Campbell 已提交
1076 1077
}

1078 1079 1080
/* Consolidate skb with a frag_list into a brand new one with local pages on
 * frags. Returns 0 or -ENOMEM if can't allocate new pages.
 */
1081
static int xenvif_handle_frag_list(struct xenvif_queue *queue, struct sk_buff *skb)
1082 1083 1084
{
	unsigned int offset = skb_headlen(skb);
	skb_frag_t frags[MAX_SKB_FRAGS];
1085
	int i, f;
1086 1087 1088
	struct ubuf_info *uarg;
	struct sk_buff *nskb = skb_shinfo(skb)->frag_list;

1089 1090
	queue->stats.tx_zerocopy_sent += 2;
	queue->stats.tx_frag_overflow++;
1091

1092
	xenvif_fill_frags(queue, nskb);
1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103
	/* Subtract frags size, we will correct it later */
	skb->truesize -= skb->data_len;
	skb->len += nskb->len;
	skb->data_len += nskb->len;

	/* create a brand new frags array and coalesce there */
	for (i = 0; offset < skb->len; i++) {
		struct page *page;
		unsigned int len;

		BUG_ON(i >= MAX_SKB_FRAGS);
Z
Zoltan Kiss 已提交
1104
		page = alloc_page(GFP_ATOMIC);
1105 1106 1107 1108
		if (!page) {
			int j;
			skb->truesize += skb->data_len;
			for (j = 0; j < i; j++)
1109
				put_page(skb_frag_page(&frags[j]));
1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120
			return -ENOMEM;
		}

		if (offset + PAGE_SIZE < skb->len)
			len = PAGE_SIZE;
		else
			len = skb->len - offset;
		if (skb_copy_bits(skb, offset, page_address(page), len))
			BUG();

		offset += len;
1121
		__skb_frag_set_page(&frags[i], page);
J
Jonathan Lemon 已提交
1122
		skb_frag_off_set(&frags[i], 0);
1123 1124
		skb_frag_size_set(&frags[i], len);
	}
1125 1126 1127 1128

	/* Release all the original (foreign) frags. */
	for (f = 0; f < skb_shinfo(skb)->nr_frags; f++)
		skb_frag_unref(skb, f);
1129
	uarg = skb_shinfo(skb)->destructor_arg;
1130 1131
	/* increase inflight counter to offset decrement in callback */
	atomic_inc(&queue->inflight_packets);
1132
	uarg->callback(NULL, uarg, true);
1133 1134
	skb_shinfo(skb)->destructor_arg = NULL;

1135 1136 1137 1138
	/* Fill the skb with the new (local) frags. */
	memcpy(skb_shinfo(skb)->frags, frags, i * sizeof(skb_frag_t));
	skb_shinfo(skb)->nr_frags = i;
	skb->truesize += i * PAGE_SIZE;
1139 1140 1141

	return 0;
}
1142

1143
static int xenvif_tx_submit(struct xenvif_queue *queue)
I
Ian Campbell 已提交
1144
{
1145 1146
	struct gnttab_map_grant_ref *gop_map = queue->tx_map_ops;
	struct gnttab_copy *gop_copy = queue->tx_copy_ops;
I
Ian Campbell 已提交
1147
	struct sk_buff *skb;
1148
	int work_done = 0;
I
Ian Campbell 已提交
1149

1150
	while ((skb = __skb_dequeue(&queue->tx_queue)) != NULL) {
I
Ian Campbell 已提交
1151 1152 1153
		struct xen_netif_tx_request *txp;
		u16 pending_idx;

1154
		pending_idx = copy_pending_idx(skb, 0);
1155
		txp = &queue->pending_tx_info[pending_idx].req;
I
Ian Campbell 已提交
1156 1157

		/* Check the remap error code. */
1158
		if (unlikely(xenvif_tx_check_gop(queue, skb, &gop_map, &gop_copy))) {
1159 1160 1161 1162
			/* If there was an error, xenvif_tx_check_gop is
			 * expected to release all the frags which were mapped,
			 * so kfree_skb shouldn't do it again
			 */
I
Ian Campbell 已提交
1163
			skb_shinfo(skb)->nr_frags = 0;
1164 1165 1166 1167 1168
			if (skb_has_frag_list(skb)) {
				struct sk_buff *nskb =
						skb_shinfo(skb)->frag_list;
				skb_shinfo(nskb)->nr_frags = 0;
			}
I
Ian Campbell 已提交
1169 1170 1171 1172 1173 1174 1175 1176 1177
			kfree_skb(skb);
			continue;
		}

		if (txp->flags & XEN_NETTXF_csum_blank)
			skb->ip_summed = CHECKSUM_PARTIAL;
		else if (txp->flags & XEN_NETTXF_data_validated)
			skb->ip_summed = CHECKSUM_UNNECESSARY;

1178
		xenvif_fill_frags(queue, skb);
I
Ian Campbell 已提交
1179

1180
		if (unlikely(skb_has_frag_list(skb))) {
1181 1182
			struct sk_buff *nskb = skb_shinfo(skb)->frag_list;
			xenvif_skb_zerocopy_prepare(queue, nskb);
1183
			if (xenvif_handle_frag_list(queue, skb)) {
1184
				if (net_ratelimit())
1185
					netdev_err(queue->vif->dev,
1186
						   "Not enough memory to consolidate frag_list!\n");
1187
				xenvif_skb_zerocopy_prepare(queue, skb);
1188 1189 1190
				kfree_skb(skb);
				continue;
			}
1191 1192 1193
			/* Copied all the bits from the frag list -- free it. */
			skb_frag_list_init(skb);
			kfree_skb(nskb);
1194 1195
		}

1196
		skb->dev      = queue->vif->dev;
I
Ian Campbell 已提交
1197
		skb->protocol = eth_type_trans(skb, skb->dev);
1198
		skb_reset_network_header(skb);
I
Ian Campbell 已提交
1199

1200 1201
		if (checksum_setup(queue, skb)) {
			netdev_dbg(queue->vif->dev,
I
Ian Campbell 已提交
1202
				   "Can't setup checksum in net_tx_action\n");
1203 1204
			/* We have to set this flag to trigger the callback */
			if (skb_shinfo(skb)->destructor_arg)
1205
				xenvif_skb_zerocopy_prepare(queue, skb);
I
Ian Campbell 已提交
1206 1207 1208 1209
			kfree_skb(skb);
			continue;
		}

1210
		skb_probe_transport_header(skb);
1211

1212 1213 1214 1215 1216
		/* If the packet is GSO then we will have just set up the
		 * transport header offset in checksum_setup so it's now
		 * straightforward to calculate gso_segs.
		 */
		if (skb_is_gso(skb)) {
1217 1218 1219 1220 1221 1222 1223 1224 1225 1226
			int mss, hdrlen;

			/* GSO implies having the L4 header. */
			WARN_ON_ONCE(!skb_transport_header_was_set(skb));
			if (unlikely(!skb_transport_header_was_set(skb))) {
				kfree_skb(skb);
				continue;
			}

			mss = skb_shinfo(skb)->gso_size;
1227
			hdrlen = skb_tcp_all_headers(skb);
1228 1229 1230 1231 1232

			skb_shinfo(skb)->gso_segs =
				DIV_ROUND_UP(skb->len - hdrlen, mss);
		}

1233 1234
		queue->stats.rx_bytes += skb->len;
		queue->stats.rx_packets++;
I
Ian Campbell 已提交
1235

1236 1237
		work_done++;

1238 1239 1240 1241 1242
		/* Set this flag right before netif_receive_skb, otherwise
		 * someone might think this packet already left netback, and
		 * do a skb_copy_ubufs while we are still in control of the
		 * skb. E.g. the __pskb_pull_tail earlier can do such thing.
		 */
1243
		if (skb_shinfo(skb)->destructor_arg) {
1244
			xenvif_skb_zerocopy_prepare(queue, skb);
1245
			queue->stats.tx_zerocopy_sent++;
1246
		}
1247

1248
		netif_receive_skb(skb);
I
Ian Campbell 已提交
1249
	}
1250 1251

	return work_done;
I
Ian Campbell 已提交
1252 1253
}

1254
void xenvif_zerocopy_callback(struct sk_buff *skb, struct ubuf_info *ubuf_base,
1255
			      bool zerocopy_success)
1256
{
1257 1258
	unsigned long flags;
	pending_ring_idx_t index;
1259
	struct ubuf_info_msgzc *ubuf = uarg_to_msgzc(ubuf_base);
1260
	struct xenvif_queue *queue = ubuf_to_queue(ubuf);
1261 1262 1263 1264

	/* This is the only place where we grab this lock, to protect callbacks
	 * from each other.
	 */
1265
	spin_lock_irqsave(&queue->callback_lock, flags);
1266 1267
	do {
		u16 pending_idx = ubuf->desc;
1268
		ubuf = (struct ubuf_info_msgzc *) ubuf->ctx;
1269
		BUG_ON(queue->dealloc_prod - queue->dealloc_cons >=
1270
			MAX_PENDING_REQS);
1271 1272
		index = pending_index(queue->dealloc_prod);
		queue->dealloc_ring[index] = pending_idx;
1273 1274 1275 1276
		/* Sync with xenvif_tx_dealloc_action:
		 * insert idx then incr producer.
		 */
		smp_wmb();
1277
		queue->dealloc_prod++;
1278
	} while (ubuf);
1279
	spin_unlock_irqrestore(&queue->callback_lock, flags);
1280

1281
	if (likely(zerocopy_success))
1282
		queue->stats.tx_zerocopy_success++;
1283
	else
1284
		queue->stats.tx_zerocopy_fail++;
1285
	xenvif_skb_zerocopy_complete(queue);
1286 1287
}

1288
static inline void xenvif_tx_dealloc_action(struct xenvif_queue *queue)
1289 1290 1291 1292 1293 1294
{
	struct gnttab_unmap_grant_ref *gop;
	pending_ring_idx_t dc, dp;
	u16 pending_idx, pending_idx_release[MAX_PENDING_REQS];
	unsigned int i = 0;

1295 1296
	dc = queue->dealloc_cons;
	gop = queue->tx_unmap_ops;
1297 1298 1299

	/* Free up any grants we have finished using */
	do {
1300
		dp = queue->dealloc_prod;
1301 1302 1303 1304 1305 1306 1307

		/* Ensure we see all indices enqueued by all
		 * xenvif_zerocopy_callback().
		 */
		smp_rmb();

		while (dc != dp) {
1308
			BUG_ON(gop - queue->tx_unmap_ops >= MAX_PENDING_REQS);
1309
			pending_idx =
1310
				queue->dealloc_ring[pending_index(dc++)];
1311

1312
			pending_idx_release[gop - queue->tx_unmap_ops] =
1313
				pending_idx;
1314
			queue->pages_to_unmap[gop - queue->tx_unmap_ops] =
1315
				queue->mmap_pages[pending_idx];
1316
			gnttab_set_unmap_op(gop,
1317
					    idx_to_kaddr(queue, pending_idx),
1318
					    GNTMAP_host_map,
1319 1320
					    queue->grant_tx_handle[pending_idx]);
			xenvif_grant_handle_reset(queue, pending_idx);
1321 1322 1323
			++gop;
		}

1324
	} while (dp != queue->dealloc_prod);
1325

1326
	queue->dealloc_cons = dc;
1327

1328
	if (gop - queue->tx_unmap_ops > 0) {
1329
		int ret;
1330
		ret = gnttab_unmap_refs(queue->tx_unmap_ops,
1331
					NULL,
1332 1333
					queue->pages_to_unmap,
					gop - queue->tx_unmap_ops);
1334
		if (ret) {
1335
			netdev_err(queue->vif->dev, "Unmap fail: nr_ops %tu ret %d\n",
1336 1337
				   gop - queue->tx_unmap_ops, ret);
			for (i = 0; i < gop - queue->tx_unmap_ops; ++i) {
1338
				if (gop[i].status != GNTST_okay)
1339
					netdev_err(queue->vif->dev,
1340
						   " host_addr: 0x%llx handle: 0x%x status: %d\n",
1341 1342 1343 1344 1345 1346 1347 1348
						   gop[i].host_addr,
						   gop[i].handle,
						   gop[i].status);
			}
			BUG();
		}
	}

1349 1350
	for (i = 0; i < gop - queue->tx_unmap_ops; ++i)
		xenvif_idx_release(queue, pending_idx_release[i],
1351
				   XEN_NETIF_RSP_OKAY);
1352 1353
}

1354

I
Ian Campbell 已提交
1355
/* Called after netfront has transmitted */
1356
int xenvif_tx_action(struct xenvif_queue *queue, int budget)
I
Ian Campbell 已提交
1357
{
1358
	unsigned nr_mops = 0, nr_cops = 0;
1359
	int work_done, ret;
I
Ian Campbell 已提交
1360

1361
	if (unlikely(!tx_work_todo(queue)))
1362 1363
		return 0;

1364
	xenvif_tx_build_gops(queue, budget, &nr_cops, &nr_mops);
I
Ian Campbell 已提交
1365

1366
	if (nr_cops == 0)
1367 1368
		return 0;

1369
	gnttab_batch_copy(queue->tx_copy_ops, nr_cops);
1370
	if (nr_mops != 0) {
1371
		ret = gnttab_map_refs(queue->tx_map_ops,
1372
				      NULL,
1373
				      queue->pages_to_map,
1374
				      nr_mops);
1375 1376 1377 1378 1379 1380 1381 1382 1383 1384
		if (ret) {
			unsigned int i;

			netdev_err(queue->vif->dev, "Map fail: nr %u ret %d\n",
				   nr_mops, ret);
			for (i = 0; i < nr_mops; ++i)
				WARN_ON_ONCE(queue->tx_map_ops[i].status ==
				             GNTST_okay);
		}
	}
I
Ian Campbell 已提交
1385

1386
	work_done = xenvif_tx_submit(queue);
I
Ian Campbell 已提交
1387

1388
	return work_done;
I
Ian Campbell 已提交
1389 1390
}

1391
static void xenvif_idx_release(struct xenvif_queue *queue, u16 pending_idx,
W
Wei Liu 已提交
1392
			       u8 status)
I
Ian Campbell 已提交
1393 1394
{
	struct pending_tx_info *pending_tx_info;
1395 1396
	pending_ring_idx_t index;
	unsigned long flags;
1397

1398
	pending_tx_info = &queue->pending_tx_info[pending_idx];
1399

1400
	spin_lock_irqsave(&queue->response_lock, flags);
1401

1402 1403
	make_tx_response(queue, &pending_tx_info->req,
			 pending_tx_info->extra_count, status);
1404 1405 1406 1407 1408 1409

	/* Release the pending index before pusing the Tx response so
	 * its available before a new Tx request is pushed by the
	 * frontend.
	 */
	index = pending_index(queue->pending_prod++);
1410
	queue->pending_ring[index] = pending_idx;
1411

1412
	push_tx_responses(queue);
1413

1414
	spin_unlock_irqrestore(&queue->response_lock, flags);
I
Ian Campbell 已提交
1415 1416
}

1417

1418
static void make_tx_response(struct xenvif_queue *queue,
I
Ian Campbell 已提交
1419
			     struct xen_netif_tx_request *txp,
1420
			     unsigned int extra_count,
I
Ian Campbell 已提交
1421 1422
			     s8       st)
{
1423
	RING_IDX i = queue->tx.rsp_prod_pvt;
I
Ian Campbell 已提交
1424 1425
	struct xen_netif_tx_response *resp;

1426
	resp = RING_GET_RESPONSE(&queue->tx, i);
I
Ian Campbell 已提交
1427 1428 1429
	resp->id     = txp->id;
	resp->status = st;

1430
	while (extra_count-- != 0)
1431
		RING_GET_RESPONSE(&queue->tx, ++i)->status = XEN_NETIF_RSP_NULL;
I
Ian Campbell 已提交
1432

1433
	queue->tx.rsp_prod_pvt = ++i;
I
Ian Campbell 已提交
1434 1435
}

1436 1437 1438 1439 1440 1441 1442 1443 1444
static void push_tx_responses(struct xenvif_queue *queue)
{
	int notify;

	RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&queue->tx, notify);
	if (notify)
		notify_remote_via_irq(queue->tx_irq);
}

1445
static void xenvif_idx_unmap(struct xenvif_queue *queue, u16 pending_idx)
1446 1447 1448 1449 1450
{
	int ret;
	struct gnttab_unmap_grant_ref tx_unmap_op;

	gnttab_set_unmap_op(&tx_unmap_op,
1451
			    idx_to_kaddr(queue, pending_idx),
1452
			    GNTMAP_host_map,
1453 1454
			    queue->grant_tx_handle[pending_idx]);
	xenvif_grant_handle_reset(queue, pending_idx);
1455 1456

	ret = gnttab_unmap_refs(&tx_unmap_op, NULL,
1457
				&queue->mmap_pages[pending_idx], 1);
1458
	if (ret) {
1459
		netdev_err(queue->vif->dev,
1460
			   "Unmap fail: ret: %d pending_idx: %d host_addr: %llx handle: 0x%x status: %d\n",
1461 1462 1463 1464 1465 1466 1467
			   ret,
			   pending_idx,
			   tx_unmap_op.host_addr,
			   tx_unmap_op.handle,
			   tx_unmap_op.status);
		BUG();
	}
1468 1469
}

1470
static inline int tx_work_todo(struct xenvif_queue *queue)
I
Ian Campbell 已提交
1471
{
1472
	if (likely(RING_HAS_UNCONSUMED_REQUESTS(&queue->tx)))
I
Ian Campbell 已提交
1473 1474 1475 1476 1477
		return 1;

	return 0;
}

1478
static inline bool tx_dealloc_work_todo(struct xenvif_queue *queue)
1479
{
1480
	return queue->dealloc_cons != queue->dealloc_prod;
1481 1482
}

1483
void xenvif_unmap_frontend_data_rings(struct xenvif_queue *queue)
I
Ian Campbell 已提交
1484
{
1485 1486 1487 1488 1489 1490
	if (queue->tx.sring)
		xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(queue->vif),
					queue->tx.sring);
	if (queue->rx.sring)
		xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(queue->vif),
					queue->rx.sring);
I
Ian Campbell 已提交
1491 1492
}

1493 1494 1495
int xenvif_map_frontend_data_rings(struct xenvif_queue *queue,
				   grant_ref_t tx_ring_ref,
				   grant_ref_t rx_ring_ref)
I
Ian Campbell 已提交
1496
{
1497
	void *addr;
I
Ian Campbell 已提交
1498 1499
	struct xen_netif_tx_sring *txs;
	struct xen_netif_rx_sring *rxs;
1500
	RING_IDX rsp_prod, req_prod;
1501
	int err;
I
Ian Campbell 已提交
1502

1503
	err = xenbus_map_ring_valloc(xenvif_to_xenbus_device(queue->vif),
1504
				     &tx_ring_ref, 1, &addr);
1505
	if (err)
I
Ian Campbell 已提交
1506 1507
		goto err;

1508
	txs = (struct xen_netif_tx_sring *)addr;
1509 1510 1511 1512 1513 1514 1515 1516
	rsp_prod = READ_ONCE(txs->rsp_prod);
	req_prod = READ_ONCE(txs->req_prod);

	BACK_RING_ATTACH(&queue->tx, txs, rsp_prod, XEN_PAGE_SIZE);

	err = -EIO;
	if (req_prod - rsp_prod > RING_SIZE(&queue->tx))
		goto err;
I
Ian Campbell 已提交
1517

1518
	err = xenbus_map_ring_valloc(xenvif_to_xenbus_device(queue->vif),
1519
				     &rx_ring_ref, 1, &addr);
1520
	if (err)
I
Ian Campbell 已提交
1521 1522
		goto err;

1523
	rxs = (struct xen_netif_rx_sring *)addr;
1524 1525 1526 1527 1528 1529 1530 1531
	rsp_prod = READ_ONCE(rxs->rsp_prod);
	req_prod = READ_ONCE(rxs->req_prod);

	BACK_RING_ATTACH(&queue->rx, rxs, rsp_prod, XEN_PAGE_SIZE);

	err = -EIO;
	if (req_prod - rsp_prod > RING_SIZE(&queue->rx))
		goto err;
I
Ian Campbell 已提交
1532 1533 1534 1535

	return 0;

err:
1536
	xenvif_unmap_frontend_data_rings(queue);
I
Ian Campbell 已提交
1537 1538 1539
	return err;
}

1540 1541 1542 1543 1544 1545 1546 1547 1548
static bool xenvif_dealloc_kthread_should_stop(struct xenvif_queue *queue)
{
	/* Dealloc thread must remain running until all inflight
	 * packets complete.
	 */
	return kthread_should_stop() &&
		!atomic_read(&queue->inflight_packets);
}

1549 1550
int xenvif_dealloc_kthread(void *data)
{
1551
	struct xenvif_queue *queue = data;
1552

1553
	for (;;) {
1554 1555
		wait_event_interruptible(queue->dealloc_wq,
					 tx_dealloc_work_todo(queue) ||
1556 1557
					 xenvif_dealloc_kthread_should_stop(queue));
		if (xenvif_dealloc_kthread_should_stop(queue))
1558 1559
			break;

1560
		xenvif_tx_dealloc_action(queue);
1561 1562 1563 1564
		cond_resched();
	}

	/* Unmap anything remaining*/
1565 1566
	if (tx_dealloc_work_todo(queue))
		xenvif_tx_dealloc_action(queue);
1567 1568 1569 1570

	return 0;
}

1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598
static void make_ctrl_response(struct xenvif *vif,
			       const struct xen_netif_ctrl_request *req,
			       u32 status, u32 data)
{
	RING_IDX idx = vif->ctrl.rsp_prod_pvt;
	struct xen_netif_ctrl_response rsp = {
		.id = req->id,
		.type = req->type,
		.status = status,
		.data = data,
	};

	*RING_GET_RESPONSE(&vif->ctrl, idx) = rsp;
	vif->ctrl.rsp_prod_pvt = ++idx;
}

static void push_ctrl_response(struct xenvif *vif)
{
	int notify;

	RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&vif->ctrl, notify);
	if (notify)
		notify_remote_via_irq(vif->ctrl_irq);
}

static void process_ctrl_request(struct xenvif *vif,
				 const struct xen_netif_ctrl_request *req)
{
1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640
	u32 status = XEN_NETIF_CTRL_STATUS_NOT_SUPPORTED;
	u32 data = 0;

	switch (req->type) {
	case XEN_NETIF_CTRL_TYPE_SET_HASH_ALGORITHM:
		status = xenvif_set_hash_alg(vif, req->data[0]);
		break;

	case XEN_NETIF_CTRL_TYPE_GET_HASH_FLAGS:
		status = xenvif_get_hash_flags(vif, &data);
		break;

	case XEN_NETIF_CTRL_TYPE_SET_HASH_FLAGS:
		status = xenvif_set_hash_flags(vif, req->data[0]);
		break;

	case XEN_NETIF_CTRL_TYPE_SET_HASH_KEY:
		status = xenvif_set_hash_key(vif, req->data[0],
					     req->data[1]);
		break;

	case XEN_NETIF_CTRL_TYPE_GET_HASH_MAPPING_SIZE:
		status = XEN_NETIF_CTRL_STATUS_SUCCESS;
		data = XEN_NETBK_MAX_HASH_MAPPING_SIZE;
		break;

	case XEN_NETIF_CTRL_TYPE_SET_HASH_MAPPING_SIZE:
		status = xenvif_set_hash_mapping_size(vif,
						      req->data[0]);
		break;

	case XEN_NETIF_CTRL_TYPE_SET_HASH_MAPPING:
		status = xenvif_set_hash_mapping(vif, req->data[0],
						 req->data[1],
						 req->data[2]);
		break;

	default:
		break;
	}

	make_ctrl_response(vif, req, status, data);
1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674
	push_ctrl_response(vif);
}

static void xenvif_ctrl_action(struct xenvif *vif)
{
	for (;;) {
		RING_IDX req_prod, req_cons;

		req_prod = vif->ctrl.sring->req_prod;
		req_cons = vif->ctrl.req_cons;

		/* Make sure we can see requests before we process them. */
		rmb();

		if (req_cons == req_prod)
			break;

		while (req_cons != req_prod) {
			struct xen_netif_ctrl_request req;

			RING_COPY_REQUEST(&vif->ctrl, req_cons, &req);
			req_cons++;

			process_ctrl_request(vif, &req);
		}

		vif->ctrl.req_cons = req_cons;
		vif->ctrl.sring->req_event = req_cons + 1;
	}
}

static bool xenvif_ctrl_work_todo(struct xenvif *vif)
{
	if (likely(RING_HAS_UNCONSUMED_REQUESTS(&vif->ctrl)))
1675
		return true;
1676

1677
	return false;
1678 1679
}

1680
irqreturn_t xenvif_ctrl_irq_fn(int irq, void *data)
1681 1682
{
	struct xenvif *vif = data;
1683
	unsigned int eoi_flag = XEN_EOI_FLAG_SPURIOUS;
1684

1685
	while (xenvif_ctrl_work_todo(vif)) {
1686
		xenvif_ctrl_action(vif);
1687 1688 1689 1690
		eoi_flag = 0;
	}

	xen_irq_lateeoi(irq, eoi_flag);
1691

1692
	return IRQ_HANDLED;
1693 1694
}

I
Ian Campbell 已提交
1695 1696 1697 1698
static int __init netback_init(void)
{
	int rc = 0;

1699
	if (!xen_domain())
I
Ian Campbell 已提交
1700 1701
		return -ENODEV;

1702
	/* Allow as many queues as there are CPUs but max. 8 if user has not
1703 1704 1705
	 * specified a value.
	 */
	if (xenvif_max_queues == 0)
1706 1707
		xenvif_max_queues = min_t(unsigned int, MAX_QUEUES_DEFAULT,
					  num_online_cpus());
1708

1709
	if (fatal_skb_slots < XEN_NETBK_LEGACY_SLOTS_MAX) {
1710 1711
		pr_info("fatal_skb_slots too small (%d), bump it to XEN_NETBK_LEGACY_SLOTS_MAX (%d)\n",
			fatal_skb_slots, XEN_NETBK_LEGACY_SLOTS_MAX);
1712
		fatal_skb_slots = XEN_NETBK_LEGACY_SLOTS_MAX;
1713 1714
	}

I
Ian Campbell 已提交
1715 1716 1717 1718
	rc = xenvif_xenbus_init();
	if (rc)
		goto failed_init;

1719 1720 1721 1722
#ifdef CONFIG_DEBUG_FS
	xen_netback_dbg_root = debugfs_create_dir("xen-netback", NULL);
#endif /* CONFIG_DEBUG_FS */

I
Ian Campbell 已提交
1723 1724 1725 1726 1727 1728 1729 1730
	return 0;

failed_init:
	return rc;
}

module_init(netback_init);

1731 1732
static void __exit netback_fini(void)
{
1733
#ifdef CONFIG_DEBUG_FS
1734
	debugfs_remove_recursive(xen_netback_dbg_root);
1735
#endif /* CONFIG_DEBUG_FS */
1736 1737 1738 1739
	xenvif_xenbus_fini();
}
module_exit(netback_fini);

I
Ian Campbell 已提交
1740
MODULE_LICENSE("Dual BSD/GPL");
1741
MODULE_ALIAS("xen-backend:vif");