On Thu, Jan 27, 2022 at 11:37:52AM -0500, Kevin O'Connor wrote:
> Thanks.  I don't know enough about NVMe to review this patch though.
> Maybe Julian or Alex could comment?

Happy to hear their comments on this. However, I can also try to explain
the reasoning in a bit more detail.

This follows from the NVMe spec[1]: The Identify command returns a data
structure that contains packed LBAF records (Figure 249, starting at
offset 131). This is represented by struct nvme_identify_ns in the
SeaBIOS code.

Figure 250 gives the structure of these records and this is where the
aforementioned discrepancy lies.

I think what happened was that somebody mistook the reserved 6 uppermost
bits as a whole byte and put it into struct nvme_lba_format as such. To
correctly parse the RP field, you'd still need to mask off these bits,
but the code only uses the LBADS/MS fields anyway.

I encountered this on an NVMe device that had FLBAS[3:0] != 0, which
caused nonsensical outputs of the various dprintf()s and also throws off
everything that depends on knowing the block size. Empirically, the
patch fixes these problems.

[1] 
https://nvmexpress.org/wp-content/uploads/NVM-Express-1_4c-2021.06.28-Ratified.pdf
_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org

Reply via email to