Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge git://git.infradead.org/users/willy/linux-nvme

Pull NVMe driver update from Matthew Wilcox:
"Looks like I missed the merge window ... but these are almost all
bugfixes anyway (the ones that aren't have been baking for months)"

* git://git.infradead.org/users/willy/linux-nvme:
NVMe: Namespace use after free on surprise removal
NVMe: Correct uses of INIT_WORK
NVMe: Include device and queue numbers in interrupt name
NVMe: Add a pci_driver shutdown method
NVMe: Disable admin queue on init failure
NVMe: Dynamically allocate partition numbers
NVMe: Async IO queue deletion
NVMe: Surprise removal handling
NVMe: Abort timed out commands
NVMe: Schedule reset for failed controllers
NVMe: Device resume error handling
NVMe: Cache dev->pci_dev in a local pointer
NVMe: Fix lockdep warnings
NVMe: compat SG_IO ioctl
NVMe: remove deprecated IRQF_DISABLED
NVMe: Avoid shift operation when writing cq head doorbell

+668 -106
+505 -105
drivers/block/nvme-core.c
··· 46 46 #define NVME_Q_DEPTH 1024 47 47 #define SQ_SIZE(depth) (depth * sizeof(struct nvme_command)) 48 48 #define CQ_SIZE(depth) (depth * sizeof(struct nvme_completion)) 49 - #define NVME_MINORS 64 50 49 #define ADMIN_TIMEOUT (60 * HZ) 51 50 52 51 static int nvme_major; ··· 57 58 static DEFINE_SPINLOCK(dev_list_lock); 58 59 static LIST_HEAD(dev_list); 59 60 static struct task_struct *nvme_thread; 61 + static struct workqueue_struct *nvme_workq; 62 + 63 + static void nvme_reset_failed_dev(struct work_struct *ws); 64 + 65 + struct async_cmd_info { 66 + struct kthread_work work; 67 + struct kthread_worker *worker; 68 + u32 result; 69 + int status; 70 + void *ctx; 71 + }; 60 72 61 73 /* 62 74 * An NVM Express queue. Each device has at least two (one for admin ··· 76 66 struct nvme_queue { 77 67 struct device *q_dmadev; 78 68 struct nvme_dev *dev; 69 + char irqname[24]; /* nvme4294967295-65535\0 */ 79 70 spinlock_t q_lock; 80 71 struct nvme_command *sq_cmds; 81 72 volatile struct nvme_completion *cqes; ··· 91 80 u16 sq_head; 92 81 u16 sq_tail; 93 82 u16 cq_head; 83 + u16 qid; 94 84 u8 cq_phase; 95 85 u8 cqe_seen; 96 86 u8 q_suspended; 87 + struct async_cmd_info cmdinfo; 97 88 unsigned long cmdid_data[]; 98 89 }; 99 90 ··· 110 97 BUILD_BUG_ON(sizeof(struct nvme_delete_queue) != 64); 111 98 BUILD_BUG_ON(sizeof(struct nvme_features) != 64); 112 99 BUILD_BUG_ON(sizeof(struct nvme_format_cmd) != 64); 100 + BUILD_BUG_ON(sizeof(struct nvme_abort_cmd) != 64); 113 101 BUILD_BUG_ON(sizeof(struct nvme_command) != 64); 114 102 BUILD_BUG_ON(sizeof(struct nvme_id_ctrl) != 4096); 115 103 BUILD_BUG_ON(sizeof(struct nvme_id_ns) != 4096); ··· 125 111 nvme_completion_fn fn; 126 112 void *ctx; 127 113 unsigned long timeout; 114 + int aborted; 128 115 }; 129 116 130 117 static struct nvme_cmd_info *nvme_cmd_info(struct nvme_queue *nvmeq) ··· 169 154 info[cmdid].fn = handler; 170 155 info[cmdid].ctx = ctx; 171 156 info[cmdid].timeout = jiffies + timeout; 157 + info[cmdid].aborted = 0; 172 158 return cmdid; 173 159 } 174 160 ··· 188 172 #define CMD_CTX_COMPLETED (0x310 + CMD_CTX_BASE) 189 173 #define CMD_CTX_INVALID (0x314 + CMD_CTX_BASE) 190 174 #define CMD_CTX_FLUSH (0x318 + CMD_CTX_BASE) 175 + #define CMD_CTX_ABORT (0x31C + CMD_CTX_BASE) 191 176 192 177 static void special_completion(struct nvme_dev *dev, void *ctx, 193 178 struct nvme_completion *cqe) ··· 197 180 return; 198 181 if (ctx == CMD_CTX_FLUSH) 199 182 return; 183 + if (ctx == CMD_CTX_ABORT) { 184 + ++dev->abort_limit; 185 + return; 186 + } 200 187 if (ctx == CMD_CTX_COMPLETED) { 201 188 dev_warn(&dev->pci_dev->dev, 202 189 "completed id %d twice on queue %d\n", ··· 215 194 } 216 195 217 196 dev_warn(&dev->pci_dev->dev, "Unknown special completion %p\n", ctx); 197 + } 198 + 199 + static void async_completion(struct nvme_dev *dev, void *ctx, 200 + struct nvme_completion *cqe) 201 + { 202 + struct async_cmd_info *cmdinfo = ctx; 203 + cmdinfo->result = le32_to_cpup(&cqe->result); 204 + cmdinfo->status = le16_to_cpup(&cqe->status) >> 1; 205 + queue_kthread_work(cmdinfo->worker, &cmdinfo->work); 218 206 } 219 207 220 208 /* ··· 723 693 if (head == nvmeq->cq_head && phase == nvmeq->cq_phase) 724 694 return 0; 725 695 726 - writel(head, nvmeq->q_db + (1 << nvmeq->dev->db_stride)); 696 + writel(head, nvmeq->q_db + nvmeq->dev->db_stride); 727 697 nvmeq->cq_head = head; 728 698 nvmeq->cq_phase = phase; 729 699 ··· 834 804 return cmdinfo.status; 835 805 } 836 806 807 + static int nvme_submit_async_cmd(struct nvme_queue *nvmeq, 808 + struct nvme_command *cmd, 809 + struct async_cmd_info *cmdinfo, unsigned timeout) 810 + { 811 + int cmdid; 812 + 813 + cmdid = alloc_cmdid_killable(nvmeq, cmdinfo, async_completion, timeout); 814 + if (cmdid < 0) 815 + return cmdid; 816 + cmdinfo->status = -EINTR; 817 + cmd->common.command_id = cmdid; 818 + nvme_submit_cmd(nvmeq, cmd); 819 + return 0; 820 + } 821 + 837 822 int nvme_submit_admin_cmd(struct nvme_dev *dev, struct nvme_command *cmd, 838 823 u32 *result) 839 824 { 840 825 return nvme_submit_sync_cmd(dev->queues[0], cmd, result, ADMIN_TIMEOUT); 826 + } 827 + 828 + static int nvme_submit_admin_cmd_async(struct nvme_dev *dev, 829 + struct nvme_command *cmd, struct async_cmd_info *cmdinfo) 830 + { 831 + return nvme_submit_async_cmd(dev->queues[0], cmd, cmdinfo, 832 + ADMIN_TIMEOUT); 841 833 } 842 834 843 835 static int adapter_delete_queue(struct nvme_dev *dev, u8 opcode, u16 id) ··· 972 920 } 973 921 974 922 /** 923 + * nvme_abort_cmd - Attempt aborting a command 924 + * @cmdid: Command id of a timed out IO 925 + * @queue: The queue with timed out IO 926 + * 927 + * Schedule controller reset if the command was already aborted once before and 928 + * still hasn't been returned to the driver, or if this is the admin queue. 929 + */ 930 + static void nvme_abort_cmd(int cmdid, struct nvme_queue *nvmeq) 931 + { 932 + int a_cmdid; 933 + struct nvme_command cmd; 934 + struct nvme_dev *dev = nvmeq->dev; 935 + struct nvme_cmd_info *info = nvme_cmd_info(nvmeq); 936 + 937 + if (!nvmeq->qid || info[cmdid].aborted) { 938 + if (work_busy(&dev->reset_work)) 939 + return; 940 + list_del_init(&dev->node); 941 + dev_warn(&dev->pci_dev->dev, 942 + "I/O %d QID %d timeout, reset controller\n", cmdid, 943 + nvmeq->qid); 944 + PREPARE_WORK(&dev->reset_work, nvme_reset_failed_dev); 945 + queue_work(nvme_workq, &dev->reset_work); 946 + return; 947 + } 948 + 949 + if (!dev->abort_limit) 950 + return; 951 + 952 + a_cmdid = alloc_cmdid(dev->queues[0], CMD_CTX_ABORT, special_completion, 953 + ADMIN_TIMEOUT); 954 + if (a_cmdid < 0) 955 + return; 956 + 957 + memset(&cmd, 0, sizeof(cmd)); 958 + cmd.abort.opcode = nvme_admin_abort_cmd; 959 + cmd.abort.cid = cmdid; 960 + cmd.abort.sqid = cpu_to_le16(nvmeq->qid); 961 + cmd.abort.command_id = a_cmdid; 962 + 963 + --dev->abort_limit; 964 + info[cmdid].aborted = 1; 965 + info[cmdid].timeout = jiffies + ADMIN_TIMEOUT; 966 + 967 + dev_warn(nvmeq->q_dmadev, "Aborting I/O %d QID %d\n", cmdid, 968 + nvmeq->qid); 969 + nvme_submit_cmd(dev->queues[0], &cmd); 970 + } 971 + 972 + /** 975 973 * nvme_cancel_ios - Cancel outstanding I/Os 976 974 * @queue: The queue to cancel I/Os on 977 975 * @timeout: True to only cancel I/Os which have timed out ··· 1044 942 continue; 1045 943 if (info[cmdid].ctx == CMD_CTX_CANCELLED) 1046 944 continue; 1047 - dev_warn(nvmeq->q_dmadev, "Cancelling I/O %d\n", cmdid); 945 + if (timeout && nvmeq->dev->initialized) { 946 + nvme_abort_cmd(cmdid, nvmeq); 947 + continue; 948 + } 949 + dev_warn(nvmeq->q_dmadev, "Cancelling I/O %d QID %d\n", cmdid, 950 + nvmeq->qid); 1048 951 ctx = cancel_cmdid(nvmeq, cmdid, &fn); 1049 952 fn(nvmeq->dev, ctx, &cqe); 1050 953 } ··· 1071 964 kfree(nvmeq); 1072 965 } 1073 966 1074 - static void nvme_free_queues(struct nvme_dev *dev) 967 + static void nvme_free_queues(struct nvme_dev *dev, int lowest) 1075 968 { 1076 969 int i; 1077 970 1078 - for (i = dev->queue_count - 1; i >= 0; i--) { 971 + for (i = dev->queue_count - 1; i >= lowest; i--) { 1079 972 nvme_free_queue(dev->queues[i]); 1080 973 dev->queue_count--; 1081 974 dev->queues[i] = NULL; 1082 975 } 1083 976 } 1084 977 1085 - static void nvme_disable_queue(struct nvme_dev *dev, int qid) 978 + /** 979 + * nvme_suspend_queue - put queue into suspended state 980 + * @nvmeq - queue to suspend 981 + * 982 + * Returns 1 if already suspended, 0 otherwise. 983 + */ 984 + static int nvme_suspend_queue(struct nvme_queue *nvmeq) 1086 985 { 1087 - struct nvme_queue *nvmeq = dev->queues[qid]; 1088 - int vector = dev->entry[nvmeq->cq_vector].vector; 986 + int vector = nvmeq->dev->entry[nvmeq->cq_vector].vector; 1089 987 1090 988 spin_lock_irq(&nvmeq->q_lock); 1091 989 if (nvmeq->q_suspended) { 1092 990 spin_unlock_irq(&nvmeq->q_lock); 1093 - return; 991 + return 1; 1094 992 } 1095 993 nvmeq->q_suspended = 1; 1096 994 spin_unlock_irq(&nvmeq->q_lock); ··· 1103 991 irq_set_affinity_hint(vector, NULL); 1104 992 free_irq(vector, nvmeq); 1105 993 1106 - /* Don't tell the adapter to delete the admin queue */ 1107 - if (qid) { 1108 - adapter_delete_sq(dev, qid); 1109 - adapter_delete_cq(dev, qid); 1110 - } 994 + return 0; 995 + } 1111 996 997 + static void nvme_clear_queue(struct nvme_queue *nvmeq) 998 + { 1112 999 spin_lock_irq(&nvmeq->q_lock); 1113 1000 nvme_process_cq(nvmeq); 1114 1001 nvme_cancel_ios(nvmeq, false); 1115 1002 spin_unlock_irq(&nvmeq->q_lock); 1003 + } 1004 + 1005 + static void nvme_disable_queue(struct nvme_dev *dev, int qid) 1006 + { 1007 + struct nvme_queue *nvmeq = dev->queues[qid]; 1008 + 1009 + if (!nvmeq) 1010 + return; 1011 + if (nvme_suspend_queue(nvmeq)) 1012 + return; 1013 + 1014 + /* Don't tell the adapter to delete the admin queue. 1015 + * Don't tell a removed adapter to delete IO queues. */ 1016 + if (qid && readl(&dev->bar->csts) != -1) { 1017 + adapter_delete_sq(dev, qid); 1018 + adapter_delete_cq(dev, qid); 1019 + } 1020 + nvme_clear_queue(nvmeq); 1116 1021 } 1117 1022 1118 1023 static struct nvme_queue *nvme_alloc_queue(struct nvme_dev *dev, int qid, ··· 1154 1025 1155 1026 nvmeq->q_dmadev = dmadev; 1156 1027 nvmeq->dev = dev; 1028 + snprintf(nvmeq->irqname, sizeof(nvmeq->irqname), "nvme%dq%d", 1029 + dev->instance, qid); 1157 1030 spin_lock_init(&nvmeq->q_lock); 1158 1031 nvmeq->cq_head = 0; 1159 1032 nvmeq->cq_phase = 1; 1160 1033 init_waitqueue_head(&nvmeq->sq_full); 1161 1034 init_waitqueue_entry(&nvmeq->sq_cong_wait, nvme_thread); 1162 1035 bio_list_init(&nvmeq->sq_cong); 1163 - nvmeq->q_db = &dev->dbs[qid << (dev->db_stride + 1)]; 1036 + nvmeq->q_db = &dev->dbs[qid * 2 * dev->db_stride]; 1164 1037 nvmeq->q_depth = depth; 1165 1038 nvmeq->cq_vector = vector; 1039 + nvmeq->qid = qid; 1166 1040 nvmeq->q_suspended = 1; 1167 1041 dev->queue_count++; 1168 1042 ··· 1184 1052 { 1185 1053 if (use_threaded_interrupts) 1186 1054 return request_threaded_irq(dev->entry[nvmeq->cq_vector].vector, 1187 - nvme_irq_check, nvme_irq, 1188 - IRQF_DISABLED | IRQF_SHARED, 1055 + nvme_irq_check, nvme_irq, IRQF_SHARED, 1189 1056 name, nvmeq); 1190 1057 return request_irq(dev->entry[nvmeq->cq_vector].vector, nvme_irq, 1191 - IRQF_DISABLED | IRQF_SHARED, name, nvmeq); 1058 + IRQF_SHARED, name, nvmeq); 1192 1059 } 1193 1060 1194 1061 static void nvme_init_queue(struct nvme_queue *nvmeq, u16 qid) ··· 1198 1067 nvmeq->sq_tail = 0; 1199 1068 nvmeq->cq_head = 0; 1200 1069 nvmeq->cq_phase = 1; 1201 - nvmeq->q_db = &dev->dbs[qid << (dev->db_stride + 1)]; 1070 + nvmeq->q_db = &dev->dbs[qid * 2 * dev->db_stride]; 1202 1071 memset(nvmeq->cmdid_data, 0, extra); 1203 1072 memset((void *)nvmeq->cqes, 0, CQ_SIZE(nvmeq->q_depth)); 1204 1073 nvme_cancel_ios(nvmeq, false); ··· 1218 1087 if (result < 0) 1219 1088 goto release_cq; 1220 1089 1221 - result = queue_request_irq(dev, nvmeq, "nvme"); 1090 + result = queue_request_irq(dev, nvmeq, nvmeq->irqname); 1222 1091 if (result < 0) 1223 1092 goto release_sq; 1224 1093 1225 - spin_lock(&nvmeq->q_lock); 1094 + spin_lock_irq(&nvmeq->q_lock); 1226 1095 nvme_init_queue(nvmeq, qid); 1227 - spin_unlock(&nvmeq->q_lock); 1096 + spin_unlock_irq(&nvmeq->q_lock); 1228 1097 1229 1098 return result; 1230 1099 ··· 1336 1205 if (result) 1337 1206 return result; 1338 1207 1339 - result = queue_request_irq(dev, nvmeq, "nvme admin"); 1208 + result = queue_request_irq(dev, nvmeq, nvmeq->irqname); 1340 1209 if (result) 1341 1210 return result; 1342 1211 1343 - spin_lock(&nvmeq->q_lock); 1212 + spin_lock_irq(&nvmeq->q_lock); 1344 1213 nvme_init_queue(nvmeq, 0); 1345 - spin_unlock(&nvmeq->q_lock); 1214 + spin_unlock_irq(&nvmeq->q_lock); 1346 1215 return result; 1347 1216 } 1348 1217 ··· 1618 1487 } 1619 1488 } 1620 1489 1490 + #ifdef CONFIG_COMPAT 1491 + static int nvme_compat_ioctl(struct block_device *bdev, fmode_t mode, 1492 + unsigned int cmd, unsigned long arg) 1493 + { 1494 + struct nvme_ns *ns = bdev->bd_disk->private_data; 1495 + 1496 + switch (cmd) { 1497 + case SG_IO: 1498 + return nvme_sg_io32(ns, arg); 1499 + } 1500 + return nvme_ioctl(bdev, mode, cmd, arg); 1501 + } 1502 + #else 1503 + #define nvme_compat_ioctl NULL 1504 + #endif 1505 + 1506 + static int nvme_open(struct block_device *bdev, fmode_t mode) 1507 + { 1508 + struct nvme_ns *ns = bdev->bd_disk->private_data; 1509 + struct nvme_dev *dev = ns->dev; 1510 + 1511 + kref_get(&dev->kref); 1512 + return 0; 1513 + } 1514 + 1515 + static void nvme_free_dev(struct kref *kref); 1516 + 1517 + static void nvme_release(struct gendisk *disk, fmode_t mode) 1518 + { 1519 + struct nvme_ns *ns = disk->private_data; 1520 + struct nvme_dev *dev = ns->dev; 1521 + 1522 + kref_put(&dev->kref, nvme_free_dev); 1523 + } 1524 + 1621 1525 static const struct block_device_operations nvme_fops = { 1622 1526 .owner = THIS_MODULE, 1623 1527 .ioctl = nvme_ioctl, 1624 - .compat_ioctl = nvme_ioctl, 1528 + .compat_ioctl = nvme_compat_ioctl, 1529 + .open = nvme_open, 1530 + .release = nvme_release, 1625 1531 }; 1626 1532 1627 1533 static void nvme_resubmit_bios(struct nvme_queue *nvmeq) ··· 1682 1514 1683 1515 static int nvme_kthread(void *data) 1684 1516 { 1685 - struct nvme_dev *dev; 1517 + struct nvme_dev *dev, *next; 1686 1518 1687 1519 while (!kthread_should_stop()) { 1688 1520 set_current_state(TASK_INTERRUPTIBLE); 1689 1521 spin_lock(&dev_list_lock); 1690 - list_for_each_entry(dev, &dev_list, node) { 1522 + list_for_each_entry_safe(dev, next, &dev_list, node) { 1691 1523 int i; 1524 + if (readl(&dev->bar->csts) & NVME_CSTS_CFS && 1525 + dev->initialized) { 1526 + if (work_busy(&dev->reset_work)) 1527 + continue; 1528 + list_del_init(&dev->node); 1529 + dev_warn(&dev->pci_dev->dev, 1530 + "Failed status, reset controller\n"); 1531 + PREPARE_WORK(&dev->reset_work, 1532 + nvme_reset_failed_dev); 1533 + queue_work(nvme_workq, &dev->reset_work); 1534 + continue; 1535 + } 1692 1536 for (i = 0; i < dev->queue_count; i++) { 1693 1537 struct nvme_queue *nvmeq = dev->queues[i]; 1694 1538 if (!nvmeq) ··· 1719 1539 schedule_timeout(round_jiffies_relative(HZ)); 1720 1540 } 1721 1541 return 0; 1722 - } 1723 - 1724 - static DEFINE_IDA(nvme_index_ida); 1725 - 1726 - static int nvme_get_ns_idx(void) 1727 - { 1728 - int index, error; 1729 - 1730 - do { 1731 - if (!ida_pre_get(&nvme_index_ida, GFP_KERNEL)) 1732 - return -1; 1733 - 1734 - spin_lock(&dev_list_lock); 1735 - error = ida_get_new(&nvme_index_ida, &index); 1736 - spin_unlock(&dev_list_lock); 1737 - } while (error == -EAGAIN); 1738 - 1739 - if (error) 1740 - index = -1; 1741 - return index; 1742 - } 1743 - 1744 - static void nvme_put_ns_idx(int index) 1745 - { 1746 - spin_lock(&dev_list_lock); 1747 - ida_remove(&nvme_index_ida, index); 1748 - spin_unlock(&dev_list_lock); 1749 1542 } 1750 1543 1751 1544 static void nvme_config_discard(struct nvme_ns *ns) ··· 1754 1601 ns->dev = dev; 1755 1602 ns->queue->queuedata = ns; 1756 1603 1757 - disk = alloc_disk(NVME_MINORS); 1604 + disk = alloc_disk(0); 1758 1605 if (!disk) 1759 1606 goto out_free_queue; 1760 1607 ns->ns_id = nsid; ··· 1767 1614 blk_queue_max_hw_sectors(ns->queue, dev->max_hw_sectors); 1768 1615 1769 1616 disk->major = nvme_major; 1770 - disk->minors = NVME_MINORS; 1771 - disk->first_minor = NVME_MINORS * nvme_get_ns_idx(); 1617 + disk->first_minor = 0; 1772 1618 disk->fops = &nvme_fops; 1773 1619 disk->private_data = ns; 1774 1620 disk->queue = ns->queue; 1775 1621 disk->driverfs_dev = &dev->pci_dev->dev; 1622 + disk->flags = GENHD_FL_EXT_DEVT; 1776 1623 sprintf(disk->disk_name, "nvme%dn%d", dev->instance, nsid); 1777 1624 set_capacity(disk, le64_to_cpup(&id->nsze) << (ns->lba_shift - 9)); 1778 1625 ··· 1786 1633 out_free_ns: 1787 1634 kfree(ns); 1788 1635 return NULL; 1789 - } 1790 - 1791 - static void nvme_ns_free(struct nvme_ns *ns) 1792 - { 1793 - int index = ns->disk->first_minor / NVME_MINORS; 1794 - put_disk(ns->disk); 1795 - nvme_put_ns_idx(index); 1796 - blk_cleanup_queue(ns->queue); 1797 - kfree(ns); 1798 1636 } 1799 1637 1800 1638 static int set_queue_count(struct nvme_dev *dev, int count) ··· 1803 1659 1804 1660 static size_t db_bar_size(struct nvme_dev *dev, unsigned nr_io_queues) 1805 1661 { 1806 - return 4096 + ((nr_io_queues + 1) << (dev->db_stride + 3)); 1662 + return 4096 + ((nr_io_queues + 1) * 8 * dev->db_stride); 1807 1663 } 1808 1664 1809 1665 static int nvme_setup_io_queues(struct nvme_dev *dev) 1810 1666 { 1667 + struct nvme_queue *adminq = dev->queues[0]; 1811 1668 struct pci_dev *pdev = dev->pci_dev; 1812 1669 int result, cpu, i, vecs, nr_io_queues, size, q_depth; 1813 1670 ··· 1835 1690 } 1836 1691 1837 1692 /* Deregister the admin queue's interrupt */ 1838 - free_irq(dev->entry[0].vector, dev->queues[0]); 1693 + free_irq(dev->entry[0].vector, adminq); 1839 1694 1840 1695 vecs = nr_io_queues; 1841 1696 for (i = 0; i < vecs; i++) ··· 1873 1728 */ 1874 1729 nr_io_queues = vecs; 1875 1730 1876 - result = queue_request_irq(dev, dev->queues[0], "nvme admin"); 1731 + result = queue_request_irq(dev, adminq, adminq->irqname); 1877 1732 if (result) { 1878 - dev->queues[0]->q_suspended = 1; 1733 + adminq->q_suspended = 1; 1879 1734 goto free_queues; 1880 1735 } 1881 1736 ··· 1884 1739 for (i = dev->queue_count - 1; i > nr_io_queues; i--) { 1885 1740 struct nvme_queue *nvmeq = dev->queues[i]; 1886 1741 1887 - spin_lock(&nvmeq->q_lock); 1742 + spin_lock_irq(&nvmeq->q_lock); 1888 1743 nvme_cancel_ios(nvmeq, false); 1889 - spin_unlock(&nvmeq->q_lock); 1744 + spin_unlock_irq(&nvmeq->q_lock); 1890 1745 1891 1746 nvme_free_queue(nvmeq); 1892 1747 dev->queue_count--; ··· 1927 1782 return 0; 1928 1783 1929 1784 free_queues: 1930 - nvme_free_queues(dev); 1785 + nvme_free_queues(dev, 1); 1931 1786 return result; 1932 1787 } 1933 1788 ··· 1939 1794 */ 1940 1795 static int nvme_dev_add(struct nvme_dev *dev) 1941 1796 { 1797 + struct pci_dev *pdev = dev->pci_dev; 1942 1798 int res; 1943 1799 unsigned nn, i; 1944 1800 struct nvme_ns *ns; ··· 1949 1803 dma_addr_t dma_addr; 1950 1804 int shift = NVME_CAP_MPSMIN(readq(&dev->bar->cap)) + 12; 1951 1805 1952 - mem = dma_alloc_coherent(&dev->pci_dev->dev, 8192, &dma_addr, 1953 - GFP_KERNEL); 1806 + mem = dma_alloc_coherent(&pdev->dev, 8192, &dma_addr, GFP_KERNEL); 1954 1807 if (!mem) 1955 1808 return -ENOMEM; 1956 1809 ··· 1962 1817 ctrl = mem; 1963 1818 nn = le32_to_cpup(&ctrl->nn); 1964 1819 dev->oncs = le16_to_cpup(&ctrl->oncs); 1820 + dev->abort_limit = ctrl->acl + 1; 1965 1821 memcpy(dev->serial, ctrl->sn, sizeof(ctrl->sn)); 1966 1822 memcpy(dev->model, ctrl->mn, sizeof(ctrl->mn)); 1967 1823 memcpy(dev->firmware_rev, ctrl->fr, sizeof(ctrl->fr)); 1968 1824 if (ctrl->mdts) 1969 1825 dev->max_hw_sectors = 1 << (ctrl->mdts + shift - 9); 1970 - if ((dev->pci_dev->vendor == PCI_VENDOR_ID_INTEL) && 1971 - (dev->pci_dev->device == 0x0953) && ctrl->vs[3]) 1826 + if ((pdev->vendor == PCI_VENDOR_ID_INTEL) && 1827 + (pdev->device == 0x0953) && ctrl->vs[3]) 1972 1828 dev->stripe_size = 1 << (ctrl->vs[3] + shift); 1973 1829 1974 1830 id_ns = mem; ··· 2017 1871 dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32))) 2018 1872 goto disable; 2019 1873 2020 - pci_set_drvdata(pdev, dev); 2021 1874 dev->bar = ioremap(pci_resource_start(pdev, 0), 8192); 2022 1875 if (!dev->bar) 2023 1876 goto disable; 2024 - 2025 - dev->db_stride = NVME_CAP_STRIDE(readq(&dev->bar->cap)); 1877 + if (readl(&dev->bar->csts) == -1) { 1878 + result = -ENODEV; 1879 + goto unmap; 1880 + } 1881 + dev->db_stride = 1 << NVME_CAP_STRIDE(readq(&dev->bar->cap)); 2026 1882 dev->dbs = ((void __iomem *)dev->bar) + 4096; 2027 1883 2028 1884 return 0; 2029 1885 1886 + unmap: 1887 + iounmap(dev->bar); 1888 + dev->bar = NULL; 2030 1889 disable: 2031 1890 pci_release_regions(pdev); 2032 1891 disable_pci: ··· 2049 1898 if (dev->bar) { 2050 1899 iounmap(dev->bar); 2051 1900 dev->bar = NULL; 1901 + pci_release_regions(dev->pci_dev); 2052 1902 } 2053 1903 2054 - pci_release_regions(dev->pci_dev); 2055 1904 if (pci_is_enabled(dev->pci_dev)) 2056 1905 pci_disable_device(dev->pci_dev); 1906 + } 1907 + 1908 + struct nvme_delq_ctx { 1909 + struct task_struct *waiter; 1910 + struct kthread_worker *worker; 1911 + atomic_t refcount; 1912 + }; 1913 + 1914 + static void nvme_wait_dq(struct nvme_delq_ctx *dq, struct nvme_dev *dev) 1915 + { 1916 + dq->waiter = current; 1917 + mb(); 1918 + 1919 + for (;;) { 1920 + set_current_state(TASK_KILLABLE); 1921 + if (!atomic_read(&dq->refcount)) 1922 + break; 1923 + if (!schedule_timeout(ADMIN_TIMEOUT) || 1924 + fatal_signal_pending(current)) { 1925 + set_current_state(TASK_RUNNING); 1926 + 1927 + nvme_disable_ctrl(dev, readq(&dev->bar->cap)); 1928 + nvme_disable_queue(dev, 0); 1929 + 1930 + send_sig(SIGKILL, dq->worker->task, 1); 1931 + flush_kthread_worker(dq->worker); 1932 + return; 1933 + } 1934 + } 1935 + set_current_state(TASK_RUNNING); 1936 + } 1937 + 1938 + static void nvme_put_dq(struct nvme_delq_ctx *dq) 1939 + { 1940 + atomic_dec(&dq->refcount); 1941 + if (dq->waiter) 1942 + wake_up_process(dq->waiter); 1943 + } 1944 + 1945 + static struct nvme_delq_ctx *nvme_get_dq(struct nvme_delq_ctx *dq) 1946 + { 1947 + atomic_inc(&dq->refcount); 1948 + return dq; 1949 + } 1950 + 1951 + static void nvme_del_queue_end(struct nvme_queue *nvmeq) 1952 + { 1953 + struct nvme_delq_ctx *dq = nvmeq->cmdinfo.ctx; 1954 + 1955 + nvme_clear_queue(nvmeq); 1956 + nvme_put_dq(dq); 1957 + } 1958 + 1959 + static int adapter_async_del_queue(struct nvme_queue *nvmeq, u8 opcode, 1960 + kthread_work_func_t fn) 1961 + { 1962 + struct nvme_command c; 1963 + 1964 + memset(&c, 0, sizeof(c)); 1965 + c.delete_queue.opcode = opcode; 1966 + c.delete_queue.qid = cpu_to_le16(nvmeq->qid); 1967 + 1968 + init_kthread_work(&nvmeq->cmdinfo.work, fn); 1969 + return nvme_submit_admin_cmd_async(nvmeq->dev, &c, &nvmeq->cmdinfo); 1970 + } 1971 + 1972 + static void nvme_del_cq_work_handler(struct kthread_work *work) 1973 + { 1974 + struct nvme_queue *nvmeq = container_of(work, struct nvme_queue, 1975 + cmdinfo.work); 1976 + nvme_del_queue_end(nvmeq); 1977 + } 1978 + 1979 + static int nvme_delete_cq(struct nvme_queue *nvmeq) 1980 + { 1981 + return adapter_async_del_queue(nvmeq, nvme_admin_delete_cq, 1982 + nvme_del_cq_work_handler); 1983 + } 1984 + 1985 + static void nvme_del_sq_work_handler(struct kthread_work *work) 1986 + { 1987 + struct nvme_queue *nvmeq = container_of(work, struct nvme_queue, 1988 + cmdinfo.work); 1989 + int status = nvmeq->cmdinfo.status; 1990 + 1991 + if (!status) 1992 + status = nvme_delete_cq(nvmeq); 1993 + if (status) 1994 + nvme_del_queue_end(nvmeq); 1995 + } 1996 + 1997 + static int nvme_delete_sq(struct nvme_queue *nvmeq) 1998 + { 1999 + return adapter_async_del_queue(nvmeq, nvme_admin_delete_sq, 2000 + nvme_del_sq_work_handler); 2001 + } 2002 + 2003 + static void nvme_del_queue_start(struct kthread_work *work) 2004 + { 2005 + struct nvme_queue *nvmeq = container_of(work, struct nvme_queue, 2006 + cmdinfo.work); 2007 + allow_signal(SIGKILL); 2008 + if (nvme_delete_sq(nvmeq)) 2009 + nvme_del_queue_end(nvmeq); 2010 + } 2011 + 2012 + static void nvme_disable_io_queues(struct nvme_dev *dev) 2013 + { 2014 + int i; 2015 + DEFINE_KTHREAD_WORKER_ONSTACK(worker); 2016 + struct nvme_delq_ctx dq; 2017 + struct task_struct *kworker_task = kthread_run(kthread_worker_fn, 2018 + &worker, "nvme%d", dev->instance); 2019 + 2020 + if (IS_ERR(kworker_task)) { 2021 + dev_err(&dev->pci_dev->dev, 2022 + "Failed to create queue del task\n"); 2023 + for (i = dev->queue_count - 1; i > 0; i--) 2024 + nvme_disable_queue(dev, i); 2025 + return; 2026 + } 2027 + 2028 + dq.waiter = NULL; 2029 + atomic_set(&dq.refcount, 0); 2030 + dq.worker = &worker; 2031 + for (i = dev->queue_count - 1; i > 0; i--) { 2032 + struct nvme_queue *nvmeq = dev->queues[i]; 2033 + 2034 + if (nvme_suspend_queue(nvmeq)) 2035 + continue; 2036 + nvmeq->cmdinfo.ctx = nvme_get_dq(&dq); 2037 + nvmeq->cmdinfo.worker = dq.worker; 2038 + init_kthread_work(&nvmeq->cmdinfo.work, nvme_del_queue_start); 2039 + queue_kthread_work(dq.worker, &nvmeq->cmdinfo.work); 2040 + } 2041 + nvme_wait_dq(&dq, dev); 2042 + kthread_stop(kworker_task); 2057 2043 } 2058 2044 2059 2045 static void nvme_dev_shutdown(struct nvme_dev *dev) 2060 2046 { 2061 2047 int i; 2062 2048 2063 - for (i = dev->queue_count - 1; i >= 0; i--) 2064 - nvme_disable_queue(dev, i); 2049 + dev->initialized = 0; 2065 2050 2066 2051 spin_lock(&dev_list_lock); 2067 2052 list_del_init(&dev->node); 2068 2053 spin_unlock(&dev_list_lock); 2069 2054 2070 - if (dev->bar) 2055 + if (!dev->bar || (dev->bar && readl(&dev->bar->csts) == -1)) { 2056 + for (i = dev->queue_count - 1; i >= 0; i--) { 2057 + struct nvme_queue *nvmeq = dev->queues[i]; 2058 + nvme_suspend_queue(nvmeq); 2059 + nvme_clear_queue(nvmeq); 2060 + } 2061 + } else { 2062 + nvme_disable_io_queues(dev); 2071 2063 nvme_shutdown_ctrl(dev); 2064 + nvme_disable_queue(dev, 0); 2065 + } 2072 2066 nvme_dev_unmap(dev); 2073 2067 } 2074 2068 2075 2069 static void nvme_dev_remove(struct nvme_dev *dev) 2076 2070 { 2077 - struct nvme_ns *ns, *next; 2071 + struct nvme_ns *ns; 2078 2072 2079 - list_for_each_entry_safe(ns, next, &dev->namespaces, list) { 2080 - list_del(&ns->list); 2081 - del_gendisk(ns->disk); 2082 - nvme_ns_free(ns); 2073 + list_for_each_entry(ns, &dev->namespaces, list) { 2074 + if (ns->disk->flags & GENHD_FL_UP) 2075 + del_gendisk(ns->disk); 2076 + if (!blk_queue_dying(ns->queue)) 2077 + blk_cleanup_queue(ns->queue); 2083 2078 } 2084 2079 } 2085 2080 ··· 2282 1985 spin_unlock(&dev_list_lock); 2283 1986 } 2284 1987 1988 + static void nvme_free_namespaces(struct nvme_dev *dev) 1989 + { 1990 + struct nvme_ns *ns, *next; 1991 + 1992 + list_for_each_entry_safe(ns, next, &dev->namespaces, list) { 1993 + list_del(&ns->list); 1994 + put_disk(ns->disk); 1995 + kfree(ns); 1996 + } 1997 + } 1998 + 2285 1999 static void nvme_free_dev(struct kref *kref) 2286 2000 { 2287 2001 struct nvme_dev *dev = container_of(kref, struct nvme_dev, kref); 2288 - nvme_dev_remove(dev); 2289 - nvme_dev_shutdown(dev); 2290 - nvme_free_queues(dev); 2291 - nvme_release_instance(dev); 2292 - nvme_release_prp_pools(dev); 2002 + 2003 + nvme_free_namespaces(dev); 2293 2004 kfree(dev->queues); 2294 2005 kfree(dev->entry); 2295 2006 kfree(dev); ··· 2361 2056 return result; 2362 2057 2363 2058 disable: 2059 + nvme_disable_queue(dev, 0); 2364 2060 spin_lock(&dev_list_lock); 2365 2061 list_del_init(&dev->node); 2366 2062 spin_unlock(&dev_list_lock); 2367 2063 unmap: 2368 2064 nvme_dev_unmap(dev); 2369 2065 return result; 2066 + } 2067 + 2068 + static int nvme_remove_dead_ctrl(void *arg) 2069 + { 2070 + struct nvme_dev *dev = (struct nvme_dev *)arg; 2071 + struct pci_dev *pdev = dev->pci_dev; 2072 + 2073 + if (pci_get_drvdata(pdev)) 2074 + pci_stop_and_remove_bus_device(pdev); 2075 + kref_put(&dev->kref, nvme_free_dev); 2076 + return 0; 2077 + } 2078 + 2079 + static void nvme_remove_disks(struct work_struct *ws) 2080 + { 2081 + int i; 2082 + struct nvme_dev *dev = container_of(ws, struct nvme_dev, reset_work); 2083 + 2084 + nvme_dev_remove(dev); 2085 + spin_lock(&dev_list_lock); 2086 + for (i = dev->queue_count - 1; i > 0; i--) { 2087 + BUG_ON(!dev->queues[i] || !dev->queues[i]->q_suspended); 2088 + nvme_free_queue(dev->queues[i]); 2089 + dev->queue_count--; 2090 + dev->queues[i] = NULL; 2091 + } 2092 + spin_unlock(&dev_list_lock); 2093 + } 2094 + 2095 + static int nvme_dev_resume(struct nvme_dev *dev) 2096 + { 2097 + int ret; 2098 + 2099 + ret = nvme_dev_start(dev); 2100 + if (ret && ret != -EBUSY) 2101 + return ret; 2102 + if (ret == -EBUSY) { 2103 + spin_lock(&dev_list_lock); 2104 + PREPARE_WORK(&dev->reset_work, nvme_remove_disks); 2105 + queue_work(nvme_workq, &dev->reset_work); 2106 + spin_unlock(&dev_list_lock); 2107 + } 2108 + dev->initialized = 1; 2109 + return 0; 2110 + } 2111 + 2112 + static void nvme_dev_reset(struct nvme_dev *dev) 2113 + { 2114 + nvme_dev_shutdown(dev); 2115 + if (nvme_dev_resume(dev)) { 2116 + dev_err(&dev->pci_dev->dev, "Device failed to resume\n"); 2117 + kref_get(&dev->kref); 2118 + if (IS_ERR(kthread_run(nvme_remove_dead_ctrl, dev, "nvme%d", 2119 + dev->instance))) { 2120 + dev_err(&dev->pci_dev->dev, 2121 + "Failed to start controller remove task\n"); 2122 + kref_put(&dev->kref, nvme_free_dev); 2123 + } 2124 + } 2125 + } 2126 + 2127 + static void nvme_reset_failed_dev(struct work_struct *ws) 2128 + { 2129 + struct nvme_dev *dev = container_of(ws, struct nvme_dev, reset_work); 2130 + nvme_dev_reset(dev); 2370 2131 } 2371 2132 2372 2133 static int nvme_probe(struct pci_dev *pdev, const struct pci_device_id *id) ··· 2453 2082 goto free; 2454 2083 2455 2084 INIT_LIST_HEAD(&dev->namespaces); 2085 + INIT_WORK(&dev->reset_work, nvme_reset_failed_dev); 2456 2086 dev->pci_dev = pdev; 2457 - 2087 + pci_set_drvdata(pdev, dev); 2458 2088 result = nvme_set_instance(dev); 2459 2089 if (result) 2460 2090 goto free; ··· 2471 2099 goto release_pools; 2472 2100 } 2473 2101 2102 + kref_init(&dev->kref); 2474 2103 result = nvme_dev_add(dev); 2475 2104 if (result) 2476 2105 goto shutdown; ··· 2486 2113 if (result) 2487 2114 goto remove; 2488 2115 2489 - kref_init(&dev->kref); 2116 + dev->initialized = 1; 2490 2117 return 0; 2491 2118 2492 2119 remove: 2493 2120 nvme_dev_remove(dev); 2121 + nvme_free_namespaces(dev); 2494 2122 shutdown: 2495 2123 nvme_dev_shutdown(dev); 2496 2124 release_pools: 2497 - nvme_free_queues(dev); 2125 + nvme_free_queues(dev, 0); 2498 2126 nvme_release_prp_pools(dev); 2499 2127 release: 2500 2128 nvme_release_instance(dev); ··· 2506 2132 return result; 2507 2133 } 2508 2134 2135 + static void nvme_shutdown(struct pci_dev *pdev) 2136 + { 2137 + struct nvme_dev *dev = pci_get_drvdata(pdev); 2138 + nvme_dev_shutdown(dev); 2139 + } 2140 + 2509 2141 static void nvme_remove(struct pci_dev *pdev) 2510 2142 { 2511 2143 struct nvme_dev *dev = pci_get_drvdata(pdev); 2144 + 2145 + spin_lock(&dev_list_lock); 2146 + list_del_init(&dev->node); 2147 + spin_unlock(&dev_list_lock); 2148 + 2149 + pci_set_drvdata(pdev, NULL); 2150 + flush_work(&dev->reset_work); 2512 2151 misc_deregister(&dev->miscdev); 2152 + nvme_dev_remove(dev); 2153 + nvme_dev_shutdown(dev); 2154 + nvme_free_queues(dev, 0); 2155 + nvme_release_instance(dev); 2156 + nvme_release_prp_pools(dev); 2513 2157 kref_put(&dev->kref, nvme_free_dev); 2514 2158 } 2515 2159 ··· 2551 2159 { 2552 2160 struct pci_dev *pdev = to_pci_dev(dev); 2553 2161 struct nvme_dev *ndev = pci_get_drvdata(pdev); 2554 - int ret; 2555 2162 2556 - ret = nvme_dev_start(ndev); 2557 - /* XXX: should remove gendisks if resume fails */ 2558 - if (ret) 2559 - nvme_free_queues(ndev); 2560 - return ret; 2163 + if (nvme_dev_resume(ndev) && !work_busy(&ndev->reset_work)) { 2164 + PREPARE_WORK(&ndev->reset_work, nvme_reset_failed_dev); 2165 + queue_work(nvme_workq, &ndev->reset_work); 2166 + } 2167 + return 0; 2561 2168 } 2562 2169 2563 2170 static SIMPLE_DEV_PM_OPS(nvme_dev_pm_ops, nvme_suspend, nvme_resume); ··· 2583 2192 .id_table = nvme_id_table, 2584 2193 .probe = nvme_probe, 2585 2194 .remove = nvme_remove, 2195 + .shutdown = nvme_shutdown, 2586 2196 .driver = { 2587 2197 .pm = &nvme_dev_pm_ops, 2588 2198 }, ··· 2598 2206 if (IS_ERR(nvme_thread)) 2599 2207 return PTR_ERR(nvme_thread); 2600 2208 2209 + result = -ENOMEM; 2210 + nvme_workq = create_singlethread_workqueue("nvme"); 2211 + if (!nvme_workq) 2212 + goto kill_kthread; 2213 + 2601 2214 result = register_blkdev(nvme_major, "nvme"); 2602 2215 if (result < 0) 2603 - goto kill_kthread; 2216 + goto kill_workq; 2604 2217 else if (result > 0) 2605 2218 nvme_major = result; 2606 2219 ··· 2616 2219 2617 2220 unregister_blkdev: 2618 2221 unregister_blkdev(nvme_major, "nvme"); 2222 + kill_workq: 2223 + destroy_workqueue(nvme_workq); 2619 2224 kill_kthread: 2620 2225 kthread_stop(nvme_thread); 2621 2226 return result; ··· 2627 2228 { 2628 2229 pci_unregister_driver(&nvme_driver); 2629 2230 unregister_blkdev(nvme_major, "nvme"); 2231 + destroy_workqueue(nvme_workq); 2630 2232 kthread_stop(nvme_thread); 2631 2233 } 2632 2234
+147
drivers/block/nvme-scsi.c
··· 25 25 #include <linux/bio.h> 26 26 #include <linux/bitops.h> 27 27 #include <linux/blkdev.h> 28 + #include <linux/compat.h> 28 29 #include <linux/delay.h> 29 30 #include <linux/errno.h> 30 31 #include <linux/fs.h> ··· 3038 3037 3039 3038 return retcode; 3040 3039 } 3040 + 3041 + #ifdef CONFIG_COMPAT 3042 + typedef struct sg_io_hdr32 { 3043 + compat_int_t interface_id; /* [i] 'S' for SCSI generic (required) */ 3044 + compat_int_t dxfer_direction; /* [i] data transfer direction */ 3045 + unsigned char cmd_len; /* [i] SCSI command length ( <= 16 bytes) */ 3046 + unsigned char mx_sb_len; /* [i] max length to write to sbp */ 3047 + unsigned short iovec_count; /* [i] 0 implies no scatter gather */ 3048 + compat_uint_t dxfer_len; /* [i] byte count of data transfer */ 3049 + compat_uint_t dxferp; /* [i], [*io] points to data transfer memory 3050 + or scatter gather list */ 3051 + compat_uptr_t cmdp; /* [i], [*i] points to command to perform */ 3052 + compat_uptr_t sbp; /* [i], [*o] points to sense_buffer memory */ 3053 + compat_uint_t timeout; /* [i] MAX_UINT->no timeout (unit: millisec) */ 3054 + compat_uint_t flags; /* [i] 0 -> default, see SG_FLAG... */ 3055 + compat_int_t pack_id; /* [i->o] unused internally (normally) */ 3056 + compat_uptr_t usr_ptr; /* [i->o] unused internally */ 3057 + unsigned char status; /* [o] scsi status */ 3058 + unsigned char masked_status; /* [o] shifted, masked scsi status */ 3059 + unsigned char msg_status; /* [o] messaging level data (optional) */ 3060 + unsigned char sb_len_wr; /* [o] byte count actually written to sbp */ 3061 + unsigned short host_status; /* [o] errors from host adapter */ 3062 + unsigned short driver_status; /* [o] errors from software driver */ 3063 + compat_int_t resid; /* [o] dxfer_len - actual_transferred */ 3064 + compat_uint_t duration; /* [o] time taken by cmd (unit: millisec) */ 3065 + compat_uint_t info; /* [o] auxiliary information */ 3066 + } sg_io_hdr32_t; /* 64 bytes long (on sparc32) */ 3067 + 3068 + typedef struct sg_iovec32 { 3069 + compat_uint_t iov_base; 3070 + compat_uint_t iov_len; 3071 + } sg_iovec32_t; 3072 + 3073 + static int sg_build_iovec(sg_io_hdr_t __user *sgio, void __user *dxferp, u16 iovec_count) 3074 + { 3075 + sg_iovec_t __user *iov = (sg_iovec_t __user *) (sgio + 1); 3076 + sg_iovec32_t __user *iov32 = dxferp; 3077 + int i; 3078 + 3079 + for (i = 0; i < iovec_count; i++) { 3080 + u32 base, len; 3081 + 3082 + if (get_user(base, &iov32[i].iov_base) || 3083 + get_user(len, &iov32[i].iov_len) || 3084 + put_user(compat_ptr(base), &iov[i].iov_base) || 3085 + put_user(len, &iov[i].iov_len)) 3086 + return -EFAULT; 3087 + } 3088 + 3089 + if (put_user(iov, &sgio->dxferp)) 3090 + return -EFAULT; 3091 + return 0; 3092 + } 3093 + 3094 + int nvme_sg_io32(struct nvme_ns *ns, unsigned long arg) 3095 + { 3096 + sg_io_hdr32_t __user *sgio32 = (sg_io_hdr32_t __user *)arg; 3097 + sg_io_hdr_t __user *sgio; 3098 + u16 iovec_count; 3099 + u32 data; 3100 + void __user *dxferp; 3101 + int err; 3102 + int interface_id; 3103 + 3104 + if (get_user(interface_id, &sgio32->interface_id)) 3105 + return -EFAULT; 3106 + if (interface_id != 'S') 3107 + return -EINVAL; 3108 + 3109 + if (get_user(iovec_count, &sgio32->iovec_count)) 3110 + return -EFAULT; 3111 + 3112 + { 3113 + void __user *top = compat_alloc_user_space(0); 3114 + void __user *new = compat_alloc_user_space(sizeof(sg_io_hdr_t) + 3115 + (iovec_count * sizeof(sg_iovec_t))); 3116 + if (new > top) 3117 + return -EINVAL; 3118 + 3119 + sgio = new; 3120 + } 3121 + 3122 + /* Ok, now construct. */ 3123 + if (copy_in_user(&sgio->interface_id, &sgio32->interface_id, 3124 + (2 * sizeof(int)) + 3125 + (2 * sizeof(unsigned char)) + 3126 + (1 * sizeof(unsigned short)) + 3127 + (1 * sizeof(unsigned int)))) 3128 + return -EFAULT; 3129 + 3130 + if (get_user(data, &sgio32->dxferp)) 3131 + return -EFAULT; 3132 + dxferp = compat_ptr(data); 3133 + if (iovec_count) { 3134 + if (sg_build_iovec(sgio, dxferp, iovec_count)) 3135 + return -EFAULT; 3136 + } else { 3137 + if (put_user(dxferp, &sgio->dxferp)) 3138 + return -EFAULT; 3139 + } 3140 + 3141 + { 3142 + unsigned char __user *cmdp; 3143 + unsigned char __user *sbp; 3144 + 3145 + if (get_user(data, &sgio32->cmdp)) 3146 + return -EFAULT; 3147 + cmdp = compat_ptr(data); 3148 + 3149 + if (get_user(data, &sgio32->sbp)) 3150 + return -EFAULT; 3151 + sbp = compat_ptr(data); 3152 + 3153 + if (put_user(cmdp, &sgio->cmdp) || 3154 + put_user(sbp, &sgio->sbp)) 3155 + return -EFAULT; 3156 + } 3157 + 3158 + if (copy_in_user(&sgio->timeout, &sgio32->timeout, 3159 + 3 * sizeof(int))) 3160 + return -EFAULT; 3161 + 3162 + if (get_user(data, &sgio32->usr_ptr)) 3163 + return -EFAULT; 3164 + if (put_user(compat_ptr(data), &sgio->usr_ptr)) 3165 + return -EFAULT; 3166 + 3167 + err = nvme_sg_io(ns, sgio); 3168 + if (err >= 0) { 3169 + void __user *datap; 3170 + 3171 + if (copy_in_user(&sgio32->pack_id, &sgio->pack_id, 3172 + sizeof(int)) || 3173 + get_user(datap, &sgio->usr_ptr) || 3174 + put_user((u32)(unsigned long)datap, 3175 + &sgio32->usr_ptr) || 3176 + copy_in_user(&sgio32->status, &sgio->status, 3177 + (4 * sizeof(unsigned char)) + 3178 + (2 * sizeof(unsigned short)) + 3179 + (3 * sizeof(int)))) 3180 + err = -EFAULT; 3181 + } 3182 + 3183 + return err; 3184 + } 3185 + #endif 3041 3186 3042 3187 int nvme_sg_get_version_num(int __user *ip) 3043 3188 {
+5 -1
include/linux/nvme.h
··· 80 80 struct dma_pool *prp_small_pool; 81 81 int instance; 82 82 int queue_count; 83 - int db_stride; 83 + u32 db_stride; 84 84 u32 ctrl_config; 85 85 struct msix_entry *entry; 86 86 struct nvme_bar __iomem *bar; 87 87 struct list_head namespaces; 88 88 struct kref kref; 89 89 struct miscdevice miscdev; 90 + struct work_struct reset_work; 90 91 char name[12]; 91 92 char serial[20]; 92 93 char model[40]; ··· 95 94 u32 max_hw_sectors; 96 95 u32 stripe_size; 97 96 u16 oncs; 97 + u16 abort_limit; 98 + u8 initialized; 98 99 }; 99 100 100 101 /* ··· 168 165 struct sg_io_hdr; 169 166 170 167 int nvme_sg_io(struct nvme_ns *ns, struct sg_io_hdr __user *u_hdr); 168 + int nvme_sg_io32(struct nvme_ns *ns, unsigned long arg); 171 169 int nvme_sg_get_version_num(int __user *ip); 172 170 173 171 #endif /* _LINUX_NVME_H */
+11
include/uapi/linux/nvme.h
··· 350 350 __u32 rsvd11[5]; 351 351 }; 352 352 353 + struct nvme_abort_cmd { 354 + __u8 opcode; 355 + __u8 flags; 356 + __u16 command_id; 357 + __u32 rsvd1[9]; 358 + __le16 sqid; 359 + __u16 cid; 360 + __u32 rsvd11[5]; 361 + }; 362 + 353 363 struct nvme_download_firmware { 354 364 __u8 opcode; 355 365 __u8 flags; ··· 394 384 struct nvme_download_firmware dlfw; 395 385 struct nvme_format_cmd format; 396 386 struct nvme_dsm_cmd dsm; 387 + struct nvme_abort_cmd abort; 397 388 }; 398 389 }; 399 390