diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-15 21:58:03 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-15 21:58:03 -0400 |
| commit | b55b39020289f225bf2455349ce1a67372a0baa9 (patch) | |
| tree | c3260506743ba69a2d558a91737f0811edb301d0 /include | |
| parent | abf04af74a9f27a65172a43b43ccabcbc2bbdc39 (diff) | |
| parent | b8e080847a7292347a3eee76264f77e4abcb61f7 (diff) | |
Merge git://git.infradead.org/users/willy/linux-nvme
Pull NVMe update from Matthew Wilcox:
"Mostly bugfixes again for the NVMe driver. I'd like to call out the
exported tracepoint in the block layer; I believe Keith has cleared
this with Jens.
We've had a few reports from people who're really pounding on NVMe
devices at scale, hence the timeout changes (and new module
parameters), hotplug cpu deadlock, tracepoints, and minor performance
tweaks"
[ Jens hadn't seen that tracepoint thing, but is ok with it - it will
end up going away when mq conversion happens ]
* git://git.infradead.org/users/willy/linux-nvme: (22 commits)
NVMe: Fix START_STOP_UNIT Scsi->NVMe translation.
NVMe: Use Log Page constants in SCSI emulation
NVMe: Define Log Page constants
NVMe: Fix hot cpu notification dead lock
NVMe: Rename io_timeout to nvme_io_timeout
NVMe: Use last bytes of f/w rev SCSI Inquiry
NVMe: Adhere to request queue block accounting enable/disable
NVMe: Fix nvme get/put queue semantics
NVMe: Delete NVME_GET_FEAT_TEMP_THRESH
NVMe: Make admin timeout a module parameter
NVMe: Make iod bio timeout a parameter
NVMe: Prevent possible NULL pointer dereference
NVMe: Fix the buffer size passed in GetLogPage(CDW10.NUMD)
NVMe: Update data structures for NVMe 1.2
NVMe: Enable BUILD_BUG_ON checks
NVMe: Update namespace and controller identify structures to the 1.1a spec
NVMe: Flush with data support
NVMe: Configure support for block flush
NVMe: Add tracepoints
NVMe: Protect against badly formatted CQEs
...
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/nvme.h | 14 | ||||
| -rw-r--r-- | include/uapi/linux/nvme.h | 50 |
2 files changed, 44 insertions, 20 deletions
diff --git a/include/linux/nvme.h b/include/linux/nvme.h index a50173ca1d72..2bf403195c09 100644 --- a/include/linux/nvme.h +++ b/include/linux/nvme.h | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Definitions for the NVM Express interface | 2 | * Definitions for the NVM Express interface |
| 3 | * Copyright (c) 2011-2013, Intel Corporation. | 3 | * Copyright (c) 2011-2014, Intel Corporation. |
| 4 | * | 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
| 6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
| @@ -10,10 +10,6 @@ | |||
| 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 12 | * more details. | 12 | * more details. |
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License along with | ||
| 15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
| 16 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 17 | */ | 13 | */ |
| 18 | 14 | ||
| 19 | #ifndef _LINUX_NVME_H | 15 | #ifndef _LINUX_NVME_H |
| @@ -66,8 +62,8 @@ enum { | |||
| 66 | 62 | ||
| 67 | #define NVME_VS(major, minor) (major << 16 | minor) | 63 | #define NVME_VS(major, minor) (major << 16 | minor) |
| 68 | 64 | ||
| 69 | extern unsigned char io_timeout; | 65 | extern unsigned char nvme_io_timeout; |
| 70 | #define NVME_IO_TIMEOUT (io_timeout * HZ) | 66 | #define NVME_IO_TIMEOUT (nvme_io_timeout * HZ) |
| 71 | 67 | ||
| 72 | /* | 68 | /* |
| 73 | * Represents an NVM Express device. Each nvme_dev is a PCI function. | 69 | * Represents an NVM Express device. Each nvme_dev is a PCI function. |
| @@ -94,7 +90,7 @@ struct nvme_dev { | |||
| 94 | struct miscdevice miscdev; | 90 | struct miscdevice miscdev; |
| 95 | work_func_t reset_workfn; | 91 | work_func_t reset_workfn; |
| 96 | struct work_struct reset_work; | 92 | struct work_struct reset_work; |
| 97 | struct notifier_block nb; | 93 | struct work_struct cpu_work; |
| 98 | char name[12]; | 94 | char name[12]; |
| 99 | char serial[20]; | 95 | char serial[20]; |
| 100 | char model[40]; | 96 | char model[40]; |
| @@ -103,6 +99,7 @@ struct nvme_dev { | |||
| 103 | u32 stripe_size; | 99 | u32 stripe_size; |
| 104 | u16 oncs; | 100 | u16 oncs; |
| 105 | u16 abort_limit; | 101 | u16 abort_limit; |
| 102 | u8 vwc; | ||
| 106 | u8 initialized; | 103 | u8 initialized; |
| 107 | }; | 104 | }; |
| 108 | 105 | ||
| @@ -159,7 +156,6 @@ struct nvme_iod *nvme_map_user_pages(struct nvme_dev *dev, int write, | |||
| 159 | void nvme_unmap_user_pages(struct nvme_dev *dev, int write, | 156 | void nvme_unmap_user_pages(struct nvme_dev *dev, int write, |
| 160 | struct nvme_iod *iod); | 157 | struct nvme_iod *iod); |
| 161 | int nvme_submit_io_cmd(struct nvme_dev *, struct nvme_command *, u32 *); | 158 | int nvme_submit_io_cmd(struct nvme_dev *, struct nvme_command *, u32 *); |
| 162 | int nvme_submit_flush_data(struct nvme_queue *nvmeq, struct nvme_ns *ns); | ||
| 163 | int nvme_submit_admin_cmd(struct nvme_dev *, struct nvme_command *, | 159 | int nvme_submit_admin_cmd(struct nvme_dev *, struct nvme_command *, |
| 164 | u32 *result); | 160 | u32 *result); |
| 165 | int nvme_identify(struct nvme_dev *, unsigned nsid, unsigned cns, | 161 | int nvme_identify(struct nvme_dev *, unsigned nsid, unsigned cns, |
diff --git a/include/uapi/linux/nvme.h b/include/uapi/linux/nvme.h index 096fe1c6f83d..29a7d8619d8d 100644 --- a/include/uapi/linux/nvme.h +++ b/include/uapi/linux/nvme.h | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Definitions for the NVM Express interface | 2 | * Definitions for the NVM Express interface |
| 3 | * Copyright (c) 2011-2013, Intel Corporation. | 3 | * Copyright (c) 2011-2014, Intel Corporation. |
| 4 | * | 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
| 6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
| @@ -10,10 +10,6 @@ | |||
| 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 12 | * more details. | 12 | * more details. |
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License along with | ||
| 15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
| 16 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 17 | */ | 13 | */ |
| 18 | 14 | ||
| 19 | #ifndef _UAPI_LINUX_NVME_H | 15 | #ifndef _UAPI_LINUX_NVME_H |
| @@ -31,7 +27,12 @@ struct nvme_id_power_state { | |||
| 31 | __u8 read_lat; | 27 | __u8 read_lat; |
| 32 | __u8 write_tput; | 28 | __u8 write_tput; |
| 33 | __u8 write_lat; | 29 | __u8 write_lat; |
| 34 | __u8 rsvd16[16]; | 30 | __le16 idle_power; |
| 31 | __u8 idle_scale; | ||
| 32 | __u8 rsvd19; | ||
| 33 | __le16 active_power; | ||
| 34 | __u8 active_work_scale; | ||
| 35 | __u8 rsvd23[9]; | ||
| 35 | }; | 36 | }; |
| 36 | 37 | ||
| 37 | enum { | 38 | enum { |
| @@ -49,7 +50,9 @@ struct nvme_id_ctrl { | |||
| 49 | __u8 ieee[3]; | 50 | __u8 ieee[3]; |
| 50 | __u8 mic; | 51 | __u8 mic; |
| 51 | __u8 mdts; | 52 | __u8 mdts; |
| 52 | __u8 rsvd78[178]; | 53 | __u16 cntlid; |
| 54 | __u32 ver; | ||
| 55 | __u8 rsvd84[172]; | ||
| 53 | __le16 oacs; | 56 | __le16 oacs; |
| 54 | __u8 acl; | 57 | __u8 acl; |
| 55 | __u8 aerl; | 58 | __u8 aerl; |
| @@ -57,7 +60,11 @@ struct nvme_id_ctrl { | |||
| 57 | __u8 lpa; | 60 | __u8 lpa; |
| 58 | __u8 elpe; | 61 | __u8 elpe; |
| 59 | __u8 npss; | 62 | __u8 npss; |
| 60 | __u8 rsvd264[248]; | 63 | __u8 avscc; |
| 64 | __u8 apsta; | ||
| 65 | __le16 wctemp; | ||
| 66 | __le16 cctemp; | ||
| 67 | __u8 rsvd270[242]; | ||
| 61 | __u8 sqes; | 68 | __u8 sqes; |
| 62 | __u8 cqes; | 69 | __u8 cqes; |
| 63 | __u8 rsvd514[2]; | 70 | __u8 rsvd514[2]; |
| @@ -68,7 +75,12 @@ struct nvme_id_ctrl { | |||
| 68 | __u8 vwc; | 75 | __u8 vwc; |
| 69 | __le16 awun; | 76 | __le16 awun; |
| 70 | __le16 awupf; | 77 | __le16 awupf; |
| 71 | __u8 rsvd530[1518]; | 78 | __u8 nvscc; |
| 79 | __u8 rsvd531; | ||
| 80 | __le16 acwu; | ||
| 81 | __u8 rsvd534[2]; | ||
| 82 | __le32 sgls; | ||
| 83 | __u8 rsvd540[1508]; | ||
| 72 | struct nvme_id_power_state psd[32]; | 84 | struct nvme_id_power_state psd[32]; |
| 73 | __u8 vs[1024]; | 85 | __u8 vs[1024]; |
| 74 | }; | 86 | }; |
| @@ -77,6 +89,7 @@ enum { | |||
| 77 | NVME_CTRL_ONCS_COMPARE = 1 << 0, | 89 | NVME_CTRL_ONCS_COMPARE = 1 << 0, |
| 78 | NVME_CTRL_ONCS_WRITE_UNCORRECTABLE = 1 << 1, | 90 | NVME_CTRL_ONCS_WRITE_UNCORRECTABLE = 1 << 1, |
| 79 | NVME_CTRL_ONCS_DSM = 1 << 2, | 91 | NVME_CTRL_ONCS_DSM = 1 << 2, |
| 92 | NVME_CTRL_VWC_PRESENT = 1 << 0, | ||
| 80 | }; | 93 | }; |
| 81 | 94 | ||
| 82 | struct nvme_lbaf { | 95 | struct nvme_lbaf { |
| @@ -95,7 +108,15 @@ struct nvme_id_ns { | |||
| 95 | __u8 mc; | 108 | __u8 mc; |
| 96 | __u8 dpc; | 109 | __u8 dpc; |
| 97 | __u8 dps; | 110 | __u8 dps; |
| 98 | __u8 rsvd30[98]; | 111 | __u8 nmic; |
| 112 | __u8 rescap; | ||
| 113 | __u8 fpi; | ||
| 114 | __u8 rsvd33; | ||
| 115 | __le16 nawun; | ||
| 116 | __le16 nawupf; | ||
| 117 | __le16 nacwu; | ||
| 118 | __u8 rsvd40[80]; | ||
| 119 | __u8 eui64[8]; | ||
| 99 | struct nvme_lbaf lbaf[16]; | 120 | struct nvme_lbaf lbaf[16]; |
| 100 | __u8 rsvd192[192]; | 121 | __u8 rsvd192[192]; |
| 101 | __u8 vs[3712]; | 122 | __u8 vs[3712]; |
| @@ -126,7 +147,10 @@ struct nvme_smart_log { | |||
| 126 | __u8 unsafe_shutdowns[16]; | 147 | __u8 unsafe_shutdowns[16]; |
| 127 | __u8 media_errors[16]; | 148 | __u8 media_errors[16]; |
| 128 | __u8 num_err_log_entries[16]; | 149 | __u8 num_err_log_entries[16]; |
| 129 | __u8 rsvd192[320]; | 150 | __le32 warning_temp_time; |
| 151 | __le32 critical_comp_time; | ||
| 152 | __le16 temp_sensor[8]; | ||
| 153 | __u8 rsvd216[296]; | ||
| 130 | }; | 154 | }; |
| 131 | 155 | ||
| 132 | enum { | 156 | enum { |
| @@ -282,6 +306,10 @@ enum { | |||
| 282 | NVME_FEAT_WRITE_ATOMIC = 0x0a, | 306 | NVME_FEAT_WRITE_ATOMIC = 0x0a, |
| 283 | NVME_FEAT_ASYNC_EVENT = 0x0b, | 307 | NVME_FEAT_ASYNC_EVENT = 0x0b, |
| 284 | NVME_FEAT_SW_PROGRESS = 0x0c, | 308 | NVME_FEAT_SW_PROGRESS = 0x0c, |
| 309 | NVME_LOG_ERROR = 0x01, | ||
| 310 | NVME_LOG_SMART = 0x02, | ||
| 311 | NVME_LOG_FW_SLOT = 0x03, | ||
| 312 | NVME_LOG_RESERVATION = 0x80, | ||
| 285 | NVME_FWACT_REPL = (0 << 3), | 313 | NVME_FWACT_REPL = (0 << 3), |
| 286 | NVME_FWACT_REPL_ACTV = (1 << 3), | 314 | NVME_FWACT_REPL_ACTV = (1 << 3), |
| 287 | NVME_FWACT_ACTV = (2 << 3), | 315 | NVME_FWACT_ACTV = (2 << 3), |
