blob: a160b4ef5ba06a2f9eb4ff400aaec119beb9033a [file] [log] [blame]
Ian Campbellf942dc22011-03-15 00:06:18 +00001/*
2 * Back-end of the driver for virtual network devices. This portion of the
3 * driver exports a 'unified' network-device interface that can be accessed
4 * by any operating system that implements a compatible front end. A
5 * reference front-end implementation can be found in:
6 * drivers/net/xen-netfront.c
7 *
8 * Copyright (c) 2002-2005, K A Fraser
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License version 2
12 * as published by the Free Software Foundation; or, when distributed
13 * separately from the Linux kernel or incorporated into other
14 * software packages, subject to the following license:
15 *
16 * Permission is hereby granted, free of charge, to any person obtaining a copy
17 * of this source file (the "Software"), to deal in the Software without
18 * restriction, including without limitation the rights to use, copy, modify,
19 * merge, publish, distribute, sublicense, and/or sell copies of the Software,
20 * and to permit persons to whom the Software is furnished to do so, subject to
21 * the following conditions:
22 *
23 * The above copyright notice and this permission notice shall be included in
24 * all copies or substantial portions of the Software.
25 *
26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
29 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
31 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
32 * IN THE SOFTWARE.
33 */
34
35#include "common.h"
36
37#include <linux/kthread.h>
38#include <linux/if_vlan.h>
39#include <linux/udp.h>
Zoltan Kisse3377f32014-03-06 21:48:29 +000040#include <linux/highmem.h>
Ian Campbellf942dc22011-03-15 00:06:18 +000041
42#include <net/tcp.h>
43
Stefano Stabellinica981632012-08-08 17:21:23 +000044#include <xen/xen.h>
Ian Campbellf942dc22011-03-15 00:06:18 +000045#include <xen/events.h>
46#include <xen/interface/memory.h>
47
48#include <asm/xen/hypercall.h>
49#include <asm/xen/page.h>
50
Wei Liue1f00a692013-05-22 06:34:45 +000051/* Provide an option to disable split event channels at load time as
52 * event channels are limited resource. Split event channels are
53 * enabled by default.
54 */
55bool separate_tx_rx_irq = 1;
56module_param(separate_tx_rx_irq, bool, 0644);
57
Zoltan Kiss09350782014-03-06 21:48:30 +000058/* When guest ring is filled up, qdisc queues the packets for us, but we have
Zoltan Kiss0e59a4a2014-03-24 23:59:50 +000059 * to timeout them, otherwise other guests' packets can get stuck there
Zoltan Kiss09350782014-03-06 21:48:30 +000060 */
61unsigned int rx_drain_timeout_msecs = 10000;
62module_param(rx_drain_timeout_msecs, uint, 0444);
63unsigned int rx_drain_timeout_jiffies;
64
Wei Liu2810e5b2013-04-22 02:20:42 +000065/*
66 * This is the maximum slots a skb can have. If a guest sends a skb
67 * which exceeds this limit it is considered malicious.
68 */
Wei Liu37641492013-05-02 00:43:59 +000069#define FATAL_SKB_SLOTS_DEFAULT 20
70static unsigned int fatal_skb_slots = FATAL_SKB_SLOTS_DEFAULT;
71module_param(fatal_skb_slots, uint, 0444);
72
Wei Liu73764192013-08-26 12:59:39 +010073static void xenvif_idx_release(struct xenvif *vif, u16 pending_idx,
74 u8 status);
75
Ian Campbellf942dc22011-03-15 00:06:18 +000076static void make_tx_response(struct xenvif *vif,
77 struct xen_netif_tx_request *txp,
78 s8 st);
Wei Liub3f980b2013-08-26 12:59:38 +010079
80static inline int tx_work_todo(struct xenvif *vif);
81static inline int rx_work_todo(struct xenvif *vif);
82
Ian Campbellf942dc22011-03-15 00:06:18 +000083static struct xen_netif_rx_response *make_rx_response(struct xenvif *vif,
84 u16 id,
85 s8 st,
86 u16 offset,
87 u16 size,
88 u16 flags);
89
Wei Liub3f980b2013-08-26 12:59:38 +010090static inline unsigned long idx_to_pfn(struct xenvif *vif,
Ian Campbellea066ad2011-10-05 00:28:46 +000091 u16 idx)
Ian Campbellf942dc22011-03-15 00:06:18 +000092{
Wei Liub3f980b2013-08-26 12:59:38 +010093 return page_to_pfn(vif->mmap_pages[idx]);
Ian Campbellf942dc22011-03-15 00:06:18 +000094}
95
Wei Liub3f980b2013-08-26 12:59:38 +010096static inline unsigned long idx_to_kaddr(struct xenvif *vif,
Ian Campbellea066ad2011-10-05 00:28:46 +000097 u16 idx)
Ian Campbellf942dc22011-03-15 00:06:18 +000098{
Wei Liub3f980b2013-08-26 12:59:38 +010099 return (unsigned long)pfn_to_kaddr(idx_to_pfn(vif, idx));
Ian Campbellf942dc22011-03-15 00:06:18 +0000100}
101
Zoltan Kiss7aceb472014-03-24 23:59:51 +0000102#define callback_param(vif, pending_idx) \
103 (vif->pending_tx_info[pending_idx].callback_struct)
104
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000105/* Find the containing VIF's structure from a pointer in pending_tx_info array
106 */
Zoltan Kiss58375742014-05-15 11:08:34 +0100107static inline struct xenvif *ubuf_to_vif(const struct ubuf_info *ubuf)
Zoltan Kiss3e2234b2014-03-06 21:48:25 +0000108{
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000109 u16 pending_idx = ubuf->desc;
110 struct pending_tx_info *temp =
111 container_of(ubuf, struct pending_tx_info, callback_struct);
112 return container_of(temp - pending_idx,
113 struct xenvif,
114 pending_tx_info[0]);
Zoltan Kiss3e2234b2014-03-06 21:48:25 +0000115}
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000116
Paul Durrant2eba61d2013-10-16 17:50:29 +0100117/* This is a miniumum size for the linear area to avoid lots of
118 * calls to __pskb_pull_tail() as we set up checksum offsets. The
119 * value 128 was chosen as it covers all IPv4 and most likely
120 * IPv6 headers.
Ian Campbellf942dc22011-03-15 00:06:18 +0000121 */
Paul Durrant2eba61d2013-10-16 17:50:29 +0100122#define PKT_PROT_LEN 128
Ian Campbellf942dc22011-03-15 00:06:18 +0000123
Ian Campbellea066ad2011-10-05 00:28:46 +0000124static u16 frag_get_pending_idx(skb_frag_t *frag)
125{
126 return (u16)frag->page_offset;
127}
128
129static void frag_set_pending_idx(skb_frag_t *frag, u16 pending_idx)
130{
131 frag->page_offset = pending_idx;
132}
133
Ian Campbellf942dc22011-03-15 00:06:18 +0000134static inline pending_ring_idx_t pending_index(unsigned i)
135{
136 return i & (MAX_PENDING_REQS-1);
137}
138
Paul Durrantca2f09f2013-12-06 16:36:07 +0000139bool xenvif_rx_ring_slots_available(struct xenvif *vif, int needed)
Ian Campbellf942dc22011-03-15 00:06:18 +0000140{
Paul Durrantca2f09f2013-12-06 16:36:07 +0000141 RING_IDX prod, cons;
Ian Campbellf942dc22011-03-15 00:06:18 +0000142
Paul Durrantca2f09f2013-12-06 16:36:07 +0000143 do {
144 prod = vif->rx.sring->req_prod;
145 cons = vif->rx.req_cons;
Ian Campbellf942dc22011-03-15 00:06:18 +0000146
Paul Durrantca2f09f2013-12-06 16:36:07 +0000147 if (prod - cons >= needed)
148 return true;
Ian Campbellf942dc22011-03-15 00:06:18 +0000149
Paul Durrantca2f09f2013-12-06 16:36:07 +0000150 vif->rx.sring->req_event = prod + 1;
Ian Campbellf942dc22011-03-15 00:06:18 +0000151
Paul Durrantca2f09f2013-12-06 16:36:07 +0000152 /* Make sure event is visible before we check prod
153 * again.
154 */
155 mb();
156 } while (vif->rx.sring->req_prod != prod);
Ian Campbellf942dc22011-03-15 00:06:18 +0000157
Paul Durrantca2f09f2013-12-06 16:36:07 +0000158 return false;
Ian Campbellf942dc22011-03-15 00:06:18 +0000159}
160
161/*
162 * Returns true if we should start a new receive buffer instead of
163 * adding 'size' bytes to a buffer which currently contains 'offset'
164 * bytes.
165 */
Zoltan Kiss59ae9fc2014-06-04 19:58:51 +0100166static bool start_new_rx_buffer(int offset, unsigned long size, int head,
167 bool full_coalesce)
Ian Campbellf942dc22011-03-15 00:06:18 +0000168{
169 /* simple case: we have completely filled the current buffer. */
170 if (offset == MAX_BUFFER_OFFSET)
171 return true;
172
173 /*
174 * complex case: start a fresh buffer if the current frag
175 * would overflow the current buffer but only if:
176 * (i) this frag would fit completely in the next buffer
177 * and (ii) there is already some data in the current buffer
178 * and (iii) this is not the head buffer.
Zoltan Kiss59ae9fc2014-06-04 19:58:51 +0100179 * and (iv) there is no need to fully utilize the buffers
Ian Campbellf942dc22011-03-15 00:06:18 +0000180 *
181 * Where:
182 * - (i) stops us splitting a frag into two copies
183 * unless the frag is too large for a single buffer.
184 * - (ii) stops us from leaving a buffer pointlessly empty.
185 * - (iii) stops us leaving the first buffer
186 * empty. Strictly speaking this is already covered
187 * by (ii) but is explicitly checked because
188 * netfront relies on the first buffer being
189 * non-empty and can crash otherwise.
Zoltan Kiss59ae9fc2014-06-04 19:58:51 +0100190 * - (iv) is needed for skbs which can use up more than MAX_SKB_FRAGS
191 * slot
Ian Campbellf942dc22011-03-15 00:06:18 +0000192 *
193 * This means we will effectively linearise small
194 * frags but do not needlessly split large buffers
195 * into multiple copies tend to give large frags their
196 * own buffers as before.
197 */
Paul Durrant0576edd2014-03-28 11:39:05 +0000198 BUG_ON(size > MAX_BUFFER_OFFSET);
Zoltan Kiss59ae9fc2014-06-04 19:58:51 +0100199 if ((offset + size > MAX_BUFFER_OFFSET) && offset && !head &&
200 !full_coalesce)
Ian Campbellf942dc22011-03-15 00:06:18 +0000201 return true;
202
203 return false;
204}
205
Ian Campbellf942dc22011-03-15 00:06:18 +0000206struct netrx_pending_operations {
207 unsigned copy_prod, copy_cons;
208 unsigned meta_prod, meta_cons;
209 struct gnttab_copy *copy;
Wei Liub3f980b2013-08-26 12:59:38 +0100210 struct xenvif_rx_meta *meta;
Ian Campbellf942dc22011-03-15 00:06:18 +0000211 int copy_off;
212 grant_ref_t copy_gref;
213};
214
Wei Liub3f980b2013-08-26 12:59:38 +0100215static struct xenvif_rx_meta *get_next_rx_buffer(struct xenvif *vif,
216 struct netrx_pending_operations *npo)
Ian Campbellf942dc22011-03-15 00:06:18 +0000217{
Wei Liub3f980b2013-08-26 12:59:38 +0100218 struct xenvif_rx_meta *meta;
Ian Campbellf942dc22011-03-15 00:06:18 +0000219 struct xen_netif_rx_request *req;
220
221 req = RING_GET_REQUEST(&vif->rx, vif->rx.req_cons++);
222
223 meta = npo->meta + npo->meta_prod++;
Paul Durrant82cada22013-10-16 17:50:32 +0100224 meta->gso_type = XEN_NETIF_GSO_TYPE_NONE;
Ian Campbellf942dc22011-03-15 00:06:18 +0000225 meta->gso_size = 0;
226 meta->size = 0;
227 meta->id = req->id;
228
229 npo->copy_off = 0;
230 npo->copy_gref = req->gref;
231
232 return meta;
233}
234
Zoltan Kiss59ae9fc2014-06-04 19:58:51 +0100235struct xenvif_rx_cb {
236 int meta_slots_used;
237 bool full_coalesce;
238};
239
240#define XENVIF_RX_CB(skb) ((struct xenvif_rx_cb *)(skb)->cb)
241
Wei Liu33bc8012013-10-08 10:54:21 +0100242/*
243 * Set up the grant operations for this fragment. If it's a flipping
244 * interface, we also set up the unmap request from here.
245 */
Wei Liu73764192013-08-26 12:59:39 +0100246static void xenvif_gop_frag_copy(struct xenvif *vif, struct sk_buff *skb,
247 struct netrx_pending_operations *npo,
248 struct page *page, unsigned long size,
Zoltan Kiss3e2234b2014-03-06 21:48:25 +0000249 unsigned long offset, int *head,
250 struct xenvif *foreign_vif,
251 grant_ref_t foreign_gref)
Ian Campbellf942dc22011-03-15 00:06:18 +0000252{
253 struct gnttab_copy *copy_gop;
Wei Liub3f980b2013-08-26 12:59:38 +0100254 struct xenvif_rx_meta *meta;
Ian Campbellf942dc22011-03-15 00:06:18 +0000255 unsigned long bytes;
Annie Li5bd07672014-03-10 22:58:34 +0800256 int gso_type = XEN_NETIF_GSO_TYPE_NONE;
Ian Campbellf942dc22011-03-15 00:06:18 +0000257
258 /* Data must not cross a page boundary. */
Ian Campbell6a8ed462012-10-10 03:48:42 +0000259 BUG_ON(size + offset > PAGE_SIZE<<compound_order(page));
Ian Campbellf942dc22011-03-15 00:06:18 +0000260
261 meta = npo->meta + npo->meta_prod - 1;
262
Ian Campbell6a8ed462012-10-10 03:48:42 +0000263 /* Skip unused frames from start of page */
264 page += offset >> PAGE_SHIFT;
265 offset &= ~PAGE_MASK;
266
Ian Campbellf942dc22011-03-15 00:06:18 +0000267 while (size > 0) {
Ian Campbell6a8ed462012-10-10 03:48:42 +0000268 BUG_ON(offset >= PAGE_SIZE);
Ian Campbellf942dc22011-03-15 00:06:18 +0000269 BUG_ON(npo->copy_off > MAX_BUFFER_OFFSET);
270
Ian Campbell6a8ed462012-10-10 03:48:42 +0000271 bytes = PAGE_SIZE - offset;
272
273 if (bytes > size)
274 bytes = size;
275
Zoltan Kiss59ae9fc2014-06-04 19:58:51 +0100276 if (start_new_rx_buffer(npo->copy_off,
277 bytes,
278 *head,
279 XENVIF_RX_CB(skb)->full_coalesce)) {
Ian Campbellf942dc22011-03-15 00:06:18 +0000280 /*
281 * Netfront requires there to be some data in the head
282 * buffer.
283 */
Wei Liu33bc8012013-10-08 10:54:21 +0100284 BUG_ON(*head);
Ian Campbellf942dc22011-03-15 00:06:18 +0000285
286 meta = get_next_rx_buffer(vif, npo);
287 }
288
Ian Campbellf942dc22011-03-15 00:06:18 +0000289 if (npo->copy_off + bytes > MAX_BUFFER_OFFSET)
290 bytes = MAX_BUFFER_OFFSET - npo->copy_off;
291
292 copy_gop = npo->copy + npo->copy_prod++;
293 copy_gop->flags = GNTCOPY_dest_gref;
Wei Liub3f980b2013-08-26 12:59:38 +0100294 copy_gop->len = bytes;
295
Zoltan Kiss3e2234b2014-03-06 21:48:25 +0000296 if (foreign_vif) {
297 copy_gop->source.domid = foreign_vif->domid;
298 copy_gop->source.u.ref = foreign_gref;
299 copy_gop->flags |= GNTCOPY_source_gref;
300 } else {
301 copy_gop->source.domid = DOMID_SELF;
302 copy_gop->source.u.gmfn =
303 virt_to_mfn(page_address(page));
304 }
Ian Campbellf942dc22011-03-15 00:06:18 +0000305 copy_gop->source.offset = offset;
Ian Campbellf942dc22011-03-15 00:06:18 +0000306
Wei Liub3f980b2013-08-26 12:59:38 +0100307 copy_gop->dest.domid = vif->domid;
Ian Campbellf942dc22011-03-15 00:06:18 +0000308 copy_gop->dest.offset = npo->copy_off;
309 copy_gop->dest.u.ref = npo->copy_gref;
Ian Campbellf942dc22011-03-15 00:06:18 +0000310
311 npo->copy_off += bytes;
312 meta->size += bytes;
313
314 offset += bytes;
315 size -= bytes;
316
Ian Campbell6a8ed462012-10-10 03:48:42 +0000317 /* Next frame */
318 if (offset == PAGE_SIZE && size) {
319 BUG_ON(!PageCompound(page));
320 page++;
321 offset = 0;
322 }
323
Ian Campbellf942dc22011-03-15 00:06:18 +0000324 /* Leave a gap for the GSO descriptor. */
Annie Li5bd07672014-03-10 22:58:34 +0800325 if (skb_is_gso(skb)) {
326 if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4)
327 gso_type = XEN_NETIF_GSO_TYPE_TCPV4;
328 else if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
329 gso_type = XEN_NETIF_GSO_TYPE_TCPV6;
330 }
Paul Durrant82cada22013-10-16 17:50:32 +0100331
332 if (*head && ((1 << gso_type) & vif->gso_mask))
Ian Campbellf942dc22011-03-15 00:06:18 +0000333 vif->rx.req_cons++;
334
Wei Liu33bc8012013-10-08 10:54:21 +0100335 *head = 0; /* There must be something in this buffer now. */
Ian Campbellf942dc22011-03-15 00:06:18 +0000336
337 }
338}
339
340/*
Zoltan Kiss58375742014-05-15 11:08:34 +0100341 * Find the grant ref for a given frag in a chain of struct ubuf_info's
342 * skb: the skb itself
343 * i: the frag's number
344 * ubuf: a pointer to an element in the chain. It should not be NULL
345 *
346 * Returns a pointer to the element in the chain where the page were found. If
347 * not found, returns NULL.
348 * See the definition of callback_struct in common.h for more details about
349 * the chain.
350 */
351static const struct ubuf_info *xenvif_find_gref(const struct sk_buff *const skb,
352 const int i,
353 const struct ubuf_info *ubuf)
354{
355 struct xenvif *foreign_vif = ubuf_to_vif(ubuf);
356
357 do {
358 u16 pending_idx = ubuf->desc;
359
360 if (skb_shinfo(skb)->frags[i].page.p ==
361 foreign_vif->mmap_pages[pending_idx])
362 break;
363 ubuf = (struct ubuf_info *) ubuf->ctx;
364 } while (ubuf);
365
366 return ubuf;
367}
368
369/*
Ian Campbellf942dc22011-03-15 00:06:18 +0000370 * Prepare an SKB to be transmitted to the frontend.
371 *
372 * This function is responsible for allocating grant operations, meta
373 * structures, etc.
374 *
375 * It returns the number of meta structures consumed. The number of
376 * ring slots used is always equal to the number of meta slots used
377 * plus the number of GSO descriptors used. Currently, we use either
378 * zero GSO descriptors (for non-GSO packets) or one descriptor (for
379 * frontend-side LRO).
380 */
Wei Liu73764192013-08-26 12:59:39 +0100381static int xenvif_gop_skb(struct sk_buff *skb,
382 struct netrx_pending_operations *npo)
Ian Campbellf942dc22011-03-15 00:06:18 +0000383{
384 struct xenvif *vif = netdev_priv(skb->dev);
385 int nr_frags = skb_shinfo(skb)->nr_frags;
386 int i;
387 struct xen_netif_rx_request *req;
Wei Liub3f980b2013-08-26 12:59:38 +0100388 struct xenvif_rx_meta *meta;
Ian Campbellf942dc22011-03-15 00:06:18 +0000389 unsigned char *data;
Wei Liu33bc8012013-10-08 10:54:21 +0100390 int head = 1;
Ian Campbellf942dc22011-03-15 00:06:18 +0000391 int old_meta_prod;
Paul Durrant82cada22013-10-16 17:50:32 +0100392 int gso_type;
Zoltan Kiss58375742014-05-15 11:08:34 +0100393 const struct ubuf_info *ubuf = skb_shinfo(skb)->destructor_arg;
394 const struct ubuf_info *const head_ubuf = ubuf;
Ian Campbellf942dc22011-03-15 00:06:18 +0000395
396 old_meta_prod = npo->meta_prod;
397
Annie Li5bd07672014-03-10 22:58:34 +0800398 gso_type = XEN_NETIF_GSO_TYPE_NONE;
399 if (skb_is_gso(skb)) {
400 if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4)
401 gso_type = XEN_NETIF_GSO_TYPE_TCPV4;
402 else if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
403 gso_type = XEN_NETIF_GSO_TYPE_TCPV6;
Paul Durrant82cada22013-10-16 17:50:32 +0100404 }
405
Ian Campbellf942dc22011-03-15 00:06:18 +0000406 /* Set up a GSO prefix descriptor, if necessary */
Paul Durranta3314f32013-12-12 14:20:13 +0000407 if ((1 << gso_type) & vif->gso_prefix_mask) {
Ian Campbellf942dc22011-03-15 00:06:18 +0000408 req = RING_GET_REQUEST(&vif->rx, vif->rx.req_cons++);
409 meta = npo->meta + npo->meta_prod++;
Paul Durrant82cada22013-10-16 17:50:32 +0100410 meta->gso_type = gso_type;
Annie Li5bd07672014-03-10 22:58:34 +0800411 meta->gso_size = skb_shinfo(skb)->gso_size;
Ian Campbellf942dc22011-03-15 00:06:18 +0000412 meta->size = 0;
413 meta->id = req->id;
414 }
415
416 req = RING_GET_REQUEST(&vif->rx, vif->rx.req_cons++);
417 meta = npo->meta + npo->meta_prod++;
418
Paul Durrant82cada22013-10-16 17:50:32 +0100419 if ((1 << gso_type) & vif->gso_mask) {
420 meta->gso_type = gso_type;
Annie Li5bd07672014-03-10 22:58:34 +0800421 meta->gso_size = skb_shinfo(skb)->gso_size;
Paul Durrant82cada22013-10-16 17:50:32 +0100422 } else {
423 meta->gso_type = XEN_NETIF_GSO_TYPE_NONE;
Ian Campbellf942dc22011-03-15 00:06:18 +0000424 meta->gso_size = 0;
Paul Durrant82cada22013-10-16 17:50:32 +0100425 }
Ian Campbellf942dc22011-03-15 00:06:18 +0000426
427 meta->size = 0;
428 meta->id = req->id;
429 npo->copy_off = 0;
430 npo->copy_gref = req->gref;
431
432 data = skb->data;
433 while (data < skb_tail_pointer(skb)) {
434 unsigned int offset = offset_in_page(data);
435 unsigned int len = PAGE_SIZE - offset;
436
437 if (data + len > skb_tail_pointer(skb))
438 len = skb_tail_pointer(skb) - data;
439
Wei Liu73764192013-08-26 12:59:39 +0100440 xenvif_gop_frag_copy(vif, skb, npo,
Zoltan Kiss3e2234b2014-03-06 21:48:25 +0000441 virt_to_page(data), len, offset, &head,
442 NULL,
443 0);
Ian Campbellf942dc22011-03-15 00:06:18 +0000444 data += len;
445 }
446
447 for (i = 0; i < nr_frags; i++) {
Zoltan Kiss58375742014-05-15 11:08:34 +0100448 /* This variable also signals whether foreign_gref has a real
449 * value or not.
450 */
451 struct xenvif *foreign_vif = NULL;
452 grant_ref_t foreign_gref;
453
454 if ((skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) &&
455 (ubuf->callback == &xenvif_zerocopy_callback)) {
456 const struct ubuf_info *const startpoint = ubuf;
457
458 /* Ideally ubuf points to the chain element which
459 * belongs to this frag. Or if frags were removed from
460 * the beginning, then shortly before it.
461 */
462 ubuf = xenvif_find_gref(skb, i, ubuf);
463
464 /* Try again from the beginning of the list, if we
465 * haven't tried from there. This only makes sense in
466 * the unlikely event of reordering the original frags.
467 * For injected local pages it's an unnecessary second
468 * run.
469 */
470 if (unlikely(!ubuf) && startpoint != head_ubuf)
471 ubuf = xenvif_find_gref(skb, i, head_ubuf);
472
473 if (likely(ubuf)) {
474 u16 pending_idx = ubuf->desc;
475
476 foreign_vif = ubuf_to_vif(ubuf);
477 foreign_gref = foreign_vif->pending_tx_info[pending_idx].req.gref;
478 /* Just a safety measure. If this was the last
479 * element on the list, the for loop will
480 * iterate again if a local page were added to
481 * the end. Using head_ubuf here prevents the
482 * second search on the chain. Or the original
483 * frags changed order, but that's less likely.
484 * In any way, ubuf shouldn't be NULL.
485 */
486 ubuf = ubuf->ctx ?
487 (struct ubuf_info *) ubuf->ctx :
488 head_ubuf;
489 } else
490 /* This frag was a local page, added to the
491 * array after the skb left netback.
492 */
493 ubuf = head_ubuf;
494 }
Wei Liu73764192013-08-26 12:59:39 +0100495 xenvif_gop_frag_copy(vif, skb, npo,
496 skb_frag_page(&skb_shinfo(skb)->frags[i]),
497 skb_frag_size(&skb_shinfo(skb)->frags[i]),
498 skb_shinfo(skb)->frags[i].page_offset,
Zoltan Kiss3e2234b2014-03-06 21:48:25 +0000499 &head,
500 foreign_vif,
Zoltan Kiss58375742014-05-15 11:08:34 +0100501 foreign_vif ? foreign_gref : UINT_MAX);
Ian Campbellf942dc22011-03-15 00:06:18 +0000502 }
503
504 return npo->meta_prod - old_meta_prod;
505}
506
507/*
Wei Liu73764192013-08-26 12:59:39 +0100508 * This is a twin to xenvif_gop_skb. Assume that xenvif_gop_skb was
Ian Campbellf942dc22011-03-15 00:06:18 +0000509 * used to set up the operations on the top of
510 * netrx_pending_operations, which have since been done. Check that
511 * they didn't give any errors and advance over them.
512 */
Wei Liu73764192013-08-26 12:59:39 +0100513static int xenvif_check_gop(struct xenvif *vif, int nr_meta_slots,
514 struct netrx_pending_operations *npo)
Ian Campbellf942dc22011-03-15 00:06:18 +0000515{
516 struct gnttab_copy *copy_op;
517 int status = XEN_NETIF_RSP_OKAY;
518 int i;
519
520 for (i = 0; i < nr_meta_slots; i++) {
521 copy_op = npo->copy + npo->copy_cons++;
522 if (copy_op->status != GNTST_okay) {
523 netdev_dbg(vif->dev,
524 "Bad status %d from copy to DOM%d.\n",
525 copy_op->status, vif->domid);
526 status = XEN_NETIF_RSP_ERROR;
527 }
528 }
529
530 return status;
531}
532
Wei Liu73764192013-08-26 12:59:39 +0100533static void xenvif_add_frag_responses(struct xenvif *vif, int status,
534 struct xenvif_rx_meta *meta,
535 int nr_meta_slots)
Ian Campbellf942dc22011-03-15 00:06:18 +0000536{
537 int i;
538 unsigned long offset;
539
540 /* No fragments used */
541 if (nr_meta_slots <= 1)
542 return;
543
544 nr_meta_slots--;
545
546 for (i = 0; i < nr_meta_slots; i++) {
547 int flags;
548 if (i == nr_meta_slots - 1)
549 flags = 0;
550 else
551 flags = XEN_NETRXF_more_data;
552
553 offset = 0;
554 make_rx_response(vif, meta[i].id, status, offset,
555 meta[i].size, flags);
556 }
557}
558
Paul Durrantca2f09f2013-12-06 16:36:07 +0000559void xenvif_kick_thread(struct xenvif *vif)
Ian Campbellf942dc22011-03-15 00:06:18 +0000560{
Wei Liub3f980b2013-08-26 12:59:38 +0100561 wake_up(&vif->wq);
562}
563
Paul Durrantca2f09f2013-12-06 16:36:07 +0000564static void xenvif_rx_action(struct xenvif *vif)
Wei Liub3f980b2013-08-26 12:59:38 +0100565{
Ian Campbellf942dc22011-03-15 00:06:18 +0000566 s8 status;
Wei Liue1f00a692013-05-22 06:34:45 +0000567 u16 flags;
Ian Campbellf942dc22011-03-15 00:06:18 +0000568 struct xen_netif_rx_response *resp;
569 struct sk_buff_head rxq;
570 struct sk_buff *skb;
571 LIST_HEAD(notify);
572 int ret;
Ian Campbellf942dc22011-03-15 00:06:18 +0000573 unsigned long offset;
Paul Durrant11b57f92014-01-08 12:41:58 +0000574 bool need_to_notify = false;
Ian Campbellf942dc22011-03-15 00:06:18 +0000575
576 struct netrx_pending_operations npo = {
Wei Liub3f980b2013-08-26 12:59:38 +0100577 .copy = vif->grant_copy_op,
578 .meta = vif->meta,
Ian Campbellf942dc22011-03-15 00:06:18 +0000579 };
580
581 skb_queue_head_init(&rxq);
582
Wei Liub3f980b2013-08-26 12:59:38 +0100583 while ((skb = skb_dequeue(&vif->rx_queue)) != NULL) {
Zoltan Kiss9ab98312014-02-04 19:54:37 +0000584 RING_IDX max_slots_needed;
Paul Durrant1425c7a2014-03-28 11:39:07 +0000585 RING_IDX old_req_cons;
586 RING_IDX ring_slots_used;
Paul Durrantca2f09f2013-12-06 16:36:07 +0000587 int i;
588
589 /* We need a cheap worse case estimate for the number of
590 * slots we'll use.
591 */
592
593 max_slots_needed = DIV_ROUND_UP(offset_in_page(skb->data) +
594 skb_headlen(skb),
595 PAGE_SIZE);
596 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
597 unsigned int size;
Paul Durranta02eb472014-03-28 11:39:06 +0000598 unsigned int offset;
599
Paul Durrantca2f09f2013-12-06 16:36:07 +0000600 size = skb_frag_size(&skb_shinfo(skb)->frags[i]);
Paul Durranta02eb472014-03-28 11:39:06 +0000601 offset = skb_shinfo(skb)->frags[i].page_offset;
602
603 /* For a worse-case estimate we need to factor in
604 * the fragment page offset as this will affect the
605 * number of times xenvif_gop_frag_copy() will
606 * call start_new_rx_buffer().
607 */
608 max_slots_needed += DIV_ROUND_UP(offset + size,
609 PAGE_SIZE);
Paul Durrantca2f09f2013-12-06 16:36:07 +0000610 }
Paul Durranta02eb472014-03-28 11:39:06 +0000611
612 /* To avoid the estimate becoming too pessimal for some
613 * frontends that limit posted rx requests, cap the estimate
Zoltan Kiss59ae9fc2014-06-04 19:58:51 +0100614 * at MAX_SKB_FRAGS. In this case netback will fully coalesce
615 * the skb into the provided slots.
Paul Durranta02eb472014-03-28 11:39:06 +0000616 */
Zoltan Kiss59ae9fc2014-06-04 19:58:51 +0100617 if (max_slots_needed > MAX_SKB_FRAGS) {
Paul Durranta02eb472014-03-28 11:39:06 +0000618 max_slots_needed = MAX_SKB_FRAGS;
Zoltan Kiss59ae9fc2014-06-04 19:58:51 +0100619 XENVIF_RX_CB(skb)->full_coalesce = true;
620 } else {
621 XENVIF_RX_CB(skb)->full_coalesce = false;
622 }
Paul Durranta02eb472014-03-28 11:39:06 +0000623
624 /* We may need one more slot for GSO metadata */
Annie Li5bd07672014-03-10 22:58:34 +0800625 if (skb_is_gso(skb) &&
626 (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4 ||
627 skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6))
Paul Durrantca2f09f2013-12-06 16:36:07 +0000628 max_slots_needed++;
629
630 /* If the skb may not fit then bail out now */
631 if (!xenvif_rx_ring_slots_available(vif, max_slots_needed)) {
632 skb_queue_head(&vif->rx_queue, skb);
Paul Durrant11b57f92014-01-08 12:41:58 +0000633 need_to_notify = true;
Zoltan Kiss9ab98312014-02-04 19:54:37 +0000634 vif->rx_last_skb_slots = max_slots_needed;
Paul Durrantca2f09f2013-12-06 16:36:07 +0000635 break;
Zoltan Kiss9ab98312014-02-04 19:54:37 +0000636 } else
637 vif->rx_last_skb_slots = 0;
Ian Campbellf942dc22011-03-15 00:06:18 +0000638
Paul Durrant1425c7a2014-03-28 11:39:07 +0000639 old_req_cons = vif->rx.req_cons;
Zoltan Kiss8f13dd92014-03-06 21:48:23 +0000640 XENVIF_RX_CB(skb)->meta_slots_used = xenvif_gop_skb(skb, &npo);
Paul Durrant1425c7a2014-03-28 11:39:07 +0000641 ring_slots_used = vif->rx.req_cons - old_req_cons;
642
643 BUG_ON(ring_slots_used > max_slots_needed);
Ian Campbellf942dc22011-03-15 00:06:18 +0000644
645 __skb_queue_tail(&rxq, skb);
Ian Campbellf942dc22011-03-15 00:06:18 +0000646 }
647
Wei Liub3f980b2013-08-26 12:59:38 +0100648 BUG_ON(npo.meta_prod > ARRAY_SIZE(vif->meta));
Ian Campbellf942dc22011-03-15 00:06:18 +0000649
650 if (!npo.copy_prod)
Paul Durrantca2f09f2013-12-06 16:36:07 +0000651 goto done;
Ian Campbellf942dc22011-03-15 00:06:18 +0000652
Paul Durrantac3d5ac2013-12-23 09:27:17 +0000653 BUG_ON(npo.copy_prod > MAX_GRANT_COPY_OPS);
Wei Liub3f980b2013-08-26 12:59:38 +0100654 gnttab_batch_copy(vif->grant_copy_op, npo.copy_prod);
Ian Campbellf942dc22011-03-15 00:06:18 +0000655
656 while ((skb = __skb_dequeue(&rxq)) != NULL) {
Ian Campbellf942dc22011-03-15 00:06:18 +0000657
Paul Durrant82cada22013-10-16 17:50:32 +0100658 if ((1 << vif->meta[npo.meta_cons].gso_type) &
659 vif->gso_prefix_mask) {
Ian Campbellf942dc22011-03-15 00:06:18 +0000660 resp = RING_GET_RESPONSE(&vif->rx,
Wei Liub3f980b2013-08-26 12:59:38 +0100661 vif->rx.rsp_prod_pvt++);
Ian Campbellf942dc22011-03-15 00:06:18 +0000662
663 resp->flags = XEN_NETRXF_gso_prefix | XEN_NETRXF_more_data;
664
Wei Liub3f980b2013-08-26 12:59:38 +0100665 resp->offset = vif->meta[npo.meta_cons].gso_size;
666 resp->id = vif->meta[npo.meta_cons].id;
Zoltan Kiss8f13dd92014-03-06 21:48:23 +0000667 resp->status = XENVIF_RX_CB(skb)->meta_slots_used;
Ian Campbellf942dc22011-03-15 00:06:18 +0000668
669 npo.meta_cons++;
Zoltan Kiss8f13dd92014-03-06 21:48:23 +0000670 XENVIF_RX_CB(skb)->meta_slots_used--;
Ian Campbellf942dc22011-03-15 00:06:18 +0000671 }
672
673
674 vif->dev->stats.tx_bytes += skb->len;
675 vif->dev->stats.tx_packets++;
676
Zoltan Kiss8f13dd92014-03-06 21:48:23 +0000677 status = xenvif_check_gop(vif,
678 XENVIF_RX_CB(skb)->meta_slots_used,
679 &npo);
Ian Campbellf942dc22011-03-15 00:06:18 +0000680
Zoltan Kiss8f13dd92014-03-06 21:48:23 +0000681 if (XENVIF_RX_CB(skb)->meta_slots_used == 1)
Ian Campbellf942dc22011-03-15 00:06:18 +0000682 flags = 0;
683 else
684 flags = XEN_NETRXF_more_data;
685
686 if (skb->ip_summed == CHECKSUM_PARTIAL) /* local packet? */
687 flags |= XEN_NETRXF_csum_blank | XEN_NETRXF_data_validated;
688 else if (skb->ip_summed == CHECKSUM_UNNECESSARY)
689 /* remote but checksummed. */
690 flags |= XEN_NETRXF_data_validated;
691
692 offset = 0;
Wei Liub3f980b2013-08-26 12:59:38 +0100693 resp = make_rx_response(vif, vif->meta[npo.meta_cons].id,
Ian Campbellf942dc22011-03-15 00:06:18 +0000694 status, offset,
Wei Liub3f980b2013-08-26 12:59:38 +0100695 vif->meta[npo.meta_cons].size,
Ian Campbellf942dc22011-03-15 00:06:18 +0000696 flags);
697
Paul Durrant82cada22013-10-16 17:50:32 +0100698 if ((1 << vif->meta[npo.meta_cons].gso_type) &
699 vif->gso_mask) {
Ian Campbellf942dc22011-03-15 00:06:18 +0000700 struct xen_netif_extra_info *gso =
701 (struct xen_netif_extra_info *)
702 RING_GET_RESPONSE(&vif->rx,
703 vif->rx.rsp_prod_pvt++);
704
705 resp->flags |= XEN_NETRXF_extra_info;
706
Paul Durrant82cada22013-10-16 17:50:32 +0100707 gso->u.gso.type = vif->meta[npo.meta_cons].gso_type;
Wei Liub3f980b2013-08-26 12:59:38 +0100708 gso->u.gso.size = vif->meta[npo.meta_cons].gso_size;
Ian Campbellf942dc22011-03-15 00:06:18 +0000709 gso->u.gso.pad = 0;
710 gso->u.gso.features = 0;
711
712 gso->type = XEN_NETIF_EXTRA_TYPE_GSO;
713 gso->flags = 0;
714 }
715
Wei Liu73764192013-08-26 12:59:39 +0100716 xenvif_add_frag_responses(vif, status,
717 vif->meta + npo.meta_cons + 1,
Zoltan Kiss8f13dd92014-03-06 21:48:23 +0000718 XENVIF_RX_CB(skb)->meta_slots_used);
Ian Campbellf942dc22011-03-15 00:06:18 +0000719
720 RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&vif->rx, ret);
Ian Campbellf942dc22011-03-15 00:06:18 +0000721
Paul Durrant11b57f92014-01-08 12:41:58 +0000722 need_to_notify |= !!ret;
Wei Liub3f980b2013-08-26 12:59:38 +0100723
Zoltan Kiss8f13dd92014-03-06 21:48:23 +0000724 npo.meta_cons += XENVIF_RX_CB(skb)->meta_slots_used;
Ian Campbellf942dc22011-03-15 00:06:18 +0000725 dev_kfree_skb(skb);
726 }
727
Paul Durrantca2f09f2013-12-06 16:36:07 +0000728done:
Wei Liub3f980b2013-08-26 12:59:38 +0100729 if (need_to_notify)
Wei Liue1f00a692013-05-22 06:34:45 +0000730 notify_remote_via_irq(vif->rx_irq);
Ian Campbellf942dc22011-03-15 00:06:18 +0000731}
732
David Vrabel0d08fce2014-05-16 12:26:04 +0100733void xenvif_napi_schedule_or_enable_events(struct xenvif *vif)
Ian Campbellf942dc22011-03-15 00:06:18 +0000734{
735 int more_to_do;
736
737 RING_FINAL_CHECK_FOR_REQUESTS(&vif->tx, more_to_do);
738
739 if (more_to_do)
Wei Liub3f980b2013-08-26 12:59:38 +0100740 napi_schedule(&vif->napi);
Ian Campbellf942dc22011-03-15 00:06:18 +0000741}
742
743static void tx_add_credit(struct xenvif *vif)
744{
745 unsigned long max_burst, max_credit;
746
747 /*
748 * Allow a burst big enough to transmit a jumbo packet of up to 128kB.
749 * Otherwise the interface can seize up due to insufficient credit.
750 */
751 max_burst = RING_GET_REQUEST(&vif->tx, vif->tx.req_cons)->size;
752 max_burst = min(max_burst, 131072UL);
753 max_burst = max(max_burst, vif->credit_bytes);
754
755 /* Take care that adding a new chunk of credit doesn't wrap to zero. */
756 max_credit = vif->remaining_credit + vif->credit_bytes;
757 if (max_credit < vif->remaining_credit)
758 max_credit = ULONG_MAX; /* wrapped: clamp to ULONG_MAX */
759
760 vif->remaining_credit = min(max_credit, max_burst);
761}
762
763static void tx_credit_callback(unsigned long data)
764{
765 struct xenvif *vif = (struct xenvif *)data;
766 tx_add_credit(vif);
David Vrabel0d08fce2014-05-16 12:26:04 +0100767 xenvif_napi_schedule_or_enable_events(vif);
Ian Campbellf942dc22011-03-15 00:06:18 +0000768}
769
Wei Liu73764192013-08-26 12:59:39 +0100770static void xenvif_tx_err(struct xenvif *vif,
771 struct xen_netif_tx_request *txp, RING_IDX end)
Ian Campbellf942dc22011-03-15 00:06:18 +0000772{
773 RING_IDX cons = vif->tx.req_cons;
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000774 unsigned long flags;
Ian Campbellf942dc22011-03-15 00:06:18 +0000775
776 do {
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000777 spin_lock_irqsave(&vif->response_lock, flags);
Ian Campbellf942dc22011-03-15 00:06:18 +0000778 make_tx_response(vif, txp, XEN_NETIF_RSP_ERROR);
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000779 spin_unlock_irqrestore(&vif->response_lock, flags);
Ian Campbellb9149722013-02-06 23:41:38 +0000780 if (cons == end)
Ian Campbellf942dc22011-03-15 00:06:18 +0000781 break;
782 txp = RING_GET_REQUEST(&vif->tx, cons++);
783 } while (1);
784 vif->tx.req_cons = cons;
Ian Campbellf942dc22011-03-15 00:06:18 +0000785}
786
Wei Liu73764192013-08-26 12:59:39 +0100787static void xenvif_fatal_tx_err(struct xenvif *vif)
Ian Campbell488562862013-02-06 23:41:35 +0000788{
789 netdev_err(vif->dev, "fatal error; disabling device\n");
Wei Liue9d8b2c2014-04-01 12:46:12 +0100790 vif->disabled = true;
791 xenvif_kick_thread(vif);
Ian Campbell488562862013-02-06 23:41:35 +0000792}
793
Wei Liu73764192013-08-26 12:59:39 +0100794static int xenvif_count_requests(struct xenvif *vif,
795 struct xen_netif_tx_request *first,
796 struct xen_netif_tx_request *txp,
797 int work_to_do)
Ian Campbellf942dc22011-03-15 00:06:18 +0000798{
799 RING_IDX cons = vif->tx.req_cons;
Wei Liu2810e5b2013-04-22 02:20:42 +0000800 int slots = 0;
801 int drop_err = 0;
Wei Liu59ccb4e2013-05-02 00:43:58 +0000802 int more_data;
Ian Campbellf942dc22011-03-15 00:06:18 +0000803
804 if (!(first->flags & XEN_NETTXF_more_data))
805 return 0;
806
807 do {
Wei Liu59ccb4e2013-05-02 00:43:58 +0000808 struct xen_netif_tx_request dropped_tx = { 0 };
809
Wei Liu2810e5b2013-04-22 02:20:42 +0000810 if (slots >= work_to_do) {
811 netdev_err(vif->dev,
812 "Asked for %d slots but exceeds this limit\n",
813 work_to_do);
Wei Liu73764192013-08-26 12:59:39 +0100814 xenvif_fatal_tx_err(vif);
David Vrabel35876b52013-02-14 03:18:57 +0000815 return -ENODATA;
Ian Campbellf942dc22011-03-15 00:06:18 +0000816 }
817
Wei Liu2810e5b2013-04-22 02:20:42 +0000818 /* This guest is really using too many slots and
819 * considered malicious.
820 */
Wei Liu37641492013-05-02 00:43:59 +0000821 if (unlikely(slots >= fatal_skb_slots)) {
Wei Liu2810e5b2013-04-22 02:20:42 +0000822 netdev_err(vif->dev,
823 "Malicious frontend using %d slots, threshold %u\n",
Wei Liu37641492013-05-02 00:43:59 +0000824 slots, fatal_skb_slots);
Wei Liu73764192013-08-26 12:59:39 +0100825 xenvif_fatal_tx_err(vif);
David Vrabel35876b52013-02-14 03:18:57 +0000826 return -E2BIG;
Ian Campbellf942dc22011-03-15 00:06:18 +0000827 }
828
Wei Liu2810e5b2013-04-22 02:20:42 +0000829 /* Xen network protocol had implicit dependency on
Wei Liu37641492013-05-02 00:43:59 +0000830 * MAX_SKB_FRAGS. XEN_NETBK_LEGACY_SLOTS_MAX is set to
831 * the historical MAX_SKB_FRAGS value 18 to honor the
832 * same behavior as before. Any packet using more than
833 * 18 slots but less than fatal_skb_slots slots is
834 * dropped
Wei Liu2810e5b2013-04-22 02:20:42 +0000835 */
Wei Liu37641492013-05-02 00:43:59 +0000836 if (!drop_err && slots >= XEN_NETBK_LEGACY_SLOTS_MAX) {
Wei Liu2810e5b2013-04-22 02:20:42 +0000837 if (net_ratelimit())
838 netdev_dbg(vif->dev,
839 "Too many slots (%d) exceeding limit (%d), dropping packet\n",
Wei Liu37641492013-05-02 00:43:59 +0000840 slots, XEN_NETBK_LEGACY_SLOTS_MAX);
Wei Liu2810e5b2013-04-22 02:20:42 +0000841 drop_err = -E2BIG;
842 }
843
Wei Liu59ccb4e2013-05-02 00:43:58 +0000844 if (drop_err)
845 txp = &dropped_tx;
846
Wei Liu2810e5b2013-04-22 02:20:42 +0000847 memcpy(txp, RING_GET_REQUEST(&vif->tx, cons + slots),
Ian Campbellf942dc22011-03-15 00:06:18 +0000848 sizeof(*txp));
Wei Liu03393fd52013-04-22 02:20:43 +0000849
850 /* If the guest submitted a frame >= 64 KiB then
851 * first->size overflowed and following slots will
852 * appear to be larger than the frame.
853 *
854 * This cannot be fatal error as there are buggy
855 * frontends that do this.
856 *
857 * Consume all slots and drop the packet.
858 */
859 if (!drop_err && txp->size > first->size) {
860 if (net_ratelimit())
861 netdev_dbg(vif->dev,
862 "Invalid tx request, slot size %u > remaining size %u\n",
863 txp->size, first->size);
864 drop_err = -EIO;
Ian Campbellf942dc22011-03-15 00:06:18 +0000865 }
866
867 first->size -= txp->size;
Wei Liu2810e5b2013-04-22 02:20:42 +0000868 slots++;
Ian Campbellf942dc22011-03-15 00:06:18 +0000869
870 if (unlikely((txp->offset + txp->size) > PAGE_SIZE)) {
Wei Liu2810e5b2013-04-22 02:20:42 +0000871 netdev_err(vif->dev, "Cross page boundary, txp->offset: %x, size: %u\n",
Ian Campbellf942dc22011-03-15 00:06:18 +0000872 txp->offset, txp->size);
Wei Liu73764192013-08-26 12:59:39 +0100873 xenvif_fatal_tx_err(vif);
David Vrabel35876b52013-02-14 03:18:57 +0000874 return -EINVAL;
Ian Campbellf942dc22011-03-15 00:06:18 +0000875 }
Wei Liu59ccb4e2013-05-02 00:43:58 +0000876
877 more_data = txp->flags & XEN_NETTXF_more_data;
878
879 if (!drop_err)
880 txp++;
881
882 } while (more_data);
Wei Liu2810e5b2013-04-22 02:20:42 +0000883
884 if (drop_err) {
Wei Liu73764192013-08-26 12:59:39 +0100885 xenvif_tx_err(vif, first, cons + slots);
Wei Liu2810e5b2013-04-22 02:20:42 +0000886 return drop_err;
887 }
888
889 return slots;
Ian Campbellf942dc22011-03-15 00:06:18 +0000890}
891
Zoltan Kiss8f13dd92014-03-06 21:48:23 +0000892
893struct xenvif_tx_cb {
894 u16 pending_idx;
895};
896
897#define XENVIF_TX_CB(skb) ((struct xenvif_tx_cb *)(skb)->cb)
898
Zoltan Kiss9074ce22014-04-02 18:04:57 +0100899static inline void xenvif_tx_create_map_op(struct xenvif *vif,
900 u16 pending_idx,
901 struct xen_netif_tx_request *txp,
902 struct gnttab_map_grant_ref *mop)
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000903{
Zoltan Kiss9074ce22014-04-02 18:04:57 +0100904 vif->pages_to_map[mop-vif->tx_map_ops] = vif->mmap_pages[pending_idx];
905 gnttab_set_map_op(mop, idx_to_kaddr(vif, pending_idx),
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000906 GNTMAP_host_map | GNTMAP_readonly,
907 txp->gref, vif->domid);
908
909 memcpy(&vif->pending_tx_info[pending_idx].req, txp,
910 sizeof(*txp));
911}
912
Zoltan Kisse3377f32014-03-06 21:48:29 +0000913static inline struct sk_buff *xenvif_alloc_skb(unsigned int size)
914{
915 struct sk_buff *skb =
916 alloc_skb(size + NET_SKB_PAD + NET_IP_ALIGN,
917 GFP_ATOMIC | __GFP_NOWARN);
918 if (unlikely(skb == NULL))
919 return NULL;
920
921 /* Packets passed to netif_rx() must have some headroom. */
922 skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN);
923
924 /* Initialize it here to avoid later surprises */
925 skb_shinfo(skb)->destructor_arg = NULL;
926
927 return skb;
928}
929
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000930static struct gnttab_map_grant_ref *xenvif_get_requests(struct xenvif *vif,
931 struct sk_buff *skb,
932 struct xen_netif_tx_request *txp,
933 struct gnttab_map_grant_ref *gop)
Ian Campbellf942dc22011-03-15 00:06:18 +0000934{
935 struct skb_shared_info *shinfo = skb_shinfo(skb);
936 skb_frag_t *frags = shinfo->frags;
Zoltan Kiss8f13dd92014-03-06 21:48:23 +0000937 u16 pending_idx = XENVIF_TX_CB(skb)->pending_idx;
Zoltan Kiss62bad312014-03-06 21:48:27 +0000938 int start;
939 pending_ring_idx_t index;
Zoltan Kisse3377f32014-03-06 21:48:29 +0000940 unsigned int nr_slots, frag_overflow = 0;
Wei Liu2810e5b2013-04-22 02:20:42 +0000941
942 /* At this point shinfo->nr_frags is in fact the number of
Wei Liu37641492013-05-02 00:43:59 +0000943 * slots, which can be as large as XEN_NETBK_LEGACY_SLOTS_MAX.
Wei Liu2810e5b2013-04-22 02:20:42 +0000944 */
Zoltan Kisse3377f32014-03-06 21:48:29 +0000945 if (shinfo->nr_frags > MAX_SKB_FRAGS) {
946 frag_overflow = shinfo->nr_frags - MAX_SKB_FRAGS;
947 BUG_ON(frag_overflow > MAX_SKB_FRAGS);
948 shinfo->nr_frags = MAX_SKB_FRAGS;
949 }
Wei Liu2810e5b2013-04-22 02:20:42 +0000950 nr_slots = shinfo->nr_frags;
Ian Campbellf942dc22011-03-15 00:06:18 +0000951
952 /* Skip first skb fragment if it is on same page as header fragment. */
Ian Campbellea066ad2011-10-05 00:28:46 +0000953 start = (frag_get_pending_idx(&shinfo->frags[0]) == pending_idx);
Ian Campbellf942dc22011-03-15 00:06:18 +0000954
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000955 for (shinfo->nr_frags = start; shinfo->nr_frags < nr_slots;
956 shinfo->nr_frags++, txp++, gop++) {
Zoltan Kiss62bad312014-03-06 21:48:27 +0000957 index = pending_index(vif->pending_cons++);
958 pending_idx = vif->pending_ring[index];
Zoltan Kiss9074ce22014-04-02 18:04:57 +0100959 xenvif_tx_create_map_op(vif, pending_idx, txp, gop);
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000960 frag_set_pending_idx(&frags[shinfo->nr_frags], pending_idx);
Ian Campbellf942dc22011-03-15 00:06:18 +0000961 }
962
Zoltan Kisse3377f32014-03-06 21:48:29 +0000963 if (frag_overflow) {
964 struct sk_buff *nskb = xenvif_alloc_skb(0);
965 if (unlikely(nskb == NULL)) {
966 if (net_ratelimit())
967 netdev_err(vif->dev,
968 "Can't allocate the frag_list skb.\n");
969 return NULL;
970 }
971
972 shinfo = skb_shinfo(nskb);
973 frags = shinfo->frags;
974
975 for (shinfo->nr_frags = 0; shinfo->nr_frags < frag_overflow;
976 shinfo->nr_frags++, txp++, gop++) {
977 index = pending_index(vif->pending_cons++);
978 pending_idx = vif->pending_ring[index];
Zoltan Kiss9074ce22014-04-02 18:04:57 +0100979 xenvif_tx_create_map_op(vif, pending_idx, txp, gop);
Zoltan Kisse3377f32014-03-06 21:48:29 +0000980 frag_set_pending_idx(&frags[shinfo->nr_frags],
981 pending_idx);
982 }
983
984 skb_shinfo(skb)->frag_list = nskb;
985 }
Wei Liu2810e5b2013-04-22 02:20:42 +0000986
Ian Campbellf942dc22011-03-15 00:06:18 +0000987 return gop;
988}
989
Zoltan Kissf53c3fe2014-03-06 21:48:26 +0000990static inline void xenvif_grant_handle_set(struct xenvif *vif,
991 u16 pending_idx,
992 grant_handle_t handle)
993{
994 if (unlikely(vif->grant_tx_handle[pending_idx] !=
995 NETBACK_INVALID_HANDLE)) {
996 netdev_err(vif->dev,
997 "Trying to overwrite active handle! pending_idx: %x\n",
998 pending_idx);
999 BUG();
1000 }
1001 vif->grant_tx_handle[pending_idx] = handle;
1002}
1003
1004static inline void xenvif_grant_handle_reset(struct xenvif *vif,
1005 u16 pending_idx)
1006{
1007 if (unlikely(vif->grant_tx_handle[pending_idx] ==
1008 NETBACK_INVALID_HANDLE)) {
1009 netdev_err(vif->dev,
1010 "Trying to unmap invalid handle! pending_idx: %x\n",
1011 pending_idx);
1012 BUG();
1013 }
1014 vif->grant_tx_handle[pending_idx] = NETBACK_INVALID_HANDLE;
1015}
1016
Wei Liu73764192013-08-26 12:59:39 +01001017static int xenvif_tx_check_gop(struct xenvif *vif,
1018 struct sk_buff *skb,
Zoltan Kissbdab8272014-04-02 18:04:58 +01001019 struct gnttab_map_grant_ref **gopp_map,
1020 struct gnttab_copy **gopp_copy)
Ian Campbellf942dc22011-03-15 00:06:18 +00001021{
Zoltan Kiss9074ce22014-04-02 18:04:57 +01001022 struct gnttab_map_grant_ref *gop_map = *gopp_map;
Zoltan Kiss8f13dd92014-03-06 21:48:23 +00001023 u16 pending_idx = XENVIF_TX_CB(skb)->pending_idx;
Ian Campbellf942dc22011-03-15 00:06:18 +00001024 struct skb_shared_info *shinfo = skb_shinfo(skb);
1025 int nr_frags = shinfo->nr_frags;
Zoltan Kissbdab8272014-04-02 18:04:58 +01001026 int i, err;
Zoltan Kisse3377f32014-03-06 21:48:29 +00001027 struct sk_buff *first_skb = NULL;
Ian Campbellf942dc22011-03-15 00:06:18 +00001028
1029 /* Check status of header. */
Zoltan Kissbdab8272014-04-02 18:04:58 +01001030 err = (*gopp_copy)->status;
1031 (*gopp_copy)++;
1032 if (unlikely(err)) {
1033 if (net_ratelimit())
1034 netdev_dbg(vif->dev,
Zoltan Kiss00aefce2014-04-04 15:45:24 +01001035 "Grant copy of header failed! status: %d pending_idx: %u ref: %u\n",
Zoltan Kissbdab8272014-04-02 18:04:58 +01001036 (*gopp_copy)->status,
1037 pending_idx,
1038 (*gopp_copy)->source.u.ref);
Wei Liu73764192013-08-26 12:59:39 +01001039 xenvif_idx_release(vif, pending_idx, XEN_NETIF_RSP_ERROR);
Zoltan Kissbdab8272014-04-02 18:04:58 +01001040 }
Ian Campbellf942dc22011-03-15 00:06:18 +00001041
Zoltan Kisse3377f32014-03-06 21:48:29 +00001042check_frags:
Zoltan Kissbdab8272014-04-02 18:04:58 +01001043 for (i = 0; i < nr_frags; i++, gop_map++) {
Ian Campbellf942dc22011-03-15 00:06:18 +00001044 int j, newerr;
Ian Campbellf942dc22011-03-15 00:06:18 +00001045
Ian Campbellea066ad2011-10-05 00:28:46 +00001046 pending_idx = frag_get_pending_idx(&shinfo->frags[i]);
Ian Campbellf942dc22011-03-15 00:06:18 +00001047
1048 /* Check error status: if okay then remember grant handle. */
Zoltan Kissbdab8272014-04-02 18:04:58 +01001049 newerr = gop_map->status;
Wei Liu2810e5b2013-04-22 02:20:42 +00001050
Ian Campbellf942dc22011-03-15 00:06:18 +00001051 if (likely(!newerr)) {
Zoltan Kiss9074ce22014-04-02 18:04:57 +01001052 xenvif_grant_handle_set(vif,
1053 pending_idx,
1054 gop_map->handle);
Ian Campbellf942dc22011-03-15 00:06:18 +00001055 /* Had a previous error? Invalidate this fragment. */
1056 if (unlikely(err))
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001057 xenvif_idx_unmap(vif, pending_idx);
Ian Campbellf942dc22011-03-15 00:06:18 +00001058 continue;
1059 }
1060
1061 /* Error on this fragment: respond to client with an error. */
Zoltan Kissbdab8272014-04-02 18:04:58 +01001062 if (net_ratelimit())
1063 netdev_dbg(vif->dev,
Zoltan Kiss00aefce2014-04-04 15:45:24 +01001064 "Grant map of %d. frag failed! status: %d pending_idx: %u ref: %u\n",
Zoltan Kissbdab8272014-04-02 18:04:58 +01001065 i,
1066 gop_map->status,
1067 pending_idx,
1068 gop_map->ref);
Wei Liu73764192013-08-26 12:59:39 +01001069 xenvif_idx_release(vif, pending_idx, XEN_NETIF_RSP_ERROR);
Ian Campbellf942dc22011-03-15 00:06:18 +00001070
1071 /* Not the first error? Preceding frags already invalidated. */
1072 if (err)
1073 continue;
Zoltan Kissbdab8272014-04-02 18:04:58 +01001074 /* First error: invalidate preceding fragments. */
1075 for (j = 0; j < i; j++) {
Jan Beulich5ccb3ea2011-11-18 05:42:05 +00001076 pending_idx = frag_get_pending_idx(&shinfo->frags[j]);
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001077 xenvif_idx_unmap(vif, pending_idx);
Ian Campbellf942dc22011-03-15 00:06:18 +00001078 }
1079
1080 /* Remember the error: invalidate all subsequent fragments. */
1081 err = newerr;
1082 }
1083
Zoltan Kisse3377f32014-03-06 21:48:29 +00001084 if (skb_has_frag_list(skb)) {
1085 first_skb = skb;
1086 skb = shinfo->frag_list;
1087 shinfo = skb_shinfo(skb);
1088 nr_frags = shinfo->nr_frags;
Zoltan Kisse3377f32014-03-06 21:48:29 +00001089
1090 goto check_frags;
1091 }
1092
1093 /* There was a mapping error in the frag_list skb. We have to unmap
1094 * the first skb's frags
1095 */
1096 if (first_skb && err) {
1097 int j;
1098 shinfo = skb_shinfo(first_skb);
Zoltan Kissbdab8272014-04-02 18:04:58 +01001099 for (j = 0; j < shinfo->nr_frags; j++) {
Zoltan Kisse3377f32014-03-06 21:48:29 +00001100 pending_idx = frag_get_pending_idx(&shinfo->frags[j]);
1101 xenvif_idx_unmap(vif, pending_idx);
1102 }
1103 }
1104
Zoltan Kissbdab8272014-04-02 18:04:58 +01001105 *gopp_map = gop_map;
Ian Campbellf942dc22011-03-15 00:06:18 +00001106 return err;
1107}
1108
Wei Liu73764192013-08-26 12:59:39 +01001109static void xenvif_fill_frags(struct xenvif *vif, struct sk_buff *skb)
Ian Campbellf942dc22011-03-15 00:06:18 +00001110{
1111 struct skb_shared_info *shinfo = skb_shinfo(skb);
1112 int nr_frags = shinfo->nr_frags;
1113 int i;
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001114 u16 prev_pending_idx = INVALID_PENDING_IDX;
1115
Ian Campbellf942dc22011-03-15 00:06:18 +00001116 for (i = 0; i < nr_frags; i++) {
1117 skb_frag_t *frag = shinfo->frags + i;
1118 struct xen_netif_tx_request *txp;
Ian Campbellea066ad2011-10-05 00:28:46 +00001119 struct page *page;
1120 u16 pending_idx;
Ian Campbellf942dc22011-03-15 00:06:18 +00001121
Ian Campbellea066ad2011-10-05 00:28:46 +00001122 pending_idx = frag_get_pending_idx(frag);
Ian Campbellf942dc22011-03-15 00:06:18 +00001123
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001124 /* If this is not the first frag, chain it to the previous*/
Zoltan Kissbdab8272014-04-02 18:04:58 +01001125 if (prev_pending_idx == INVALID_PENDING_IDX)
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001126 skb_shinfo(skb)->destructor_arg =
Zoltan Kiss7aceb472014-03-24 23:59:51 +00001127 &callback_param(vif, pending_idx);
Zoltan Kissbdab8272014-04-02 18:04:58 +01001128 else
Zoltan Kiss7aceb472014-03-24 23:59:51 +00001129 callback_param(vif, prev_pending_idx).ctx =
1130 &callback_param(vif, pending_idx);
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001131
Zoltan Kiss7aceb472014-03-24 23:59:51 +00001132 callback_param(vif, pending_idx).ctx = NULL;
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001133 prev_pending_idx = pending_idx;
1134
Wei Liub3f980b2013-08-26 12:59:38 +01001135 txp = &vif->pending_tx_info[pending_idx].req;
1136 page = virt_to_page(idx_to_kaddr(vif, pending_idx));
Ian Campbellea066ad2011-10-05 00:28:46 +00001137 __skb_fill_page_desc(skb, i, page, txp->offset, txp->size);
Ian Campbellf942dc22011-03-15 00:06:18 +00001138 skb->len += txp->size;
1139 skb->data_len += txp->size;
1140 skb->truesize += txp->size;
1141
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001142 /* Take an extra reference to offset network stack's put_page */
Wei Liub3f980b2013-08-26 12:59:38 +01001143 get_page(vif->mmap_pages[pending_idx]);
Ian Campbellf942dc22011-03-15 00:06:18 +00001144 }
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001145 /* FIXME: __skb_fill_page_desc set this to true because page->pfmemalloc
1146 * overlaps with "index", and "mapping" is not set. I think mapping
1147 * should be set. If delivered to local stack, it would drop this
1148 * skb in sk_filter unless the socket has the right to use it.
1149 */
1150 skb->pfmemalloc = false;
Ian Campbellf942dc22011-03-15 00:06:18 +00001151}
1152
Wei Liu73764192013-08-26 12:59:39 +01001153static int xenvif_get_extras(struct xenvif *vif,
Ian Campbellf942dc22011-03-15 00:06:18 +00001154 struct xen_netif_extra_info *extras,
1155 int work_to_do)
1156{
1157 struct xen_netif_extra_info extra;
1158 RING_IDX cons = vif->tx.req_cons;
1159
1160 do {
1161 if (unlikely(work_to_do-- <= 0)) {
Ian Campbell488562862013-02-06 23:41:35 +00001162 netdev_err(vif->dev, "Missing extra info\n");
Wei Liu73764192013-08-26 12:59:39 +01001163 xenvif_fatal_tx_err(vif);
Ian Campbellf942dc22011-03-15 00:06:18 +00001164 return -EBADR;
1165 }
1166
1167 memcpy(&extra, RING_GET_REQUEST(&vif->tx, cons),
1168 sizeof(extra));
1169 if (unlikely(!extra.type ||
1170 extra.type >= XEN_NETIF_EXTRA_TYPE_MAX)) {
1171 vif->tx.req_cons = ++cons;
Ian Campbell488562862013-02-06 23:41:35 +00001172 netdev_err(vif->dev,
Ian Campbellf942dc22011-03-15 00:06:18 +00001173 "Invalid extra type: %d\n", extra.type);
Wei Liu73764192013-08-26 12:59:39 +01001174 xenvif_fatal_tx_err(vif);
Ian Campbellf942dc22011-03-15 00:06:18 +00001175 return -EINVAL;
1176 }
1177
1178 memcpy(&extras[extra.type - 1], &extra, sizeof(extra));
1179 vif->tx.req_cons = ++cons;
1180 } while (extra.flags & XEN_NETIF_EXTRA_FLAG_MORE);
1181
1182 return work_to_do;
1183}
1184
Wei Liu73764192013-08-26 12:59:39 +01001185static int xenvif_set_skb_gso(struct xenvif *vif,
1186 struct sk_buff *skb,
1187 struct xen_netif_extra_info *gso)
Ian Campbellf942dc22011-03-15 00:06:18 +00001188{
1189 if (!gso->u.gso.size) {
Ian Campbell488562862013-02-06 23:41:35 +00001190 netdev_err(vif->dev, "GSO size must not be zero.\n");
Wei Liu73764192013-08-26 12:59:39 +01001191 xenvif_fatal_tx_err(vif);
Ian Campbellf942dc22011-03-15 00:06:18 +00001192 return -EINVAL;
1193 }
1194
Paul Durranta9468582013-10-16 17:50:31 +01001195 switch (gso->u.gso.type) {
1196 case XEN_NETIF_GSO_TYPE_TCPV4:
1197 skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
1198 break;
1199 case XEN_NETIF_GSO_TYPE_TCPV6:
1200 skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
1201 break;
1202 default:
Ian Campbell488562862013-02-06 23:41:35 +00001203 netdev_err(vif->dev, "Bad GSO type %d.\n", gso->u.gso.type);
Wei Liu73764192013-08-26 12:59:39 +01001204 xenvif_fatal_tx_err(vif);
Ian Campbellf942dc22011-03-15 00:06:18 +00001205 return -EINVAL;
1206 }
1207
1208 skb_shinfo(skb)->gso_size = gso->u.gso.size;
Paul Durrantb89587a2013-12-17 11:44:35 +00001209 /* gso_segs will be calculated later */
Ian Campbellf942dc22011-03-15 00:06:18 +00001210
1211 return 0;
1212}
1213
1214static int checksum_setup(struct xenvif *vif, struct sk_buff *skb)
1215{
Paul Durrant27216372014-01-09 10:02:47 +00001216 bool recalculate_partial_csum = false;
Ian Campbellf942dc22011-03-15 00:06:18 +00001217
Paul Durrant2eba61d2013-10-16 17:50:29 +01001218 /* A GSO SKB must be CHECKSUM_PARTIAL. However some buggy
Ian Campbellf942dc22011-03-15 00:06:18 +00001219 * peers can fail to set NETRXF_csum_blank when sending a GSO
1220 * frame. In this case force the SKB to CHECKSUM_PARTIAL and
1221 * recalculate the partial checksum.
1222 */
1223 if (skb->ip_summed != CHECKSUM_PARTIAL && skb_is_gso(skb)) {
1224 vif->rx_gso_checksum_fixup++;
1225 skb->ip_summed = CHECKSUM_PARTIAL;
Paul Durrant27216372014-01-09 10:02:47 +00001226 recalculate_partial_csum = true;
Ian Campbellf942dc22011-03-15 00:06:18 +00001227 }
1228
1229 /* A non-CHECKSUM_PARTIAL SKB does not require setup. */
1230 if (skb->ip_summed != CHECKSUM_PARTIAL)
1231 return 0;
1232
Paul Durrant27216372014-01-09 10:02:47 +00001233 return skb_checksum_setup(skb, recalculate_partial_csum);
Ian Campbellf942dc22011-03-15 00:06:18 +00001234}
1235
1236static bool tx_credit_exceeded(struct xenvif *vif, unsigned size)
1237{
Wei Liu059dfa62013-10-28 12:07:57 +00001238 u64 now = get_jiffies_64();
1239 u64 next_credit = vif->credit_window_start +
Ian Campbellf942dc22011-03-15 00:06:18 +00001240 msecs_to_jiffies(vif->credit_usec / 1000);
1241
1242 /* Timer could already be pending in rare cases. */
1243 if (timer_pending(&vif->credit_timeout))
1244 return true;
1245
1246 /* Passed the point where we can replenish credit? */
Wei Liu059dfa62013-10-28 12:07:57 +00001247 if (time_after_eq64(now, next_credit)) {
1248 vif->credit_window_start = now;
Ian Campbellf942dc22011-03-15 00:06:18 +00001249 tx_add_credit(vif);
1250 }
1251
1252 /* Still too big to send right now? Set a callback. */
1253 if (size > vif->remaining_credit) {
1254 vif->credit_timeout.data =
1255 (unsigned long)vif;
1256 vif->credit_timeout.function =
1257 tx_credit_callback;
1258 mod_timer(&vif->credit_timeout,
1259 next_credit);
Wei Liu059dfa62013-10-28 12:07:57 +00001260 vif->credit_window_start = next_credit;
Ian Campbellf942dc22011-03-15 00:06:18 +00001261
1262 return true;
1263 }
1264
1265 return false;
1266}
1267
Zoltan Kissbdab8272014-04-02 18:04:58 +01001268static void xenvif_tx_build_gops(struct xenvif *vif,
1269 int budget,
1270 unsigned *copy_ops,
1271 unsigned *map_ops)
Ian Campbellf942dc22011-03-15 00:06:18 +00001272{
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001273 struct gnttab_map_grant_ref *gop = vif->tx_map_ops, *request_gop;
Ian Campbellf942dc22011-03-15 00:06:18 +00001274 struct sk_buff *skb;
1275 int ret;
1276
Zoltan Kiss869b9b12014-03-24 23:59:49 +00001277 while (skb_queue_len(&vif->tx_queue) < budget) {
Ian Campbellf942dc22011-03-15 00:06:18 +00001278 struct xen_netif_tx_request txreq;
Wei Liu37641492013-05-02 00:43:59 +00001279 struct xen_netif_tx_request txfrags[XEN_NETBK_LEGACY_SLOTS_MAX];
Ian Campbellf942dc22011-03-15 00:06:18 +00001280 struct xen_netif_extra_info extras[XEN_NETIF_EXTRA_TYPE_MAX-1];
1281 u16 pending_idx;
1282 RING_IDX idx;
1283 int work_to_do;
1284 unsigned int data_len;
1285 pending_ring_idx_t index;
1286
Ian Campbell488562862013-02-06 23:41:35 +00001287 if (vif->tx.sring->req_prod - vif->tx.req_cons >
1288 XEN_NETIF_TX_RING_SIZE) {
1289 netdev_err(vif->dev,
1290 "Impossible number of requests. "
1291 "req_prod %d, req_cons %d, size %ld\n",
1292 vif->tx.sring->req_prod, vif->tx.req_cons,
1293 XEN_NETIF_TX_RING_SIZE);
Wei Liu73764192013-08-26 12:59:39 +01001294 xenvif_fatal_tx_err(vif);
Wei Liue9d8b2c2014-04-01 12:46:12 +01001295 break;
Ian Campbell488562862013-02-06 23:41:35 +00001296 }
1297
Paul Durrantd9601a32013-12-11 10:57:16 +00001298 work_to_do = RING_HAS_UNCONSUMED_REQUESTS(&vif->tx);
Wei Liub3f980b2013-08-26 12:59:38 +01001299 if (!work_to_do)
1300 break;
Ian Campbellf942dc22011-03-15 00:06:18 +00001301
1302 idx = vif->tx.req_cons;
1303 rmb(); /* Ensure that we see the request before we copy it. */
1304 memcpy(&txreq, RING_GET_REQUEST(&vif->tx, idx), sizeof(txreq));
1305
1306 /* Credit-based scheduling. */
1307 if (txreq.size > vif->remaining_credit &&
Wei Liub3f980b2013-08-26 12:59:38 +01001308 tx_credit_exceeded(vif, txreq.size))
1309 break;
Ian Campbellf942dc22011-03-15 00:06:18 +00001310
1311 vif->remaining_credit -= txreq.size;
1312
1313 work_to_do--;
1314 vif->tx.req_cons = ++idx;
1315
1316 memset(extras, 0, sizeof(extras));
1317 if (txreq.flags & XEN_NETTXF_extra_info) {
Wei Liu73764192013-08-26 12:59:39 +01001318 work_to_do = xenvif_get_extras(vif, extras,
1319 work_to_do);
Ian Campbellf942dc22011-03-15 00:06:18 +00001320 idx = vif->tx.req_cons;
Ian Campbell488562862013-02-06 23:41:35 +00001321 if (unlikely(work_to_do < 0))
Wei Liub3f980b2013-08-26 12:59:38 +01001322 break;
Ian Campbellf942dc22011-03-15 00:06:18 +00001323 }
1324
Wei Liu73764192013-08-26 12:59:39 +01001325 ret = xenvif_count_requests(vif, &txreq, txfrags, work_to_do);
Ian Campbell488562862013-02-06 23:41:35 +00001326 if (unlikely(ret < 0))
Wei Liub3f980b2013-08-26 12:59:38 +01001327 break;
Ian Campbell488562862013-02-06 23:41:35 +00001328
Ian Campbellf942dc22011-03-15 00:06:18 +00001329 idx += ret;
1330
1331 if (unlikely(txreq.size < ETH_HLEN)) {
1332 netdev_dbg(vif->dev,
1333 "Bad packet size: %d\n", txreq.size);
Wei Liu73764192013-08-26 12:59:39 +01001334 xenvif_tx_err(vif, &txreq, idx);
Wei Liub3f980b2013-08-26 12:59:38 +01001335 break;
Ian Campbellf942dc22011-03-15 00:06:18 +00001336 }
1337
1338 /* No crossing a page as the payload mustn't fragment. */
1339 if (unlikely((txreq.offset + txreq.size) > PAGE_SIZE)) {
Ian Campbell488562862013-02-06 23:41:35 +00001340 netdev_err(vif->dev,
Ian Campbellf942dc22011-03-15 00:06:18 +00001341 "txreq.offset: %x, size: %u, end: %lu\n",
1342 txreq.offset, txreq.size,
1343 (txreq.offset&~PAGE_MASK) + txreq.size);
Wei Liu73764192013-08-26 12:59:39 +01001344 xenvif_fatal_tx_err(vif);
Wei Liub3f980b2013-08-26 12:59:38 +01001345 break;
Ian Campbellf942dc22011-03-15 00:06:18 +00001346 }
1347
Wei Liub3f980b2013-08-26 12:59:38 +01001348 index = pending_index(vif->pending_cons);
1349 pending_idx = vif->pending_ring[index];
Ian Campbellf942dc22011-03-15 00:06:18 +00001350
1351 data_len = (txreq.size > PKT_PROT_LEN &&
Wei Liu37641492013-05-02 00:43:59 +00001352 ret < XEN_NETBK_LEGACY_SLOTS_MAX) ?
Ian Campbellf942dc22011-03-15 00:06:18 +00001353 PKT_PROT_LEN : txreq.size;
1354
Zoltan Kisse3377f32014-03-06 21:48:29 +00001355 skb = xenvif_alloc_skb(data_len);
Ian Campbellf942dc22011-03-15 00:06:18 +00001356 if (unlikely(skb == NULL)) {
1357 netdev_dbg(vif->dev,
1358 "Can't allocate a skb in start_xmit.\n");
Wei Liu73764192013-08-26 12:59:39 +01001359 xenvif_tx_err(vif, &txreq, idx);
Ian Campbellf942dc22011-03-15 00:06:18 +00001360 break;
1361 }
1362
Ian Campbellf942dc22011-03-15 00:06:18 +00001363 if (extras[XEN_NETIF_EXTRA_TYPE_GSO - 1].type) {
1364 struct xen_netif_extra_info *gso;
1365 gso = &extras[XEN_NETIF_EXTRA_TYPE_GSO - 1];
1366
Wei Liu73764192013-08-26 12:59:39 +01001367 if (xenvif_set_skb_gso(vif, skb, gso)) {
1368 /* Failure in xenvif_set_skb_gso is fatal. */
Ian Campbellf942dc22011-03-15 00:06:18 +00001369 kfree_skb(skb);
Wei Liub3f980b2013-08-26 12:59:38 +01001370 break;
Ian Campbellf942dc22011-03-15 00:06:18 +00001371 }
1372 }
1373
Zoltan Kiss8f13dd92014-03-06 21:48:23 +00001374 XENVIF_TX_CB(skb)->pending_idx = pending_idx;
Ian Campbellf942dc22011-03-15 00:06:18 +00001375
1376 __skb_put(skb, data_len);
Zoltan Kissbdab8272014-04-02 18:04:58 +01001377 vif->tx_copy_ops[*copy_ops].source.u.ref = txreq.gref;
1378 vif->tx_copy_ops[*copy_ops].source.domid = vif->domid;
1379 vif->tx_copy_ops[*copy_ops].source.offset = txreq.offset;
1380
1381 vif->tx_copy_ops[*copy_ops].dest.u.gmfn =
1382 virt_to_mfn(skb->data);
1383 vif->tx_copy_ops[*copy_ops].dest.domid = DOMID_SELF;
1384 vif->tx_copy_ops[*copy_ops].dest.offset =
1385 offset_in_page(skb->data);
1386
1387 vif->tx_copy_ops[*copy_ops].len = data_len;
1388 vif->tx_copy_ops[*copy_ops].flags = GNTCOPY_source_gref;
1389
1390 (*copy_ops)++;
Ian Campbellf942dc22011-03-15 00:06:18 +00001391
1392 skb_shinfo(skb)->nr_frags = ret;
1393 if (data_len < txreq.size) {
1394 skb_shinfo(skb)->nr_frags++;
Ian Campbellea066ad2011-10-05 00:28:46 +00001395 frag_set_pending_idx(&skb_shinfo(skb)->frags[0],
1396 pending_idx);
Zoltan Kissbdab8272014-04-02 18:04:58 +01001397 xenvif_tx_create_map_op(vif, pending_idx, &txreq, gop);
1398 gop++;
Ian Campbellf942dc22011-03-15 00:06:18 +00001399 } else {
Ian Campbellea066ad2011-10-05 00:28:46 +00001400 frag_set_pending_idx(&skb_shinfo(skb)->frags[0],
1401 INVALID_PENDING_IDX);
Zoltan Kissbdab8272014-04-02 18:04:58 +01001402 memcpy(&vif->pending_tx_info[pending_idx].req, &txreq,
1403 sizeof(txreq));
Ian Campbellf942dc22011-03-15 00:06:18 +00001404 }
1405
Wei Liub3f980b2013-08-26 12:59:38 +01001406 vif->pending_cons++;
Ian Campbellf942dc22011-03-15 00:06:18 +00001407
Wei Liu73764192013-08-26 12:59:39 +01001408 request_gop = xenvif_get_requests(vif, skb, txfrags, gop);
Ian Campbellf942dc22011-03-15 00:06:18 +00001409 if (request_gop == NULL) {
1410 kfree_skb(skb);
Wei Liu73764192013-08-26 12:59:39 +01001411 xenvif_tx_err(vif, &txreq, idx);
Wei Liub3f980b2013-08-26 12:59:38 +01001412 break;
Ian Campbellf942dc22011-03-15 00:06:18 +00001413 }
1414 gop = request_gop;
1415
Wei Liub3f980b2013-08-26 12:59:38 +01001416 __skb_queue_tail(&vif->tx_queue, skb);
Annie Li1e0b6ea2012-06-27 00:46:58 +00001417
Ian Campbellf942dc22011-03-15 00:06:18 +00001418 vif->tx.req_cons = idx;
Ian Campbellf942dc22011-03-15 00:06:18 +00001419
Zoltan Kissbdab8272014-04-02 18:04:58 +01001420 if (((gop-vif->tx_map_ops) >= ARRAY_SIZE(vif->tx_map_ops)) ||
1421 (*copy_ops >= ARRAY_SIZE(vif->tx_copy_ops)))
Ian Campbellf942dc22011-03-15 00:06:18 +00001422 break;
1423 }
1424
Zoltan Kissbdab8272014-04-02 18:04:58 +01001425 (*map_ops) = gop - vif->tx_map_ops;
1426 return;
Ian Campbellf942dc22011-03-15 00:06:18 +00001427}
1428
Zoltan Kisse3377f32014-03-06 21:48:29 +00001429/* Consolidate skb with a frag_list into a brand new one with local pages on
1430 * frags. Returns 0 or -ENOMEM if can't allocate new pages.
1431 */
1432static int xenvif_handle_frag_list(struct xenvif *vif, struct sk_buff *skb)
1433{
1434 unsigned int offset = skb_headlen(skb);
1435 skb_frag_t frags[MAX_SKB_FRAGS];
1436 int i;
1437 struct ubuf_info *uarg;
1438 struct sk_buff *nskb = skb_shinfo(skb)->frag_list;
1439
1440 vif->tx_zerocopy_sent += 2;
1441 vif->tx_frag_overflow++;
1442
1443 xenvif_fill_frags(vif, nskb);
1444 /* Subtract frags size, we will correct it later */
1445 skb->truesize -= skb->data_len;
1446 skb->len += nskb->len;
1447 skb->data_len += nskb->len;
1448
1449 /* create a brand new frags array and coalesce there */
1450 for (i = 0; offset < skb->len; i++) {
1451 struct page *page;
1452 unsigned int len;
1453
1454 BUG_ON(i >= MAX_SKB_FRAGS);
1455 page = alloc_page(GFP_ATOMIC|__GFP_COLD);
1456 if (!page) {
1457 int j;
1458 skb->truesize += skb->data_len;
1459 for (j = 0; j < i; j++)
1460 put_page(frags[j].page.p);
1461 return -ENOMEM;
1462 }
1463
1464 if (offset + PAGE_SIZE < skb->len)
1465 len = PAGE_SIZE;
1466 else
1467 len = skb->len - offset;
1468 if (skb_copy_bits(skb, offset, page_address(page), len))
1469 BUG();
1470
1471 offset += len;
1472 frags[i].page.p = page;
1473 frags[i].page_offset = 0;
1474 skb_frag_size_set(&frags[i], len);
1475 }
1476 /* swap out with old one */
1477 memcpy(skb_shinfo(skb)->frags,
1478 frags,
1479 i * sizeof(skb_frag_t));
1480 skb_shinfo(skb)->nr_frags = i;
1481 skb->truesize += i * PAGE_SIZE;
1482
1483 /* remove traces of mapped pages and frag_list */
1484 skb_frag_list_init(skb);
1485 uarg = skb_shinfo(skb)->destructor_arg;
1486 uarg->callback(uarg, true);
1487 skb_shinfo(skb)->destructor_arg = NULL;
1488
1489 skb_shinfo(nskb)->tx_flags |= SKBTX_DEV_ZEROCOPY;
1490 kfree_skb(nskb);
1491
1492 return 0;
1493}
Ian Campbellf942dc22011-03-15 00:06:18 +00001494
Paul Durrant10574052013-12-11 10:57:15 +00001495static int xenvif_tx_submit(struct xenvif *vif)
Wei Liub3f980b2013-08-26 12:59:38 +01001496{
Zoltan Kiss9074ce22014-04-02 18:04:57 +01001497 struct gnttab_map_grant_ref *gop_map = vif->tx_map_ops;
Zoltan Kissbdab8272014-04-02 18:04:58 +01001498 struct gnttab_copy *gop_copy = vif->tx_copy_ops;
Wei Liub3f980b2013-08-26 12:59:38 +01001499 struct sk_buff *skb;
1500 int work_done = 0;
1501
Paul Durrant10574052013-12-11 10:57:15 +00001502 while ((skb = __skb_dequeue(&vif->tx_queue)) != NULL) {
Ian Campbellf942dc22011-03-15 00:06:18 +00001503 struct xen_netif_tx_request *txp;
Ian Campbellf942dc22011-03-15 00:06:18 +00001504 u16 pending_idx;
1505 unsigned data_len;
1506
Zoltan Kiss8f13dd92014-03-06 21:48:23 +00001507 pending_idx = XENVIF_TX_CB(skb)->pending_idx;
Wei Liub3f980b2013-08-26 12:59:38 +01001508 txp = &vif->pending_tx_info[pending_idx].req;
Ian Campbellf942dc22011-03-15 00:06:18 +00001509
1510 /* Check the remap error code. */
Zoltan Kissbdab8272014-04-02 18:04:58 +01001511 if (unlikely(xenvif_tx_check_gop(vif, skb, &gop_map, &gop_copy))) {
Ian Campbellf942dc22011-03-15 00:06:18 +00001512 skb_shinfo(skb)->nr_frags = 0;
1513 kfree_skb(skb);
1514 continue;
1515 }
1516
1517 data_len = skb->len;
Zoltan Kiss7aceb472014-03-24 23:59:51 +00001518 callback_param(vif, pending_idx).ctx = NULL;
Ian Campbellf942dc22011-03-15 00:06:18 +00001519 if (data_len < txp->size) {
1520 /* Append the packet payload as a fragment. */
1521 txp->offset += data_len;
1522 txp->size -= data_len;
1523 } else {
1524 /* Schedule a response immediately. */
Zoltan Kissbdab8272014-04-02 18:04:58 +01001525 xenvif_idx_release(vif, pending_idx,
1526 XEN_NETIF_RSP_OKAY);
Ian Campbellf942dc22011-03-15 00:06:18 +00001527 }
1528
1529 if (txp->flags & XEN_NETTXF_csum_blank)
1530 skb->ip_summed = CHECKSUM_PARTIAL;
1531 else if (txp->flags & XEN_NETTXF_data_validated)
1532 skb->ip_summed = CHECKSUM_UNNECESSARY;
1533
Wei Liu73764192013-08-26 12:59:39 +01001534 xenvif_fill_frags(vif, skb);
Ian Campbellf942dc22011-03-15 00:06:18 +00001535
Zoltan Kisse3377f32014-03-06 21:48:29 +00001536 if (unlikely(skb_has_frag_list(skb))) {
1537 if (xenvif_handle_frag_list(vif, skb)) {
1538 if (net_ratelimit())
1539 netdev_err(vif->dev,
1540 "Not enough memory to consolidate frag_list!\n");
1541 skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY;
1542 kfree_skb(skb);
1543 continue;
1544 }
1545 }
1546
Paul Durrant2eba61d2013-10-16 17:50:29 +01001547 if (skb_is_nonlinear(skb) && skb_headlen(skb) < PKT_PROT_LEN) {
Ian Campbellf942dc22011-03-15 00:06:18 +00001548 int target = min_t(int, skb->len, PKT_PROT_LEN);
1549 __pskb_pull_tail(skb, target - skb_headlen(skb));
1550 }
1551
1552 skb->dev = vif->dev;
1553 skb->protocol = eth_type_trans(skb, skb->dev);
Jason Wangf9ca8f72013-03-25 20:19:58 +00001554 skb_reset_network_header(skb);
Ian Campbellf942dc22011-03-15 00:06:18 +00001555
1556 if (checksum_setup(vif, skb)) {
1557 netdev_dbg(vif->dev,
1558 "Can't setup checksum in net_tx_action\n");
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001559 /* We have to set this flag to trigger the callback */
1560 if (skb_shinfo(skb)->destructor_arg)
1561 skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY;
Ian Campbellf942dc22011-03-15 00:06:18 +00001562 kfree_skb(skb);
1563 continue;
1564 }
1565
Jason Wang40893fd2013-03-26 23:11:22 +00001566 skb_probe_transport_header(skb, 0);
Jason Wangf9ca8f72013-03-25 20:19:58 +00001567
Paul Durrantb89587a2013-12-17 11:44:35 +00001568 /* If the packet is GSO then we will have just set up the
1569 * transport header offset in checksum_setup so it's now
1570 * straightforward to calculate gso_segs.
1571 */
1572 if (skb_is_gso(skb)) {
1573 int mss = skb_shinfo(skb)->gso_size;
1574 int hdrlen = skb_transport_header(skb) -
1575 skb_mac_header(skb) +
1576 tcp_hdrlen(skb);
1577
1578 skb_shinfo(skb)->gso_segs =
1579 DIV_ROUND_UP(skb->len - hdrlen, mss);
1580 }
1581
Ian Campbellf942dc22011-03-15 00:06:18 +00001582 vif->dev->stats.rx_bytes += skb->len;
1583 vif->dev->stats.rx_packets++;
1584
Wei Liub3f980b2013-08-26 12:59:38 +01001585 work_done++;
1586
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001587 /* Set this flag right before netif_receive_skb, otherwise
1588 * someone might think this packet already left netback, and
1589 * do a skb_copy_ubufs while we are still in control of the
1590 * skb. E.g. the __pskb_pull_tail earlier can do such thing.
1591 */
Zoltan Kiss1bb332a2014-03-06 21:48:28 +00001592 if (skb_shinfo(skb)->destructor_arg) {
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001593 skb_shinfo(skb)->tx_flags |= SKBTX_DEV_ZEROCOPY;
Zoltan Kiss1bb332a2014-03-06 21:48:28 +00001594 vif->tx_zerocopy_sent++;
1595 }
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001596
Wei Liub3f980b2013-08-26 12:59:38 +01001597 netif_receive_skb(skb);
Ian Campbellf942dc22011-03-15 00:06:18 +00001598 }
Wei Liub3f980b2013-08-26 12:59:38 +01001599
1600 return work_done;
Ian Campbellf942dc22011-03-15 00:06:18 +00001601}
1602
Zoltan Kiss3e2234b2014-03-06 21:48:25 +00001603void xenvif_zerocopy_callback(struct ubuf_info *ubuf, bool zerocopy_success)
1604{
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001605 unsigned long flags;
1606 pending_ring_idx_t index;
1607 struct xenvif *vif = ubuf_to_vif(ubuf);
1608
1609 /* This is the only place where we grab this lock, to protect callbacks
1610 * from each other.
1611 */
1612 spin_lock_irqsave(&vif->callback_lock, flags);
1613 do {
1614 u16 pending_idx = ubuf->desc;
1615 ubuf = (struct ubuf_info *) ubuf->ctx;
1616 BUG_ON(vif->dealloc_prod - vif->dealloc_cons >=
1617 MAX_PENDING_REQS);
1618 index = pending_index(vif->dealloc_prod);
1619 vif->dealloc_ring[index] = pending_idx;
1620 /* Sync with xenvif_tx_dealloc_action:
1621 * insert idx then incr producer.
1622 */
1623 smp_wmb();
1624 vif->dealloc_prod++;
1625 } while (ubuf);
1626 wake_up(&vif->dealloc_wq);
1627 spin_unlock_irqrestore(&vif->callback_lock, flags);
1628
Zoltan Kiss1bb332a2014-03-06 21:48:28 +00001629 if (likely(zerocopy_success))
1630 vif->tx_zerocopy_success++;
1631 else
1632 vif->tx_zerocopy_fail++;
Zoltan Kiss3e2234b2014-03-06 21:48:25 +00001633}
1634
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001635static inline void xenvif_tx_dealloc_action(struct xenvif *vif)
1636{
1637 struct gnttab_unmap_grant_ref *gop;
1638 pending_ring_idx_t dc, dp;
1639 u16 pending_idx, pending_idx_release[MAX_PENDING_REQS];
1640 unsigned int i = 0;
1641
1642 dc = vif->dealloc_cons;
1643 gop = vif->tx_unmap_ops;
1644
1645 /* Free up any grants we have finished using */
1646 do {
1647 dp = vif->dealloc_prod;
1648
1649 /* Ensure we see all indices enqueued by all
1650 * xenvif_zerocopy_callback().
1651 */
1652 smp_rmb();
1653
1654 while (dc != dp) {
1655 BUG_ON(gop - vif->tx_unmap_ops > MAX_PENDING_REQS);
1656 pending_idx =
1657 vif->dealloc_ring[pending_index(dc++)];
1658
1659 pending_idx_release[gop-vif->tx_unmap_ops] =
1660 pending_idx;
1661 vif->pages_to_unmap[gop-vif->tx_unmap_ops] =
1662 vif->mmap_pages[pending_idx];
1663 gnttab_set_unmap_op(gop,
1664 idx_to_kaddr(vif, pending_idx),
1665 GNTMAP_host_map,
1666 vif->grant_tx_handle[pending_idx]);
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001667 xenvif_grant_handle_reset(vif, pending_idx);
1668 ++gop;
1669 }
1670
1671 } while (dp != vif->dealloc_prod);
1672
1673 vif->dealloc_cons = dc;
1674
1675 if (gop - vif->tx_unmap_ops > 0) {
1676 int ret;
1677 ret = gnttab_unmap_refs(vif->tx_unmap_ops,
1678 NULL,
1679 vif->pages_to_unmap,
1680 gop - vif->tx_unmap_ops);
1681 if (ret) {
David S. Miller2c5f4f82014-03-25 19:02:16 -04001682 netdev_err(vif->dev, "Unmap fail: nr_ops %tx ret %d\n",
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001683 gop - vif->tx_unmap_ops, ret);
1684 for (i = 0; i < gop - vif->tx_unmap_ops; ++i) {
1685 if (gop[i].status != GNTST_okay)
1686 netdev_err(vif->dev,
1687 " host_addr: %llx handle: %x status: %d\n",
1688 gop[i].host_addr,
1689 gop[i].handle,
1690 gop[i].status);
1691 }
1692 BUG();
1693 }
1694 }
1695
1696 for (i = 0; i < gop - vif->tx_unmap_ops; ++i)
1697 xenvif_idx_release(vif, pending_idx_release[i],
1698 XEN_NETIF_RSP_OKAY);
1699}
1700
1701
Ian Campbellf942dc22011-03-15 00:06:18 +00001702/* Called after netfront has transmitted */
Wei Liu73764192013-08-26 12:59:39 +01001703int xenvif_tx_action(struct xenvif *vif, int budget)
Ian Campbellf942dc22011-03-15 00:06:18 +00001704{
Zoltan Kissbdab8272014-04-02 18:04:58 +01001705 unsigned nr_mops, nr_cops = 0;
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001706 int work_done, ret;
Ian Campbellf942dc22011-03-15 00:06:18 +00001707
Wei Liub3f980b2013-08-26 12:59:38 +01001708 if (unlikely(!tx_work_todo(vif)))
1709 return 0;
1710
Zoltan Kissbdab8272014-04-02 18:04:58 +01001711 xenvif_tx_build_gops(vif, budget, &nr_cops, &nr_mops);
Ian Campbellf942dc22011-03-15 00:06:18 +00001712
Zoltan Kissbdab8272014-04-02 18:04:58 +01001713 if (nr_cops == 0)
Wei Liub3f980b2013-08-26 12:59:38 +01001714 return 0;
Andres Lagar-Cavillac5718982012-09-14 14:26:59 +00001715
Zoltan Kissbdab8272014-04-02 18:04:58 +01001716 gnttab_batch_copy(vif->tx_copy_ops, nr_cops);
1717 if (nr_mops != 0) {
1718 ret = gnttab_map_refs(vif->tx_map_ops,
1719 NULL,
1720 vif->pages_to_map,
1721 nr_mops);
1722 BUG_ON(ret);
1723 }
Ian Campbellf942dc22011-03-15 00:06:18 +00001724
Paul Durrant10574052013-12-11 10:57:15 +00001725 work_done = xenvif_tx_submit(vif);
Wei Liub3f980b2013-08-26 12:59:38 +01001726
1727 return work_done;
Ian Campbellf942dc22011-03-15 00:06:18 +00001728}
1729
Wei Liu73764192013-08-26 12:59:39 +01001730static void xenvif_idx_release(struct xenvif *vif, u16 pending_idx,
1731 u8 status)
Ian Campbellf942dc22011-03-15 00:06:18 +00001732{
Ian Campbellf942dc22011-03-15 00:06:18 +00001733 struct pending_tx_info *pending_tx_info;
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001734 pending_ring_idx_t index;
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001735 unsigned long flags;
Wei Liu2810e5b2013-04-22 02:20:42 +00001736
Zoltan Kiss62bad312014-03-06 21:48:27 +00001737 pending_tx_info = &vif->pending_tx_info[pending_idx];
1738 spin_lock_irqsave(&vif->response_lock, flags);
1739 make_tx_response(vif, &pending_tx_info->req, status);
1740 index = pending_index(vif->pending_prod);
1741 vif->pending_ring[index] = pending_idx;
1742 /* TX shouldn't use the index before we give it back here */
1743 mb();
1744 vif->pending_prod++;
1745 spin_unlock_irqrestore(&vif->response_lock, flags);
Ian Campbellf942dc22011-03-15 00:06:18 +00001746}
1747
Wei Liu2810e5b2013-04-22 02:20:42 +00001748
Ian Campbellf942dc22011-03-15 00:06:18 +00001749static void make_tx_response(struct xenvif *vif,
1750 struct xen_netif_tx_request *txp,
1751 s8 st)
1752{
1753 RING_IDX i = vif->tx.rsp_prod_pvt;
1754 struct xen_netif_tx_response *resp;
1755 int notify;
1756
1757 resp = RING_GET_RESPONSE(&vif->tx, i);
1758 resp->id = txp->id;
1759 resp->status = st;
1760
1761 if (txp->flags & XEN_NETTXF_extra_info)
1762 RING_GET_RESPONSE(&vif->tx, ++i)->status = XEN_NETIF_RSP_NULL;
1763
1764 vif->tx.rsp_prod_pvt = ++i;
1765 RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&vif->tx, notify);
1766 if (notify)
Wei Liue1f00a692013-05-22 06:34:45 +00001767 notify_remote_via_irq(vif->tx_irq);
Ian Campbellf942dc22011-03-15 00:06:18 +00001768}
1769
1770static struct xen_netif_rx_response *make_rx_response(struct xenvif *vif,
1771 u16 id,
1772 s8 st,
1773 u16 offset,
1774 u16 size,
1775 u16 flags)
1776{
1777 RING_IDX i = vif->rx.rsp_prod_pvt;
1778 struct xen_netif_rx_response *resp;
1779
1780 resp = RING_GET_RESPONSE(&vif->rx, i);
1781 resp->offset = offset;
1782 resp->flags = flags;
1783 resp->id = id;
1784 resp->status = (s16)size;
1785 if (st < 0)
1786 resp->status = (s16)st;
1787
1788 vif->rx.rsp_prod_pvt = ++i;
1789
1790 return resp;
1791}
1792
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001793void xenvif_idx_unmap(struct xenvif *vif, u16 pending_idx)
1794{
1795 int ret;
1796 struct gnttab_unmap_grant_ref tx_unmap_op;
1797
1798 gnttab_set_unmap_op(&tx_unmap_op,
1799 idx_to_kaddr(vif, pending_idx),
1800 GNTMAP_host_map,
1801 vif->grant_tx_handle[pending_idx]);
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001802 xenvif_grant_handle_reset(vif, pending_idx);
1803
1804 ret = gnttab_unmap_refs(&tx_unmap_op, NULL,
1805 &vif->mmap_pages[pending_idx], 1);
Zoltan Kiss7aceb472014-03-24 23:59:51 +00001806 if (ret) {
1807 netdev_err(vif->dev,
1808 "Unmap fail: ret: %d pending_idx: %d host_addr: %llx handle: %x status: %d\n",
1809 ret,
1810 pending_idx,
1811 tx_unmap_op.host_addr,
1812 tx_unmap_op.handle,
1813 tx_unmap_op.status);
1814 BUG();
1815 }
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001816
1817 xenvif_idx_release(vif, pending_idx, XEN_NETIF_RSP_OKAY);
1818}
1819
Wei Liub3f980b2013-08-26 12:59:38 +01001820static inline int rx_work_todo(struct xenvif *vif)
Ian Campbellf942dc22011-03-15 00:06:18 +00001821{
Zoltan Kiss09350782014-03-06 21:48:30 +00001822 return (!skb_queue_empty(&vif->rx_queue) &&
1823 xenvif_rx_ring_slots_available(vif, vif->rx_last_skb_slots)) ||
1824 vif->rx_queue_purge;
Ian Campbellf942dc22011-03-15 00:06:18 +00001825}
1826
Wei Liub3f980b2013-08-26 12:59:38 +01001827static inline int tx_work_todo(struct xenvif *vif)
Ian Campbellf942dc22011-03-15 00:06:18 +00001828{
1829
Zoltan Kiss869b9b12014-03-24 23:59:49 +00001830 if (likely(RING_HAS_UNCONSUMED_REQUESTS(&vif->tx)))
Ian Campbellf942dc22011-03-15 00:06:18 +00001831 return 1;
1832
1833 return 0;
1834}
1835
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001836static inline bool tx_dealloc_work_todo(struct xenvif *vif)
1837{
Zoltan Kiss397dfd92014-03-21 17:23:04 +00001838 return vif->dealloc_cons != vif->dealloc_prod;
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001839}
1840
Wei Liu73764192013-08-26 12:59:39 +01001841void xenvif_unmap_frontend_rings(struct xenvif *vif)
Ian Campbellf942dc22011-03-15 00:06:18 +00001842{
David Vrabelc9d63692011-09-29 16:53:31 +01001843 if (vif->tx.sring)
1844 xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif),
1845 vif->tx.sring);
1846 if (vif->rx.sring)
1847 xenbus_unmap_ring_vfree(xenvif_to_xenbus_device(vif),
1848 vif->rx.sring);
Ian Campbellf942dc22011-03-15 00:06:18 +00001849}
1850
Wei Liu73764192013-08-26 12:59:39 +01001851int xenvif_map_frontend_rings(struct xenvif *vif,
1852 grant_ref_t tx_ring_ref,
1853 grant_ref_t rx_ring_ref)
Ian Campbellf942dc22011-03-15 00:06:18 +00001854{
David Vrabelc9d63692011-09-29 16:53:31 +01001855 void *addr;
Ian Campbellf942dc22011-03-15 00:06:18 +00001856 struct xen_netif_tx_sring *txs;
1857 struct xen_netif_rx_sring *rxs;
1858
1859 int err = -ENOMEM;
1860
David Vrabelc9d63692011-09-29 16:53:31 +01001861 err = xenbus_map_ring_valloc(xenvif_to_xenbus_device(vif),
1862 tx_ring_ref, &addr);
1863 if (err)
Ian Campbellf942dc22011-03-15 00:06:18 +00001864 goto err;
1865
David Vrabelc9d63692011-09-29 16:53:31 +01001866 txs = (struct xen_netif_tx_sring *)addr;
Ian Campbellf942dc22011-03-15 00:06:18 +00001867 BACK_RING_INIT(&vif->tx, txs, PAGE_SIZE);
1868
David Vrabelc9d63692011-09-29 16:53:31 +01001869 err = xenbus_map_ring_valloc(xenvif_to_xenbus_device(vif),
1870 rx_ring_ref, &addr);
1871 if (err)
Ian Campbellf942dc22011-03-15 00:06:18 +00001872 goto err;
Ian Campbellf942dc22011-03-15 00:06:18 +00001873
David Vrabelc9d63692011-09-29 16:53:31 +01001874 rxs = (struct xen_netif_rx_sring *)addr;
Ian Campbellf942dc22011-03-15 00:06:18 +00001875 BACK_RING_INIT(&vif->rx, rxs, PAGE_SIZE);
1876
1877 return 0;
1878
1879err:
Wei Liu73764192013-08-26 12:59:39 +01001880 xenvif_unmap_frontend_rings(vif);
Ian Campbellf942dc22011-03-15 00:06:18 +00001881 return err;
1882}
1883
Paul Durrantca2f09f2013-12-06 16:36:07 +00001884void xenvif_stop_queue(struct xenvif *vif)
1885{
1886 if (!vif->can_queue)
1887 return;
1888
1889 netif_stop_queue(vif->dev);
1890}
1891
1892static void xenvif_start_queue(struct xenvif *vif)
1893{
1894 if (xenvif_schedulable(vif))
1895 netif_wake_queue(vif->dev);
1896}
1897
Zoltan Kiss121fa4b2014-03-06 21:48:24 +00001898int xenvif_kthread_guest_rx(void *data)
Wei Liub3f980b2013-08-26 12:59:38 +01001899{
1900 struct xenvif *vif = data;
Paul Durrantca2f09f2013-12-06 16:36:07 +00001901 struct sk_buff *skb;
Wei Liub3f980b2013-08-26 12:59:38 +01001902
1903 while (!kthread_should_stop()) {
1904 wait_event_interruptible(vif->wq,
1905 rx_work_todo(vif) ||
Wei Liue9d8b2c2014-04-01 12:46:12 +01001906 vif->disabled ||
Wei Liub3f980b2013-08-26 12:59:38 +01001907 kthread_should_stop());
Wei Liue9d8b2c2014-04-01 12:46:12 +01001908
1909 /* This frontend is found to be rogue, disable it in
1910 * kthread context. Currently this is only set when
1911 * netback finds out frontend sends malformed packet,
1912 * but we cannot disable the interface in softirq
1913 * context so we defer it here.
1914 */
1915 if (unlikely(vif->disabled && netif_carrier_ok(vif->dev)))
1916 xenvif_carrier_off(vif);
1917
Wei Liub3f980b2013-08-26 12:59:38 +01001918 if (kthread_should_stop())
1919 break;
1920
Zoltan Kiss09350782014-03-06 21:48:30 +00001921 if (vif->rx_queue_purge) {
1922 skb_queue_purge(&vif->rx_queue);
1923 vif->rx_queue_purge = false;
1924 }
1925
Paul Durrantca2f09f2013-12-06 16:36:07 +00001926 if (!skb_queue_empty(&vif->rx_queue))
Wei Liu73764192013-08-26 12:59:39 +01001927 xenvif_rx_action(vif);
Wei Liub3f980b2013-08-26 12:59:38 +01001928
Paul Durrantca2f09f2013-12-06 16:36:07 +00001929 if (skb_queue_empty(&vif->rx_queue) &&
Zoltan Kiss09350782014-03-06 21:48:30 +00001930 netif_queue_stopped(vif->dev)) {
1931 del_timer_sync(&vif->wake_queue);
Paul Durrantca2f09f2013-12-06 16:36:07 +00001932 xenvif_start_queue(vif);
Zoltan Kiss09350782014-03-06 21:48:30 +00001933 }
Paul Durrantca2f09f2013-12-06 16:36:07 +00001934
Wei Liub3f980b2013-08-26 12:59:38 +01001935 cond_resched();
1936 }
1937
Paul Durrantca2f09f2013-12-06 16:36:07 +00001938 /* Bin any remaining skbs */
1939 while ((skb = skb_dequeue(&vif->rx_queue)) != NULL)
1940 dev_kfree_skb(skb);
1941
Wei Liub3f980b2013-08-26 12:59:38 +01001942 return 0;
1943}
1944
Zoltan Kissf53c3fe2014-03-06 21:48:26 +00001945int xenvif_dealloc_kthread(void *data)
1946{
1947 struct xenvif *vif = data;
1948
1949 while (!kthread_should_stop()) {
1950 wait_event_interruptible(vif->dealloc_wq,
1951 tx_dealloc_work_todo(vif) ||
1952 kthread_should_stop());
1953 if (kthread_should_stop())
1954 break;
1955
1956 xenvif_tx_dealloc_action(vif);
1957 cond_resched();
1958 }
1959
1960 /* Unmap anything remaining*/
1961 if (tx_dealloc_work_todo(vif))
1962 xenvif_tx_dealloc_action(vif);
1963
1964 return 0;
1965}
1966
Ian Campbellf942dc22011-03-15 00:06:18 +00001967static int __init netback_init(void)
1968{
Ian Campbellf942dc22011-03-15 00:06:18 +00001969 int rc = 0;
Ian Campbellf942dc22011-03-15 00:06:18 +00001970
Daniel De Graaf2a14b2442011-12-14 15:12:13 -05001971 if (!xen_domain())
Ian Campbellf942dc22011-03-15 00:06:18 +00001972 return -ENODEV;
1973
Wei Liu37641492013-05-02 00:43:59 +00001974 if (fatal_skb_slots < XEN_NETBK_LEGACY_SLOTS_MAX) {
Joe Perches383eda32013-06-27 21:57:49 -07001975 pr_info("fatal_skb_slots too small (%d), bump it to XEN_NETBK_LEGACY_SLOTS_MAX (%d)\n",
1976 fatal_skb_slots, XEN_NETBK_LEGACY_SLOTS_MAX);
Wei Liu37641492013-05-02 00:43:59 +00001977 fatal_skb_slots = XEN_NETBK_LEGACY_SLOTS_MAX;
Wei Liu2810e5b2013-04-22 02:20:42 +00001978 }
1979
Ian Campbellf942dc22011-03-15 00:06:18 +00001980 rc = xenvif_xenbus_init();
1981 if (rc)
1982 goto failed_init;
1983
Zoltan Kiss09350782014-03-06 21:48:30 +00001984 rx_drain_timeout_jiffies = msecs_to_jiffies(rx_drain_timeout_msecs);
1985
Ian Campbellf942dc22011-03-15 00:06:18 +00001986 return 0;
1987
1988failed_init:
Ian Campbellf942dc22011-03-15 00:06:18 +00001989 return rc;
Ian Campbellf942dc22011-03-15 00:06:18 +00001990}
1991
1992module_init(netback_init);
1993
Wei Liub103f352013-05-16 23:26:11 +00001994static void __exit netback_fini(void)
1995{
Wei Liub103f352013-05-16 23:26:11 +00001996 xenvif_xenbus_fini();
Wei Liub103f352013-05-16 23:26:11 +00001997}
1998module_exit(netback_fini);
1999
Ian Campbellf942dc22011-03-15 00:06:18 +00002000MODULE_LICENSE("Dual BSD/GPL");
Bastian Blankf984cec2011-06-30 11:19:09 -07002001MODULE_ALIAS("xen-backend:vif");