1. 30 11月, 2016 3 次提交
  2. 11 11月, 2016 1 次提交
    • C
      nvme: introduce struct nvme_request · d49187e9
      Christoph Hellwig 提交于
      This adds a shared per-request structure for all NVMe I/O.  This structure
      is embedded as the first member in all NVMe transport drivers request
      private data and allows to implement common functionality between the
      drivers.
      
      The first use is to replace the current abuse of the SCSI command
      passthrough fields in struct request for the NVMe command passthrough,
      but it will grow a field more fields to allow implementing things
      like common abort handlers in the future.
      
      The passthrough commands are handled by having a pointer to the SQE
      (struct nvme_command) in struct nvme_request, and the union of the
      possible result fields, which had to be turned from an anonymous
      into a named union for that purpose.  This avoids having to pass
      a reference to a full CQE around and thus makes checking the result
      a lot more lightweight.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Reviewed-by: NKeith Busch <keith.busch@intel.com>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      d49187e9
  3. 21 9月, 2016 3 次提交
    • S
      lightnvm: expose device geometry through sysfs · 40267efd
      Simon A. F. Lund 提交于
      For a host to access an Open-Channel SSD, it has to know its geometry,
      so that it writes and reads at the appropriate device bounds.
      
      Currently, the geometry information is kept within the kernel, and not
      exported to user-space for consumption. This patch exposes the
      configuration through sysfs and enables user-space libraries, such as
      liblightnvm, to use the sysfs implementation to get the geometry of an
      Open-Channel SSD.
      
      The sysfs entries are stored within the device hierarchy, and can be
      found using the "lightnvm" device type.
      
      An example configuration looks like this:
      
      /sys/class/nvme/
      └── nvme0n1
         ├── capabilities: 3
         ├── device_mode: 1
         ├── erase_max: 1000000
         ├── erase_typ: 1000000
         ├── flash_media_type: 0
         ├── media_capabilities: 0x00000001
         ├── media_type: 0
         ├── multiplane: 0x00010101
         ├── num_blocks: 1022
         ├── num_channels: 1
         ├── num_luns: 4
         ├── num_pages: 64
         ├── num_planes: 1
         ├── page_size: 4096
         ├── prog_max: 100000
         ├── prog_typ: 100000
         ├── read_max: 10000
         ├── read_typ: 10000
         ├── sector_oob_size: 0
         ├── sector_size: 4096
         ├── media_manager: gennvm
         ├── ppa_format: 0x380830082808001010102008
         ├── vendor_opcode: 0
         ├── max_phys_secs: 64
         └── version: 1
      Signed-off-by: NSimon A. F. Lund <slund@cnexlabs.com>
      Signed-off-by: NMatias Bjørling <m@bjorling.me>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      40267efd
    • M
      lightnvm: control life of nvm_dev in driver · b0b4e09c
      Matias Bjørling 提交于
      LightNVM compatible device drivers does not have a method to expose
      LightNVM specific sysfs entries.
      
      To enable LightNVM sysfs entries to be exposed, lightnvm device
      drivers require a struct device to attach it to. To allow both the
      actual device driver and lightnvm sysfs entries to coexist, the device
      driver tracks the lifetime of the nvm_dev structure.
      
      This patch refactors NVMe and null_blk to handle the lifetime of struct
      nvm_dev, which eliminates the need for struct gendisk when a lightnvm
      compatible device is provided.
      Signed-off-by: NMatias Bjørling <m@bjorling.me>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      b0b4e09c
    • M
      nvme: refactor namespaces to support non-gendisk devices · ac81bfa9
      Matias Bjørling 提交于
      With LightNVM enabled namespaces, the gendisk structure is not exposed
      to the user. This prevents LightNVM users from accessing the NVMe device
      driver specific sysfs entries, and LightNVM namespace geometry.
      
      Refactor the revalidation process, so that a namespace, instead of a
      gendisk, is revalidated. This later allows patches to wire up the
      sysfs entries up to a non-gendisk namespace.
      Signed-off-by: NMatias Bjørling <m@bjorling.me>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      ac81bfa9
  4. 21 7月, 2016 1 次提交
  5. 07 7月, 2016 1 次提交
  6. 07 5月, 2016 8 次提交
  7. 19 3月, 2016 1 次提交
  8. 04 3月, 2016 1 次提交
  9. 05 2月, 2016 1 次提交
  10. 12 1月, 2016 3 次提交
    • M
      lightnvm: introduce mlc lower page table mappings · ca5927e7
      Matias Bjørling 提交于
      NAND MLC memories have both lower and upper pages. When programming,
      both of these must be written, before data can be read. However,
      these lower and upper pages might not placed at even and odd flash
      pages, but can be skipped. Therefore each flash memory has its lower
      pages defined, which can then be used when programming and to know when
      padding are necessary.
      
      This patch implements the lower page definition in the specification,
      and exposes it through a simple lookup table at dev->lptbl.
      Signed-off-by: NMatias Bjørling <m@bjorling.me>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      ca5927e7
    • M
      lightnvm: return the get_bb_tbl return value · 22513215
      Matias Bjørling 提交于
      During get_bb_tbl, a callback is used to allow an user-specific scan
      function to be called. The callback may return an error, and in that
      case, the return value is overridden. However, the callback error is
      needed when the fault is a user error and not a kernel error. For
      example, when a user tries to initialize the same device twice. The
      get_bb_tbl callback should be able to communicate this.
      Signed-off-by: NMatias Bjørling <m@bjorling.me>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      22513215
    • M
      lightnvm: refactor end_io functions for sync · 91276162
      Matias Bjørling 提交于
      To implement sync I/O support within the LightNVM core, the end_io
      functions are refactored to take an end_io function pointer instead of
      testing for initialized media manager, followed by calling its end_io
      function.
      
      Sync I/O can then be implemented using a callback that signal I/O
      completion. This is similar to the logic found in blk_to_execute_io().
      By implementing it this way, the underlying device I/Os submission logic
      is abstracted away from core, targets, and media managers.
      Signed-off-by: NMatias Bjørling <m@bjorling.me>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      91276162
  11. 08 12月, 2015 2 次提交
  12. 04 12月, 2015 1 次提交
    • C
      NVMe: fix build with CONFIG_NVM enabled · ac02ddde
      Christoph Hellwig 提交于
      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 47b3115a
      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: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      ac02ddde
  13. 02 12月, 2015 1 次提交
  14. 30 11月, 2015 3 次提交
  15. 20 11月, 2015 1 次提交
  16. 17 11月, 2015 6 次提交
  17. 04 11月, 2015 1 次提交
  18. 29 10月, 2015 1 次提交
    • M
      nvme: LightNVM support · ca064085
      Matias Bjørling 提交于
      The first generation of Open-Channel SSDs is based on NVMe. The NVMe
      driver is extended with support for the LightNVM command set.
      
      Detection is made through PCI IDs. Current supported devices are the
      qemu nvme simulator and CNEX Labs Westlake SSD. The qemu nvme enables
      support through vendor specific bits in the namespace identification and
      the CNEX Labs Westlake SSD implements a LightNVM compatible firmware and
      is detected using the same method as qemu.
      
      After detection, vendor specific codes are used to identify the device
      and enumerate supported features.
      Reviewed-by: NKeith Busch <keith.busch@intel.com>
      Signed-off-by: NJavier González <jg@lightnvm.io>
      Signed-off-by: NMatias Bjørling <m@bjorling.me>
      Signed-off-by: NJens Axboe <axboe@fb.com>
      ca064085