nvme-core.c 70.4 KB
Newer Older
M
Matthew Wilcox 已提交
1 2
/*
 * NVM Express device driver
3
 * Copyright (c) 2011-2014, Intel Corporation.
M
Matthew Wilcox 已提交
4 5 6 7 8 9 10 11 12 13 14 15
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 */

#include <linux/nvme.h>
16
#include <linux/bitops.h>
M
Matthew Wilcox 已提交
17
#include <linux/blkdev.h>
M
Matias Bjørling 已提交
18
#include <linux/blk-mq.h>
K
Keith Busch 已提交
19
#include <linux/cpu.h>
20
#include <linux/delay.h>
M
Matthew Wilcox 已提交
21 22 23
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/genhd.h>
K
Keith Busch 已提交
24
#include <linux/hdreg.h>
25
#include <linux/idr.h>
M
Matthew Wilcox 已提交
26 27 28 29
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/kdev_t.h>
30
#include <linux/kthread.h>
M
Matthew Wilcox 已提交
31 32 33 34 35
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/pci.h>
36
#include <linux/poison.h>
37
#include <linux/ptrace.h>
M
Matthew Wilcox 已提交
38 39 40
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/types.h>
V
Vishal Verma 已提交
41
#include <scsi/sg.h>
42 43
#include <asm-generic/io-64-nonatomic-lo-hi.h>

44
#define NVME_Q_DEPTH		1024
M
Matias Bjørling 已提交
45
#define NVME_AQ_DEPTH		64
M
Matthew Wilcox 已提交
46 47
#define SQ_SIZE(depth)		(depth * sizeof(struct nvme_command))
#define CQ_SIZE(depth)		(depth * sizeof(struct nvme_completion))
48
#define ADMIN_TIMEOUT		(admin_timeout * HZ)
49
#define SHUTDOWN_TIMEOUT	(shutdown_timeout * HZ)
50 51 52 53 54
#define IOD_TIMEOUT		(retry_time * HZ)

static unsigned char admin_timeout = 60;
module_param(admin_timeout, byte, 0644);
MODULE_PARM_DESC(admin_timeout, "timeout in seconds for admin commands");
M
Matthew Wilcox 已提交
55

56 57
unsigned char nvme_io_timeout = 30;
module_param_named(io_timeout, nvme_io_timeout, byte, 0644);
58
MODULE_PARM_DESC(io_timeout, "timeout in seconds for I/O");
M
Matthew Wilcox 已提交
59

60 61 62 63
static unsigned char retry_time = 30;
module_param(retry_time, byte, 0644);
MODULE_PARM_DESC(retry_time, "time in seconds to retry failed I/O");

64 65 66 67
static unsigned char shutdown_timeout = 5;
module_param(shutdown_timeout, byte, 0644);
MODULE_PARM_DESC(shutdown_timeout, "timeout in seconds for controller shutdown");

M
Matthew Wilcox 已提交
68 69 70
static int nvme_major;
module_param(nvme_major, int, 0);

71 72 73
static int use_threaded_interrupts;
module_param(use_threaded_interrupts, int, 0);

74 75 76
static DEFINE_SPINLOCK(dev_list_lock);
static LIST_HEAD(dev_list);
static struct task_struct *nvme_thread;
K
Keith Busch 已提交
77
static struct workqueue_struct *nvme_workq;
78
static wait_queue_head_t nvme_kthread_wait;
79
static struct notifier_block nvme_nb;
80

81
static void nvme_reset_failed_dev(struct work_struct *ws);
M
Matias Bjørling 已提交
82
static int nvme_process_cq(struct nvme_queue *nvmeq);
83

K
Keith Busch 已提交
84 85 86
struct async_cmd_info {
	struct kthread_work work;
	struct kthread_worker *worker;
M
Matias Bjørling 已提交
87
	struct request *req;
K
Keith Busch 已提交
88 89 90 91
	u32 result;
	int status;
	void *ctx;
};
92

M
Matthew Wilcox 已提交
93 94 95 96 97
/*
 * An NVM Express queue.  Each device has at least two (one for admin
 * commands and one for I/O commands).
 */
struct nvme_queue {
K
Keith Busch 已提交
98
	struct llist_node node;
M
Matthew Wilcox 已提交
99
	struct device *q_dmadev;
M
Matthew Wilcox 已提交
100
	struct nvme_dev *dev;
101
	char irqname[24];	/* nvme4294967295-65535\0 */
M
Matthew Wilcox 已提交
102 103 104 105 106 107 108 109 110 111 112
	spinlock_t q_lock;
	struct nvme_command *sq_cmds;
	volatile struct nvme_completion *cqes;
	dma_addr_t sq_dma_addr;
	dma_addr_t cq_dma_addr;
	u32 __iomem *q_db;
	u16 q_depth;
	u16 cq_vector;
	u16 sq_head;
	u16 sq_tail;
	u16 cq_head;
K
Keith Busch 已提交
113
	u16 qid;
114 115
	u8 cq_phase;
	u8 cqe_seen;
K
Keith Busch 已提交
116
	struct async_cmd_info cmdinfo;
M
Matias Bjørling 已提交
117
	struct blk_mq_hw_ctx *hctx;
M
Matthew Wilcox 已提交
118 119 120 121 122 123 124 125 126 127 128 129
};

/*
 * Check we didin't inadvertently grow the command struct
 */
static inline void _nvme_check_size(void)
{
	BUILD_BUG_ON(sizeof(struct nvme_rw_command) != 64);
	BUILD_BUG_ON(sizeof(struct nvme_create_cq) != 64);
	BUILD_BUG_ON(sizeof(struct nvme_create_sq) != 64);
	BUILD_BUG_ON(sizeof(struct nvme_delete_queue) != 64);
	BUILD_BUG_ON(sizeof(struct nvme_features) != 64);
130
	BUILD_BUG_ON(sizeof(struct nvme_format_cmd) != 64);
K
Keith Busch 已提交
131
	BUILD_BUG_ON(sizeof(struct nvme_abort_cmd) != 64);
M
Matthew Wilcox 已提交
132 133 134 135
	BUILD_BUG_ON(sizeof(struct nvme_command) != 64);
	BUILD_BUG_ON(sizeof(struct nvme_id_ctrl) != 4096);
	BUILD_BUG_ON(sizeof(struct nvme_id_ns) != 4096);
	BUILD_BUG_ON(sizeof(struct nvme_lba_range_type) != 64);
K
Keith Busch 已提交
136
	BUILD_BUG_ON(sizeof(struct nvme_smart_log) != 512);
M
Matthew Wilcox 已提交
137 138
}

139
typedef void (*nvme_completion_fn)(struct nvme_queue *, void *,
140 141
						struct nvme_completion *);

142
struct nvme_cmd_info {
143 144
	nvme_completion_fn fn;
	void *ctx;
K
Keith Busch 已提交
145
	int aborted;
M
Matias Bjørling 已提交
146
	struct nvme_queue *nvmeq;
147 148
};

M
Matias Bjørling 已提交
149 150
static int nvme_admin_init_hctx(struct blk_mq_hw_ctx *hctx, void *data,
				unsigned int hctx_idx)
151
{
M
Matias Bjørling 已提交
152 153 154 155 156 157 158
	struct nvme_dev *dev = data;
	struct nvme_queue *nvmeq = dev->queues[0];

	WARN_ON(nvmeq->hctx);
	nvmeq->hctx = hctx;
	hctx->driver_data = nvmeq;
	return 0;
159 160
}

M
Matias Bjørling 已提交
161 162 163
static int nvme_admin_init_request(void *data, struct request *req,
				unsigned int hctx_idx, unsigned int rq_idx,
				unsigned int numa_node)
164
{
M
Matias Bjørling 已提交
165 166 167 168 169 170 171
	struct nvme_dev *dev = data;
	struct nvme_cmd_info *cmd = blk_mq_rq_to_pdu(req);
	struct nvme_queue *nvmeq = dev->queues[0];

	BUG_ON(!nvmeq);
	cmd->nvmeq = nvmeq;
	return 0;
172 173
}

M
Matias Bjørling 已提交
174 175
static int nvme_init_hctx(struct blk_mq_hw_ctx *hctx, void *data,
			  unsigned int hctx_idx)
M
Matthew Wilcox 已提交
176
{
M
Matias Bjørling 已提交
177 178 179
	struct nvme_dev *dev = data;
	struct nvme_queue *nvmeq = dev->queues[
					(hctx_idx % dev->queue_count) + 1];
M
Matthew Wilcox 已提交
180

M
Matias Bjørling 已提交
181 182 183 184 185 186
	if (!nvmeq->hctx)
		nvmeq->hctx = hctx;

	/* nvmeq queues are shared between namespaces. We assume here that
	 * blk-mq map the tags so they match up with the nvme queue tags. */
	WARN_ON(nvmeq->hctx->tags != hctx->tags);
M
Matthew Wilcox 已提交
187

M
Matias Bjørling 已提交
188 189
	hctx->driver_data = nvmeq;
	return 0;
M
Matthew Wilcox 已提交
190 191
}

M
Matias Bjørling 已提交
192 193 194
static int nvme_init_request(void *data, struct request *req,
				unsigned int hctx_idx, unsigned int rq_idx,
				unsigned int numa_node)
M
Matthew Wilcox 已提交
195
{
M
Matias Bjørling 已提交
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
	struct nvme_dev *dev = data;
	struct nvme_cmd_info *cmd = blk_mq_rq_to_pdu(req);
	struct nvme_queue *nvmeq = dev->queues[hctx_idx + 1];

	BUG_ON(!nvmeq);
	cmd->nvmeq = nvmeq;
	return 0;
}

static void nvme_set_info(struct nvme_cmd_info *cmd, void *ctx,
				nvme_completion_fn handler)
{
	cmd->fn = handler;
	cmd->ctx = ctx;
	cmd->aborted = 0;
M
Matthew Wilcox 已提交
211 212
}

213 214
/* Special values must be less than 0x1000 */
#define CMD_CTX_BASE		((void *)POISON_POINTER_DELTA)
215 216 217
#define CMD_CTX_CANCELLED	(0x30C + CMD_CTX_BASE)
#define CMD_CTX_COMPLETED	(0x310 + CMD_CTX_BASE)
#define CMD_CTX_INVALID		(0x314 + CMD_CTX_BASE)
218

219
static void special_completion(struct nvme_queue *nvmeq, void *ctx,
220 221 222 223 224
						struct nvme_completion *cqe)
{
	if (ctx == CMD_CTX_CANCELLED)
		return;
	if (ctx == CMD_CTX_COMPLETED) {
225
		dev_warn(nvmeq->q_dmadev,
226 227 228 229 230
				"completed id %d twice on queue %d\n",
				cqe->command_id, le16_to_cpup(&cqe->sq_id));
		return;
	}
	if (ctx == CMD_CTX_INVALID) {
231
		dev_warn(nvmeq->q_dmadev,
232 233 234 235
				"invalid id %d completed on queue %d\n",
				cqe->command_id, le16_to_cpup(&cqe->sq_id));
		return;
	}
236
	dev_warn(nvmeq->q_dmadev, "Unknown special completion %p\n", ctx);
237 238
}

M
Matias Bjørling 已提交
239
static void *cancel_cmd_info(struct nvme_cmd_info *cmd, nvme_completion_fn *fn)
M
Matthew Wilcox 已提交
240
{
241
	void *ctx;
M
Matthew Wilcox 已提交
242

243
	if (fn)
M
Matias Bjørling 已提交
244 245 246 247
		*fn = cmd->fn;
	ctx = cmd->ctx;
	cmd->fn = special_completion;
	cmd->ctx = CMD_CTX_CANCELLED;
248
	return ctx;
M
Matthew Wilcox 已提交
249 250
}

M
Matias Bjørling 已提交
251 252
static void async_req_completion(struct nvme_queue *nvmeq, void *ctx,
						struct nvme_completion *cqe)
253
{
M
Matias Bjørling 已提交
254
	struct request *req = ctx;
255

M
Matias Bjørling 已提交
256 257 258 259 260 261 262 263 264
	u32 result = le32_to_cpup(&cqe->result);
	u16 status = le16_to_cpup(&cqe->status) >> 1;

	if (status == NVME_SC_SUCCESS || status == NVME_SC_ABORT_REQ)
		++nvmeq->dev->event_limit;
	if (status == NVME_SC_SUCCESS)
		dev_warn(nvmeq->q_dmadev,
			"async event result %08x\n", result);

265
	blk_mq_free_hctx_request(nvmeq->hctx, req);
M
Matthew Wilcox 已提交
266 267
}

M
Matias Bjørling 已提交
268 269
static void abort_completion(struct nvme_queue *nvmeq, void *ctx,
						struct nvme_completion *cqe)
270
{
M
Matias Bjørling 已提交
271 272 273 274
	struct request *req = ctx;

	u16 status = le16_to_cpup(&cqe->status) >> 1;
	u32 result = le32_to_cpup(&cqe->result);
275

276
	blk_mq_free_hctx_request(nvmeq->hctx, req);
277

M
Matias Bjørling 已提交
278 279
	dev_warn(nvmeq->q_dmadev, "Abort status:%x result:%x", status, result);
	++nvmeq->dev->abort_limit;
280 281
}

M
Matias Bjørling 已提交
282 283
static void async_completion(struct nvme_queue *nvmeq, void *ctx,
						struct nvme_completion *cqe)
M
Matthew Wilcox 已提交
284
{
M
Matias Bjørling 已提交
285 286 287 288
	struct async_cmd_info *cmdinfo = ctx;
	cmdinfo->result = le32_to_cpup(&cqe->result);
	cmdinfo->status = le16_to_cpup(&cqe->status) >> 1;
	queue_kthread_work(cmdinfo->worker, &cmdinfo->work);
289
	blk_mq_free_hctx_request(nvmeq->hctx, cmdinfo->req);
M
Matthew Wilcox 已提交
290 291
}

M
Matias Bjørling 已提交
292 293
static inline struct nvme_cmd_info *get_cmd_from_tag(struct nvme_queue *nvmeq,
				  unsigned int tag)
M
Matthew Wilcox 已提交
294
{
M
Matias Bjørling 已提交
295 296
	struct blk_mq_hw_ctx *hctx = nvmeq->hctx;
	struct request *req = blk_mq_tag_to_rq(hctx->tags, tag);
297

M
Matias Bjørling 已提交
298
	return blk_mq_rq_to_pdu(req);
299 300
}

M
Matias Bjørling 已提交
301 302 303 304 305
/*
 * Called with local interrupts disabled and the q_lock held.  May not sleep.
 */
static void *nvme_finish_cmd(struct nvme_queue *nvmeq, int tag,
						nvme_completion_fn *fn)
306
{
M
Matias Bjørling 已提交
307 308 309 310 311 312 313 314 315 316 317 318
	struct nvme_cmd_info *cmd = get_cmd_from_tag(nvmeq, tag);
	void *ctx;
	if (tag >= nvmeq->q_depth) {
		*fn = special_completion;
		return CMD_CTX_INVALID;
	}
	if (fn)
		*fn = cmd->fn;
	ctx = cmd->ctx;
	cmd->fn = special_completion;
	cmd->ctx = CMD_CTX_COMPLETED;
	return ctx;
M
Matthew Wilcox 已提交
319 320 321
}

/**
322
 * nvme_submit_cmd() - Copy a command into a queue and ring the doorbell
M
Matthew Wilcox 已提交
323 324 325 326 327
 * @nvmeq: The queue to use
 * @cmd: The command to send
 *
 * Safe to use from interrupt context
 */
M
Matias Bjørling 已提交
328
static int __nvme_submit_cmd(struct nvme_queue *nvmeq, struct nvme_command *cmd)
M
Matthew Wilcox 已提交
329
{
M
Matias Bjørling 已提交
330 331
	u16 tail = nvmeq->sq_tail;

M
Matthew Wilcox 已提交
332 333 334
	memcpy(&nvmeq->sq_cmds[tail], cmd, sizeof(*cmd));
	if (++tail == nvmeq->q_depth)
		tail = 0;
335
	writel(tail, nvmeq->q_db);
M
Matthew Wilcox 已提交
336 337 338 339 340
	nvmeq->sq_tail = tail;

	return 0;
}

M
Matias Bjørling 已提交
341 342 343 344 345 346 347 348 349 350
static int nvme_submit_cmd(struct nvme_queue *nvmeq, struct nvme_command *cmd)
{
	unsigned long flags;
	int ret;
	spin_lock_irqsave(&nvmeq->q_lock, flags);
	ret = __nvme_submit_cmd(nvmeq, cmd);
	spin_unlock_irqrestore(&nvmeq->q_lock, flags);
	return ret;
}

351
static __le64 **iod_list(struct nvme_iod *iod)
352
{
353
	return ((void *)iod) + iod->offset;
354 355
}

356 357 358 359 360
/*
 * Will slightly overestimate the number of pages needed.  This is OK
 * as it only leads to a small amount of wasted memory for the lifetime of
 * the I/O.
 */
361
static int nvme_npages(unsigned size, struct nvme_dev *dev)
362
{
363 364
	unsigned nprps = DIV_ROUND_UP(size + dev->page_size, dev->page_size);
	return DIV_ROUND_UP(8 * nprps, dev->page_size - 8);
365
}
M
Matthew Wilcox 已提交
366

367
static struct nvme_iod *
368
nvme_alloc_iod(unsigned nseg, unsigned nbytes, struct nvme_dev *dev, gfp_t gfp)
M
Matthew Wilcox 已提交
369
{
370
	struct nvme_iod *iod = kmalloc(sizeof(struct nvme_iod) +
371
				sizeof(__le64 *) * nvme_npages(nbytes, dev) +
372 373 374 375 376 377
				sizeof(struct scatterlist) * nseg, gfp);

	if (iod) {
		iod->offset = offsetof(struct nvme_iod, sg[nseg]);
		iod->npages = -1;
		iod->length = nbytes;
K
Keith Busch 已提交
378
		iod->nents = 0;
379
		iod->first_dma = 0ULL;
380 381 382
	}

	return iod;
M
Matthew Wilcox 已提交
383 384
}

V
Vishal Verma 已提交
385
void nvme_free_iod(struct nvme_dev *dev, struct nvme_iod *iod)
M
Matthew Wilcox 已提交
386
{
387
	const int last_prp = dev->page_size / 8 - 1;
388 389 390 391 392 393 394 395 396 397 398 399 400
	int i;
	__le64 **list = iod_list(iod);
	dma_addr_t prp_dma = iod->first_dma;

	if (iod->npages == 0)
		dma_pool_free(dev->prp_small_pool, list[0], prp_dma);
	for (i = 0; i < iod->npages; i++) {
		__le64 *prp_list = list[i];
		dma_addr_t next_prp_dma = le64_to_cpu(prp_list[last_prp]);
		dma_pool_free(dev->prp_page_pool, prp_list, prp_dma);
		prp_dma = next_prp_dma;
	}
	kfree(iod);
M
Matthew Wilcox 已提交
401 402
}

K
Keith Busch 已提交
403 404 405 406 407 408 409 410 411 412 413 414
static int nvme_error_status(u16 status)
{
	switch (status & 0x7ff) {
	case NVME_SC_SUCCESS:
		return 0;
	case NVME_SC_CAP_EXCEEDED:
		return -ENOSPC;
	default:
		return -EIO;
	}
}

M
Matias Bjørling 已提交
415
static void req_completion(struct nvme_queue *nvmeq, void *ctx,
M
Matthew Wilcox 已提交
416 417
						struct nvme_completion *cqe)
{
418
	struct nvme_iod *iod = ctx;
M
Matias Bjørling 已提交
419 420 421
	struct request *req = iod->private;
	struct nvme_cmd_info *cmd_rq = blk_mq_rq_to_pdu(req);

M
Matthew Wilcox 已提交
422 423
	u16 status = le16_to_cpup(&cqe->status) >> 1;

424
	if (unlikely(status)) {
M
Matias Bjørling 已提交
425 426 427 428
		if (!(status & NVME_SC_DNR || blk_noretry_request(req))
		    && (jiffies - req->start_time) < req->timeout) {
			blk_mq_requeue_request(req);
			blk_mq_kick_requeue_list(req->q);
429 430
			return;
		}
M
Matias Bjørling 已提交
431 432 433 434 435 436 437 438 439 440 441 442
		req->errors = nvme_error_status(status);
	} else
		req->errors = 0;

	if (cmd_rq->aborted)
		dev_warn(&nvmeq->dev->pci_dev->dev,
			"completing aborted command with status:%04x\n",
			status);

	if (iod->nents)
		dma_unmap_sg(&nvmeq->dev->pci_dev->dev, iod->sg, iod->nents,
			rq_data_dir(req) ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
443
	nvme_free_iod(nvmeq->dev, iod);
K
Keith Busch 已提交
444

M
Matias Bjørling 已提交
445
	blk_mq_complete_request(req);
M
Matthew Wilcox 已提交
446 447
}

448
/* length is in bytes.  gfp flags indicates whether we may sleep. */
449 450
int nvme_setup_prps(struct nvme_dev *dev, struct nvme_iod *iod, int total_len,
								gfp_t gfp)
M
Matthew Wilcox 已提交
451
{
452
	struct dma_pool *pool;
453 454
	int length = total_len;
	struct scatterlist *sg = iod->sg;
M
Matthew Wilcox 已提交
455 456 457
	int dma_len = sg_dma_len(sg);
	u64 dma_addr = sg_dma_address(sg);
	int offset = offset_in_page(dma_addr);
458
	__le64 *prp_list;
459
	__le64 **list = iod_list(iod);
460
	dma_addr_t prp_dma;
461
	int nprps, i;
462
	u32 page_size = dev->page_size;
M
Matthew Wilcox 已提交
463

464
	length -= (page_size - offset);
M
Matthew Wilcox 已提交
465
	if (length <= 0)
466
		return total_len;
M
Matthew Wilcox 已提交
467

468
	dma_len -= (page_size - offset);
M
Matthew Wilcox 已提交
469
	if (dma_len) {
470
		dma_addr += (page_size - offset);
M
Matthew Wilcox 已提交
471 472 473 474 475 476
	} else {
		sg = sg_next(sg);
		dma_addr = sg_dma_address(sg);
		dma_len = sg_dma_len(sg);
	}

477
	if (length <= page_size) {
478
		iod->first_dma = dma_addr;
479
		return total_len;
480 481
	}

482
	nprps = DIV_ROUND_UP(length, page_size);
483 484
	if (nprps <= (256 / 8)) {
		pool = dev->prp_small_pool;
485
		iod->npages = 0;
486 487
	} else {
		pool = dev->prp_page_pool;
488
		iod->npages = 1;
489 490
	}

491 492
	prp_list = dma_pool_alloc(pool, gfp, &prp_dma);
	if (!prp_list) {
493
		iod->first_dma = dma_addr;
494
		iod->npages = -1;
495
		return (total_len - length) + page_size;
496
	}
497 498
	list[0] = prp_list;
	iod->first_dma = prp_dma;
499 500
	i = 0;
	for (;;) {
501
		if (i == page_size >> 3) {
502
			__le64 *old_prp_list = prp_list;
503
			prp_list = dma_pool_alloc(pool, gfp, &prp_dma);
504 505 506
			if (!prp_list)
				return total_len - length;
			list[iod->npages++] = prp_list;
507 508 509
			prp_list[0] = old_prp_list[i - 1];
			old_prp_list[i - 1] = cpu_to_le64(prp_dma);
			i = 1;
510 511
		}
		prp_list[i++] = cpu_to_le64(dma_addr);
512 513 514
		dma_len -= page_size;
		dma_addr += page_size;
		length -= page_size;
515 516 517 518 519 520 521 522
		if (length <= 0)
			break;
		if (dma_len > 0)
			continue;
		BUG_ON(dma_len < 0);
		sg = sg_next(sg);
		dma_addr = sg_dma_address(sg);
		dma_len = sg_dma_len(sg);
M
Matthew Wilcox 已提交
523 524
	}

525
	return total_len;
M
Matthew Wilcox 已提交
526 527
}

M
Matias Bjørling 已提交
528 529 530 531 532 533 534
/*
 * We reuse the small pool to allocate the 16-byte range here as it is not
 * worth having a special pool for these or additional cases to handle freeing
 * the iod.
 */
static void nvme_submit_discard(struct nvme_queue *nvmeq, struct nvme_ns *ns,
		struct request *req, struct nvme_iod *iod)
535
{
536 537
	struct nvme_dsm_range *range =
				(struct nvme_dsm_range *)iod_list(iod)[0];
538 539 540
	struct nvme_command *cmnd = &nvmeq->sq_cmds[nvmeq->sq_tail];

	range->cattr = cpu_to_le32(0);
M
Matias Bjørling 已提交
541 542
	range->nlb = cpu_to_le32(blk_rq_bytes(req) >> ns->lba_shift);
	range->slba = cpu_to_le64(nvme_block_nr(ns, blk_rq_pos(req)));
543 544 545

	memset(cmnd, 0, sizeof(*cmnd));
	cmnd->dsm.opcode = nvme_cmd_dsm;
M
Matias Bjørling 已提交
546
	cmnd->dsm.command_id = req->tag;
547 548 549 550 551 552 553 554 555 556
	cmnd->dsm.nsid = cpu_to_le32(ns->ns_id);
	cmnd->dsm.prp1 = cpu_to_le64(iod->first_dma);
	cmnd->dsm.nr = 0;
	cmnd->dsm.attributes = cpu_to_le32(NVME_DSMGMT_AD);

	if (++nvmeq->sq_tail == nvmeq->q_depth)
		nvmeq->sq_tail = 0;
	writel(nvmeq->sq_tail, nvmeq->q_db);
}

M
Matias Bjørling 已提交
557
static void nvme_submit_flush(struct nvme_queue *nvmeq, struct nvme_ns *ns,
M
Matthew Wilcox 已提交
558 559 560 561 562 563 564 565 566 567 568 569 570 571
								int cmdid)
{
	struct nvme_command *cmnd = &nvmeq->sq_cmds[nvmeq->sq_tail];

	memset(cmnd, 0, sizeof(*cmnd));
	cmnd->common.opcode = nvme_cmd_flush;
	cmnd->common.command_id = cmdid;
	cmnd->common.nsid = cpu_to_le32(ns->ns_id);

	if (++nvmeq->sq_tail == nvmeq->q_depth)
		nvmeq->sq_tail = 0;
	writel(nvmeq->sq_tail, nvmeq->q_db);
}

M
Matias Bjørling 已提交
572 573
static int nvme_submit_iod(struct nvme_queue *nvmeq, struct nvme_iod *iod,
							struct nvme_ns *ns)
M
Matthew Wilcox 已提交
574
{
M
Matias Bjørling 已提交
575
	struct request *req = iod->private;
M
Matthew Wilcox 已提交
576
	struct nvme_command *cmnd;
M
Matias Bjørling 已提交
577 578
	u16 control = 0;
	u32 dsmgmt = 0;
M
Matthew Wilcox 已提交
579

M
Matias Bjørling 已提交
580
	if (req->cmd_flags & REQ_FUA)
M
Matthew Wilcox 已提交
581
		control |= NVME_RW_FUA;
M
Matias Bjørling 已提交
582
	if (req->cmd_flags & (REQ_FAILFAST_DEV | REQ_RAHEAD))
M
Matthew Wilcox 已提交
583 584
		control |= NVME_RW_LR;

M
Matias Bjørling 已提交
585
	if (req->cmd_flags & REQ_RAHEAD)
M
Matthew Wilcox 已提交
586 587
		dsmgmt |= NVME_RW_DSM_FREQ_PREFETCH;

M
Matthew Wilcox 已提交
588
	cmnd = &nvmeq->sq_cmds[nvmeq->sq_tail];
589
	memset(cmnd, 0, sizeof(*cmnd));
M
Matthew Wilcox 已提交
590

M
Matias Bjørling 已提交
591 592
	cmnd->rw.opcode = (rq_data_dir(req) ? nvme_cmd_write : nvme_cmd_read);
	cmnd->rw.command_id = req->tag;
M
Matthew Wilcox 已提交
593
	cmnd->rw.nsid = cpu_to_le32(ns->ns_id);
594 595
	cmnd->rw.prp1 = cpu_to_le64(sg_dma_address(iod->sg));
	cmnd->rw.prp2 = cpu_to_le64(iod->first_dma);
M
Matias Bjørling 已提交
596 597
	cmnd->rw.slba = cpu_to_le64(nvme_block_nr(ns, blk_rq_pos(req)));
	cmnd->rw.length = cpu_to_le16((blk_rq_bytes(req) >> ns->lba_shift) - 1);
M
Matthew Wilcox 已提交
598 599
	cmnd->rw.control = cpu_to_le16(control);
	cmnd->rw.dsmgmt = cpu_to_le32(dsmgmt);
M
Matthew Wilcox 已提交
600 601 602

	if (++nvmeq->sq_tail == nvmeq->q_depth)
		nvmeq->sq_tail = 0;
603
	writel(nvmeq->sq_tail, nvmeq->q_db);
M
Matthew Wilcox 已提交
604

605
	return 0;
606 607
}

M
Matias Bjørling 已提交
608 609
static int nvme_queue_rq(struct blk_mq_hw_ctx *hctx,
			 const struct blk_mq_queue_data *bd)
610
{
M
Matias Bjørling 已提交
611 612 613 614
	struct nvme_ns *ns = hctx->queue->queuedata;
	struct nvme_queue *nvmeq = hctx->driver_data;
	struct request *req = bd->rq;
	struct nvme_cmd_info *cmd = blk_mq_rq_to_pdu(req);
615
	struct nvme_iod *iod;
M
Matias Bjørling 已提交
616 617 618 619
	int psegs = req->nr_phys_segments;
	int result = BLK_MQ_RQ_QUEUE_BUSY;
	enum dma_data_direction dma_dir;
	unsigned size = !(req->cmd_flags & REQ_DISCARD) ? blk_rq_bytes(req) :
620
						sizeof(struct nvme_dsm_range);
621

M
Matias Bjørling 已提交
622 623 624 625 626 627
	/*
	 * Requeued IO has already been prepped
	 */
	iod = req->special;
	if (iod)
		goto submit_iod;
628

629
	iod = nvme_alloc_iod(psegs, size, ns->dev, GFP_ATOMIC);
630
	if (!iod)
M
Matias Bjørling 已提交
631 632 633 634
		return result;

	iod->private = req;
	req->special = iod;
635

M
Matias Bjørling 已提交
636 637 638
	nvme_set_info(cmd, iod, req_completion);

	if (req->cmd_flags & REQ_DISCARD) {
639 640 641 642 643 644 645 646 647
		void *range;
		/*
		 * We reuse the small pool to allocate the 16-byte range here
		 * as it is not worth having a special pool for these or
		 * additional cases to handle freeing the iod.
		 */
		range = dma_pool_alloc(nvmeq->dev->prp_small_pool,
						GFP_ATOMIC,
						&iod->first_dma);
M
Matias Bjørling 已提交
648 649
		if (!range)
			goto finish_cmd;
650 651 652
		iod_list(iod)[0] = (__le64 *)range;
		iod->npages = 0;
	} else if (psegs) {
M
Matias Bjørling 已提交
653 654 655 656 657 658 659
		dma_dir = rq_data_dir(req) ? DMA_TO_DEVICE : DMA_FROM_DEVICE;

		sg_init_table(iod->sg, psegs);
		iod->nents = blk_rq_map_sg(req->q, req, iod->sg);
		if (!iod->nents) {
			result = BLK_MQ_RQ_QUEUE_ERROR;
			goto finish_cmd;
660
		}
M
Matias Bjørling 已提交
661 662 663 664 665 666 667

		if (!dma_map_sg(nvmeq->q_dmadev, iod->sg, iod->nents, dma_dir))
			goto finish_cmd;

		if (blk_rq_bytes(req) != nvme_setup_prps(nvmeq->dev, iod,
						blk_rq_bytes(req), GFP_ATOMIC))
			goto finish_cmd;
668
	}
669

M
Matias Bjørling 已提交
670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686
	blk_mq_start_request(req);

 submit_iod:
	spin_lock_irq(&nvmeq->q_lock);
	if (req->cmd_flags & REQ_DISCARD)
		nvme_submit_discard(nvmeq, ns, req, iod);
	else if (req->cmd_flags & REQ_FLUSH)
		nvme_submit_flush(nvmeq, ns, req->tag);
	else
		nvme_submit_iod(nvmeq, iod, ns);

	nvme_process_cq(nvmeq);
	spin_unlock_irq(&nvmeq->q_lock);
	return BLK_MQ_RQ_QUEUE_OK;

 finish_cmd:
	nvme_finish_cmd(nvmeq, req->tag, NULL);
687
	nvme_free_iod(nvmeq->dev, iod);
688
	return result;
M
Matthew Wilcox 已提交
689 690
}

691
static int nvme_process_cq(struct nvme_queue *nvmeq)
M
Matthew Wilcox 已提交
692
{
M
Matthew Wilcox 已提交
693
	u16 head, phase;
M
Matthew Wilcox 已提交
694 695

	head = nvmeq->cq_head;
M
Matthew Wilcox 已提交
696
	phase = nvmeq->cq_phase;
M
Matthew Wilcox 已提交
697 698

	for (;;) {
699 700
		void *ctx;
		nvme_completion_fn fn;
M
Matthew Wilcox 已提交
701
		struct nvme_completion cqe = nvmeq->cqes[head];
M
Matthew Wilcox 已提交
702
		if ((le16_to_cpu(cqe.status) & 1) != phase)
M
Matthew Wilcox 已提交
703 704 705 706
			break;
		nvmeq->sq_head = le16_to_cpu(cqe.sq_head);
		if (++head == nvmeq->q_depth) {
			head = 0;
M
Matthew Wilcox 已提交
707
			phase = !phase;
M
Matthew Wilcox 已提交
708
		}
M
Matias Bjørling 已提交
709
		ctx = nvme_finish_cmd(nvmeq, cqe.command_id, &fn);
710
		fn(nvmeq, ctx, &cqe);
M
Matthew Wilcox 已提交
711 712 713 714 715 716 717 718
	}

	/* If the controller ignores the cq head doorbell and continuously
	 * writes to the queue, it is theoretically possible to wrap around
	 * the queue twice and mistakenly return IRQ_NONE.  Linux only
	 * requires that 0.1% of your interrupts are handled, so this isn't
	 * a big problem.
	 */
M
Matthew Wilcox 已提交
719
	if (head == nvmeq->cq_head && phase == nvmeq->cq_phase)
720
		return 0;
M
Matthew Wilcox 已提交
721

722
	writel(head, nvmeq->q_db + nvmeq->dev->db_stride);
M
Matthew Wilcox 已提交
723
	nvmeq->cq_head = head;
M
Matthew Wilcox 已提交
724
	nvmeq->cq_phase = phase;
M
Matthew Wilcox 已提交
725

726 727
	nvmeq->cqe_seen = 1;
	return 1;
M
Matthew Wilcox 已提交
728 729
}

M
Matias Bjørling 已提交
730 731 732 733
/* Admin queue isn't initialized as a request queue. If at some point this
 * happens anyway, make sure to notify the user */
static int nvme_admin_queue_rq(struct blk_mq_hw_ctx *hctx,
			       const struct blk_mq_queue_data *bd)
734
{
M
Matias Bjørling 已提交
735 736
	WARN_ON_ONCE(1);
	return BLK_MQ_RQ_QUEUE_ERROR;
737 738
}

M
Matthew Wilcox 已提交
739
static irqreturn_t nvme_irq(int irq, void *data)
740 741 742 743
{
	irqreturn_t result;
	struct nvme_queue *nvmeq = data;
	spin_lock(&nvmeq->q_lock);
744 745 746
	nvme_process_cq(nvmeq);
	result = nvmeq->cqe_seen ? IRQ_HANDLED : IRQ_NONE;
	nvmeq->cqe_seen = 0;
747 748 749 750 751 752 753 754 755 756 757 758 759
	spin_unlock(&nvmeq->q_lock);
	return result;
}

static irqreturn_t nvme_irq_check(int irq, void *data)
{
	struct nvme_queue *nvmeq = data;
	struct nvme_completion cqe = nvmeq->cqes[nvmeq->cq_head];
	if ((le16_to_cpu(cqe.status) & 1) != nvmeq->cq_phase)
		return IRQ_NONE;
	return IRQ_WAKE_THREAD;
}

M
Matias Bjørling 已提交
760 761
static void nvme_abort_cmd_info(struct nvme_queue *nvmeq, struct nvme_cmd_info *
								cmd_info)
762 763
{
	spin_lock_irq(&nvmeq->q_lock);
M
Matias Bjørling 已提交
764
	cancel_cmd_info(cmd_info, NULL);
765 766 767
	spin_unlock_irq(&nvmeq->q_lock);
}

768 769 770 771 772 773
struct sync_cmd_info {
	struct task_struct *task;
	u32 result;
	int status;
};

774
static void sync_completion(struct nvme_queue *nvmeq, void *ctx,
775 776 777 778 779 780 781 782
						struct nvme_completion *cqe)
{
	struct sync_cmd_info *cmdinfo = ctx;
	cmdinfo->result = le32_to_cpup(&cqe->result);
	cmdinfo->status = le16_to_cpup(&cqe->status) >> 1;
	wake_up_process(cmdinfo->task);
}

M
Matthew Wilcox 已提交
783 784 785 786
/*
 * Returns 0 on success.  If the result is negative, it's a Linux error code;
 * if the result is positive, it's an NVM Express status code
 */
M
Matias Bjørling 已提交
787
static int nvme_submit_sync_cmd(struct request *req, struct nvme_command *cmd,
V
Vishal Verma 已提交
788
						u32 *result, unsigned timeout)
M
Matthew Wilcox 已提交
789
{
M
Matias Bjørling 已提交
790
	int ret;
M
Matthew Wilcox 已提交
791
	struct sync_cmd_info cmdinfo;
M
Matias Bjørling 已提交
792 793
	struct nvme_cmd_info *cmd_rq = blk_mq_rq_to_pdu(req);
	struct nvme_queue *nvmeq = cmd_rq->nvmeq;
M
Matthew Wilcox 已提交
794 795 796 797

	cmdinfo.task = current;
	cmdinfo.status = -EINTR;

M
Matias Bjørling 已提交
798 799 800
	cmd->common.command_id = req->tag;

	nvme_set_info(cmd_rq, &cmdinfo, sync_completion);
M
Matthew Wilcox 已提交
801

802
	set_current_state(TASK_KILLABLE);
803 804
	ret = nvme_submit_cmd(nvmeq, cmd);
	if (ret) {
M
Matias Bjørling 已提交
805
		nvme_finish_cmd(nvmeq, req->tag, NULL);
806 807
		set_current_state(TASK_RUNNING);
	}
808
	schedule_timeout(timeout);
M
Matthew Wilcox 已提交
809

810
	if (cmdinfo.status == -EINTR) {
M
Matias Bjørling 已提交
811
		nvme_abort_cmd_info(nvmeq, blk_mq_rq_to_pdu(req));
812 813 814
		return -EINTR;
	}

M
Matthew Wilcox 已提交
815 816 817 818 819 820
	if (result)
		*result = cmdinfo.result;

	return cmdinfo.status;
}

M
Matias Bjørling 已提交
821 822 823 824 825 826 827 828
static int nvme_submit_async_admin_req(struct nvme_dev *dev)
{
	struct nvme_queue *nvmeq = dev->queues[0];
	struct nvme_command c;
	struct nvme_cmd_info *cmd_info;
	struct request *req;

	req = blk_mq_alloc_request(dev->admin_q, WRITE, GFP_KERNEL, false);
829 830
	if (IS_ERR(req))
		return PTR_ERR(req);
M
Matias Bjørling 已提交
831 832 833 834 835 836 837 838 839 840 841 842

	cmd_info = blk_mq_rq_to_pdu(req);
	nvme_set_info(cmd_info, req, async_req_completion);

	memset(&c, 0, sizeof(c));
	c.common.opcode = nvme_admin_async_event;
	c.common.command_id = req->tag;

	return __nvme_submit_cmd(nvmeq, &c);
}

static int nvme_submit_admin_async_cmd(struct nvme_dev *dev,
K
Keith Busch 已提交
843 844 845
			struct nvme_command *cmd,
			struct async_cmd_info *cmdinfo, unsigned timeout)
{
M
Matias Bjørling 已提交
846 847 848
	struct nvme_queue *nvmeq = dev->queues[0];
	struct request *req;
	struct nvme_cmd_info *cmd_rq;
K
Keith Busch 已提交
849

M
Matias Bjørling 已提交
850
	req = blk_mq_alloc_request(dev->admin_q, WRITE, GFP_KERNEL, false);
851 852
	if (IS_ERR(req))
		return PTR_ERR(req);
M
Matias Bjørling 已提交
853 854 855 856 857

	req->timeout = timeout;
	cmd_rq = blk_mq_rq_to_pdu(req);
	cmdinfo->req = req;
	nvme_set_info(cmd_rq, cmdinfo, async_completion);
K
Keith Busch 已提交
858
	cmdinfo->status = -EINTR;
M
Matias Bjørling 已提交
859 860 861

	cmd->common.command_id = req->tag;

862
	return nvme_submit_cmd(nvmeq, cmd);
K
Keith Busch 已提交
863 864
}

865
static int __nvme_submit_admin_cmd(struct nvme_dev *dev, struct nvme_command *cmd,
M
Matias Bjørling 已提交
866
						u32 *result, unsigned timeout)
M
Matthew Wilcox 已提交
867
{
M
Matias Bjørling 已提交
868 869 870 871 872 873 874
	int res;
	struct request *req;

	req = blk_mq_alloc_request(dev->admin_q, WRITE, GFP_KERNEL, false);
	if (!req)
		return -ENOMEM;
	res = nvme_submit_sync_cmd(req, cmd, result, timeout);
875
	blk_mq_free_request(req);
M
Matias Bjørling 已提交
876
	return res;
877 878
}

M
Matias Bjørling 已提交
879
int nvme_submit_admin_cmd(struct nvme_dev *dev, struct nvme_command *cmd,
880 881
								u32 *result)
{
M
Matias Bjørling 已提交
882
	return __nvme_submit_admin_cmd(dev, cmd, result, ADMIN_TIMEOUT);
M
Matthew Wilcox 已提交
883 884
}

M
Matias Bjørling 已提交
885 886
int nvme_submit_io_cmd(struct nvme_dev *dev, struct nvme_ns *ns,
					struct nvme_command *cmd, u32 *result)
K
Keith Busch 已提交
887
{
M
Matias Bjørling 已提交
888 889 890 891 892 893 894 895
	int res;
	struct request *req;

	req = blk_mq_alloc_request(ns->queue, WRITE, (GFP_KERNEL|__GFP_WAIT),
									false);
	if (!req)
		return -ENOMEM;
	res = nvme_submit_sync_cmd(req, cmd, result, NVME_IO_TIMEOUT);
896
	blk_mq_free_request(req);
M
Matias Bjørling 已提交
897
	return res;
K
Keith Busch 已提交
898 899
}

M
Matthew Wilcox 已提交
900 901 902 903 904 905 906 907
static int adapter_delete_queue(struct nvme_dev *dev, u8 opcode, u16 id)
{
	struct nvme_command c;

	memset(&c, 0, sizeof(c));
	c.delete_queue.opcode = opcode;
	c.delete_queue.qid = cpu_to_le16(id);

M
Matias Bjørling 已提交
908
	return nvme_submit_admin_cmd(dev, &c, NULL);
M
Matthew Wilcox 已提交
909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924
}

static int adapter_alloc_cq(struct nvme_dev *dev, u16 qid,
						struct nvme_queue *nvmeq)
{
	struct nvme_command c;
	int flags = NVME_QUEUE_PHYS_CONTIG | NVME_CQ_IRQ_ENABLED;

	memset(&c, 0, sizeof(c));
	c.create_cq.opcode = nvme_admin_create_cq;
	c.create_cq.prp1 = cpu_to_le64(nvmeq->cq_dma_addr);
	c.create_cq.cqid = cpu_to_le16(qid);
	c.create_cq.qsize = cpu_to_le16(nvmeq->q_depth - 1);
	c.create_cq.cq_flags = cpu_to_le16(flags);
	c.create_cq.irq_vector = cpu_to_le16(nvmeq->cq_vector);

M
Matias Bjørling 已提交
925
	return nvme_submit_admin_cmd(dev, &c, NULL);
M
Matthew Wilcox 已提交
926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941
}

static int adapter_alloc_sq(struct nvme_dev *dev, u16 qid,
						struct nvme_queue *nvmeq)
{
	struct nvme_command c;
	int flags = NVME_QUEUE_PHYS_CONTIG | NVME_SQ_PRIO_MEDIUM;

	memset(&c, 0, sizeof(c));
	c.create_sq.opcode = nvme_admin_create_sq;
	c.create_sq.prp1 = cpu_to_le64(nvmeq->sq_dma_addr);
	c.create_sq.sqid = cpu_to_le16(qid);
	c.create_sq.qsize = cpu_to_le16(nvmeq->q_depth - 1);
	c.create_sq.sq_flags = cpu_to_le16(flags);
	c.create_sq.cqid = cpu_to_le16(qid);

M
Matias Bjørling 已提交
942
	return nvme_submit_admin_cmd(dev, &c, NULL);
M
Matthew Wilcox 已提交
943 944 945 946 947 948 949 950 951 952 953 954
}

static int adapter_delete_cq(struct nvme_dev *dev, u16 cqid)
{
	return adapter_delete_queue(dev, nvme_admin_delete_cq, cqid);
}

static int adapter_delete_sq(struct nvme_dev *dev, u16 sqid)
{
	return adapter_delete_queue(dev, nvme_admin_delete_sq, sqid);
}

V
Vishal Verma 已提交
955
int nvme_identify(struct nvme_dev *dev, unsigned nsid, unsigned cns,
956 957 958 959 960 961 962 963 964 965 966 967 968
							dma_addr_t dma_addr)
{
	struct nvme_command c;

	memset(&c, 0, sizeof(c));
	c.identify.opcode = nvme_admin_identify;
	c.identify.nsid = cpu_to_le32(nsid);
	c.identify.prp1 = cpu_to_le64(dma_addr);
	c.identify.cns = cpu_to_le32(cns);

	return nvme_submit_admin_cmd(dev, &c, NULL);
}

V
Vishal Verma 已提交
969
int nvme_get_features(struct nvme_dev *dev, unsigned fid, unsigned nsid,
970
					dma_addr_t dma_addr, u32 *result)
971 972 973 974 975
{
	struct nvme_command c;

	memset(&c, 0, sizeof(c));
	c.features.opcode = nvme_admin_get_features;
976
	c.features.nsid = cpu_to_le32(nsid);
977 978 979
	c.features.prp1 = cpu_to_le64(dma_addr);
	c.features.fid = cpu_to_le32(fid);

980
	return nvme_submit_admin_cmd(dev, &c, result);
981 982
}

V
Vishal Verma 已提交
983 984
int nvme_set_features(struct nvme_dev *dev, unsigned fid, unsigned dword11,
					dma_addr_t dma_addr, u32 *result)
985 986 987 988 989 990 991 992 993
{
	struct nvme_command c;

	memset(&c, 0, sizeof(c));
	c.features.opcode = nvme_admin_set_features;
	c.features.prp1 = cpu_to_le64(dma_addr);
	c.features.fid = cpu_to_le32(fid);
	c.features.dword11 = cpu_to_le32(dword11);

994 995 996
	return nvme_submit_admin_cmd(dev, &c, result);
}

K
Keith Busch 已提交
997
/**
M
Matias Bjørling 已提交
998
 * nvme_abort_req - Attempt aborting a request
K
Keith Busch 已提交
999 1000 1001 1002
 *
 * Schedule controller reset if the command was already aborted once before and
 * still hasn't been returned to the driver, or if this is the admin queue.
 */
M
Matias Bjørling 已提交
1003
static void nvme_abort_req(struct request *req)
K
Keith Busch 已提交
1004
{
M
Matias Bjørling 已提交
1005 1006
	struct nvme_cmd_info *cmd_rq = blk_mq_rq_to_pdu(req);
	struct nvme_queue *nvmeq = cmd_rq->nvmeq;
K
Keith Busch 已提交
1007
	struct nvme_dev *dev = nvmeq->dev;
M
Matias Bjørling 已提交
1008 1009 1010
	struct request *abort_req;
	struct nvme_cmd_info *abort_cmd;
	struct nvme_command cmd;
K
Keith Busch 已提交
1011

M
Matias Bjørling 已提交
1012
	if (!nvmeq->qid || cmd_rq->aborted) {
K
Keith Busch 已提交
1013 1014 1015 1016
		if (work_busy(&dev->reset_work))
			return;
		list_del_init(&dev->node);
		dev_warn(&dev->pci_dev->dev,
M
Matias Bjørling 已提交
1017 1018
			"I/O %d QID %d timeout, reset controller\n",
							req->tag, nvmeq->qid);
T
Tejun Heo 已提交
1019
		dev->reset_workfn = nvme_reset_failed_dev;
K
Keith Busch 已提交
1020 1021 1022 1023 1024 1025 1026
		queue_work(nvme_workq, &dev->reset_work);
		return;
	}

	if (!dev->abort_limit)
		return;

M
Matias Bjørling 已提交
1027 1028
	abort_req = blk_mq_alloc_request(dev->admin_q, WRITE, GFP_ATOMIC,
									false);
1029
	if (IS_ERR(abort_req))
K
Keith Busch 已提交
1030 1031
		return;

M
Matias Bjørling 已提交
1032 1033 1034
	abort_cmd = blk_mq_rq_to_pdu(abort_req);
	nvme_set_info(abort_cmd, abort_req, abort_completion);

K
Keith Busch 已提交
1035 1036
	memset(&cmd, 0, sizeof(cmd));
	cmd.abort.opcode = nvme_admin_abort_cmd;
M
Matias Bjørling 已提交
1037
	cmd.abort.cid = req->tag;
K
Keith Busch 已提交
1038
	cmd.abort.sqid = cpu_to_le16(nvmeq->qid);
M
Matias Bjørling 已提交
1039
	cmd.abort.command_id = abort_req->tag;
K
Keith Busch 已提交
1040 1041

	--dev->abort_limit;
M
Matias Bjørling 已提交
1042
	cmd_rq->aborted = 1;
K
Keith Busch 已提交
1043

M
Matias Bjørling 已提交
1044
	dev_warn(nvmeq->q_dmadev, "Aborting I/O %d QID %d\n", req->tag,
K
Keith Busch 已提交
1045
							nvmeq->qid);
M
Matias Bjørling 已提交
1046 1047 1048 1049
	if (nvme_submit_cmd(dev->queues[0], &cmd) < 0) {
		dev_warn(nvmeq->q_dmadev,
				"Could not abort I/O %d QID %d",
				req->tag, nvmeq->qid);
1050
		blk_mq_free_request(req);
M
Matias Bjørling 已提交
1051
	}
K
Keith Busch 已提交
1052 1053
}

M
Matias Bjørling 已提交
1054 1055
static void nvme_cancel_queue_ios(struct blk_mq_hw_ctx *hctx,
				struct request *req, void *data, bool reserved)
1056
{
M
Matias Bjørling 已提交
1057 1058 1059 1060 1061 1062 1063
	struct nvme_queue *nvmeq = data;
	void *ctx;
	nvme_completion_fn fn;
	struct nvme_cmd_info *cmd;
	static struct nvme_completion cqe = {
		.status = cpu_to_le16(NVME_SC_ABORT_REQ << 1),
	};
1064

M
Matias Bjørling 已提交
1065
	cmd = blk_mq_rq_to_pdu(req);
1066

M
Matias Bjørling 已提交
1067 1068 1069 1070 1071 1072 1073
	if (cmd->ctx == CMD_CTX_CANCELLED)
		return;

	dev_warn(nvmeq->q_dmadev, "Cancelling I/O %d QID %d\n",
						req->tag, nvmeq->qid);
	ctx = cancel_cmd_info(cmd, &fn);
	fn(nvmeq, ctx, &cqe);
1074 1075
}

M
Matias Bjørling 已提交
1076
static enum blk_eh_timer_return nvme_timeout(struct request *req, bool reserved)
1077
{
M
Matias Bjørling 已提交
1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092
	struct nvme_cmd_info *cmd = blk_mq_rq_to_pdu(req);
	struct nvme_queue *nvmeq = cmd->nvmeq;

	dev_warn(nvmeq->q_dmadev, "Timeout I/O %d QID %d\n", req->tag,
							nvmeq->qid);
	if (nvmeq->dev->initialized)
		nvme_abort_req(req);

	/*
	 * The aborted req will be completed on receiving the abort req.
	 * We enable the timer again. If hit twice, it'll cause a device reset,
	 * as the device then is in a faulty state.
	 */
	return BLK_EH_RESET_TIMER;
}
1093

M
Matias Bjørling 已提交
1094 1095
static void nvme_free_queue(struct nvme_queue *nvmeq)
{
1096 1097 1098 1099 1100 1101 1102
	dma_free_coherent(nvmeq->q_dmadev, CQ_SIZE(nvmeq->q_depth),
				(void *)nvmeq->cqes, nvmeq->cq_dma_addr);
	dma_free_coherent(nvmeq->q_dmadev, SQ_SIZE(nvmeq->q_depth),
					nvmeq->sq_cmds, nvmeq->sq_dma_addr);
	kfree(nvmeq);
}

1103
static void nvme_free_queues(struct nvme_dev *dev, int lowest)
1104
{
K
Keith Busch 已提交
1105 1106 1107
	LLIST_HEAD(q_list);
	struct nvme_queue *nvmeq, *next;
	struct llist_node *entry;
1108 1109
	int i;

1110
	for (i = dev->queue_count - 1; i >= lowest; i--) {
M
Matias Bjørling 已提交
1111
		struct nvme_queue *nvmeq = dev->queues[i];
K
Keith Busch 已提交
1112
		llist_add(&nvmeq->node, &q_list);
1113
		dev->queue_count--;
M
Matias Bjørling 已提交
1114
		dev->queues[i] = NULL;
1115
	}
K
Keith Busch 已提交
1116 1117 1118 1119
	synchronize_rcu();
	entry = llist_del_all(&q_list);
	llist_for_each_entry_safe(nvmeq, next, entry, node)
		nvme_free_queue(nvmeq);
1120 1121
}

K
Keith Busch 已提交
1122 1123 1124 1125 1126
/**
 * nvme_suspend_queue - put queue into suspended state
 * @nvmeq - queue to suspend
 */
static int nvme_suspend_queue(struct nvme_queue *nvmeq)
M
Matthew Wilcox 已提交
1127
{
K
Keith Busch 已提交
1128
	int vector = nvmeq->dev->entry[nvmeq->cq_vector].vector;
M
Matthew Wilcox 已提交
1129

1130
	spin_lock_irq(&nvmeq->q_lock);
K
Keith Busch 已提交
1131
	nvmeq->dev->online_queues--;
1132 1133
	spin_unlock_irq(&nvmeq->q_lock);

M
Matthew Wilcox 已提交
1134 1135
	irq_set_affinity_hint(vector, NULL);
	free_irq(vector, nvmeq);
M
Matthew Wilcox 已提交
1136

K
Keith Busch 已提交
1137 1138
	return 0;
}
M
Matthew Wilcox 已提交
1139

K
Keith Busch 已提交
1140 1141
static void nvme_clear_queue(struct nvme_queue *nvmeq)
{
M
Matias Bjørling 已提交
1142 1143
	struct blk_mq_hw_ctx *hctx = nvmeq->hctx;

1144 1145
	spin_lock_irq(&nvmeq->q_lock);
	nvme_process_cq(nvmeq);
M
Matias Bjørling 已提交
1146 1147
	if (hctx && hctx->tags)
		blk_mq_tag_busy_iter(hctx, nvme_cancel_queue_ios, nvmeq);
1148
	spin_unlock_irq(&nvmeq->q_lock);
M
Matthew Wilcox 已提交
1149 1150
}

K
Keith Busch 已提交
1151 1152
static void nvme_disable_queue(struct nvme_dev *dev, int qid)
{
M
Matias Bjørling 已提交
1153
	struct nvme_queue *nvmeq = dev->queues[qid];
K
Keith Busch 已提交
1154 1155 1156 1157 1158 1159

	if (!nvmeq)
		return;
	if (nvme_suspend_queue(nvmeq))
		return;

K
Keith Busch 已提交
1160 1161 1162
	/* Don't tell the adapter to delete the admin queue.
	 * Don't tell a removed adapter to delete IO queues. */
	if (qid && readl(&dev->bar->csts) != -1) {
M
Matthew Wilcox 已提交
1163 1164 1165
		adapter_delete_sq(dev, qid);
		adapter_delete_cq(dev, qid);
	}
K
Keith Busch 已提交
1166
	nvme_clear_queue(nvmeq);
M
Matthew Wilcox 已提交
1167 1168 1169 1170 1171 1172
}

static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid,
							int depth, int vector)
{
	struct device *dmadev = &dev->pci_dev->dev;
M
Matias Bjørling 已提交
1173
	struct nvme_queue *nvmeq = kzalloc(sizeof(*nvmeq), GFP_KERNEL);
M
Matthew Wilcox 已提交
1174 1175 1176
	if (!nvmeq)
		return NULL;

J
Joe Perches 已提交
1177 1178
	nvmeq->cqes = dma_zalloc_coherent(dmadev, CQ_SIZE(depth),
					  &nvmeq->cq_dma_addr, GFP_KERNEL);
M
Matthew Wilcox 已提交
1179 1180 1181 1182 1183 1184 1185 1186 1187
	if (!nvmeq->cqes)
		goto free_nvmeq;

	nvmeq->sq_cmds = dma_alloc_coherent(dmadev, SQ_SIZE(depth),
					&nvmeq->sq_dma_addr, GFP_KERNEL);
	if (!nvmeq->sq_cmds)
		goto free_cqdma;

	nvmeq->q_dmadev = dmadev;
M
Matthew Wilcox 已提交
1188
	nvmeq->dev = dev;
1189 1190
	snprintf(nvmeq->irqname, sizeof(nvmeq->irqname), "nvme%dq%d",
			dev->instance, qid);
M
Matthew Wilcox 已提交
1191 1192
	spin_lock_init(&nvmeq->q_lock);
	nvmeq->cq_head = 0;
M
Matthew Wilcox 已提交
1193
	nvmeq->cq_phase = 1;
1194
	nvmeq->q_db = &dev->dbs[qid * 2 * dev->db_stride];
M
Matthew Wilcox 已提交
1195 1196
	nvmeq->q_depth = depth;
	nvmeq->cq_vector = vector;
K
Keith Busch 已提交
1197
	nvmeq->qid = qid;
1198
	dev->queue_count++;
M
Matias Bjørling 已提交
1199
	dev->queues[qid] = nvmeq;
M
Matthew Wilcox 已提交
1200 1201 1202 1203

	return nvmeq;

 free_cqdma:
1204
	dma_free_coherent(dmadev, CQ_SIZE(depth), (void *)nvmeq->cqes,
M
Matthew Wilcox 已提交
1205 1206 1207 1208 1209 1210
							nvmeq->cq_dma_addr);
 free_nvmeq:
	kfree(nvmeq);
	return NULL;
}

1211 1212 1213
static int queue_request_irq(struct nvme_dev *dev, struct nvme_queue *nvmeq,
							const char *name)
{
1214 1215
	if (use_threaded_interrupts)
		return request_threaded_irq(dev->entry[nvmeq->cq_vector].vector,
1216
					nvme_irq_check, nvme_irq, IRQF_SHARED,
1217
					name, nvmeq);
1218
	return request_irq(dev->entry[nvmeq->cq_vector].vector, nvme_irq,
1219
				IRQF_SHARED, name, nvmeq);
1220 1221
}

1222
static void nvme_init_queue(struct nvme_queue *nvmeq, u16 qid)
M
Matthew Wilcox 已提交
1223
{
1224
	struct nvme_dev *dev = nvmeq->dev;
M
Matthew Wilcox 已提交
1225

1226
	spin_lock_irq(&nvmeq->q_lock);
1227 1228 1229
	nvmeq->sq_tail = 0;
	nvmeq->cq_head = 0;
	nvmeq->cq_phase = 1;
1230
	nvmeq->q_db = &dev->dbs[qid * 2 * dev->db_stride];
1231
	memset((void *)nvmeq->cqes, 0, CQ_SIZE(nvmeq->q_depth));
K
Keith Busch 已提交
1232
	dev->online_queues++;
1233
	spin_unlock_irq(&nvmeq->q_lock);
1234 1235 1236 1237 1238 1239
}

static int nvme_create_queue(struct nvme_queue *nvmeq, int qid)
{
	struct nvme_dev *dev = nvmeq->dev;
	int result;
1240

M
Matthew Wilcox 已提交
1241 1242
	result = adapter_alloc_cq(dev, qid, nvmeq);
	if (result < 0)
1243
		return result;
M
Matthew Wilcox 已提交
1244 1245 1246 1247 1248

	result = adapter_alloc_sq(dev, qid, nvmeq);
	if (result < 0)
		goto release_cq;

1249
	result = queue_request_irq(dev, nvmeq, nvmeq->irqname);
M
Matthew Wilcox 已提交
1250 1251 1252
	if (result < 0)
		goto release_sq;

1253 1254
	nvme_init_queue(nvmeq, qid);
	return result;
M
Matthew Wilcox 已提交
1255 1256 1257 1258 1259

 release_sq:
	adapter_delete_sq(dev, qid);
 release_cq:
	adapter_delete_cq(dev, qid);
1260
	return result;
M
Matthew Wilcox 已提交
1261 1262
}

1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275
static int nvme_wait_ready(struct nvme_dev *dev, u64 cap, bool enabled)
{
	unsigned long timeout;
	u32 bit = enabled ? NVME_CSTS_RDY : 0;

	timeout = ((NVME_CAP_TIMEOUT(cap) + 1) * HZ / 2) + jiffies;

	while ((readl(&dev->bar->csts) & NVME_CSTS_RDY) != bit) {
		msleep(100);
		if (fatal_signal_pending(current))
			return -EINTR;
		if (time_after(jiffies, timeout)) {
			dev_err(&dev->pci_dev->dev,
M
Matthew Wilcox 已提交
1276 1277
				"Device not ready; aborting %s\n", enabled ?
						"initialisation" : "reset");
1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292
			return -ENODEV;
		}
	}

	return 0;
}

/*
 * If the device has been passed off to us in an enabled state, just clear
 * the enabled bit.  The spec says we should set the 'shutdown notification
 * bits', but doing so may cause the device to complete commands to the
 * admin queue ... and we don't know what memory that might be pointing at!
 */
static int nvme_disable_ctrl(struct nvme_dev *dev, u64 cap)
{
1293 1294 1295
	dev->ctrl_config &= ~NVME_CC_SHN_MASK;
	dev->ctrl_config &= ~NVME_CC_ENABLE;
	writel(dev->ctrl_config, &dev->bar->cc);
1296

1297 1298 1299 1300 1301
	return nvme_wait_ready(dev, cap, false);
}

static int nvme_enable_ctrl(struct nvme_dev *dev, u64 cap)
{
1302 1303 1304 1305
	dev->ctrl_config &= ~NVME_CC_SHN_MASK;
	dev->ctrl_config |= NVME_CC_ENABLE;
	writel(dev->ctrl_config, &dev->bar->cc);

1306 1307 1308
	return nvme_wait_ready(dev, cap, true);
}

K
Keith Busch 已提交
1309 1310 1311 1312
static int nvme_shutdown_ctrl(struct nvme_dev *dev)
{
	unsigned long timeout;

1313 1314 1315 1316
	dev->ctrl_config &= ~NVME_CC_SHN_MASK;
	dev->ctrl_config |= NVME_CC_SHN_NORMAL;

	writel(dev->ctrl_config, &dev->bar->cc);
K
Keith Busch 已提交
1317

1318
	timeout = SHUTDOWN_TIMEOUT + jiffies;
K
Keith Busch 已提交
1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333
	while ((readl(&dev->bar->csts) & NVME_CSTS_SHST_MASK) !=
							NVME_CSTS_SHST_CMPLT) {
		msleep(100);
		if (fatal_signal_pending(current))
			return -EINTR;
		if (time_after(jiffies, timeout)) {
			dev_err(&dev->pci_dev->dev,
				"Device shutdown incomplete; abort shutdown\n");
			return -ENODEV;
		}
	}

	return 0;
}

M
Matias Bjørling 已提交
1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379
static struct blk_mq_ops nvme_mq_admin_ops = {
	.queue_rq	= nvme_admin_queue_rq,
	.map_queue	= blk_mq_map_queue,
	.init_hctx	= nvme_admin_init_hctx,
	.init_request	= nvme_admin_init_request,
	.timeout	= nvme_timeout,
};

static struct blk_mq_ops nvme_mq_ops = {
	.queue_rq	= nvme_queue_rq,
	.map_queue	= blk_mq_map_queue,
	.init_hctx	= nvme_init_hctx,
	.init_request	= nvme_init_request,
	.timeout	= nvme_timeout,
};

static int nvme_alloc_admin_tags(struct nvme_dev *dev)
{
	if (!dev->admin_q) {
		dev->admin_tagset.ops = &nvme_mq_admin_ops;
		dev->admin_tagset.nr_hw_queues = 1;
		dev->admin_tagset.queue_depth = NVME_AQ_DEPTH - 1;
		dev->admin_tagset.timeout = ADMIN_TIMEOUT;
		dev->admin_tagset.numa_node = dev_to_node(&dev->pci_dev->dev);
		dev->admin_tagset.cmd_size = sizeof(struct nvme_cmd_info);
		dev->admin_tagset.driver_data = dev;

		if (blk_mq_alloc_tag_set(&dev->admin_tagset))
			return -ENOMEM;

		dev->admin_q = blk_mq_init_queue(&dev->admin_tagset);
		if (!dev->admin_q) {
			blk_mq_free_tag_set(&dev->admin_tagset);
			return -ENOMEM;
		}
	}

	return 0;
}

static void nvme_free_admin_tags(struct nvme_dev *dev)
{
	if (dev->admin_q)
		blk_mq_free_tag_set(&dev->admin_tagset);
}

1380
static int nvme_configure_admin_queue(struct nvme_dev *dev)
M
Matthew Wilcox 已提交
1381
{
1382
	int result;
M
Matthew Wilcox 已提交
1383
	u32 aqa;
1384
	u64 cap = readq(&dev->bar->cap);
M
Matthew Wilcox 已提交
1385
	struct nvme_queue *nvmeq;
1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403
	unsigned page_shift = PAGE_SHIFT;
	unsigned dev_page_min = NVME_CAP_MPSMIN(cap) + 12;
	unsigned dev_page_max = NVME_CAP_MPSMAX(cap) + 12;

	if (page_shift < dev_page_min) {
		dev_err(&dev->pci_dev->dev,
				"Minimum device page size (%u) too large for "
				"host (%u)\n", 1 << dev_page_min,
				1 << page_shift);
		return -ENODEV;
	}
	if (page_shift > dev_page_max) {
		dev_info(&dev->pci_dev->dev,
				"Device maximum page size (%u) smaller than "
				"host (%u); enabling work-around\n",
				1 << dev_page_max, 1 << page_shift);
		page_shift = dev_page_max;
	}
M
Matthew Wilcox 已提交
1404

1405 1406 1407
	result = nvme_disable_ctrl(dev, cap);
	if (result < 0)
		return result;
M
Matthew Wilcox 已提交
1408

M
Matias Bjørling 已提交
1409
	nvmeq = dev->queues[0];
1410
	if (!nvmeq) {
M
Matias Bjørling 已提交
1411
		nvmeq = nvme_alloc_queue(dev, 0, NVME_AQ_DEPTH, 0);
1412 1413 1414
		if (!nvmeq)
			return -ENOMEM;
	}
M
Matthew Wilcox 已提交
1415 1416 1417 1418

	aqa = nvmeq->q_depth - 1;
	aqa |= aqa << 16;

1419 1420
	dev->page_size = 1 << page_shift;

1421
	dev->ctrl_config = NVME_CC_CSS_NVM;
1422
	dev->ctrl_config |= (page_shift - 12) << NVME_CC_MPS_SHIFT;
M
Matthew Wilcox 已提交
1423
	dev->ctrl_config |= NVME_CC_ARB_RR | NVME_CC_SHN_NONE;
1424
	dev->ctrl_config |= NVME_CC_IOSQES | NVME_CC_IOCQES;
M
Matthew Wilcox 已提交
1425 1426 1427 1428 1429

	writel(aqa, &dev->bar->aqa);
	writeq(nvmeq->sq_dma_addr, &dev->bar->asq);
	writeq(nvmeq->cq_dma_addr, &dev->bar->acq);

1430
	result = nvme_enable_ctrl(dev, cap);
1431
	if (result)
M
Matias Bjørling 已提交
1432 1433 1434 1435 1436
		goto free_nvmeq;

	result = nvme_alloc_admin_tags(dev);
	if (result)
		goto free_nvmeq;
1437

1438
	result = queue_request_irq(dev, nvmeq, nvmeq->irqname);
1439
	if (result)
M
Matias Bjørling 已提交
1440
		goto free_tags;
1441

M
Matthew Wilcox 已提交
1442
	return result;
M
Matias Bjørling 已提交
1443 1444 1445 1446 1447 1448

 free_tags:
	nvme_free_admin_tags(dev);
 free_nvmeq:
	nvme_free_queues(dev, 0);
	return result;
M
Matthew Wilcox 已提交
1449 1450
}

V
Vishal Verma 已提交
1451
struct nvme_iod *nvme_map_user_pages(struct nvme_dev *dev, int write,
1452
				unsigned long addr, unsigned length)
M
Matthew Wilcox 已提交
1453
{
1454
	int i, err, count, nents, offset;
1455 1456
	struct scatterlist *sg;
	struct page **pages;
1457
	struct nvme_iod *iod;
1458 1459

	if (addr & 3)
1460
		return ERR_PTR(-EINVAL);
1461
	if (!length || length > INT_MAX - PAGE_SIZE)
1462
		return ERR_PTR(-EINVAL);
1463

1464
	offset = offset_in_page(addr);
1465 1466
	count = DIV_ROUND_UP(offset + length, PAGE_SIZE);
	pages = kcalloc(count, sizeof(*pages), GFP_KERNEL);
1467 1468
	if (!pages)
		return ERR_PTR(-ENOMEM);
1469 1470 1471 1472 1473 1474 1475

	err = get_user_pages_fast(addr, count, 1, pages);
	if (err < count) {
		count = err;
		err = -EFAULT;
		goto put_pages;
	}
1476

1477
	err = -ENOMEM;
1478
	iod = nvme_alloc_iod(count, length, dev, GFP_KERNEL);
1479 1480 1481
	if (!iod)
		goto put_pages;

1482
	sg = iod->sg;
1483
	sg_init_table(sg, count);
1484 1485
	for (i = 0; i < count; i++) {
		sg_set_page(&sg[i], pages[i],
1486 1487
			    min_t(unsigned, length, PAGE_SIZE - offset),
			    offset);
1488 1489
		length -= (PAGE_SIZE - offset);
		offset = 0;
1490
	}
1491
	sg_mark_end(&sg[i - 1]);
1492
	iod->nents = count;
1493 1494 1495

	nents = dma_map_sg(&dev->pci_dev->dev, sg, count,
				write ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
1496
	if (!nents)
1497
		goto free_iod;
M
Matthew Wilcox 已提交
1498

1499
	kfree(pages);
1500
	return iod;
M
Matthew Wilcox 已提交
1501

1502 1503
 free_iod:
	kfree(iod);
1504 1505 1506 1507
 put_pages:
	for (i = 0; i < count; i++)
		put_page(pages[i]);
	kfree(pages);
1508
	return ERR_PTR(err);
1509
}
M
Matthew Wilcox 已提交
1510

V
Vishal Verma 已提交
1511
void nvme_unmap_user_pages(struct nvme_dev *dev, int write,
1512
			struct nvme_iod *iod)
1513
{
1514
	int i;
M
Matthew Wilcox 已提交
1515

1516 1517
	dma_unmap_sg(&dev->pci_dev->dev, iod->sg, iod->nents,
				write ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
1518

1519 1520
	for (i = 0; i < iod->nents; i++)
		put_page(sg_page(&iod->sg[i]));
1521
}
M
Matthew Wilcox 已提交
1522

M
Matthew Wilcox 已提交
1523 1524 1525 1526 1527
static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
{
	struct nvme_dev *dev = ns->dev;
	struct nvme_user_io io;
	struct nvme_command c;
1528 1529 1530 1531 1532
	unsigned length, meta_len;
	int status, i;
	struct nvme_iod *iod, *meta_iod = NULL;
	dma_addr_t meta_dma_addr;
	void *meta, *uninitialized_var(meta_mem);
M
Matthew Wilcox 已提交
1533 1534 1535

	if (copy_from_user(&io, uio, sizeof(io)))
		return -EFAULT;
1536
	length = (io.nblocks + 1) << ns->lba_shift;
1537 1538 1539 1540
	meta_len = (io.nblocks + 1) * ns->ms;

	if (meta_len && ((io.metadata & 3) || !io.metadata))
		return -EINVAL;
1541 1542 1543 1544

	switch (io.opcode) {
	case nvme_cmd_write:
	case nvme_cmd_read:
M
Matthew Wilcox 已提交
1545
	case nvme_cmd_compare:
1546
		iod = nvme_map_user_pages(dev, io.opcode & 1, io.addr, length);
M
Matthew Wilcox 已提交
1547
		break;
1548
	default:
M
Matthew Wilcox 已提交
1549
		return -EINVAL;
1550 1551
	}

1552 1553
	if (IS_ERR(iod))
		return PTR_ERR(iod);
M
Matthew Wilcox 已提交
1554 1555 1556 1557

	memset(&c, 0, sizeof(c));
	c.rw.opcode = io.opcode;
	c.rw.flags = io.flags;
1558
	c.rw.nsid = cpu_to_le32(ns->ns_id);
M
Matthew Wilcox 已提交
1559
	c.rw.slba = cpu_to_le64(io.slba);
1560
	c.rw.length = cpu_to_le16(io.nblocks);
M
Matthew Wilcox 已提交
1561
	c.rw.control = cpu_to_le16(io.control);
1562 1563 1564 1565
	c.rw.dsmgmt = cpu_to_le32(io.dsmgmt);
	c.rw.reftag = cpu_to_le32(io.reftag);
	c.rw.apptag = cpu_to_le16(io.apptag);
	c.rw.appmask = cpu_to_le16(io.appmask);
1566 1567

	if (meta_len) {
K
Keith Busch 已提交
1568 1569
		meta_iod = nvme_map_user_pages(dev, io.opcode & 1, io.metadata,
								meta_len);
1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598
		if (IS_ERR(meta_iod)) {
			status = PTR_ERR(meta_iod);
			meta_iod = NULL;
			goto unmap;
		}

		meta_mem = dma_alloc_coherent(&dev->pci_dev->dev, meta_len,
						&meta_dma_addr, GFP_KERNEL);
		if (!meta_mem) {
			status = -ENOMEM;
			goto unmap;
		}

		if (io.opcode & 1) {
			int meta_offset = 0;

			for (i = 0; i < meta_iod->nents; i++) {
				meta = kmap_atomic(sg_page(&meta_iod->sg[i])) +
						meta_iod->sg[i].offset;
				memcpy(meta_mem + meta_offset, meta,
						meta_iod->sg[i].length);
				kunmap_atomic(meta);
				meta_offset += meta_iod->sg[i].length;
			}
		}

		c.rw.metadata = cpu_to_le64(meta_dma_addr);
	}

1599 1600 1601
	length = nvme_setup_prps(dev, iod, length, GFP_KERNEL);
	c.rw.prp1 = cpu_to_le64(sg_dma_address(iod->sg));
	c.rw.prp2 = cpu_to_le64(iod->first_dma);
M
Matthew Wilcox 已提交
1602

1603 1604 1605
	if (length != (io.nblocks + 1) << ns->lba_shift)
		status = -ENOMEM;
	else
M
Matias Bjørling 已提交
1606
		status = nvme_submit_io_cmd(dev, ns, &c, NULL);
M
Matthew Wilcox 已提交
1607

1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626
	if (meta_len) {
		if (status == NVME_SC_SUCCESS && !(io.opcode & 1)) {
			int meta_offset = 0;

			for (i = 0; i < meta_iod->nents; i++) {
				meta = kmap_atomic(sg_page(&meta_iod->sg[i])) +
						meta_iod->sg[i].offset;
				memcpy(meta, meta_mem + meta_offset,
						meta_iod->sg[i].length);
				kunmap_atomic(meta);
				meta_offset += meta_iod->sg[i].length;
			}
		}

		dma_free_coherent(&dev->pci_dev->dev, meta_len, meta_mem,
								meta_dma_addr);
	}

 unmap:
1627
	nvme_unmap_user_pages(dev, io.opcode & 1, iod);
1628
	nvme_free_iod(dev, iod);
1629 1630 1631 1632 1633 1634

	if (meta_iod) {
		nvme_unmap_user_pages(dev, io.opcode & 1, meta_iod);
		nvme_free_iod(dev, meta_iod);
	}

M
Matthew Wilcox 已提交
1635 1636 1637
	return status;
}

M
Matias Bjørling 已提交
1638 1639
static int nvme_user_cmd(struct nvme_dev *dev, struct nvme_ns *ns,
			struct nvme_passthru_cmd __user *ucmd)
1640
{
1641
	struct nvme_passthru_cmd cmd;
1642
	struct nvme_command c;
1643
	int status, length;
1644
	struct nvme_iod *uninitialized_var(iod);
1645
	unsigned timeout;
1646

M
Matthew Wilcox 已提交
1647 1648 1649
	if (!capable(CAP_SYS_ADMIN))
		return -EACCES;
	if (copy_from_user(&cmd, ucmd, sizeof(cmd)))
1650 1651 1652
		return -EFAULT;

	memset(&c, 0, sizeof(c));
M
Matthew Wilcox 已提交
1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666
	c.common.opcode = cmd.opcode;
	c.common.flags = cmd.flags;
	c.common.nsid = cpu_to_le32(cmd.nsid);
	c.common.cdw2[0] = cpu_to_le32(cmd.cdw2);
	c.common.cdw2[1] = cpu_to_le32(cmd.cdw3);
	c.common.cdw10[0] = cpu_to_le32(cmd.cdw10);
	c.common.cdw10[1] = cpu_to_le32(cmd.cdw11);
	c.common.cdw10[2] = cpu_to_le32(cmd.cdw12);
	c.common.cdw10[3] = cpu_to_le32(cmd.cdw13);
	c.common.cdw10[4] = cpu_to_le32(cmd.cdw14);
	c.common.cdw10[5] = cpu_to_le32(cmd.cdw15);

	length = cmd.data_len;
	if (cmd.data_len) {
1667 1668
		iod = nvme_map_user_pages(dev, cmd.opcode & 1, cmd.addr,
								length);
1669 1670
		if (IS_ERR(iod))
			return PTR_ERR(iod);
1671 1672 1673
		length = nvme_setup_prps(dev, iod, length, GFP_KERNEL);
		c.common.prp1 = cpu_to_le64(sg_dma_address(iod->sg));
		c.common.prp2 = cpu_to_le64(iod->first_dma);
M
Matthew Wilcox 已提交
1674 1675
	}

1676 1677
	timeout = cmd.timeout_ms ? msecs_to_jiffies(cmd.timeout_ms) :
								ADMIN_TIMEOUT;
M
Matias Bjørling 已提交
1678

M
Matthew Wilcox 已提交
1679
	if (length != cmd.data_len)
1680
		status = -ENOMEM;
M
Matias Bjørling 已提交
1681 1682 1683 1684 1685 1686 1687 1688 1689 1690
	else if (ns) {
		struct request *req;

		req = blk_mq_alloc_request(ns->queue, WRITE,
						(GFP_KERNEL|__GFP_WAIT), false);
		if (!req)
			status = -ENOMEM;
		else {
			status = nvme_submit_sync_cmd(req, &c, &cmd.result,
								timeout);
1691
			blk_mq_free_request(req);
M
Matias Bjørling 已提交
1692 1693 1694
		}
	} else
		status = __nvme_submit_admin_cmd(dev, &c, &cmd.result, timeout);
1695

M
Matthew Wilcox 已提交
1696
	if (cmd.data_len) {
1697
		nvme_unmap_user_pages(dev, cmd.opcode & 1, iod);
1698
		nvme_free_iod(dev, iod);
M
Matthew Wilcox 已提交
1699
	}
1700

1701
	if ((status >= 0) && copy_to_user(&ucmd->result, &cmd.result,
1702 1703 1704
							sizeof(cmd.result)))
		status = -EFAULT;

1705 1706 1707
	return status;
}

M
Matthew Wilcox 已提交
1708 1709 1710 1711 1712 1713
static int nvme_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd,
							unsigned long arg)
{
	struct nvme_ns *ns = bdev->bd_disk->private_data;

	switch (cmd) {
M
Matthew Wilcox 已提交
1714
	case NVME_IOCTL_ID:
1715
		force_successful_syscall_return();
M
Matthew Wilcox 已提交
1716 1717
		return ns->ns_id;
	case NVME_IOCTL_ADMIN_CMD:
M
Matias Bjørling 已提交
1718
		return nvme_user_cmd(ns->dev, NULL, (void __user *)arg);
1719
	case NVME_IOCTL_IO_CMD:
M
Matias Bjørling 已提交
1720
		return nvme_user_cmd(ns->dev, ns, (void __user *)arg);
M
Matthew Wilcox 已提交
1721 1722
	case NVME_IOCTL_SUBMIT_IO:
		return nvme_submit_io(ns, (void __user *)arg);
V
Vishal Verma 已提交
1723 1724 1725 1726
	case SG_GET_VERSION_NUM:
		return nvme_sg_get_version_num((void __user *)arg);
	case SG_IO:
		return nvme_sg_io(ns, (void __user *)arg);
M
Matthew Wilcox 已提交
1727 1728 1729 1730 1731
	default:
		return -ENOTTY;
	}
}

K
Keith Busch 已提交
1732 1733 1734 1735 1736 1737
#ifdef CONFIG_COMPAT
static int nvme_compat_ioctl(struct block_device *bdev, fmode_t mode,
					unsigned int cmd, unsigned long arg)
{
	switch (cmd) {
	case SG_IO:
1738
		return -ENOIOCTLCMD;
K
Keith Busch 已提交
1739 1740 1741 1742 1743 1744 1745
	}
	return nvme_ioctl(bdev, mode, cmd, arg);
}
#else
#define nvme_compat_ioctl	NULL
#endif

1746 1747
static int nvme_open(struct block_device *bdev, fmode_t mode)
{
1748 1749
	int ret = 0;
	struct nvme_ns *ns;
1750

1751 1752 1753 1754 1755 1756 1757 1758 1759
	spin_lock(&dev_list_lock);
	ns = bdev->bd_disk->private_data;
	if (!ns)
		ret = -ENXIO;
	else if (!kref_get_unless_zero(&ns->dev->kref))
		ret = -ENXIO;
	spin_unlock(&dev_list_lock);

	return ret;
1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771
}

static void nvme_free_dev(struct kref *kref);

static void nvme_release(struct gendisk *disk, fmode_t mode)
{
	struct nvme_ns *ns = disk->private_data;
	struct nvme_dev *dev = ns->dev;

	kref_put(&dev->kref, nvme_free_dev);
}

K
Keith Busch 已提交
1772 1773 1774 1775 1776 1777 1778 1779 1780
static int nvme_getgeo(struct block_device *bd, struct hd_geometry *geo)
{
	/* some standard values */
	geo->heads = 1 << 6;
	geo->sectors = 1 << 5;
	geo->cylinders = get_capacity(bd->bd_disk) >> 11;
	return 0;
}

K
Keith Busch 已提交
1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809
static int nvme_revalidate_disk(struct gendisk *disk)
{
	struct nvme_ns *ns = disk->private_data;
	struct nvme_dev *dev = ns->dev;
	struct nvme_id_ns *id;
	dma_addr_t dma_addr;
	int lbaf;

	id = dma_alloc_coherent(&dev->pci_dev->dev, 4096, &dma_addr,
								GFP_KERNEL);
	if (!id) {
		dev_warn(&dev->pci_dev->dev, "%s: Memory alocation failure\n",
								__func__);
		return 0;
	}

	if (nvme_identify(dev, ns->ns_id, 0, dma_addr))
		goto free;

	lbaf = id->flbas & 0xf;
	ns->lba_shift = id->lbaf[lbaf].ds;

	blk_queue_logical_block_size(ns->queue, 1 << ns->lba_shift);
	set_capacity(disk, le64_to_cpup(&id->nsze) << (ns->lba_shift - 9));
 free:
	dma_free_coherent(&dev->pci_dev->dev, 4096, id, dma_addr);
	return 0;
}

M
Matthew Wilcox 已提交
1810 1811 1812
static const struct block_device_operations nvme_fops = {
	.owner		= THIS_MODULE,
	.ioctl		= nvme_ioctl,
K
Keith Busch 已提交
1813
	.compat_ioctl	= nvme_compat_ioctl,
1814 1815
	.open		= nvme_open,
	.release	= nvme_release,
K
Keith Busch 已提交
1816
	.getgeo		= nvme_getgeo,
K
Keith Busch 已提交
1817
	.revalidate_disk= nvme_revalidate_disk,
M
Matthew Wilcox 已提交
1818 1819
};

1820 1821
static int nvme_kthread(void *data)
{
1822
	struct nvme_dev *dev, *next;
1823 1824

	while (!kthread_should_stop()) {
1825
		set_current_state(TASK_INTERRUPTIBLE);
1826
		spin_lock(&dev_list_lock);
1827
		list_for_each_entry_safe(dev, next, &dev_list, node) {
1828
			int i;
1829 1830 1831 1832 1833 1834
			if (readl(&dev->bar->csts) & NVME_CSTS_CFS &&
							dev->initialized) {
				if (work_busy(&dev->reset_work))
					continue;
				list_del_init(&dev->node);
				dev_warn(&dev->pci_dev->dev,
M
Matias Bjørling 已提交
1835 1836
					"Failed status: %x, reset controller\n",
					readl(&dev->bar->csts));
T
Tejun Heo 已提交
1837
				dev->reset_workfn = nvme_reset_failed_dev;
1838 1839 1840
				queue_work(nvme_workq, &dev->reset_work);
				continue;
			}
1841
			for (i = 0; i < dev->queue_count; i++) {
M
Matias Bjørling 已提交
1842
				struct nvme_queue *nvmeq = dev->queues[i];
1843 1844
				if (!nvmeq)
					continue;
1845
				spin_lock_irq(&nvmeq->q_lock);
1846
				nvme_process_cq(nvmeq);
K
Keith Busch 已提交
1847 1848

				while ((i == 0) && (dev->event_limit > 0)) {
M
Matias Bjørling 已提交
1849
					if (nvme_submit_async_admin_req(dev))
K
Keith Busch 已提交
1850 1851 1852
						break;
					dev->event_limit--;
				}
1853 1854 1855 1856
				spin_unlock_irq(&nvmeq->q_lock);
			}
		}
		spin_unlock(&dev_list_lock);
1857
		schedule_timeout(round_jiffies_relative(HZ));
1858 1859 1860 1861
	}
	return 0;
}

1862 1863 1864 1865 1866 1867 1868 1869 1870 1871
static void nvme_config_discard(struct nvme_ns *ns)
{
	u32 logical_block_size = queue_logical_block_size(ns->queue);
	ns->queue->limits.discard_zeroes_data = 0;
	ns->queue->limits.discard_alignment = logical_block_size;
	ns->queue->limits.discard_granularity = logical_block_size;
	ns->queue->limits.max_discard_sectors = 0xffffffff;
	queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, ns->queue);
}

1872
static struct nvme_ns *nvme_alloc_ns(struct nvme_dev *dev, unsigned nsid,
M
Matthew Wilcox 已提交
1873 1874 1875 1876
			struct nvme_id_ns *id, struct nvme_lba_range_type *rt)
{
	struct nvme_ns *ns;
	struct gendisk *disk;
M
Matias Bjørling 已提交
1877
	int node = dev_to_node(&dev->pci_dev->dev);
M
Matthew Wilcox 已提交
1878 1879 1880 1881 1882
	int lbaf;

	if (rt->attributes & NVME_LBART_ATTRIB_HIDE)
		return NULL;

M
Matias Bjørling 已提交
1883
	ns = kzalloc_node(sizeof(*ns), GFP_KERNEL, node);
M
Matthew Wilcox 已提交
1884 1885
	if (!ns)
		return NULL;
M
Matias Bjørling 已提交
1886
	ns->queue = blk_mq_init_queue(&dev->tagset);
1887
	if (IS_ERR(ns->queue))
M
Matthew Wilcox 已提交
1888
		goto out_free_ns;
M
Matthew Wilcox 已提交
1889 1890
	queue_flag_set_unlocked(QUEUE_FLAG_NOMERGES, ns->queue);
	queue_flag_set_unlocked(QUEUE_FLAG_NONROT, ns->queue);
M
Matias Bjørling 已提交
1891 1892
	queue_flag_set_unlocked(QUEUE_FLAG_SG_GAPS, ns->queue);
	queue_flag_clear_unlocked(QUEUE_FLAG_IO_STAT, ns->queue);
M
Matthew Wilcox 已提交
1893 1894 1895
	ns->dev = dev;
	ns->queue->queuedata = ns;

M
Matias Bjørling 已提交
1896
	disk = alloc_disk_node(0, node);
M
Matthew Wilcox 已提交
1897 1898
	if (!disk)
		goto out_free_queue;
M
Matias Bjørling 已提交
1899

1900
	ns->ns_id = nsid;
M
Matthew Wilcox 已提交
1901 1902 1903
	ns->disk = disk;
	lbaf = id->flbas & 0xf;
	ns->lba_shift = id->lbaf[lbaf].ds;
1904
	ns->ms = le16_to_cpu(id->lbaf[lbaf].ms);
1905
	blk_queue_logical_block_size(ns->queue, 1 << ns->lba_shift);
K
Keith Busch 已提交
1906 1907
	if (dev->max_hw_sectors)
		blk_queue_max_hw_sectors(ns->queue, dev->max_hw_sectors);
M
Matias Bjørling 已提交
1908 1909
	if (dev->stripe_size)
		blk_queue_chunk_sectors(ns->queue, dev->stripe_size >> 9);
1910 1911
	if (dev->vwc & NVME_CTRL_VWC_PRESENT)
		blk_queue_flush(ns->queue, REQ_FLUSH | REQ_FUA);
M
Matthew Wilcox 已提交
1912 1913

	disk->major = nvme_major;
1914
	disk->first_minor = 0;
M
Matthew Wilcox 已提交
1915 1916 1917
	disk->fops = &nvme_fops;
	disk->private_data = ns;
	disk->queue = ns->queue;
1918
	disk->driverfs_dev = &dev->pci_dev->dev;
1919
	disk->flags = GENHD_FL_EXT_DEVT;
1920
	sprintf(disk->disk_name, "nvme%dn%d", dev->instance, nsid);
M
Matthew Wilcox 已提交
1921 1922
	set_capacity(disk, le64_to_cpup(&id->nsze) << (ns->lba_shift - 9));

1923 1924 1925
	if (dev->oncs & NVME_CTRL_ONCS_DSM)
		nvme_config_discard(ns);

M
Matthew Wilcox 已提交
1926 1927 1928 1929 1930 1931 1932 1933 1934
	return ns;

 out_free_queue:
	blk_cleanup_queue(ns->queue);
 out_free_ns:
	kfree(ns);
	return NULL;
}

K
Keith Busch 已提交
1935 1936
static void nvme_create_io_queues(struct nvme_dev *dev)
{
M
Matias Bjørling 已提交
1937
	unsigned i;
K
Keith Busch 已提交
1938

M
Matias Bjørling 已提交
1939
	for (i = dev->queue_count; i <= dev->max_qid; i++)
K
Keith Busch 已提交
1940 1941 1942
		if (!nvme_alloc_queue(dev, i, dev->q_depth, i - 1))
			break;

M
Matias Bjørling 已提交
1943 1944
	for (i = dev->online_queues; i <= dev->queue_count - 1; i++)
		if (nvme_create_queue(dev->queues[i], i))
K
Keith Busch 已提交
1945 1946 1947
			break;
}

1948
static int set_queue_count(struct nvme_dev *dev, int count)
M
Matthew Wilcox 已提交
1949 1950 1951
{
	int status;
	u32 result;
1952
	u32 q_count = (count - 1) | ((count - 1) << 16);
M
Matthew Wilcox 已提交
1953

1954
	status = nvme_set_features(dev, NVME_FEAT_NUM_QUEUES, q_count, 0,
1955
								&result);
M
Matthew Wilcox 已提交
1956 1957 1958 1959 1960
	if (status < 0)
		return status;
	if (status > 0) {
		dev_err(&dev->pci_dev->dev, "Could not set queue count (%d)\n",
									status);
1961
		return 0;
M
Matthew Wilcox 已提交
1962
	}
M
Matthew Wilcox 已提交
1963 1964 1965
	return min(result & 0xffff, result >> 16) + 1;
}

K
Keith Busch 已提交
1966 1967
static size_t db_bar_size(struct nvme_dev *dev, unsigned nr_io_queues)
{
1968
	return 4096 + ((nr_io_queues + 1) * 8 * dev->db_stride);
K
Keith Busch 已提交
1969 1970
}

1971
static int nvme_setup_io_queues(struct nvme_dev *dev)
M
Matthew Wilcox 已提交
1972
{
M
Matias Bjørling 已提交
1973
	struct nvme_queue *adminq = dev->queues[0];
R
Ramachandra Rao Gajula 已提交
1974
	struct pci_dev *pdev = dev->pci_dev;
K
Keith Busch 已提交
1975
	int result, i, vecs, nr_io_queues, size;
M
Matthew Wilcox 已提交
1976

K
Keith Busch 已提交
1977
	nr_io_queues = num_possible_cpus();
1978
	result = set_queue_count(dev, nr_io_queues);
1979
	if (result <= 0)
M
Matthew Wilcox 已提交
1980
		return result;
1981 1982
	if (result < nr_io_queues)
		nr_io_queues = result;
M
Matthew Wilcox 已提交
1983

K
Keith Busch 已提交
1984 1985
	size = db_bar_size(dev, nr_io_queues);
	if (size > 8192) {
1986
		iounmap(dev->bar);
K
Keith Busch 已提交
1987 1988 1989 1990 1991 1992 1993 1994
		do {
			dev->bar = ioremap(pci_resource_start(pdev, 0), size);
			if (dev->bar)
				break;
			if (!--nr_io_queues)
				return -ENOMEM;
			size = db_bar_size(dev, nr_io_queues);
		} while (1);
1995
		dev->dbs = ((void __iomem *)dev->bar) + 4096;
1996
		adminq->q_db = dev->dbs;
1997 1998
	}

K
Keith Busch 已提交
1999
	/* Deregister the admin queue's interrupt */
2000
	free_irq(dev->entry[0].vector, adminq);
K
Keith Busch 已提交
2001

2002
	for (i = 0; i < nr_io_queues; i++)
M
Matthew Wilcox 已提交
2003
		dev->entry[i].entry = i;
2004 2005 2006 2007 2008 2009 2010 2011
	vecs = pci_enable_msix_range(pdev, dev->entry, 1, nr_io_queues);
	if (vecs < 0) {
		vecs = pci_enable_msi_range(pdev, 1, min(nr_io_queues, 32));
		if (vecs < 0) {
			vecs = 1;
		} else {
			for (i = 0; i < vecs; i++)
				dev->entry[i].vector = i + pdev->irq;
R
Ramachandra Rao Gajula 已提交
2012 2013 2014
		}
	}

2015 2016 2017 2018 2019 2020 2021
	/*
	 * Should investigate if there's a performance win from allocating
	 * more queues than interrupt vectors; it might allow the submission
	 * path to scale better, even if the receive path is limited by the
	 * number of interrupts.
	 */
	nr_io_queues = vecs;
K
Keith Busch 已提交
2022
	dev->max_qid = nr_io_queues;
2023

2024
	result = queue_request_irq(dev, adminq, adminq->irqname);
M
Matias Bjørling 已提交
2025
	if (result)
2026
		goto free_queues;
M
Matthew Wilcox 已提交
2027

2028
	/* Free previously allocated queues that are no longer usable */
K
Keith Busch 已提交
2029
	nvme_free_queues(dev, nr_io_queues + 1);
M
Matias Bjørling 已提交
2030
	nvme_create_io_queues(dev);
M
Matthew Wilcox 已提交
2031

2032
	return 0;
M
Matthew Wilcox 已提交
2033

2034
 free_queues:
2035
	nvme_free_queues(dev, 1);
2036
	return result;
M
Matthew Wilcox 已提交
2037 2038
}

2039 2040 2041 2042 2043 2044
/*
 * Return: error value if an error occurred setting up the queues or calling
 * Identify Device.  0 if these succeeded, even if adding some of the
 * namespaces failed.  At the moment, these failures are silent.  TBD which
 * failures should be reported.
 */
2045
static int nvme_dev_add(struct nvme_dev *dev)
M
Matthew Wilcox 已提交
2046
{
2047
	struct pci_dev *pdev = dev->pci_dev;
2048 2049
	int res;
	unsigned nn, i;
2050
	struct nvme_ns *ns;
2051
	struct nvme_id_ctrl *ctrl;
2052 2053
	struct nvme_id_ns *id_ns;
	void *mem;
M
Matthew Wilcox 已提交
2054
	dma_addr_t dma_addr;
2055
	int shift = NVME_CAP_MPSMIN(readq(&dev->bar->cap)) + 12;
M
Matthew Wilcox 已提交
2056

2057
	mem = dma_alloc_coherent(&pdev->dev, 8192, &dma_addr, GFP_KERNEL);
2058 2059
	if (!mem)
		return -ENOMEM;
M
Matthew Wilcox 已提交
2060

2061
	res = nvme_identify(dev, 0, 1, dma_addr);
M
Matthew Wilcox 已提交
2062
	if (res) {
M
Matthew Wilcox 已提交
2063
		dev_err(&pdev->dev, "Identify Controller failed (%d)\n", res);
M
Matthew Wilcox 已提交
2064
		res = -EIO;
2065
		goto out;
M
Matthew Wilcox 已提交
2066 2067
	}

2068
	ctrl = mem;
2069
	nn = le32_to_cpup(&ctrl->nn);
2070
	dev->oncs = le16_to_cpup(&ctrl->oncs);
K
Keith Busch 已提交
2071
	dev->abort_limit = ctrl->acl + 1;
2072
	dev->vwc = ctrl->vwc;
K
Keith Busch 已提交
2073
	dev->event_limit = min(ctrl->aerl + 1, 8);
2074 2075 2076
	memcpy(dev->serial, ctrl->sn, sizeof(ctrl->sn));
	memcpy(dev->model, ctrl->mn, sizeof(ctrl->mn));
	memcpy(dev->firmware_rev, ctrl->fr, sizeof(ctrl->fr));
2077
	if (ctrl->mdts)
K
Keith Busch 已提交
2078
		dev->max_hw_sectors = 1 << (ctrl->mdts + shift - 9);
2079
	if ((pdev->vendor == PCI_VENDOR_ID_INTEL) &&
M
Matias Bjørling 已提交
2080 2081 2082
			(pdev->device == 0x0953) && ctrl->vs[3]) {
		unsigned int max_hw_sectors;

2083
		dev->stripe_size = 1 << (ctrl->vs[3] + shift);
M
Matias Bjørling 已提交
2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103
		max_hw_sectors = dev->stripe_size >> (shift - 9);
		if (dev->max_hw_sectors) {
			dev->max_hw_sectors = min(max_hw_sectors,
							dev->max_hw_sectors);
		} else
			dev->max_hw_sectors = max_hw_sectors;
	}

	dev->tagset.ops = &nvme_mq_ops;
	dev->tagset.nr_hw_queues = dev->online_queues - 1;
	dev->tagset.timeout = NVME_IO_TIMEOUT;
	dev->tagset.numa_node = dev_to_node(&dev->pci_dev->dev);
	dev->tagset.queue_depth =
				min_t(int, dev->q_depth, BLK_MQ_MAX_DEPTH) - 1;
	dev->tagset.cmd_size = sizeof(struct nvme_cmd_info);
	dev->tagset.flags = BLK_MQ_F_SHOULD_MERGE;
	dev->tagset.driver_data = dev;

	if (blk_mq_alloc_tag_set(&dev->tagset))
		goto out;
M
Matthew Wilcox 已提交
2104

2105
	id_ns = mem;
M
Matthew Wilcox 已提交
2106
	for (i = 1; i <= nn; i++) {
2107
		res = nvme_identify(dev, i, 0, dma_addr);
M
Matthew Wilcox 已提交
2108 2109 2110
		if (res)
			continue;

2111
		if (id_ns->ncap == 0)
M
Matthew Wilcox 已提交
2112 2113
			continue;

2114
		res = nvme_get_features(dev, NVME_FEAT_LBA_RANGE, i,
2115
							dma_addr + 4096, NULL);
M
Matthew Wilcox 已提交
2116
		if (res)
2117
			memset(mem + 4096, 0, 4096);
M
Matthew Wilcox 已提交
2118

2119
		ns = nvme_alloc_ns(dev, i, mem, mem + 4096);
M
Matthew Wilcox 已提交
2120 2121 2122 2123 2124
		if (ns)
			list_add_tail(&ns->list, &dev->namespaces);
	}
	list_for_each_entry(ns, &dev->namespaces, list)
		add_disk(ns->disk);
2125
	res = 0;
M
Matthew Wilcox 已提交
2126

2127
 out:
2128
	dma_free_coherent(&dev->pci_dev->dev, 8192, mem, dma_addr);
M
Matthew Wilcox 已提交
2129 2130 2131
	return res;
}

2132 2133
static int nvme_dev_map(struct nvme_dev *dev)
{
K
Keith Busch 已提交
2134
	u64 cap;
2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146
	int bars, result = -ENOMEM;
	struct pci_dev *pdev = dev->pci_dev;

	if (pci_enable_device_mem(pdev))
		return result;

	dev->entry[0].vector = pdev->irq;
	pci_set_master(pdev);
	bars = pci_select_bars(pdev, IORESOURCE_MEM);
	if (pci_request_selected_regions(pdev, bars, "nvme"))
		goto disable_pci;

2147 2148 2149
	if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)) &&
	    dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)))
		goto disable;
2150 2151 2152 2153

	dev->bar = ioremap(pci_resource_start(pdev, 0), 8192);
	if (!dev->bar)
		goto disable;
K
Keith Busch 已提交
2154 2155 2156 2157
	if (readl(&dev->bar->csts) == -1) {
		result = -ENODEV;
		goto unmap;
	}
K
Keith Busch 已提交
2158 2159 2160
	cap = readq(&dev->bar->cap);
	dev->q_depth = min_t(int, NVME_CAP_MQES(cap) + 1, NVME_Q_DEPTH);
	dev->db_stride = 1 << NVME_CAP_STRIDE(cap);
2161 2162 2163 2164
	dev->dbs = ((void __iomem *)dev->bar) + 4096;

	return 0;

K
Keith Busch 已提交
2165 2166 2167
 unmap:
	iounmap(dev->bar);
	dev->bar = NULL;
2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184
 disable:
	pci_release_regions(pdev);
 disable_pci:
	pci_disable_device(pdev);
	return result;
}

static void nvme_dev_unmap(struct nvme_dev *dev)
{
	if (dev->pci_dev->msi_enabled)
		pci_disable_msi(dev->pci_dev);
	else if (dev->pci_dev->msix_enabled)
		pci_disable_msix(dev->pci_dev);

	if (dev->bar) {
		iounmap(dev->bar);
		dev->bar = NULL;
K
Keith Busch 已提交
2185
		pci_release_regions(dev->pci_dev);
2186 2187 2188 2189 2190 2191
	}

	if (pci_is_enabled(dev->pci_dev))
		pci_disable_device(dev->pci_dev);
}

K
Keith Busch 已提交
2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252
struct nvme_delq_ctx {
	struct task_struct *waiter;
	struct kthread_worker *worker;
	atomic_t refcount;
};

static void nvme_wait_dq(struct nvme_delq_ctx *dq, struct nvme_dev *dev)
{
	dq->waiter = current;
	mb();

	for (;;) {
		set_current_state(TASK_KILLABLE);
		if (!atomic_read(&dq->refcount))
			break;
		if (!schedule_timeout(ADMIN_TIMEOUT) ||
					fatal_signal_pending(current)) {
			set_current_state(TASK_RUNNING);

			nvme_disable_ctrl(dev, readq(&dev->bar->cap));
			nvme_disable_queue(dev, 0);

			send_sig(SIGKILL, dq->worker->task, 1);
			flush_kthread_worker(dq->worker);
			return;
		}
	}
	set_current_state(TASK_RUNNING);
}

static void nvme_put_dq(struct nvme_delq_ctx *dq)
{
	atomic_dec(&dq->refcount);
	if (dq->waiter)
		wake_up_process(dq->waiter);
}

static struct nvme_delq_ctx *nvme_get_dq(struct nvme_delq_ctx *dq)
{
	atomic_inc(&dq->refcount);
	return dq;
}

static void nvme_del_queue_end(struct nvme_queue *nvmeq)
{
	struct nvme_delq_ctx *dq = nvmeq->cmdinfo.ctx;

	nvme_clear_queue(nvmeq);
	nvme_put_dq(dq);
}

static int adapter_async_del_queue(struct nvme_queue *nvmeq, u8 opcode,
						kthread_work_func_t fn)
{
	struct nvme_command c;

	memset(&c, 0, sizeof(c));
	c.delete_queue.opcode = opcode;
	c.delete_queue.qid = cpu_to_le16(nvmeq->qid);

	init_kthread_work(&nvmeq->cmdinfo.work, fn);
M
Matias Bjørling 已提交
2253 2254
	return nvme_submit_admin_async_cmd(nvmeq->dev, &c, &nvmeq->cmdinfo,
								ADMIN_TIMEOUT);
K
Keith Busch 已提交
2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316
}

static void nvme_del_cq_work_handler(struct kthread_work *work)
{
	struct nvme_queue *nvmeq = container_of(work, struct nvme_queue,
							cmdinfo.work);
	nvme_del_queue_end(nvmeq);
}

static int nvme_delete_cq(struct nvme_queue *nvmeq)
{
	return adapter_async_del_queue(nvmeq, nvme_admin_delete_cq,
						nvme_del_cq_work_handler);
}

static void nvme_del_sq_work_handler(struct kthread_work *work)
{
	struct nvme_queue *nvmeq = container_of(work, struct nvme_queue,
							cmdinfo.work);
	int status = nvmeq->cmdinfo.status;

	if (!status)
		status = nvme_delete_cq(nvmeq);
	if (status)
		nvme_del_queue_end(nvmeq);
}

static int nvme_delete_sq(struct nvme_queue *nvmeq)
{
	return adapter_async_del_queue(nvmeq, nvme_admin_delete_sq,
						nvme_del_sq_work_handler);
}

static void nvme_del_queue_start(struct kthread_work *work)
{
	struct nvme_queue *nvmeq = container_of(work, struct nvme_queue,
							cmdinfo.work);
	allow_signal(SIGKILL);
	if (nvme_delete_sq(nvmeq))
		nvme_del_queue_end(nvmeq);
}

static void nvme_disable_io_queues(struct nvme_dev *dev)
{
	int i;
	DEFINE_KTHREAD_WORKER_ONSTACK(worker);
	struct nvme_delq_ctx dq;
	struct task_struct *kworker_task = kthread_run(kthread_worker_fn,
					&worker, "nvme%d", dev->instance);

	if (IS_ERR(kworker_task)) {
		dev_err(&dev->pci_dev->dev,
			"Failed to create queue del task\n");
		for (i = dev->queue_count - 1; i > 0; i--)
			nvme_disable_queue(dev, i);
		return;
	}

	dq.waiter = NULL;
	atomic_set(&dq.refcount, 0);
	dq.worker = &worker;
	for (i = dev->queue_count - 1; i > 0; i--) {
M
Matias Bjørling 已提交
2317
		struct nvme_queue *nvmeq = dev->queues[i];
K
Keith Busch 已提交
2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329

		if (nvme_suspend_queue(nvmeq))
			continue;
		nvmeq->cmdinfo.ctx = nvme_get_dq(&dq);
		nvmeq->cmdinfo.worker = dq.worker;
		init_kthread_work(&nvmeq->cmdinfo.work, nvme_del_queue_start);
		queue_kthread_work(dq.worker, &nvmeq->cmdinfo.work);
	}
	nvme_wait_dq(&dq, dev);
	kthread_stop(kworker_task);
}

2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349
/*
* Remove the node from the device list and check
* for whether or not we need to stop the nvme_thread.
*/
static void nvme_dev_list_remove(struct nvme_dev *dev)
{
	struct task_struct *tmp = NULL;

	spin_lock(&dev_list_lock);
	list_del_init(&dev->node);
	if (list_empty(&dev_list) && !IS_ERR_OR_NULL(nvme_thread)) {
		tmp = nvme_thread;
		nvme_thread = NULL;
	}
	spin_unlock(&dev_list_lock);

	if (tmp)
		kthread_stop(tmp);
}

2350
static void nvme_dev_shutdown(struct nvme_dev *dev)
M
Matthew Wilcox 已提交
2351
{
2352
	int i;
2353
	u32 csts = -1;
2354

2355
	dev->initialized = 0;
2356
	nvme_dev_list_remove(dev);
2357

2358 2359 2360
	if (dev->bar)
		csts = readl(&dev->bar->csts);
	if (csts & NVME_CSTS_CFS || !(csts & NVME_CSTS_RDY)) {
K
Keith Busch 已提交
2361
		for (i = dev->queue_count - 1; i >= 0; i--) {
M
Matias Bjørling 已提交
2362
			struct nvme_queue *nvmeq = dev->queues[i];
K
Keith Busch 已提交
2363 2364 2365 2366 2367
			nvme_suspend_queue(nvmeq);
			nvme_clear_queue(nvmeq);
		}
	} else {
		nvme_disable_io_queues(dev);
K
Keith Busch 已提交
2368
		nvme_shutdown_ctrl(dev);
K
Keith Busch 已提交
2369 2370
		nvme_disable_queue(dev, 0);
	}
2371 2372 2373
	nvme_dev_unmap(dev);
}

M
Matias Bjørling 已提交
2374 2375 2376 2377 2378 2379
static void nvme_dev_remove_admin(struct nvme_dev *dev)
{
	if (dev->admin_q && !blk_queue_dying(dev->admin_q))
		blk_cleanup_queue(dev->admin_q);
}

2380 2381
static void nvme_dev_remove(struct nvme_dev *dev)
{
2382
	struct nvme_ns *ns;
2383

2384 2385 2386 2387 2388
	list_for_each_entry(ns, &dev->namespaces, list) {
		if (ns->disk->flags & GENHD_FL_UP)
			del_gendisk(ns->disk);
		if (!blk_queue_dying(ns->queue))
			blk_cleanup_queue(ns->queue);
M
Matthew Wilcox 已提交
2389 2390 2391
	}
}

M
Matthew Wilcox 已提交
2392 2393 2394 2395 2396 2397 2398 2399
static int nvme_setup_prp_pools(struct nvme_dev *dev)
{
	struct device *dmadev = &dev->pci_dev->dev;
	dev->prp_page_pool = dma_pool_create("prp list page", dmadev,
						PAGE_SIZE, PAGE_SIZE, 0);
	if (!dev->prp_page_pool)
		return -ENOMEM;

2400 2401 2402 2403 2404 2405 2406
	/* Optimisation for I/Os between 4k and 128k */
	dev->prp_small_pool = dma_pool_create("prp list 256", dmadev,
						256, 256, 0);
	if (!dev->prp_small_pool) {
		dma_pool_destroy(dev->prp_page_pool);
		return -ENOMEM;
	}
M
Matthew Wilcox 已提交
2407 2408 2409 2410 2411 2412
	return 0;
}

static void nvme_release_prp_pools(struct nvme_dev *dev)
{
	dma_pool_destroy(dev->prp_page_pool);
2413
	dma_pool_destroy(dev->prp_small_pool);
M
Matthew Wilcox 已提交
2414 2415
}

2416 2417 2418
static DEFINE_IDA(nvme_instance_ida);

static int nvme_set_instance(struct nvme_dev *dev)
M
Matthew Wilcox 已提交
2419
{
2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435
	int instance, error;

	do {
		if (!ida_pre_get(&nvme_instance_ida, GFP_KERNEL))
			return -ENODEV;

		spin_lock(&dev_list_lock);
		error = ida_get_new(&nvme_instance_ida, &instance);
		spin_unlock(&dev_list_lock);
	} while (error == -EAGAIN);

	if (error)
		return -ENODEV;

	dev->instance = instance;
	return 0;
M
Matthew Wilcox 已提交
2436 2437 2438 2439
}

static void nvme_release_instance(struct nvme_dev *dev)
{
2440 2441 2442
	spin_lock(&dev_list_lock);
	ida_remove(&nvme_instance_ida, dev->instance);
	spin_unlock(&dev_list_lock);
M
Matthew Wilcox 已提交
2443 2444
}

2445 2446 2447 2448 2449 2450
static void nvme_free_namespaces(struct nvme_dev *dev)
{
	struct nvme_ns *ns, *next;

	list_for_each_entry_safe(ns, next, &dev->namespaces, list) {
		list_del(&ns->list);
2451 2452 2453 2454 2455

		spin_lock(&dev_list_lock);
		ns->disk->private_data = NULL;
		spin_unlock(&dev_list_lock);

2456 2457 2458 2459 2460
		put_disk(ns->disk);
		kfree(ns);
	}
}

2461 2462 2463
static void nvme_free_dev(struct kref *kref)
{
	struct nvme_dev *dev = container_of(kref, struct nvme_dev, kref);
2464

K
Keith Busch 已提交
2465
	pci_dev_put(dev->pci_dev);
2466
	nvme_free_namespaces(dev);
M
Matias Bjørling 已提交
2467
	blk_mq_free_tag_set(&dev->tagset);
2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491
	kfree(dev->queues);
	kfree(dev->entry);
	kfree(dev);
}

static int nvme_dev_open(struct inode *inode, struct file *f)
{
	struct nvme_dev *dev = container_of(f->private_data, struct nvme_dev,
								miscdev);
	kref_get(&dev->kref);
	f->private_data = dev;
	return 0;
}

static int nvme_dev_release(struct inode *inode, struct file *f)
{
	struct nvme_dev *dev = f->private_data;
	kref_put(&dev->kref, nvme_free_dev);
	return 0;
}

static long nvme_dev_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
{
	struct nvme_dev *dev = f->private_data;
M
Matias Bjørling 已提交
2492 2493
	struct nvme_ns *ns;

2494 2495
	switch (cmd) {
	case NVME_IOCTL_ADMIN_CMD:
M
Matias Bjørling 已提交
2496
		return nvme_user_cmd(dev, NULL, (void __user *)arg);
2497
	case NVME_IOCTL_IO_CMD:
M
Matias Bjørling 已提交
2498 2499 2500 2501
		if (list_empty(&dev->namespaces))
			return -ENOTTY;
		ns = list_first_entry(&dev->namespaces, struct nvme_ns, list);
		return nvme_user_cmd(dev, ns, (void __user *)arg);
2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514
	default:
		return -ENOTTY;
	}
}

static const struct file_operations nvme_dev_fops = {
	.owner		= THIS_MODULE,
	.open		= nvme_dev_open,
	.release	= nvme_dev_release,
	.unlocked_ioctl	= nvme_dev_ioctl,
	.compat_ioctl	= nvme_dev_ioctl,
};

M
Matias Bjørling 已提交
2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530
static void nvme_set_irq_hints(struct nvme_dev *dev)
{
	struct nvme_queue *nvmeq;
	int i;

	for (i = 0; i < dev->online_queues; i++) {
		nvmeq = dev->queues[i];

		if (!nvmeq->hctx)
			continue;

		irq_set_affinity_hint(dev->entry[nvmeq->cq_vector].vector,
							nvmeq->hctx->cpumask);
	}
}

2531 2532 2533
static int nvme_dev_start(struct nvme_dev *dev)
{
	int result;
2534
	bool start_thread = false;
2535 2536 2537 2538 2539 2540 2541 2542 2543 2544

	result = nvme_dev_map(dev);
	if (result)
		return result;

	result = nvme_configure_admin_queue(dev);
	if (result)
		goto unmap;

	spin_lock(&dev_list_lock);
2545 2546 2547 2548
	if (list_empty(&dev_list) && IS_ERR_OR_NULL(nvme_thread)) {
		start_thread = true;
		nvme_thread = NULL;
	}
2549 2550 2551
	list_add(&dev->node, &dev_list);
	spin_unlock(&dev_list_lock);

2552 2553
	if (start_thread) {
		nvme_thread = kthread_run(nvme_kthread, NULL, "nvme");
2554
		wake_up_all(&nvme_kthread_wait);
2555 2556 2557 2558 2559 2560 2561
	} else
		wait_event_killable(nvme_kthread_wait, nvme_thread);

	if (IS_ERR_OR_NULL(nvme_thread)) {
		result = nvme_thread ? PTR_ERR(nvme_thread) : -EINTR;
		goto disable;
	}
M
Matias Bjørling 已提交
2562 2563

	nvme_init_queue(dev->queues[0], 0);
2564

2565
	result = nvme_setup_io_queues(dev);
2566
	if (result)
2567 2568
		goto disable;

M
Matias Bjørling 已提交
2569 2570
	nvme_set_irq_hints(dev);

2571
	return result;
2572 2573

 disable:
2574
	nvme_disable_queue(dev, 0);
2575
	nvme_dev_list_remove(dev);
2576 2577 2578 2579 2580
 unmap:
	nvme_dev_unmap(dev);
	return result;
}

K
Keith Busch 已提交
2581 2582 2583 2584 2585 2586
static int nvme_remove_dead_ctrl(void *arg)
{
	struct nvme_dev *dev = (struct nvme_dev *)arg;
	struct pci_dev *pdev = dev->pci_dev;

	if (pci_get_drvdata(pdev))
2587
		pci_stop_and_remove_bus_device_locked(pdev);
K
Keith Busch 已提交
2588 2589 2590 2591 2592 2593 2594 2595
	kref_put(&dev->kref, nvme_free_dev);
	return 0;
}

static void nvme_remove_disks(struct work_struct *ws)
{
	struct nvme_dev *dev = container_of(ws, struct nvme_dev, reset_work);

2596
	nvme_free_queues(dev, 1);
2597
	nvme_dev_remove(dev);
K
Keith Busch 已提交
2598 2599 2600 2601 2602 2603 2604
}

static int nvme_dev_resume(struct nvme_dev *dev)
{
	int ret;

	ret = nvme_dev_start(dev);
2605
	if (ret)
K
Keith Busch 已提交
2606
		return ret;
2607
	if (dev->online_queues < 2) {
K
Keith Busch 已提交
2608
		spin_lock(&dev_list_lock);
T
Tejun Heo 已提交
2609
		dev->reset_workfn = nvme_remove_disks;
K
Keith Busch 已提交
2610 2611 2612
		queue_work(nvme_workq, &dev->reset_work);
		spin_unlock(&dev_list_lock);
	}
2613
	dev->initialized = 1;
K
Keith Busch 已提交
2614 2615 2616 2617 2618 2619 2620
	return 0;
}

static void nvme_dev_reset(struct nvme_dev *dev)
{
	nvme_dev_shutdown(dev);
	if (nvme_dev_resume(dev)) {
M
Matias Bjørling 已提交
2621
		dev_warn(&dev->pci_dev->dev, "Device failed to resume\n");
K
Keith Busch 已提交
2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637
		kref_get(&dev->kref);
		if (IS_ERR(kthread_run(nvme_remove_dead_ctrl, dev, "nvme%d",
							dev->instance))) {
			dev_err(&dev->pci_dev->dev,
				"Failed to start controller remove task\n");
			kref_put(&dev->kref, nvme_free_dev);
		}
	}
}

static void nvme_reset_failed_dev(struct work_struct *ws)
{
	struct nvme_dev *dev = container_of(ws, struct nvme_dev, reset_work);
	nvme_dev_reset(dev);
}

T
Tejun Heo 已提交
2638 2639 2640 2641 2642 2643
static void nvme_reset_workfn(struct work_struct *work)
{
	struct nvme_dev *dev = container_of(work, struct nvme_dev, reset_work);
	dev->reset_workfn(work);
}

2644
static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id)
M
Matthew Wilcox 已提交
2645
{
M
Matias Bjørling 已提交
2646
	int node, result = -ENOMEM;
M
Matthew Wilcox 已提交
2647 2648
	struct nvme_dev *dev;

M
Matias Bjørling 已提交
2649 2650 2651 2652 2653
	node = dev_to_node(&pdev->dev);
	if (node == NUMA_NO_NODE)
		set_dev_node(&pdev->dev, 0);

	dev = kzalloc_node(sizeof(*dev), GFP_KERNEL, node);
M
Matthew Wilcox 已提交
2654 2655
	if (!dev)
		return -ENOMEM;
M
Matias Bjørling 已提交
2656 2657
	dev->entry = kzalloc_node(num_possible_cpus() * sizeof(*dev->entry),
							GFP_KERNEL, node);
M
Matthew Wilcox 已提交
2658 2659
	if (!dev->entry)
		goto free;
M
Matias Bjørling 已提交
2660 2661
	dev->queues = kzalloc_node((num_possible_cpus() + 1) * sizeof(void *),
							GFP_KERNEL, node);
M
Matthew Wilcox 已提交
2662 2663 2664 2665
	if (!dev->queues)
		goto free;

	INIT_LIST_HEAD(&dev->namespaces);
T
Tejun Heo 已提交
2666 2667
	dev->reset_workfn = nvme_reset_failed_dev;
	INIT_WORK(&dev->reset_work, nvme_reset_workfn);
K
Keith Busch 已提交
2668
	dev->pci_dev = pci_dev_get(pdev);
K
Keith Busch 已提交
2669
	pci_set_drvdata(pdev, dev);
2670 2671
	result = nvme_set_instance(dev);
	if (result)
K
Keith Busch 已提交
2672
		goto put_pci;
M
Matthew Wilcox 已提交
2673

M
Matthew Wilcox 已提交
2674 2675
	result = nvme_setup_prp_pools(dev);
	if (result)
2676
		goto release;
M
Matthew Wilcox 已提交
2677

2678
	kref_init(&dev->kref);
2679
	result = nvme_dev_start(dev);
2680
	if (result)
2681
		goto release_pools;
M
Matthew Wilcox 已提交
2682

2683 2684
	if (dev->online_queues > 1)
		result = nvme_dev_add(dev);
2685
	if (result)
2686
		goto shutdown;
2687

2688 2689 2690 2691 2692 2693 2694 2695 2696
	scnprintf(dev->name, sizeof(dev->name), "nvme%d", dev->instance);
	dev->miscdev.minor = MISC_DYNAMIC_MINOR;
	dev->miscdev.parent = &pdev->dev;
	dev->miscdev.name = dev->name;
	dev->miscdev.fops = &nvme_dev_fops;
	result = misc_register(&dev->miscdev);
	if (result)
		goto remove;

M
Matias Bjørling 已提交
2697 2698
	nvme_set_irq_hints(dev);

2699
	dev->initialized = 1;
M
Matthew Wilcox 已提交
2700 2701
	return 0;

2702 2703
 remove:
	nvme_dev_remove(dev);
M
Matias Bjørling 已提交
2704
	nvme_dev_remove_admin(dev);
2705
	nvme_free_namespaces(dev);
2706 2707
 shutdown:
	nvme_dev_shutdown(dev);
2708
 release_pools:
2709
	nvme_free_queues(dev, 0);
M
Matthew Wilcox 已提交
2710
	nvme_release_prp_pools(dev);
2711 2712
 release:
	nvme_release_instance(dev);
K
Keith Busch 已提交
2713 2714
 put_pci:
	pci_dev_put(dev->pci_dev);
M
Matthew Wilcox 已提交
2715 2716 2717 2718 2719 2720 2721
 free:
	kfree(dev->queues);
	kfree(dev->entry);
	kfree(dev);
	return result;
}

2722 2723
static void nvme_reset_notify(struct pci_dev *pdev, bool prepare)
{
K
Keith Busch 已提交
2724
	struct nvme_dev *dev = pci_get_drvdata(pdev);
2725

K
Keith Busch 已提交
2726 2727 2728 2729
	if (prepare)
		nvme_dev_shutdown(dev);
	else
		nvme_dev_resume(dev);
2730 2731
}

2732 2733 2734 2735 2736 2737
static void nvme_shutdown(struct pci_dev *pdev)
{
	struct nvme_dev *dev = pci_get_drvdata(pdev);
	nvme_dev_shutdown(dev);
}

2738
static void nvme_remove(struct pci_dev *pdev)
M
Matthew Wilcox 已提交
2739 2740
{
	struct nvme_dev *dev = pci_get_drvdata(pdev);
K
Keith Busch 已提交
2741 2742 2743 2744 2745 2746 2747

	spin_lock(&dev_list_lock);
	list_del_init(&dev->node);
	spin_unlock(&dev_list_lock);

	pci_set_drvdata(pdev, NULL);
	flush_work(&dev->reset_work);
2748
	misc_deregister(&dev->miscdev);
M
Matias Bjørling 已提交
2749
	nvme_dev_remove(dev);
K
Keith Busch 已提交
2750
	nvme_dev_shutdown(dev);
M
Matias Bjørling 已提交
2751
	nvme_dev_remove_admin(dev);
2752
	nvme_free_queues(dev, 0);
M
Matias Bjørling 已提交
2753
	nvme_free_admin_tags(dev);
K
Keith Busch 已提交
2754 2755
	nvme_release_instance(dev);
	nvme_release_prp_pools(dev);
2756
	kref_put(&dev->kref, nvme_free_dev);
M
Matthew Wilcox 已提交
2757 2758 2759 2760 2761 2762 2763 2764
}

/* These functions are yet to be implemented */
#define nvme_error_detected NULL
#define nvme_dump_registers NULL
#define nvme_link_reset NULL
#define nvme_slot_reset NULL
#define nvme_error_resume NULL
2765

2766
#ifdef CONFIG_PM_SLEEP
2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780
static int nvme_suspend(struct device *dev)
{
	struct pci_dev *pdev = to_pci_dev(dev);
	struct nvme_dev *ndev = pci_get_drvdata(pdev);

	nvme_dev_shutdown(ndev);
	return 0;
}

static int nvme_resume(struct device *dev)
{
	struct pci_dev *pdev = to_pci_dev(dev);
	struct nvme_dev *ndev = pci_get_drvdata(pdev);

K
Keith Busch 已提交
2781
	if (nvme_dev_resume(ndev) && !work_busy(&ndev->reset_work)) {
T
Tejun Heo 已提交
2782
		ndev->reset_workfn = nvme_reset_failed_dev;
K
Keith Busch 已提交
2783 2784 2785
		queue_work(nvme_workq, &ndev->reset_work);
	}
	return 0;
2786
}
2787
#endif
2788 2789

static SIMPLE_DEV_PM_OPS(nvme_dev_pm_ops, nvme_suspend, nvme_resume);
M
Matthew Wilcox 已提交
2790

2791
static const struct pci_error_handlers nvme_err_handler = {
M
Matthew Wilcox 已提交
2792 2793 2794 2795 2796
	.error_detected	= nvme_error_detected,
	.mmio_enabled	= nvme_dump_registers,
	.link_reset	= nvme_link_reset,
	.slot_reset	= nvme_slot_reset,
	.resume		= nvme_error_resume,
2797
	.reset_notify	= nvme_reset_notify,
M
Matthew Wilcox 已提交
2798 2799 2800 2801 2802
};

/* Move to pci_ids.h later */
#define PCI_CLASS_STORAGE_EXPRESS	0x010802

2803
static const struct pci_device_id nvme_id_table[] = {
M
Matthew Wilcox 已提交
2804 2805 2806 2807 2808 2809 2810 2811 2812
	{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },
	{ 0, }
};
MODULE_DEVICE_TABLE(pci, nvme_id_table);

static struct pci_driver nvme_driver = {
	.name		= "nvme",
	.id_table	= nvme_id_table,
	.probe		= nvme_probe,
2813
	.remove		= nvme_remove,
2814
	.shutdown	= nvme_shutdown,
2815 2816 2817
	.driver		= {
		.pm	= &nvme_dev_pm_ops,
	},
M
Matthew Wilcox 已提交
2818 2819 2820 2821 2822
	.err_handler	= &nvme_err_handler,
};

static int __init nvme_init(void)
{
2823
	int result;
2824

2825
	init_waitqueue_head(&nvme_kthread_wait);
M
Matthew Wilcox 已提交
2826

K
Keith Busch 已提交
2827 2828
	nvme_workq = create_singlethread_workqueue("nvme");
	if (!nvme_workq)
2829
		return -ENOMEM;
K
Keith Busch 已提交
2830

2831 2832
	result = register_blkdev(nvme_major, "nvme");
	if (result < 0)
K
Keith Busch 已提交
2833
		goto kill_workq;
2834
	else if (result > 0)
2835
		nvme_major = result;
M
Matthew Wilcox 已提交
2836

2837 2838
	result = pci_register_driver(&nvme_driver);
	if (result)
M
Matias Bjørling 已提交
2839
		goto unregister_blkdev;
2840
	return 0;
M
Matthew Wilcox 已提交
2841

2842
 unregister_blkdev:
M
Matthew Wilcox 已提交
2843
	unregister_blkdev(nvme_major, "nvme");
K
Keith Busch 已提交
2844 2845
 kill_workq:
	destroy_workqueue(nvme_workq);
M
Matthew Wilcox 已提交
2846 2847 2848 2849 2850 2851
	return result;
}

static void __exit nvme_exit(void)
{
	pci_unregister_driver(&nvme_driver);
2852
	unregister_hotcpu_notifier(&nvme_nb);
M
Matthew Wilcox 已提交
2853
	unregister_blkdev(nvme_major, "nvme");
K
Keith Busch 已提交
2854
	destroy_workqueue(nvme_workq);
2855
	BUG_ON(nvme_thread && !IS_ERR(nvme_thread));
2856
	_nvme_check_size();
M
Matthew Wilcox 已提交
2857 2858 2859 2860
}

MODULE_AUTHOR("Matthew Wilcox <willy@linux.intel.com>");
MODULE_LICENSE("GPL");
2861
MODULE_VERSION("0.9");
M
Matthew Wilcox 已提交
2862 2863
module_init(nvme_init);
module_exit(nvme_exit);