]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/block/xen-blkback/blkback.c
ARM: delete struct sys_timer
[karo-tx-linux.git] / drivers / block / xen-blkback / blkback.c
1 /******************************************************************************
2  *
3  * Back-end of the driver for virtual block devices. This portion of the
4  * driver exports a 'unified' block-device interface that can be accessed
5  * by any operating system that implements a compatible front end. A
6  * reference front-end implementation can be found in:
7  *  drivers/block/xen-blkfront.c
8  *
9  * Copyright (c) 2003-2004, Keir Fraser & Steve Hand
10  * Copyright (c) 2005, Christopher Clark
11  *
12  * This program is free software; you can redistribute it and/or
13  * modify it under the terms of the GNU General Public License version 2
14  * as published by the Free Software Foundation; or, when distributed
15  * separately from the Linux kernel or incorporated into other
16  * software packages, subject to the following license:
17  *
18  * Permission is hereby granted, free of charge, to any person obtaining a copy
19  * of this source file (the "Software"), to deal in the Software without
20  * restriction, including without limitation the rights to use, copy, modify,
21  * merge, publish, distribute, sublicense, and/or sell copies of the Software,
22  * and to permit persons to whom the Software is furnished to do so, subject to
23  * the following conditions:
24  *
25  * The above copyright notice and this permission notice shall be included in
26  * all copies or substantial portions of the Software.
27  *
28  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
29  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
30  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
31  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
32  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
33  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
34  * IN THE SOFTWARE.
35  */
36
37 #include <linux/spinlock.h>
38 #include <linux/kthread.h>
39 #include <linux/list.h>
40 #include <linux/delay.h>
41 #include <linux/freezer.h>
42 #include <linux/bitmap.h>
43
44 #include <xen/events.h>
45 #include <xen/page.h>
46 #include <xen/xen.h>
47 #include <asm/xen/hypervisor.h>
48 #include <asm/xen/hypercall.h>
49 #include "common.h"
50
51 /*
52  * These are rather arbitrary. They are fairly large because adjacent requests
53  * pulled from a communication ring are quite likely to end up being part of
54  * the same scatter/gather request at the disc.
55  *
56  * ** TRY INCREASING 'xen_blkif_reqs' IF WRITE SPEEDS SEEM TOO LOW **
57  *
58  * This will increase the chances of being able to write whole tracks.
59  * 64 should be enough to keep us competitive with Linux.
60  */
61 static int xen_blkif_reqs = 64;
62 module_param_named(reqs, xen_blkif_reqs, int, 0);
63 MODULE_PARM_DESC(reqs, "Number of blkback requests to allocate");
64
65 /* Run-time switchable: /sys/module/blkback/parameters/ */
66 static unsigned int log_stats;
67 module_param(log_stats, int, 0644);
68
69 /*
70  * Each outstanding request that we've passed to the lower device layers has a
71  * 'pending_req' allocated to it. Each buffer_head that completes decrements
72  * the pendcnt towards zero. When it hits zero, the specified domain has a
73  * response queued for it, with the saved 'id' passed back.
74  */
75 struct pending_req {
76         struct xen_blkif        *blkif;
77         u64                     id;
78         int                     nr_pages;
79         atomic_t                pendcnt;
80         unsigned short          operation;
81         int                     status;
82         struct list_head        free_list;
83         DECLARE_BITMAP(unmap_seg, BLKIF_MAX_SEGMENTS_PER_REQUEST);
84 };
85
86 #define BLKBACK_INVALID_HANDLE (~0)
87
88 struct xen_blkbk {
89         struct pending_req      *pending_reqs;
90         /* List of all 'pending_req' available */
91         struct list_head        pending_free;
92         /* And its spinlock. */
93         spinlock_t              pending_free_lock;
94         wait_queue_head_t       pending_free_wq;
95         /* The list of all pages that are available. */
96         struct page             **pending_pages;
97         /* And the grant handles that are available. */
98         grant_handle_t          *pending_grant_handles;
99 };
100
101 static struct xen_blkbk *blkbk;
102
103 /*
104  * Maximum number of grant pages that can be mapped in blkback.
105  * BLKIF_MAX_SEGMENTS_PER_REQUEST * RING_SIZE is the maximum number of
106  * pages that blkback will persistently map.
107  * Currently, this is:
108  * RING_SIZE = 32 (for all known ring types)
109  * BLKIF_MAX_SEGMENTS_PER_REQUEST = 11
110  * sizeof(struct persistent_gnt) = 48
111  * So the maximum memory used to store the grants is:
112  * 32 * 11 * 48 = 16896 bytes
113  */
114 static inline unsigned int max_mapped_grant_pages(enum blkif_protocol protocol)
115 {
116         switch (protocol) {
117         case BLKIF_PROTOCOL_NATIVE:
118                 return __CONST_RING_SIZE(blkif, PAGE_SIZE) *
119                            BLKIF_MAX_SEGMENTS_PER_REQUEST;
120         case BLKIF_PROTOCOL_X86_32:
121                 return __CONST_RING_SIZE(blkif_x86_32, PAGE_SIZE) *
122                            BLKIF_MAX_SEGMENTS_PER_REQUEST;
123         case BLKIF_PROTOCOL_X86_64:
124                 return __CONST_RING_SIZE(blkif_x86_64, PAGE_SIZE) *
125                            BLKIF_MAX_SEGMENTS_PER_REQUEST;
126         default:
127                 BUG();
128         }
129         return 0;
130 }
131
132
133 /*
134  * Little helpful macro to figure out the index and virtual address of the
135  * pending_pages[..]. For each 'pending_req' we have have up to
136  * BLKIF_MAX_SEGMENTS_PER_REQUEST (11) pages. The seg would be from 0 through
137  * 10 and would index in the pending_pages[..].
138  */
139 static inline int vaddr_pagenr(struct pending_req *req, int seg)
140 {
141         return (req - blkbk->pending_reqs) *
142                 BLKIF_MAX_SEGMENTS_PER_REQUEST + seg;
143 }
144
145 #define pending_page(req, seg) pending_pages[vaddr_pagenr(req, seg)]
146
147 static inline unsigned long vaddr(struct pending_req *req, int seg)
148 {
149         unsigned long pfn = page_to_pfn(blkbk->pending_page(req, seg));
150         return (unsigned long)pfn_to_kaddr(pfn);
151 }
152
153 #define pending_handle(_req, _seg) \
154         (blkbk->pending_grant_handles[vaddr_pagenr(_req, _seg)])
155
156
157 static int do_block_io_op(struct xen_blkif *blkif);
158 static int dispatch_rw_block_io(struct xen_blkif *blkif,
159                                 struct blkif_request *req,
160                                 struct pending_req *pending_req);
161 static void make_response(struct xen_blkif *blkif, u64 id,
162                           unsigned short op, int st);
163
164 #define foreach_grant(pos, rbtree, node) \
165         for ((pos) = container_of(rb_first((rbtree)), typeof(*(pos)), node); \
166              &(pos)->node != NULL; \
167              (pos) = container_of(rb_next(&(pos)->node), typeof(*(pos)), node))
168
169
170 static void add_persistent_gnt(struct rb_root *root,
171                                struct persistent_gnt *persistent_gnt)
172 {
173         struct rb_node **new = &(root->rb_node), *parent = NULL;
174         struct persistent_gnt *this;
175
176         /* Figure out where to put new node */
177         while (*new) {
178                 this = container_of(*new, struct persistent_gnt, node);
179
180                 parent = *new;
181                 if (persistent_gnt->gnt < this->gnt)
182                         new = &((*new)->rb_left);
183                 else if (persistent_gnt->gnt > this->gnt)
184                         new = &((*new)->rb_right);
185                 else {
186                         pr_alert(DRV_PFX " trying to add a gref that's already in the tree\n");
187                         BUG();
188                 }
189         }
190
191         /* Add new node and rebalance tree. */
192         rb_link_node(&(persistent_gnt->node), parent, new);
193         rb_insert_color(&(persistent_gnt->node), root);
194 }
195
196 static struct persistent_gnt *get_persistent_gnt(struct rb_root *root,
197                                                  grant_ref_t gref)
198 {
199         struct persistent_gnt *data;
200         struct rb_node *node = root->rb_node;
201
202         while (node) {
203                 data = container_of(node, struct persistent_gnt, node);
204
205                 if (gref < data->gnt)
206                         node = node->rb_left;
207                 else if (gref > data->gnt)
208                         node = node->rb_right;
209                 else
210                         return data;
211         }
212         return NULL;
213 }
214
215 static void free_persistent_gnts(struct rb_root *root, unsigned int num)
216 {
217         struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
218         struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST];
219         struct persistent_gnt *persistent_gnt;
220         int ret = 0;
221         int segs_to_unmap = 0;
222
223         foreach_grant(persistent_gnt, root, node) {
224                 BUG_ON(persistent_gnt->handle ==
225                         BLKBACK_INVALID_HANDLE);
226                 gnttab_set_unmap_op(&unmap[segs_to_unmap],
227                         (unsigned long) pfn_to_kaddr(page_to_pfn(
228                                 persistent_gnt->page)),
229                         GNTMAP_host_map,
230                         persistent_gnt->handle);
231
232                 pages[segs_to_unmap] = persistent_gnt->page;
233                 rb_erase(&persistent_gnt->node, root);
234                 kfree(persistent_gnt);
235                 num--;
236
237                 if (++segs_to_unmap == BLKIF_MAX_SEGMENTS_PER_REQUEST ||
238                         !rb_next(&persistent_gnt->node)) {
239                         ret = gnttab_unmap_refs(unmap, NULL, pages,
240                                 segs_to_unmap);
241                         BUG_ON(ret);
242                         segs_to_unmap = 0;
243                 }
244         }
245         BUG_ON(num != 0);
246 }
247
248 /*
249  * Retrieve from the 'pending_reqs' a free pending_req structure to be used.
250  */
251 static struct pending_req *alloc_req(void)
252 {
253         struct pending_req *req = NULL;
254         unsigned long flags;
255
256         spin_lock_irqsave(&blkbk->pending_free_lock, flags);
257         if (!list_empty(&blkbk->pending_free)) {
258                 req = list_entry(blkbk->pending_free.next, struct pending_req,
259                                  free_list);
260                 list_del(&req->free_list);
261         }
262         spin_unlock_irqrestore(&blkbk->pending_free_lock, flags);
263         return req;
264 }
265
266 /*
267  * Return the 'pending_req' structure back to the freepool. We also
268  * wake up the thread if it was waiting for a free page.
269  */
270 static void free_req(struct pending_req *req)
271 {
272         unsigned long flags;
273         int was_empty;
274
275         spin_lock_irqsave(&blkbk->pending_free_lock, flags);
276         was_empty = list_empty(&blkbk->pending_free);
277         list_add(&req->free_list, &blkbk->pending_free);
278         spin_unlock_irqrestore(&blkbk->pending_free_lock, flags);
279         if (was_empty)
280                 wake_up(&blkbk->pending_free_wq);
281 }
282
283 /*
284  * Routines for managing virtual block devices (vbds).
285  */
286 static int xen_vbd_translate(struct phys_req *req, struct xen_blkif *blkif,
287                              int operation)
288 {
289         struct xen_vbd *vbd = &blkif->vbd;
290         int rc = -EACCES;
291
292         if ((operation != READ) && vbd->readonly)
293                 goto out;
294
295         if (likely(req->nr_sects)) {
296                 blkif_sector_t end = req->sector_number + req->nr_sects;
297
298                 if (unlikely(end < req->sector_number))
299                         goto out;
300                 if (unlikely(end > vbd_sz(vbd)))
301                         goto out;
302         }
303
304         req->dev  = vbd->pdevice;
305         req->bdev = vbd->bdev;
306         rc = 0;
307
308  out:
309         return rc;
310 }
311
312 static void xen_vbd_resize(struct xen_blkif *blkif)
313 {
314         struct xen_vbd *vbd = &blkif->vbd;
315         struct xenbus_transaction xbt;
316         int err;
317         struct xenbus_device *dev = xen_blkbk_xenbus(blkif->be);
318         unsigned long long new_size = vbd_sz(vbd);
319
320         pr_info(DRV_PFX "VBD Resize: Domid: %d, Device: (%d, %d)\n",
321                 blkif->domid, MAJOR(vbd->pdevice), MINOR(vbd->pdevice));
322         pr_info(DRV_PFX "VBD Resize: new size %llu\n", new_size);
323         vbd->size = new_size;
324 again:
325         err = xenbus_transaction_start(&xbt);
326         if (err) {
327                 pr_warn(DRV_PFX "Error starting transaction");
328                 return;
329         }
330         err = xenbus_printf(xbt, dev->nodename, "sectors", "%llu",
331                             (unsigned long long)vbd_sz(vbd));
332         if (err) {
333                 pr_warn(DRV_PFX "Error writing new size");
334                 goto abort;
335         }
336         /*
337          * Write the current state; we will use this to synchronize
338          * the front-end. If the current state is "connected" the
339          * front-end will get the new size information online.
340          */
341         err = xenbus_printf(xbt, dev->nodename, "state", "%d", dev->state);
342         if (err) {
343                 pr_warn(DRV_PFX "Error writing the state");
344                 goto abort;
345         }
346
347         err = xenbus_transaction_end(xbt, 0);
348         if (err == -EAGAIN)
349                 goto again;
350         if (err)
351                 pr_warn(DRV_PFX "Error ending transaction");
352         return;
353 abort:
354         xenbus_transaction_end(xbt, 1);
355 }
356
357 /*
358  * Notification from the guest OS.
359  */
360 static void blkif_notify_work(struct xen_blkif *blkif)
361 {
362         blkif->waiting_reqs = 1;
363         wake_up(&blkif->wq);
364 }
365
366 irqreturn_t xen_blkif_be_int(int irq, void *dev_id)
367 {
368         blkif_notify_work(dev_id);
369         return IRQ_HANDLED;
370 }
371
372 /*
373  * SCHEDULER FUNCTIONS
374  */
375
376 static void print_stats(struct xen_blkif *blkif)
377 {
378         pr_info("xen-blkback (%s): oo %3d  |  rd %4d  |  wr %4d  |  f %4d"
379                  "  |  ds %4d\n",
380                  current->comm, blkif->st_oo_req,
381                  blkif->st_rd_req, blkif->st_wr_req,
382                  blkif->st_f_req, blkif->st_ds_req);
383         blkif->st_print = jiffies + msecs_to_jiffies(10 * 1000);
384         blkif->st_rd_req = 0;
385         blkif->st_wr_req = 0;
386         blkif->st_oo_req = 0;
387         blkif->st_ds_req = 0;
388 }
389
390 int xen_blkif_schedule(void *arg)
391 {
392         struct xen_blkif *blkif = arg;
393         struct xen_vbd *vbd = &blkif->vbd;
394
395         xen_blkif_get(blkif);
396
397         while (!kthread_should_stop()) {
398                 if (try_to_freeze())
399                         continue;
400                 if (unlikely(vbd->size != vbd_sz(vbd)))
401                         xen_vbd_resize(blkif);
402
403                 wait_event_interruptible(
404                         blkif->wq,
405                         blkif->waiting_reqs || kthread_should_stop());
406                 wait_event_interruptible(
407                         blkbk->pending_free_wq,
408                         !list_empty(&blkbk->pending_free) ||
409                         kthread_should_stop());
410
411                 blkif->waiting_reqs = 0;
412                 smp_mb(); /* clear flag *before* checking for work */
413
414                 if (do_block_io_op(blkif))
415                         blkif->waiting_reqs = 1;
416
417                 if (log_stats && time_after(jiffies, blkif->st_print))
418                         print_stats(blkif);
419         }
420
421         /* Free all persistent grant pages */
422         if (!RB_EMPTY_ROOT(&blkif->persistent_gnts))
423                 free_persistent_gnts(&blkif->persistent_gnts,
424                         blkif->persistent_gnt_c);
425
426         BUG_ON(!RB_EMPTY_ROOT(&blkif->persistent_gnts));
427         blkif->persistent_gnt_c = 0;
428
429         if (log_stats)
430                 print_stats(blkif);
431
432         blkif->xenblkd = NULL;
433         xen_blkif_put(blkif);
434
435         return 0;
436 }
437
438 struct seg_buf {
439         unsigned long buf;
440         unsigned int nsec;
441 };
442 /*
443  * Unmap the grant references, and also remove the M2P over-rides
444  * used in the 'pending_req'.
445  */
446 static void xen_blkbk_unmap(struct pending_req *req)
447 {
448         struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
449         struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST];
450         unsigned int i, invcount = 0;
451         grant_handle_t handle;
452         int ret;
453
454         for (i = 0; i < req->nr_pages; i++) {
455                 if (!test_bit(i, req->unmap_seg))
456                         continue;
457                 handle = pending_handle(req, i);
458                 if (handle == BLKBACK_INVALID_HANDLE)
459                         continue;
460                 gnttab_set_unmap_op(&unmap[invcount], vaddr(req, i),
461                                     GNTMAP_host_map, handle);
462                 pending_handle(req, i) = BLKBACK_INVALID_HANDLE;
463                 pages[invcount] = virt_to_page(vaddr(req, i));
464                 invcount++;
465         }
466
467         ret = gnttab_unmap_refs(unmap, NULL, pages, invcount);
468         BUG_ON(ret);
469 }
470
471 static int xen_blkbk_map(struct blkif_request *req,
472                          struct pending_req *pending_req,
473                          struct seg_buf seg[],
474                          struct page *pages[])
475 {
476         struct gnttab_map_grant_ref map[BLKIF_MAX_SEGMENTS_PER_REQUEST];
477         struct persistent_gnt *persistent_gnts[BLKIF_MAX_SEGMENTS_PER_REQUEST];
478         struct page *pages_to_gnt[BLKIF_MAX_SEGMENTS_PER_REQUEST];
479         struct persistent_gnt *persistent_gnt = NULL;
480         struct xen_blkif *blkif = pending_req->blkif;
481         phys_addr_t addr = 0;
482         int i, j;
483         bool new_map;
484         int nseg = req->u.rw.nr_segments;
485         int segs_to_map = 0;
486         int ret = 0;
487         int use_persistent_gnts;
488
489         use_persistent_gnts = (blkif->vbd.feature_gnt_persistent);
490
491         BUG_ON(blkif->persistent_gnt_c >
492                    max_mapped_grant_pages(pending_req->blkif->blk_protocol));
493
494         /*
495          * Fill out preq.nr_sects with proper amount of sectors, and setup
496          * assign map[..] with the PFN of the page in our domain with the
497          * corresponding grant reference for each page.
498          */
499         for (i = 0; i < nseg; i++) {
500                 uint32_t flags;
501
502                 if (use_persistent_gnts)
503                         persistent_gnt = get_persistent_gnt(
504                                 &blkif->persistent_gnts,
505                                 req->u.rw.seg[i].gref);
506
507                 if (persistent_gnt) {
508                         /*
509                          * We are using persistent grants and
510                          * the grant is already mapped
511                          */
512                         new_map = false;
513                 } else if (use_persistent_gnts &&
514                            blkif->persistent_gnt_c <
515                            max_mapped_grant_pages(blkif->blk_protocol)) {
516                         /*
517                          * We are using persistent grants, the grant is
518                          * not mapped but we have room for it
519                          */
520                         new_map = true;
521                         persistent_gnt = kmalloc(
522                                 sizeof(struct persistent_gnt),
523                                 GFP_KERNEL);
524                         if (!persistent_gnt)
525                                 return -ENOMEM;
526                         persistent_gnt->page = alloc_page(GFP_KERNEL);
527                         if (!persistent_gnt->page) {
528                                 kfree(persistent_gnt);
529                                 return -ENOMEM;
530                         }
531                         persistent_gnt->gnt = req->u.rw.seg[i].gref;
532                         persistent_gnt->handle = BLKBACK_INVALID_HANDLE;
533
534                         pages_to_gnt[segs_to_map] =
535                                 persistent_gnt->page;
536                         addr = (unsigned long) pfn_to_kaddr(
537                                 page_to_pfn(persistent_gnt->page));
538
539                         add_persistent_gnt(&blkif->persistent_gnts,
540                                 persistent_gnt);
541                         blkif->persistent_gnt_c++;
542                         pr_debug(DRV_PFX " grant %u added to the tree of persistent grants, using %u/%u\n",
543                                  persistent_gnt->gnt, blkif->persistent_gnt_c,
544                                  max_mapped_grant_pages(blkif->blk_protocol));
545                 } else {
546                         /*
547                          * We are either using persistent grants and
548                          * hit the maximum limit of grants mapped,
549                          * or we are not using persistent grants.
550                          */
551                         if (use_persistent_gnts &&
552                                 !blkif->vbd.overflow_max_grants) {
553                                 blkif->vbd.overflow_max_grants = 1;
554                                 pr_alert(DRV_PFX " domain %u, device %#x is using maximum number of persistent grants\n",
555                                          blkif->domid, blkif->vbd.handle);
556                         }
557                         new_map = true;
558                         pages[i] = blkbk->pending_page(pending_req, i);
559                         addr = vaddr(pending_req, i);
560                         pages_to_gnt[segs_to_map] =
561                                 blkbk->pending_page(pending_req, i);
562                 }
563
564                 if (persistent_gnt) {
565                         pages[i] = persistent_gnt->page;
566                         persistent_gnts[i] = persistent_gnt;
567                 } else {
568                         persistent_gnts[i] = NULL;
569                 }
570
571                 if (new_map) {
572                         flags = GNTMAP_host_map;
573                         if (!persistent_gnt &&
574                             (pending_req->operation != BLKIF_OP_READ))
575                                 flags |= GNTMAP_readonly;
576                         gnttab_set_map_op(&map[segs_to_map++], addr,
577                                           flags, req->u.rw.seg[i].gref,
578                                           blkif->domid);
579                 }
580         }
581
582         if (segs_to_map) {
583                 ret = gnttab_map_refs(map, NULL, pages_to_gnt, segs_to_map);
584                 BUG_ON(ret);
585         }
586
587         /*
588          * Now swizzle the MFN in our domain with the MFN from the other domain
589          * so that when we access vaddr(pending_req,i) it has the contents of
590          * the page from the other domain.
591          */
592         bitmap_zero(pending_req->unmap_seg, BLKIF_MAX_SEGMENTS_PER_REQUEST);
593         for (i = 0, j = 0; i < nseg; i++) {
594                 if (!persistent_gnts[i] ||
595                     persistent_gnts[i]->handle == BLKBACK_INVALID_HANDLE) {
596                         /* This is a newly mapped grant */
597                         BUG_ON(j >= segs_to_map);
598                         if (unlikely(map[j].status != 0)) {
599                                 pr_debug(DRV_PFX "invalid buffer -- could not remap it\n");
600                                 map[j].handle = BLKBACK_INVALID_HANDLE;
601                                 ret |= 1;
602                                 if (persistent_gnts[i]) {
603                                         rb_erase(&persistent_gnts[i]->node,
604                                                  &blkif->persistent_gnts);
605                                         blkif->persistent_gnt_c--;
606                                         kfree(persistent_gnts[i]);
607                                         persistent_gnts[i] = NULL;
608                                 }
609                         }
610                 }
611                 if (persistent_gnts[i]) {
612                         if (persistent_gnts[i]->handle ==
613                             BLKBACK_INVALID_HANDLE) {
614                                 /*
615                                  * If this is a new persistent grant
616                                  * save the handler
617                                  */
618                                 persistent_gnts[i]->handle = map[j].handle;
619                                 persistent_gnts[i]->dev_bus_addr =
620                                         map[j++].dev_bus_addr;
621                         }
622                         pending_handle(pending_req, i) =
623                                 persistent_gnts[i]->handle;
624
625                         if (ret)
626                                 continue;
627
628                         seg[i].buf = persistent_gnts[i]->dev_bus_addr |
629                                 (req->u.rw.seg[i].first_sect << 9);
630                 } else {
631                         pending_handle(pending_req, i) = map[j].handle;
632                         bitmap_set(pending_req->unmap_seg, i, 1);
633
634                         if (ret) {
635                                 j++;
636                                 continue;
637                         }
638
639                         seg[i].buf = map[j++].dev_bus_addr |
640                                 (req->u.rw.seg[i].first_sect << 9);
641                 }
642         }
643         return ret;
644 }
645
646 static int dispatch_discard_io(struct xen_blkif *blkif,
647                                 struct blkif_request *req)
648 {
649         int err = 0;
650         int status = BLKIF_RSP_OKAY;
651         struct block_device *bdev = blkif->vbd.bdev;
652         unsigned long secure;
653
654         blkif->st_ds_req++;
655
656         xen_blkif_get(blkif);
657         secure = (blkif->vbd.discard_secure &&
658                  (req->u.discard.flag & BLKIF_DISCARD_SECURE)) ?
659                  BLKDEV_DISCARD_SECURE : 0;
660
661         err = blkdev_issue_discard(bdev, req->u.discard.sector_number,
662                                    req->u.discard.nr_sectors,
663                                    GFP_KERNEL, secure);
664
665         if (err == -EOPNOTSUPP) {
666                 pr_debug(DRV_PFX "discard op failed, not supported\n");
667                 status = BLKIF_RSP_EOPNOTSUPP;
668         } else if (err)
669                 status = BLKIF_RSP_ERROR;
670
671         make_response(blkif, req->u.discard.id, req->operation, status);
672         xen_blkif_put(blkif);
673         return err;
674 }
675
676 static void xen_blk_drain_io(struct xen_blkif *blkif)
677 {
678         atomic_set(&blkif->drain, 1);
679         do {
680                 /* The initial value is one, and one refcnt taken at the
681                  * start of the xen_blkif_schedule thread. */
682                 if (atomic_read(&blkif->refcnt) <= 2)
683                         break;
684                 wait_for_completion_interruptible_timeout(
685                                 &blkif->drain_complete, HZ);
686
687                 if (!atomic_read(&blkif->drain))
688                         break;
689         } while (!kthread_should_stop());
690         atomic_set(&blkif->drain, 0);
691 }
692
693 /*
694  * Completion callback on the bio's. Called as bh->b_end_io()
695  */
696
697 static void __end_block_io_op(struct pending_req *pending_req, int error)
698 {
699         /* An error fails the entire request. */
700         if ((pending_req->operation == BLKIF_OP_FLUSH_DISKCACHE) &&
701             (error == -EOPNOTSUPP)) {
702                 pr_debug(DRV_PFX "flush diskcache op failed, not supported\n");
703                 xen_blkbk_flush_diskcache(XBT_NIL, pending_req->blkif->be, 0);
704                 pending_req->status = BLKIF_RSP_EOPNOTSUPP;
705         } else if ((pending_req->operation == BLKIF_OP_WRITE_BARRIER) &&
706                     (error == -EOPNOTSUPP)) {
707                 pr_debug(DRV_PFX "write barrier op failed, not supported\n");
708                 xen_blkbk_barrier(XBT_NIL, pending_req->blkif->be, 0);
709                 pending_req->status = BLKIF_RSP_EOPNOTSUPP;
710         } else if (error) {
711                 pr_debug(DRV_PFX "Buffer not up-to-date at end of operation,"
712                          " error=%d\n", error);
713                 pending_req->status = BLKIF_RSP_ERROR;
714         }
715
716         /*
717          * If all of the bio's have completed it is time to unmap
718          * the grant references associated with 'request' and provide
719          * the proper response on the ring.
720          */
721         if (atomic_dec_and_test(&pending_req->pendcnt)) {
722                 xen_blkbk_unmap(pending_req);
723                 make_response(pending_req->blkif, pending_req->id,
724                               pending_req->operation, pending_req->status);
725                 xen_blkif_put(pending_req->blkif);
726                 if (atomic_read(&pending_req->blkif->refcnt) <= 2) {
727                         if (atomic_read(&pending_req->blkif->drain))
728                                 complete(&pending_req->blkif->drain_complete);
729                 }
730                 free_req(pending_req);
731         }
732 }
733
734 /*
735  * bio callback.
736  */
737 static void end_block_io_op(struct bio *bio, int error)
738 {
739         __end_block_io_op(bio->bi_private, error);
740         bio_put(bio);
741 }
742
743
744
745 /*
746  * Function to copy the from the ring buffer the 'struct blkif_request'
747  * (which has the sectors we want, number of them, grant references, etc),
748  * and transmute  it to the block API to hand it over to the proper block disk.
749  */
750 static int
751 __do_block_io_op(struct xen_blkif *blkif)
752 {
753         union blkif_back_rings *blk_rings = &blkif->blk_rings;
754         struct blkif_request req;
755         struct pending_req *pending_req;
756         RING_IDX rc, rp;
757         int more_to_do = 0;
758
759         rc = blk_rings->common.req_cons;
760         rp = blk_rings->common.sring->req_prod;
761         rmb(); /* Ensure we see queued requests up to 'rp'. */
762
763         while (rc != rp) {
764
765                 if (RING_REQUEST_CONS_OVERFLOW(&blk_rings->common, rc))
766                         break;
767
768                 if (kthread_should_stop()) {
769                         more_to_do = 1;
770                         break;
771                 }
772
773                 pending_req = alloc_req();
774                 if (NULL == pending_req) {
775                         blkif->st_oo_req++;
776                         more_to_do = 1;
777                         break;
778                 }
779
780                 switch (blkif->blk_protocol) {
781                 case BLKIF_PROTOCOL_NATIVE:
782                         memcpy(&req, RING_GET_REQUEST(&blk_rings->native, rc), sizeof(req));
783                         break;
784                 case BLKIF_PROTOCOL_X86_32:
785                         blkif_get_x86_32_req(&req, RING_GET_REQUEST(&blk_rings->x86_32, rc));
786                         break;
787                 case BLKIF_PROTOCOL_X86_64:
788                         blkif_get_x86_64_req(&req, RING_GET_REQUEST(&blk_rings->x86_64, rc));
789                         break;
790                 default:
791                         BUG();
792                 }
793                 blk_rings->common.req_cons = ++rc; /* before make_response() */
794
795                 /* Apply all sanity checks to /private copy/ of request. */
796                 barrier();
797                 if (unlikely(req.operation == BLKIF_OP_DISCARD)) {
798                         free_req(pending_req);
799                         if (dispatch_discard_io(blkif, &req))
800                                 break;
801                 } else if (dispatch_rw_block_io(blkif, &req, pending_req))
802                         break;
803
804                 /* Yield point for this unbounded loop. */
805                 cond_resched();
806         }
807
808         return more_to_do;
809 }
810
811 static int
812 do_block_io_op(struct xen_blkif *blkif)
813 {
814         union blkif_back_rings *blk_rings = &blkif->blk_rings;
815         int more_to_do;
816
817         do {
818                 more_to_do = __do_block_io_op(blkif);
819                 if (more_to_do)
820                         break;
821
822                 RING_FINAL_CHECK_FOR_REQUESTS(&blk_rings->common, more_to_do);
823         } while (more_to_do);
824
825         return more_to_do;
826 }
827 /*
828  * Transmutation of the 'struct blkif_request' to a proper 'struct bio'
829  * and call the 'submit_bio' to pass it to the underlying storage.
830  */
831 static int dispatch_rw_block_io(struct xen_blkif *blkif,
832                                 struct blkif_request *req,
833                                 struct pending_req *pending_req)
834 {
835         struct phys_req preq;
836         struct seg_buf seg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
837         unsigned int nseg;
838         struct bio *bio = NULL;
839         struct bio *biolist[BLKIF_MAX_SEGMENTS_PER_REQUEST];
840         int i, nbio = 0;
841         int operation;
842         struct blk_plug plug;
843         bool drain = false;
844         struct page *pages[BLKIF_MAX_SEGMENTS_PER_REQUEST];
845
846         switch (req->operation) {
847         case BLKIF_OP_READ:
848                 blkif->st_rd_req++;
849                 operation = READ;
850                 break;
851         case BLKIF_OP_WRITE:
852                 blkif->st_wr_req++;
853                 operation = WRITE_ODIRECT;
854                 break;
855         case BLKIF_OP_WRITE_BARRIER:
856                 drain = true;
857         case BLKIF_OP_FLUSH_DISKCACHE:
858                 blkif->st_f_req++;
859                 operation = WRITE_FLUSH;
860                 break;
861         default:
862                 operation = 0; /* make gcc happy */
863                 goto fail_response;
864                 break;
865         }
866
867         /* Check that the number of segments is sane. */
868         nseg = req->u.rw.nr_segments;
869
870         if (unlikely(nseg == 0 && operation != WRITE_FLUSH) ||
871             unlikely(nseg > BLKIF_MAX_SEGMENTS_PER_REQUEST)) {
872                 pr_debug(DRV_PFX "Bad number of segments in request (%d)\n",
873                          nseg);
874                 /* Haven't submitted any bio's yet. */
875                 goto fail_response;
876         }
877
878         preq.dev           = req->u.rw.handle;
879         preq.sector_number = req->u.rw.sector_number;
880         preq.nr_sects      = 0;
881
882         pending_req->blkif     = blkif;
883         pending_req->id        = req->u.rw.id;
884         pending_req->operation = req->operation;
885         pending_req->status    = BLKIF_RSP_OKAY;
886         pending_req->nr_pages  = nseg;
887
888         for (i = 0; i < nseg; i++) {
889                 seg[i].nsec = req->u.rw.seg[i].last_sect -
890                         req->u.rw.seg[i].first_sect + 1;
891                 if ((req->u.rw.seg[i].last_sect >= (PAGE_SIZE >> 9)) ||
892                     (req->u.rw.seg[i].last_sect < req->u.rw.seg[i].first_sect))
893                         goto fail_response;
894                 preq.nr_sects += seg[i].nsec;
895
896         }
897
898         if (xen_vbd_translate(&preq, blkif, operation) != 0) {
899                 pr_debug(DRV_PFX "access denied: %s of [%llu,%llu] on dev=%04x\n",
900                          operation == READ ? "read" : "write",
901                          preq.sector_number,
902                          preq.sector_number + preq.nr_sects, preq.dev);
903                 goto fail_response;
904         }
905
906         /*
907          * This check _MUST_ be done after xen_vbd_translate as the preq.bdev
908          * is set there.
909          */
910         for (i = 0; i < nseg; i++) {
911                 if (((int)preq.sector_number|(int)seg[i].nsec) &
912                     ((bdev_logical_block_size(preq.bdev) >> 9) - 1)) {
913                         pr_debug(DRV_PFX "Misaligned I/O request from domain %d",
914                                  blkif->domid);
915                         goto fail_response;
916                 }
917         }
918
919         /* Wait on all outstanding I/O's and once that has been completed
920          * issue the WRITE_FLUSH.
921          */
922         if (drain)
923                 xen_blk_drain_io(pending_req->blkif);
924
925         /*
926          * If we have failed at this point, we need to undo the M2P override,
927          * set gnttab_set_unmap_op on all of the grant references and perform
928          * the hypercall to unmap the grants - that is all done in
929          * xen_blkbk_unmap.
930          */
931         if (xen_blkbk_map(req, pending_req, seg, pages))
932                 goto fail_flush;
933
934         /*
935          * This corresponding xen_blkif_put is done in __end_block_io_op, or
936          * below (in "!bio") if we are handling a BLKIF_OP_DISCARD.
937          */
938         xen_blkif_get(blkif);
939
940         for (i = 0; i < nseg; i++) {
941                 while ((bio == NULL) ||
942                        (bio_add_page(bio,
943                                      pages[i],
944                                      seg[i].nsec << 9,
945                                      seg[i].buf & ~PAGE_MASK) == 0)) {
946
947                         bio = bio_alloc(GFP_KERNEL, nseg-i);
948                         if (unlikely(bio == NULL))
949                                 goto fail_put_bio;
950
951                         biolist[nbio++] = bio;
952                         bio->bi_bdev    = preq.bdev;
953                         bio->bi_private = pending_req;
954                         bio->bi_end_io  = end_block_io_op;
955                         bio->bi_sector  = preq.sector_number;
956                 }
957
958                 preq.sector_number += seg[i].nsec;
959         }
960
961         /* This will be hit if the operation was a flush or discard. */
962         if (!bio) {
963                 BUG_ON(operation != WRITE_FLUSH);
964
965                 bio = bio_alloc(GFP_KERNEL, 0);
966                 if (unlikely(bio == NULL))
967                         goto fail_put_bio;
968
969                 biolist[nbio++] = bio;
970                 bio->bi_bdev    = preq.bdev;
971                 bio->bi_private = pending_req;
972                 bio->bi_end_io  = end_block_io_op;
973         }
974
975         /*
976          * We set it one so that the last submit_bio does not have to call
977          * atomic_inc.
978          */
979         atomic_set(&pending_req->pendcnt, nbio);
980
981         /* Get a reference count for the disk queue and start sending I/O */
982         blk_start_plug(&plug);
983
984         for (i = 0; i < nbio; i++)
985                 submit_bio(operation, biolist[i]);
986
987         /* Let the I/Os go.. */
988         blk_finish_plug(&plug);
989
990         if (operation == READ)
991                 blkif->st_rd_sect += preq.nr_sects;
992         else if (operation & WRITE)
993                 blkif->st_wr_sect += preq.nr_sects;
994
995         return 0;
996
997  fail_flush:
998         xen_blkbk_unmap(pending_req);
999  fail_response:
1000         /* Haven't submitted any bio's yet. */
1001         make_response(blkif, req->u.rw.id, req->operation, BLKIF_RSP_ERROR);
1002         free_req(pending_req);
1003         msleep(1); /* back off a bit */
1004         return -EIO;
1005
1006  fail_put_bio:
1007         for (i = 0; i < nbio; i++)
1008                 bio_put(biolist[i]);
1009         __end_block_io_op(pending_req, -EINVAL);
1010         msleep(1); /* back off a bit */
1011         return -EIO;
1012 }
1013
1014
1015
1016 /*
1017  * Put a response on the ring on how the operation fared.
1018  */
1019 static void make_response(struct xen_blkif *blkif, u64 id,
1020                           unsigned short op, int st)
1021 {
1022         struct blkif_response  resp;
1023         unsigned long     flags;
1024         union blkif_back_rings *blk_rings = &blkif->blk_rings;
1025         int notify;
1026
1027         resp.id        = id;
1028         resp.operation = op;
1029         resp.status    = st;
1030
1031         spin_lock_irqsave(&blkif->blk_ring_lock, flags);
1032         /* Place on the response ring for the relevant domain. */
1033         switch (blkif->blk_protocol) {
1034         case BLKIF_PROTOCOL_NATIVE:
1035                 memcpy(RING_GET_RESPONSE(&blk_rings->native, blk_rings->native.rsp_prod_pvt),
1036                        &resp, sizeof(resp));
1037                 break;
1038         case BLKIF_PROTOCOL_X86_32:
1039                 memcpy(RING_GET_RESPONSE(&blk_rings->x86_32, blk_rings->x86_32.rsp_prod_pvt),
1040                        &resp, sizeof(resp));
1041                 break;
1042         case BLKIF_PROTOCOL_X86_64:
1043                 memcpy(RING_GET_RESPONSE(&blk_rings->x86_64, blk_rings->x86_64.rsp_prod_pvt),
1044                        &resp, sizeof(resp));
1045                 break;
1046         default:
1047                 BUG();
1048         }
1049         blk_rings->common.rsp_prod_pvt++;
1050         RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&blk_rings->common, notify);
1051         spin_unlock_irqrestore(&blkif->blk_ring_lock, flags);
1052         if (notify)
1053                 notify_remote_via_irq(blkif->irq);
1054 }
1055
1056 static int __init xen_blkif_init(void)
1057 {
1058         int i, mmap_pages;
1059         int rc = 0;
1060
1061         if (!xen_domain())
1062                 return -ENODEV;
1063
1064         blkbk = kzalloc(sizeof(struct xen_blkbk), GFP_KERNEL);
1065         if (!blkbk) {
1066                 pr_alert(DRV_PFX "%s: out of memory!\n", __func__);
1067                 return -ENOMEM;
1068         }
1069
1070         mmap_pages = xen_blkif_reqs * BLKIF_MAX_SEGMENTS_PER_REQUEST;
1071
1072         blkbk->pending_reqs          = kzalloc(sizeof(blkbk->pending_reqs[0]) *
1073                                         xen_blkif_reqs, GFP_KERNEL);
1074         blkbk->pending_grant_handles = kmalloc(sizeof(blkbk->pending_grant_handles[0]) *
1075                                         mmap_pages, GFP_KERNEL);
1076         blkbk->pending_pages         = kzalloc(sizeof(blkbk->pending_pages[0]) *
1077                                         mmap_pages, GFP_KERNEL);
1078
1079         if (!blkbk->pending_reqs || !blkbk->pending_grant_handles ||
1080             !blkbk->pending_pages) {
1081                 rc = -ENOMEM;
1082                 goto out_of_memory;
1083         }
1084
1085         for (i = 0; i < mmap_pages; i++) {
1086                 blkbk->pending_grant_handles[i] = BLKBACK_INVALID_HANDLE;
1087                 blkbk->pending_pages[i] = alloc_page(GFP_KERNEL);
1088                 if (blkbk->pending_pages[i] == NULL) {
1089                         rc = -ENOMEM;
1090                         goto out_of_memory;
1091                 }
1092         }
1093         rc = xen_blkif_interface_init();
1094         if (rc)
1095                 goto failed_init;
1096
1097         INIT_LIST_HEAD(&blkbk->pending_free);
1098         spin_lock_init(&blkbk->pending_free_lock);
1099         init_waitqueue_head(&blkbk->pending_free_wq);
1100
1101         for (i = 0; i < xen_blkif_reqs; i++)
1102                 list_add_tail(&blkbk->pending_reqs[i].free_list,
1103                               &blkbk->pending_free);
1104
1105         rc = xen_blkif_xenbus_init();
1106         if (rc)
1107                 goto failed_init;
1108
1109         return 0;
1110
1111  out_of_memory:
1112         pr_alert(DRV_PFX "%s: out of memory\n", __func__);
1113  failed_init:
1114         kfree(blkbk->pending_reqs);
1115         kfree(blkbk->pending_grant_handles);
1116         if (blkbk->pending_pages) {
1117                 for (i = 0; i < mmap_pages; i++) {
1118                         if (blkbk->pending_pages[i])
1119                                 __free_page(blkbk->pending_pages[i]);
1120                 }
1121                 kfree(blkbk->pending_pages);
1122         }
1123         kfree(blkbk);
1124         blkbk = NULL;
1125         return rc;
1126 }
1127
1128 module_init(xen_blkif_init);
1129
1130 MODULE_LICENSE("Dual BSD/GPL");
1131 MODULE_ALIAS("xen-backend:vbd");