HomeFreeBSD

Fix bhyve's NVMe queue bookkeeping

Description

Fix bhyve's NVMe queue bookkeeping

Many size / length parameters in NVMe are "0's based", meaning, a value
of 0x0 represents 1, 0x1 represents 2, etc.. While this leads to an
efficient encoding, it can lead to subtle bugs. With respect to queues,
these parameters include:

  • Maximum number of queue entries
  • Maximum number of queues
  • Number of Completion Queues
  • Number of Submission Queues

To be consistent, convert all 0's based values from the host to 1's
based value internally. Likewise, covert internal 1's based values to
0's based values when returned to the host. This fixes an off-by-one bug
when creating IO queues and simplifies some of the code. Note that this
bug is masked by another bug.

While in the neighborhood,

  • fix an erroneous queue ID check (checking CQ count when deleting SQ)
  • check for queue ID of 0x0 in a few places where this is illegal
  • clean up the Set Features, Number of Queues command and check for illegal values

Reviewed by: imp, araujo
Approved by: imp (mentor)
MFC after: 1 month
Differential Revision: https://reviews.freebsd.org/D18702

Details

Provenance
chuckAuthored on
Reviewer
imp
Differential Revision
D18702: Fix bhyve's NVMe queue bookkeeping
Parents
rS342760: newvers: avoid clearing svn revision information with nested VCS dirs
Branches
Unknown
Tags
Unknown