NVMe: Convert to blk-mq

This converts the NVMe driver to a blk-mq request-based driver.

The NVMe driver is currently bio-based and implements queue logic within itself.
By using blk-mq, a lot of these responsibilities can be moved and simplified.

The patch is divided into the following blocks:

 * Per-command data and cmdid have been moved into the struct request field.
   The cmdid_data can be retrieved using blk_mq_rq_to_pdu() and id maintenance
   are now handled by blk-mq through the rq->tag field.

 * The logic for splitting bio's has been moved into the blk-mq layer. The
   driver instead notifies the block layer about limited gap support in SG
   lists.

 * blk-mq handles timeouts and is reimplemented within nvme_timeout(). This both
   includes abort handling and command cancelation.

 * Assignment of nvme queues to CPUs are replaced with the blk-mq version. The
   current blk-mq strategy is to assign the number of mapped queues and CPUs to
   provide synergy, while the nvme driver assign as many nvme hw queues as
   possible. This can be implemented in blk-mq if needed.

 * NVMe queues are merged with the hardware dispatch queue (hctx) structure of
   blk-mq.

 * blk-mq takes care of setup/teardown of nvme queues and guards invalid
   accesses. Therefore, RCU-usage for nvme queues can be removed.

 * IO tracing and accounting are handled by blk-mq and therefore removed.

 * Setup and teardown of nvme queues are now handled by nvme_[init/exit]_hctx.

Contributions in this patch from:

  Sam Bradshaw <sbradshaw@micron.com>
  Jens Axboe <axboe@kernel.dk>
  Keith Busch <keith.busch@intel.com>
  Robert Nelson <rlnelson@google.com>

Acked-by: Keith Busch <keith.busch@intel.com>
Acked-by: Jens Axboe <axboe@fb.com>
NVMe: implemented LNVME identify & identify channel commands
NVMe: refined LNVME identify
NVMe: implemented LNVMe get features & set responsibility commands
NVMe: devices are queried for LNVMe-support at startup
NVMe: fixed bug - lnvme channel identify requires cdw10 set to id of channel - does not assume 1-1 mapping between NS and CHNL
nvme: rename functions to nvme style

Rename constants, parameters and functions to follow the nvme code
style.
vsl: deprecate vsl_config_cmd_size with vsl_cmd_size

As a nvme driver has multiple namespaces, we instead explicit set the
sizes from the driver, instead of within the vsl.
vsl: move vsl init from blk-mq init_hctx to q->queuedata

Instead of hooking into blk-mq's init_hctx and init_request, place
reference within the blk's queue->queuedata pointer. Update null_blk
accordently.
nvme: hook into vsl

We let the nvme driver hook into the vsl interface. A VSL nvme device
should have its OACS bit set for the device, and NS_FEAT bit for each
namespace for lightnvm to be initialized.

Note that a device is either a full lightnvm device, with all namespaces
being a lightnvm device, or none. This is because we still rely on the
blk-mq queue_rq fn to be overwritten, and therefore only do the
initialization once. This can be changed in a later patch.
vsl: fix up wrong physical address for writes

The conversion used the sector size instead of position for calculating
the sector address.
vsl: remove unneeded cruft

No need to keep the out commented code around. We're not "currently"
going to implement the previous feature set of lightnvm.
NVMe: added support for host_lba hinting in I/O ioctls - for lnvme compliance
NVMe: added support for lnvme erase sync and async commands
NVMe: Check for vsl using the ns->vsl_dev

The check for a vsl device have been moved to per-namespace. Reflect
this in detection of lightnvm capabilities.
NVMe: free uninitialized vsl pointer

On initializing the vsl_dev, we free an uninitialized pointer and will
blow up the system.
vsl: remove verbose completion notice
NVMe: don't use vsl on disk structure

The rest of the nvme driver expects the gendisk->private structure to be
nvme_ns. Therefore, when VSL is initialized, do not overwrite this with
the vsl structure.
vsl: ordering bugfix.

Functions specifically using the BUG_ON macro on an argument used
the same argument in assignments preceding the NULL check - this
has been addressed by reordering assignment and BUG_ON checks.
vsl: rephrased comments

Comments have been rephrase to improve readability.