91272f1a7dad2f1027c4d62c4d811f7f79f52ba2
[pandora-kernel.git] / drivers / block / virtio_blk.c
1 //#define DEBUG
2 #include <linux/spinlock.h>
3 #include <linux/slab.h>
4 #include <linux/blkdev.h>
5 #include <linux/hdreg.h>
6 #include <linux/module.h>
7 #include <linux/mutex.h>
8 #include <linux/virtio.h>
9 #include <linux/virtio_blk.h>
10 #include <linux/scatterlist.h>
11 #include <linux/string_helpers.h>
12 #include <scsi/scsi_cmnd.h>
13 #include <linux/idr.h>
14 #include <linux/blk-mq.h>
15 #include <linux/numa.h>
16
17 #define PART_BITS 4
18 #define VQ_NAME_LEN 16
19
20 static int major;
21 static DEFINE_IDA(vd_index_ida);
22
23 static struct workqueue_struct *virtblk_wq;
24
25 struct virtio_blk_vq {
26         struct virtqueue *vq;
27         spinlock_t lock;
28         char name[VQ_NAME_LEN];
29 } ____cacheline_aligned_in_smp;
30
31 struct virtio_blk
32 {
33         struct virtio_device *vdev;
34
35         /* The disk structure for the kernel. */
36         struct gendisk *disk;
37
38         /* Block layer tags. */
39         struct blk_mq_tag_set tag_set;
40
41         /* Process context for config space updates */
42         struct work_struct config_work;
43
44         /* Lock for config space updates */
45         struct mutex config_lock;
46
47         /* What host tells us, plus 2 for header & tailer. */
48         unsigned int sg_elems;
49
50         /* Ida index - used to track minor number allocations. */
51         int index;
52
53         /* num of vqs */
54         int num_vqs;
55         struct virtio_blk_vq *vqs;
56 };
57
58 struct virtblk_req
59 {
60         struct request *req;
61         struct virtio_blk_outhdr out_hdr;
62         struct virtio_scsi_inhdr in_hdr;
63         u8 status;
64         struct scatterlist sg[];
65 };
66
67 static inline int virtblk_result(struct virtblk_req *vbr)
68 {
69         switch (vbr->status) {
70         case VIRTIO_BLK_S_OK:
71                 return 0;
72         case VIRTIO_BLK_S_UNSUPP:
73                 return -ENOTTY;
74         default:
75                 return -EIO;
76         }
77 }
78
79 static int __virtblk_add_req(struct virtqueue *vq,
80                              struct virtblk_req *vbr,
81                              struct scatterlist *data_sg,
82                              bool have_data)
83 {
84         struct scatterlist hdr, status, cmd, sense, inhdr, *sgs[6];
85         unsigned int num_out = 0, num_in = 0;
86         int type = vbr->out_hdr.type & ~VIRTIO_BLK_T_OUT;
87
88         sg_init_one(&hdr, &vbr->out_hdr, sizeof(vbr->out_hdr));
89         sgs[num_out++] = &hdr;
90
91         /*
92          * If this is a packet command we need a couple of additional headers.
93          * Behind the normal outhdr we put a segment with the scsi command
94          * block, and before the normal inhdr we put the sense data and the
95          * inhdr with additional status information.
96          */
97         if (type == VIRTIO_BLK_T_SCSI_CMD) {
98                 sg_init_one(&cmd, vbr->req->cmd, vbr->req->cmd_len);
99                 sgs[num_out++] = &cmd;
100         }
101
102         if (have_data) {
103                 if (vbr->out_hdr.type & VIRTIO_BLK_T_OUT)
104                         sgs[num_out++] = data_sg;
105                 else
106                         sgs[num_out + num_in++] = data_sg;
107         }
108
109         if (type == VIRTIO_BLK_T_SCSI_CMD) {
110                 sg_init_one(&sense, vbr->req->sense, SCSI_SENSE_BUFFERSIZE);
111                 sgs[num_out + num_in++] = &sense;
112                 sg_init_one(&inhdr, &vbr->in_hdr, sizeof(vbr->in_hdr));
113                 sgs[num_out + num_in++] = &inhdr;
114         }
115
116         sg_init_one(&status, &vbr->status, sizeof(vbr->status));
117         sgs[num_out + num_in++] = &status;
118
119         return virtqueue_add_sgs(vq, sgs, num_out, num_in, vbr, GFP_ATOMIC);
120 }
121
122 static inline void virtblk_request_done(struct request *req)
123 {
124         struct virtblk_req *vbr = blk_mq_rq_to_pdu(req);
125         int error = virtblk_result(vbr);
126
127         if (req->cmd_type == REQ_TYPE_BLOCK_PC) {
128                 req->resid_len = vbr->in_hdr.residual;
129                 req->sense_len = vbr->in_hdr.sense_len;
130                 req->errors = vbr->in_hdr.errors;
131         } else if (req->cmd_type == REQ_TYPE_SPECIAL) {
132                 req->errors = (error != 0);
133         }
134
135         blk_mq_end_io(req, error);
136 }
137
138 static void virtblk_done(struct virtqueue *vq)
139 {
140         struct virtio_blk *vblk = vq->vdev->priv;
141         bool req_done = false;
142         int qid = vq->index;
143         struct virtblk_req *vbr;
144         unsigned long flags;
145         unsigned int len;
146
147         spin_lock_irqsave(&vblk->vqs[qid].lock, flags);
148         do {
149                 virtqueue_disable_cb(vq);
150                 while ((vbr = virtqueue_get_buf(vblk->vqs[qid].vq, &len)) != NULL) {
151                         blk_mq_complete_request(vbr->req);
152                         req_done = true;
153                 }
154                 if (unlikely(virtqueue_is_broken(vq)))
155                         break;
156         } while (!virtqueue_enable_cb(vq));
157
158         /* In case queue is stopped waiting for more buffers. */
159         if (req_done)
160                 blk_mq_start_stopped_hw_queues(vblk->disk->queue, true);
161         spin_unlock_irqrestore(&vblk->vqs[qid].lock, flags);
162 }
163
164 static int virtio_queue_rq(struct blk_mq_hw_ctx *hctx, struct request *req)
165 {
166         struct virtio_blk *vblk = hctx->queue->queuedata;
167         struct virtblk_req *vbr = blk_mq_rq_to_pdu(req);
168         unsigned long flags;
169         unsigned int num;
170         int qid = hctx->queue_num;
171         const bool last = (req->cmd_flags & REQ_END) != 0;
172         int err;
173         bool notify = false;
174
175         BUG_ON(req->nr_phys_segments + 2 > vblk->sg_elems);
176
177         vbr->req = req;
178         if (req->cmd_flags & REQ_FLUSH) {
179                 vbr->out_hdr.type = VIRTIO_BLK_T_FLUSH;
180                 vbr->out_hdr.sector = 0;
181                 vbr->out_hdr.ioprio = req_get_ioprio(vbr->req);
182         } else {
183                 switch (req->cmd_type) {
184                 case REQ_TYPE_FS:
185                         vbr->out_hdr.type = 0;
186                         vbr->out_hdr.sector = blk_rq_pos(vbr->req);
187                         vbr->out_hdr.ioprio = req_get_ioprio(vbr->req);
188                         break;
189                 case REQ_TYPE_BLOCK_PC:
190                         vbr->out_hdr.type = VIRTIO_BLK_T_SCSI_CMD;
191                         vbr->out_hdr.sector = 0;
192                         vbr->out_hdr.ioprio = req_get_ioprio(vbr->req);
193                         break;
194                 case REQ_TYPE_SPECIAL:
195                         vbr->out_hdr.type = VIRTIO_BLK_T_GET_ID;
196                         vbr->out_hdr.sector = 0;
197                         vbr->out_hdr.ioprio = req_get_ioprio(vbr->req);
198                         break;
199                 default:
200                         /* We don't put anything else in the queue. */
201                         BUG();
202                 }
203         }
204
205         num = blk_rq_map_sg(hctx->queue, vbr->req, vbr->sg);
206         if (num) {
207                 if (rq_data_dir(vbr->req) == WRITE)
208                         vbr->out_hdr.type |= VIRTIO_BLK_T_OUT;
209                 else
210                         vbr->out_hdr.type |= VIRTIO_BLK_T_IN;
211         }
212
213         spin_lock_irqsave(&vblk->vqs[qid].lock, flags);
214         err = __virtblk_add_req(vblk->vqs[qid].vq, vbr, vbr->sg, num);
215         if (err) {
216                 virtqueue_kick(vblk->vqs[qid].vq);
217                 blk_mq_stop_hw_queue(hctx);
218                 spin_unlock_irqrestore(&vblk->vqs[qid].lock, flags);
219                 /* Out of mem doesn't actually happen, since we fall back
220                  * to direct descriptors */
221                 if (err == -ENOMEM || err == -ENOSPC)
222                         return BLK_MQ_RQ_QUEUE_BUSY;
223                 return BLK_MQ_RQ_QUEUE_ERROR;
224         }
225
226         if (last && virtqueue_kick_prepare(vblk->vqs[qid].vq))
227                 notify = true;
228         spin_unlock_irqrestore(&vblk->vqs[qid].lock, flags);
229
230         if (notify)
231                 virtqueue_notify(vblk->vqs[qid].vq);
232         return BLK_MQ_RQ_QUEUE_OK;
233 }
234
235 /* return id (s/n) string for *disk to *id_str
236  */
237 static int virtblk_get_id(struct gendisk *disk, char *id_str)
238 {
239         struct virtio_blk *vblk = disk->private_data;
240         struct request *req;
241         struct bio *bio;
242         int err;
243
244         bio = bio_map_kern(vblk->disk->queue, id_str, VIRTIO_BLK_ID_BYTES,
245                            GFP_KERNEL);
246         if (IS_ERR(bio))
247                 return PTR_ERR(bio);
248
249         req = blk_make_request(vblk->disk->queue, bio, GFP_KERNEL);
250         if (IS_ERR(req)) {
251                 bio_put(bio);
252                 return PTR_ERR(req);
253         }
254
255         req->cmd_type = REQ_TYPE_SPECIAL;
256         err = blk_execute_rq(vblk->disk->queue, vblk->disk, req, false);
257         blk_put_request(req);
258
259         return err;
260 }
261
262 static int virtblk_ioctl(struct block_device *bdev, fmode_t mode,
263                              unsigned int cmd, unsigned long data)
264 {
265         struct gendisk *disk = bdev->bd_disk;
266         struct virtio_blk *vblk = disk->private_data;
267
268         /*
269          * Only allow the generic SCSI ioctls if the host can support it.
270          */
271         if (!virtio_has_feature(vblk->vdev, VIRTIO_BLK_F_SCSI))
272                 return -ENOTTY;
273
274         return scsi_cmd_blk_ioctl(bdev, mode, cmd,
275                                   (void __user *)data);
276 }
277
278 /* We provide getgeo only to please some old bootloader/partitioning tools */
279 static int virtblk_getgeo(struct block_device *bd, struct hd_geometry *geo)
280 {
281         struct virtio_blk *vblk = bd->bd_disk->private_data;
282
283         /* see if the host passed in geometry config */
284         if (virtio_has_feature(vblk->vdev, VIRTIO_BLK_F_GEOMETRY)) {
285                 virtio_cread(vblk->vdev, struct virtio_blk_config,
286                              geometry.cylinders, &geo->cylinders);
287                 virtio_cread(vblk->vdev, struct virtio_blk_config,
288                              geometry.heads, &geo->heads);
289                 virtio_cread(vblk->vdev, struct virtio_blk_config,
290                              geometry.sectors, &geo->sectors);
291         } else {
292                 /* some standard values, similar to sd */
293                 geo->heads = 1 << 6;
294                 geo->sectors = 1 << 5;
295                 geo->cylinders = get_capacity(bd->bd_disk) >> 11;
296         }
297         return 0;
298 }
299
300 static const struct block_device_operations virtblk_fops = {
301         .ioctl  = virtblk_ioctl,
302         .owner  = THIS_MODULE,
303         .getgeo = virtblk_getgeo,
304 };
305
306 static int index_to_minor(int index)
307 {
308         return index << PART_BITS;
309 }
310
311 static int minor_to_index(int minor)
312 {
313         return minor >> PART_BITS;
314 }
315
316 static ssize_t virtblk_serial_show(struct device *dev,
317                                 struct device_attribute *attr, char *buf)
318 {
319         struct gendisk *disk = dev_to_disk(dev);
320         int err;
321
322         /* sysfs gives us a PAGE_SIZE buffer */
323         BUILD_BUG_ON(PAGE_SIZE < VIRTIO_BLK_ID_BYTES);
324
325         buf[VIRTIO_BLK_ID_BYTES] = '\0';
326         err = virtblk_get_id(disk, buf);
327         if (!err)
328                 return strlen(buf);
329
330         if (err == -EIO) /* Unsupported? Make it empty. */
331                 return 0;
332
333         return err;
334 }
335 DEVICE_ATTR(serial, S_IRUGO, virtblk_serial_show, NULL);
336
337 static void virtblk_config_changed_work(struct work_struct *work)
338 {
339         struct virtio_blk *vblk =
340                 container_of(work, struct virtio_blk, config_work);
341         struct virtio_device *vdev = vblk->vdev;
342         struct request_queue *q = vblk->disk->queue;
343         char cap_str_2[10], cap_str_10[10];
344         char *envp[] = { "RESIZE=1", NULL };
345         u64 capacity, size;
346
347         mutex_lock(&vblk->config_lock);
348
349         /* Host must always specify the capacity. */
350         virtio_cread(vdev, struct virtio_blk_config, capacity, &capacity);
351
352         /* If capacity is too big, truncate with warning. */
353         if ((sector_t)capacity != capacity) {
354                 dev_warn(&vdev->dev, "Capacity %llu too large: truncating\n",
355                          (unsigned long long)capacity);
356                 capacity = (sector_t)-1;
357         }
358
359         size = capacity * queue_logical_block_size(q);
360         string_get_size(size, STRING_UNITS_2, cap_str_2, sizeof(cap_str_2));
361         string_get_size(size, STRING_UNITS_10, cap_str_10, sizeof(cap_str_10));
362
363         dev_notice(&vdev->dev,
364                   "new size: %llu %d-byte logical blocks (%s/%s)\n",
365                   (unsigned long long)capacity,
366                   queue_logical_block_size(q),
367                   cap_str_10, cap_str_2);
368
369         set_capacity(vblk->disk, capacity);
370         revalidate_disk(vblk->disk);
371         kobject_uevent_env(&disk_to_dev(vblk->disk)->kobj, KOBJ_CHANGE, envp);
372
373         mutex_unlock(&vblk->config_lock);
374 }
375
376 static void virtblk_config_changed(struct virtio_device *vdev)
377 {
378         struct virtio_blk *vblk = vdev->priv;
379
380         queue_work(virtblk_wq, &vblk->config_work);
381 }
382
383 static int init_vq(struct virtio_blk *vblk)
384 {
385         int err = 0;
386         int i;
387         vq_callback_t **callbacks;
388         const char **names;
389         struct virtqueue **vqs;
390         unsigned short num_vqs;
391         struct virtio_device *vdev = vblk->vdev;
392
393         err = virtio_cread_feature(vdev, VIRTIO_BLK_F_MQ,
394                                    struct virtio_blk_config, num_queues,
395                                    &num_vqs);
396         if (err)
397                 num_vqs = 1;
398
399         vblk->vqs = kmalloc(sizeof(*vblk->vqs) * num_vqs, GFP_KERNEL);
400         if (!vblk->vqs) {
401                 err = -ENOMEM;
402                 goto out;
403         }
404
405         names = kmalloc(sizeof(*names) * num_vqs, GFP_KERNEL);
406         if (!names)
407                 goto err_names;
408
409         callbacks = kmalloc(sizeof(*callbacks) * num_vqs, GFP_KERNEL);
410         if (!callbacks)
411                 goto err_callbacks;
412
413         vqs = kmalloc(sizeof(*vqs) * num_vqs, GFP_KERNEL);
414         if (!vqs)
415                 goto err_vqs;
416
417         for (i = 0; i < num_vqs; i++) {
418                 callbacks[i] = virtblk_done;
419                 snprintf(vblk->vqs[i].name, VQ_NAME_LEN, "req.%d", i);
420                 names[i] = vblk->vqs[i].name;
421         }
422
423         /* Discover virtqueues and write information to configuration.  */
424         err = vdev->config->find_vqs(vdev, num_vqs, vqs, callbacks, names);
425         if (err)
426                 goto err_find_vqs;
427
428         for (i = 0; i < num_vqs; i++) {
429                 spin_lock_init(&vblk->vqs[i].lock);
430                 vblk->vqs[i].vq = vqs[i];
431         }
432         vblk->num_vqs = num_vqs;
433
434  err_find_vqs:
435         kfree(vqs);
436  err_vqs:
437         kfree(callbacks);
438  err_callbacks:
439         kfree(names);
440  err_names:
441         if (err)
442                 kfree(vblk->vqs);
443  out:
444         return err;
445 }
446
447 /*
448  * Legacy naming scheme used for virtio devices.  We are stuck with it for
449  * virtio blk but don't ever use it for any new driver.
450  */
451 static int virtblk_name_format(char *prefix, int index, char *buf, int buflen)
452 {
453         const int base = 'z' - 'a' + 1;
454         char *begin = buf + strlen(prefix);
455         char *end = buf + buflen;
456         char *p;
457         int unit;
458
459         p = end - 1;
460         *p = '\0';
461         unit = base;
462         do {
463                 if (p == begin)
464                         return -EINVAL;
465                 *--p = 'a' + (index % unit);
466                 index = (index / unit) - 1;
467         } while (index >= 0);
468
469         memmove(begin, p, end - p);
470         memcpy(buf, prefix, strlen(prefix));
471
472         return 0;
473 }
474
475 static int virtblk_get_cache_mode(struct virtio_device *vdev)
476 {
477         u8 writeback;
478         int err;
479
480         err = virtio_cread_feature(vdev, VIRTIO_BLK_F_CONFIG_WCE,
481                                    struct virtio_blk_config, wce,
482                                    &writeback);
483         if (err)
484                 writeback = virtio_has_feature(vdev, VIRTIO_BLK_F_WCE);
485
486         return writeback;
487 }
488
489 static void virtblk_update_cache_mode(struct virtio_device *vdev)
490 {
491         u8 writeback = virtblk_get_cache_mode(vdev);
492         struct virtio_blk *vblk = vdev->priv;
493
494         if (writeback)
495                 blk_queue_flush(vblk->disk->queue, REQ_FLUSH);
496         else
497                 blk_queue_flush(vblk->disk->queue, 0);
498
499         revalidate_disk(vblk->disk);
500 }
501
502 static const char *const virtblk_cache_types[] = {
503         "write through", "write back"
504 };
505
506 static ssize_t
507 virtblk_cache_type_store(struct device *dev, struct device_attribute *attr,
508                          const char *buf, size_t count)
509 {
510         struct gendisk *disk = dev_to_disk(dev);
511         struct virtio_blk *vblk = disk->private_data;
512         struct virtio_device *vdev = vblk->vdev;
513         int i;
514
515         BUG_ON(!virtio_has_feature(vblk->vdev, VIRTIO_BLK_F_CONFIG_WCE));
516         for (i = ARRAY_SIZE(virtblk_cache_types); --i >= 0; )
517                 if (sysfs_streq(buf, virtblk_cache_types[i]))
518                         break;
519
520         if (i < 0)
521                 return -EINVAL;
522
523         virtio_cwrite8(vdev, offsetof(struct virtio_blk_config, wce), i);
524         virtblk_update_cache_mode(vdev);
525         return count;
526 }
527
528 static ssize_t
529 virtblk_cache_type_show(struct device *dev, struct device_attribute *attr,
530                          char *buf)
531 {
532         struct gendisk *disk = dev_to_disk(dev);
533         struct virtio_blk *vblk = disk->private_data;
534         u8 writeback = virtblk_get_cache_mode(vblk->vdev);
535
536         BUG_ON(writeback >= ARRAY_SIZE(virtblk_cache_types));
537         return snprintf(buf, 40, "%s\n", virtblk_cache_types[writeback]);
538 }
539
540 static const struct device_attribute dev_attr_cache_type_ro =
541         __ATTR(cache_type, S_IRUGO,
542                virtblk_cache_type_show, NULL);
543 static const struct device_attribute dev_attr_cache_type_rw =
544         __ATTR(cache_type, S_IRUGO|S_IWUSR,
545                virtblk_cache_type_show, virtblk_cache_type_store);
546
547 static int virtblk_init_request(void *data, struct request *rq,
548                 unsigned int hctx_idx, unsigned int request_idx,
549                 unsigned int numa_node)
550 {
551         struct virtio_blk *vblk = data;
552         struct virtblk_req *vbr = blk_mq_rq_to_pdu(rq);
553
554         sg_init_table(vbr->sg, vblk->sg_elems);
555         return 0;
556 }
557
558 static struct blk_mq_ops virtio_mq_ops = {
559         .queue_rq       = virtio_queue_rq,
560         .map_queue      = blk_mq_map_queue,
561         .complete       = virtblk_request_done,
562         .init_request   = virtblk_init_request,
563 };
564
565 static unsigned int virtblk_queue_depth;
566 module_param_named(queue_depth, virtblk_queue_depth, uint, 0444);
567
568 static int virtblk_probe(struct virtio_device *vdev)
569 {
570         struct virtio_blk *vblk;
571         struct request_queue *q;
572         int err, index;
573
574         u64 cap;
575         u32 v, blk_size, sg_elems, opt_io_size;
576         u16 min_io_size;
577         u8 physical_block_exp, alignment_offset;
578
579         err = ida_simple_get(&vd_index_ida, 0, minor_to_index(1 << MINORBITS),
580                              GFP_KERNEL);
581         if (err < 0)
582                 goto out;
583         index = err;
584
585         /* We need to know how many segments before we allocate. */
586         err = virtio_cread_feature(vdev, VIRTIO_BLK_F_SEG_MAX,
587                                    struct virtio_blk_config, seg_max,
588                                    &sg_elems);
589
590         /* We need at least one SG element, whatever they say. */
591         if (err || !sg_elems)
592                 sg_elems = 1;
593
594         /* We need an extra sg elements at head and tail. */
595         sg_elems += 2;
596         vdev->priv = vblk = kmalloc(sizeof(*vblk), GFP_KERNEL);
597         if (!vblk) {
598                 err = -ENOMEM;
599                 goto out_free_index;
600         }
601
602         vblk->vdev = vdev;
603         vblk->sg_elems = sg_elems;
604         mutex_init(&vblk->config_lock);
605
606         INIT_WORK(&vblk->config_work, virtblk_config_changed_work);
607
608         err = init_vq(vblk);
609         if (err)
610                 goto out_free_vblk;
611
612         /* FIXME: How many partitions?  How long is a piece of string? */
613         vblk->disk = alloc_disk(1 << PART_BITS);
614         if (!vblk->disk) {
615                 err = -ENOMEM;
616                 goto out_free_vq;
617         }
618
619         /* Default queue sizing is to fill the ring. */
620         if (!virtblk_queue_depth) {
621                 virtblk_queue_depth = vblk->vqs[0].vq->num_free;
622                 /* ... but without indirect descs, we use 2 descs per req */
623                 if (!virtio_has_feature(vdev, VIRTIO_RING_F_INDIRECT_DESC))
624                         virtblk_queue_depth /= 2;
625         }
626
627         memset(&vblk->tag_set, 0, sizeof(vblk->tag_set));
628         vblk->tag_set.ops = &virtio_mq_ops;
629         vblk->tag_set.queue_depth = virtblk_queue_depth;
630         vblk->tag_set.numa_node = NUMA_NO_NODE;
631         vblk->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
632         vblk->tag_set.cmd_size =
633                 sizeof(struct virtblk_req) +
634                 sizeof(struct scatterlist) * sg_elems;
635         vblk->tag_set.driver_data = vblk;
636         vblk->tag_set.nr_hw_queues = vblk->num_vqs;
637
638         err = blk_mq_alloc_tag_set(&vblk->tag_set);
639         if (err)
640                 goto out_put_disk;
641
642         q = vblk->disk->queue = blk_mq_init_queue(&vblk->tag_set);
643         if (!q) {
644                 err = -ENOMEM;
645                 goto out_free_tags;
646         }
647
648         q->queuedata = vblk;
649
650         virtblk_name_format("vd", index, vblk->disk->disk_name, DISK_NAME_LEN);
651
652         vblk->disk->major = major;
653         vblk->disk->first_minor = index_to_minor(index);
654         vblk->disk->private_data = vblk;
655         vblk->disk->fops = &virtblk_fops;
656         vblk->disk->driverfs_dev = &vdev->dev;
657         vblk->index = index;
658
659         /* configure queue flush support */
660         virtblk_update_cache_mode(vdev);
661
662         /* If disk is read-only in the host, the guest should obey */
663         if (virtio_has_feature(vdev, VIRTIO_BLK_F_RO))
664                 set_disk_ro(vblk->disk, 1);
665
666         /* Host must always specify the capacity. */
667         virtio_cread(vdev, struct virtio_blk_config, capacity, &cap);
668
669         /* If capacity is too big, truncate with warning. */
670         if ((sector_t)cap != cap) {
671                 dev_warn(&vdev->dev, "Capacity %llu too large: truncating\n",
672                          (unsigned long long)cap);
673                 cap = (sector_t)-1;
674         }
675         set_capacity(vblk->disk, cap);
676
677         /* We can handle whatever the host told us to handle. */
678         blk_queue_max_segments(q, vblk->sg_elems-2);
679
680         /* No need to bounce any requests */
681         blk_queue_bounce_limit(q, BLK_BOUNCE_ANY);
682
683         /* No real sector limit. */
684         blk_queue_max_hw_sectors(q, -1U);
685
686         /* Host can optionally specify maximum segment size and number of
687          * segments. */
688         err = virtio_cread_feature(vdev, VIRTIO_BLK_F_SIZE_MAX,
689                                    struct virtio_blk_config, size_max, &v);
690         if (!err)
691                 blk_queue_max_segment_size(q, v);
692         else
693                 blk_queue_max_segment_size(q, -1U);
694
695         /* Host can optionally specify the block size of the device */
696         err = virtio_cread_feature(vdev, VIRTIO_BLK_F_BLK_SIZE,
697                                    struct virtio_blk_config, blk_size,
698                                    &blk_size);
699         if (!err)
700                 blk_queue_logical_block_size(q, blk_size);
701         else
702                 blk_size = queue_logical_block_size(q);
703
704         /* Use topology information if available */
705         err = virtio_cread_feature(vdev, VIRTIO_BLK_F_TOPOLOGY,
706                                    struct virtio_blk_config, physical_block_exp,
707                                    &physical_block_exp);
708         if (!err && physical_block_exp)
709                 blk_queue_physical_block_size(q,
710                                 blk_size * (1 << physical_block_exp));
711
712         err = virtio_cread_feature(vdev, VIRTIO_BLK_F_TOPOLOGY,
713                                    struct virtio_blk_config, alignment_offset,
714                                    &alignment_offset);
715         if (!err && alignment_offset)
716                 blk_queue_alignment_offset(q, blk_size * alignment_offset);
717
718         err = virtio_cread_feature(vdev, VIRTIO_BLK_F_TOPOLOGY,
719                                    struct virtio_blk_config, min_io_size,
720                                    &min_io_size);
721         if (!err && min_io_size)
722                 blk_queue_io_min(q, blk_size * min_io_size);
723
724         err = virtio_cread_feature(vdev, VIRTIO_BLK_F_TOPOLOGY,
725                                    struct virtio_blk_config, opt_io_size,
726                                    &opt_io_size);
727         if (!err && opt_io_size)
728                 blk_queue_io_opt(q, blk_size * opt_io_size);
729
730         add_disk(vblk->disk);
731         err = device_create_file(disk_to_dev(vblk->disk), &dev_attr_serial);
732         if (err)
733                 goto out_del_disk;
734
735         if (virtio_has_feature(vdev, VIRTIO_BLK_F_CONFIG_WCE))
736                 err = device_create_file(disk_to_dev(vblk->disk),
737                                          &dev_attr_cache_type_rw);
738         else
739                 err = device_create_file(disk_to_dev(vblk->disk),
740                                          &dev_attr_cache_type_ro);
741         if (err)
742                 goto out_del_disk;
743         return 0;
744
745 out_del_disk:
746         del_gendisk(vblk->disk);
747         blk_cleanup_queue(vblk->disk->queue);
748 out_free_tags:
749         blk_mq_free_tag_set(&vblk->tag_set);
750 out_put_disk:
751         put_disk(vblk->disk);
752 out_free_vq:
753         vdev->config->del_vqs(vdev);
754 out_free_vblk:
755         kfree(vblk);
756 out_free_index:
757         ida_simple_remove(&vd_index_ida, index);
758 out:
759         return err;
760 }
761
762 static void virtblk_remove(struct virtio_device *vdev)
763 {
764         struct virtio_blk *vblk = vdev->priv;
765         int index = vblk->index;
766         int refc;
767
768         /* Make sure no work handler is accessing the device. */
769         flush_work(&vblk->config_work);
770
771         del_gendisk(vblk->disk);
772         blk_cleanup_queue(vblk->disk->queue);
773
774         blk_mq_free_tag_set(&vblk->tag_set);
775
776         /* Stop all the virtqueues. */
777         vdev->config->reset(vdev);
778
779         refc = atomic_read(&disk_to_dev(vblk->disk)->kobj.kref.refcount);
780         put_disk(vblk->disk);
781         vdev->config->del_vqs(vdev);
782         kfree(vblk->vqs);
783         kfree(vblk);
784
785         /* Only free device id if we don't have any users */
786         if (refc == 1)
787                 ida_simple_remove(&vd_index_ida, index);
788 }
789
790 #ifdef CONFIG_PM_SLEEP
791 static int virtblk_freeze(struct virtio_device *vdev)
792 {
793         struct virtio_blk *vblk = vdev->priv;
794
795         /* Ensure we don't receive any more interrupts */
796         vdev->config->reset(vdev);
797
798         /* Make sure no work handler is accessing the device. */
799         flush_work(&vblk->config_work);
800
801         blk_mq_stop_hw_queues(vblk->disk->queue);
802
803         vdev->config->del_vqs(vdev);
804         return 0;
805 }
806
807 static int virtblk_restore(struct virtio_device *vdev)
808 {
809         struct virtio_blk *vblk = vdev->priv;
810         int ret;
811
812         ret = init_vq(vdev->priv);
813         if (!ret)
814                 blk_mq_start_stopped_hw_queues(vblk->disk->queue, true);
815
816         return ret;
817 }
818 #endif
819
820 static const struct virtio_device_id id_table[] = {
821         { VIRTIO_ID_BLOCK, VIRTIO_DEV_ANY_ID },
822         { 0 },
823 };
824
825 static unsigned int features[] = {
826         VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX, VIRTIO_BLK_F_GEOMETRY,
827         VIRTIO_BLK_F_RO, VIRTIO_BLK_F_BLK_SIZE, VIRTIO_BLK_F_SCSI,
828         VIRTIO_BLK_F_WCE, VIRTIO_BLK_F_TOPOLOGY, VIRTIO_BLK_F_CONFIG_WCE,
829         VIRTIO_BLK_F_MQ,
830 };
831
832 static struct virtio_driver virtio_blk = {
833         .feature_table          = features,
834         .feature_table_size     = ARRAY_SIZE(features),
835         .driver.name            = KBUILD_MODNAME,
836         .driver.owner           = THIS_MODULE,
837         .id_table               = id_table,
838         .probe                  = virtblk_probe,
839         .remove                 = virtblk_remove,
840         .config_changed         = virtblk_config_changed,
841 #ifdef CONFIG_PM_SLEEP
842         .freeze                 = virtblk_freeze,
843         .restore                = virtblk_restore,
844 #endif
845 };
846
847 static int __init init(void)
848 {
849         int error;
850
851         virtblk_wq = alloc_workqueue("virtio-blk", 0, 0);
852         if (!virtblk_wq)
853                 return -ENOMEM;
854
855         major = register_blkdev(0, "virtblk");
856         if (major < 0) {
857                 error = major;
858                 goto out_destroy_workqueue;
859         }
860
861         error = register_virtio_driver(&virtio_blk);
862         if (error)
863                 goto out_unregister_blkdev;
864         return 0;
865
866 out_unregister_blkdev:
867         unregister_blkdev(major, "virtblk");
868 out_destroy_workqueue:
869         destroy_workqueue(virtblk_wq);
870         return error;
871 }
872
873 static void __exit fini(void)
874 {
875         unregister_blkdev(major, "virtblk");
876         unregister_virtio_driver(&virtio_blk);
877         destroy_workqueue(virtblk_wq);
878 }
879 module_init(init);
880 module_exit(fini);
881
882 MODULE_DEVICE_TABLE(virtio, id_table);
883 MODULE_DESCRIPTION("Virtio block driver");
884 MODULE_LICENSE("GPL");