+++ /dev/null
-From 949e31ee7225602105e4129b9a093d3fc546f701 Mon Sep 17 00:00:00 2001
-From: Christoph Hellwig <hch@lst.de>
-Date: Thu, 3 Dec 2015 09:52:05 -0700
-Subject: [PATCH 033/135] NVMe: fix build with CONFIG_NVM enabled
-
-[ Upstream commit ac02dddec63385ffef1397d3f56cec4108bcafe9 ]
-
-Looks like I didn't test with CONFIG_NVM enabled, and neither did
-the build bot.
-
-Most of this is really weird crazy shit in the lighnvm support, though.
-
-Struct nvme_ns is a structure for the NVM I/O command set, and it has
-no business poking into it. Second this commit:
-
-commit 47b3115ae7b799be8b77b0f024215ad4f68d6460
-Author: Wenwei Tao <ww.tao0320@gmail.com>
-Date: Fri Nov 20 13:47:55 2015 +0100
-
- nvme: lightnvm: use admin queues for admin cmds
-
-Does even more crazy stuff. If a function gets a request_queue parameter
-passed it'd better use that and not look for another one.
-
-Signed-off-by: Christoph Hellwig <hch@lst.de>
-Signed-off-by: Jens Axboe <axboe@fb.com>
-Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/nvme/host/lightnvm.c | 35 ++++++++++++++++-------------------
- 1 file changed, 16 insertions(+), 19 deletions(-)
-
---- a/drivers/nvme/host/lightnvm.c
-+++ b/drivers/nvme/host/lightnvm.c
-@@ -274,7 +274,6 @@ static int init_grps(struct nvm_id *nvm_
- static int nvme_nvm_identity(struct nvm_dev *nvmdev, struct nvm_id *nvm_id)
- {
- struct nvme_ns *ns = nvmdev->q->queuedata;
-- struct nvme_dev *dev = ns->dev;
- struct nvme_nvm_id *nvme_nvm_id;
- struct nvme_nvm_command c = {};
- int ret;
-@@ -287,7 +286,7 @@ static int nvme_nvm_identity(struct nvm_
- if (!nvme_nvm_id)
- return -ENOMEM;
-
-- ret = nvme_submit_sync_cmd(dev->admin_q, (struct nvme_command *)&c,
-+ ret = nvme_submit_sync_cmd(ns->ctrl->admin_q, (struct nvme_command *)&c,
- nvme_nvm_id, sizeof(struct nvme_nvm_id));
- if (ret) {
- ret = -EIO;
-@@ -312,9 +311,8 @@ static int nvme_nvm_get_l2p_tbl(struct n
- nvm_l2p_update_fn *update_l2p, void *priv)
- {
- struct nvme_ns *ns = nvmdev->q->queuedata;
-- struct nvme_dev *dev = ns->dev;
- struct nvme_nvm_command c = {};
-- u32 len = queue_max_hw_sectors(dev->admin_q) << 9;
-+ u32 len = queue_max_hw_sectors(ns->ctrl->admin_q) << 9;
- u32 nlb_pr_rq = len / sizeof(u64);
- u64 cmd_slba = slba;
- void *entries;
-@@ -332,10 +330,10 @@ static int nvme_nvm_get_l2p_tbl(struct n
- c.l2p.slba = cpu_to_le64(cmd_slba);
- c.l2p.nlb = cpu_to_le32(cmd_nlb);
-
-- ret = nvme_submit_sync_cmd(dev->admin_q,
-+ ret = nvme_submit_sync_cmd(ns->ctrl->admin_q,
- (struct nvme_command *)&c, entries, len);
- if (ret) {
-- dev_err(dev->dev, "L2P table transfer failed (%d)\n",
-+ dev_err(ns->ctrl->dev, "L2P table transfer failed (%d)\n",
- ret);
- ret = -EIO;
- goto out;
-@@ -361,7 +359,7 @@ static int nvme_nvm_get_bb_tbl(struct nv
- {
- struct request_queue *q = nvmdev->q;
- struct nvme_ns *ns = q->queuedata;
-- struct nvme_dev *dev = ns->dev;
-+ struct nvme_ctrl *ctrl = ns->ctrl;
- struct nvme_nvm_command c = {};
- struct nvme_nvm_bb_tbl *bb_tbl;
- int tblsz = sizeof(struct nvme_nvm_bb_tbl) + nr_blocks;
-@@ -375,30 +373,30 @@ static int nvme_nvm_get_bb_tbl(struct nv
- if (!bb_tbl)
- return -ENOMEM;
-
-- ret = nvme_submit_sync_cmd(dev->admin_q, (struct nvme_command *)&c,
-+ ret = nvme_submit_sync_cmd(ctrl->admin_q, (struct nvme_command *)&c,
- bb_tbl, tblsz);
- if (ret) {
-- dev_err(dev->dev, "get bad block table failed (%d)\n", ret);
-+ dev_err(ctrl->dev, "get bad block table failed (%d)\n", ret);
- ret = -EIO;
- goto out;
- }
-
- if (bb_tbl->tblid[0] != 'B' || bb_tbl->tblid[1] != 'B' ||
- bb_tbl->tblid[2] != 'L' || bb_tbl->tblid[3] != 'T') {
-- dev_err(dev->dev, "bbt format mismatch\n");
-+ dev_err(ctrl->dev, "bbt format mismatch\n");
- ret = -EINVAL;
- goto out;
- }
-
- if (le16_to_cpu(bb_tbl->verid) != 1) {
- ret = -EINVAL;
-- dev_err(dev->dev, "bbt version not supported\n");
-+ dev_err(ctrl->dev, "bbt version not supported\n");
- goto out;
- }
-
- if (le32_to_cpu(bb_tbl->tblks) != nr_blocks) {
- ret = -EINVAL;
-- dev_err(dev->dev, "bbt unsuspected blocks returned (%u!=%u)",
-+ dev_err(ctrl->dev, "bbt unsuspected blocks returned (%u!=%u)",
- le32_to_cpu(bb_tbl->tblks), nr_blocks);
- goto out;
- }
-@@ -419,7 +417,6 @@ static int nvme_nvm_set_bb_tbl(struct nv
- int type)
- {
- struct nvme_ns *ns = nvmdev->q->queuedata;
-- struct nvme_dev *dev = ns->dev;
- struct nvme_nvm_command c = {};
- int ret = 0;
-
-@@ -429,10 +426,10 @@ static int nvme_nvm_set_bb_tbl(struct nv
- c.set_bb.nlb = cpu_to_le16(rqd->nr_pages - 1);
- c.set_bb.value = type;
-
-- ret = nvme_submit_sync_cmd(dev->admin_q, (struct nvme_command *)&c,
-+ ret = nvme_submit_sync_cmd(ns->ctrl->admin_q, (struct nvme_command *)&c,
- NULL, 0);
- if (ret)
-- dev_err(dev->dev, "set bad block table failed (%d)\n", ret);
-+ dev_err(ns->ctrl->dev, "set bad block table failed (%d)\n", ret);
- return ret;
- }
-
-@@ -520,9 +517,8 @@ static int nvme_nvm_erase_block(struct n
- static void *nvme_nvm_create_dma_pool(struct nvm_dev *nvmdev, char *name)
- {
- struct nvme_ns *ns = nvmdev->q->queuedata;
-- struct nvme_dev *dev = ns->dev;
-
-- return dma_pool_create(name, dev->dev, PAGE_SIZE, PAGE_SIZE, 0);
-+ return dma_pool_create(name, ns->ctrl->dev, PAGE_SIZE, PAGE_SIZE, 0);
- }
-
- static void nvme_nvm_destroy_dma_pool(void *pool)
-@@ -580,8 +576,9 @@ void nvme_nvm_unregister(struct request_
-
- int nvme_nvm_ns_supported(struct nvme_ns *ns, struct nvme_id_ns *id)
- {
-- struct nvme_dev *dev = ns->dev;
-- struct pci_dev *pdev = to_pci_dev(dev->dev);
-+ struct nvme_ctrl *ctrl = ns->ctrl;
-+ /* XXX: this is poking into PCI structures from generic code! */
-+ struct pci_dev *pdev = to_pci_dev(ctrl->dev);
-
- /* QEMU NVMe simulator - PCI ID + Vendor specific bit */
- if (pdev->vendor == PCI_VENDOR_ID_CNEX &&