lightnvm: expose device geometry through sysfs
authorSimon A. F. Lund <slund@cnexlabs.com>
Fri, 16 Sep 2016 12:25:08 +0000 (14:25 +0200)
committerJens Axboe <axboe@fb.com>
Wed, 21 Sep 2016 13:57:31 +0000 (07:57 -0600)
commit40267efddc296190d50c61d96daf277151447cf6
treed461e3fd467fa8ba7c0a316a399e6560888839b7
parentb0b4e09c1ae71c4ec33df0616b830ae050006e9b
lightnvm: expose device geometry through sysfs

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: Simon A. F. Lund <slund@cnexlabs.com>
Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/lightnvm/Makefile
drivers/lightnvm/core.c
drivers/lightnvm/lightnvm.h [new file with mode: 0644]
drivers/lightnvm/sysfs.c [new file with mode: 0644]
drivers/nvme/host/core.c
drivers/nvme/host/lightnvm.c
drivers/nvme/host/nvme.h
include/linux/lightnvm.h