hw/block/nvme: add a lba to bytes helper
Add the nvme_l2b helper and use it for converting NLB and SLBA to byte counts and offsets. Signed-off-by: Klaus Jensen <k.jensen@samsung.com> Reviewed-by: Keith Busch <kbusch@kernel.org>
This commit is contained in:
parent
2750384669
commit
9994f72bd8
@ -644,12 +644,10 @@ static uint16_t nvme_write_zeroes(NvmeCtrl *n, NvmeRequest *req)
|
||||
{
|
||||
NvmeRwCmd *rw = (NvmeRwCmd *)&req->cmd;
|
||||
NvmeNamespace *ns = req->ns;
|
||||
const uint8_t lba_index = NVME_ID_NS_FLBAS_INDEX(ns->id_ns.flbas);
|
||||
const uint8_t data_shift = ns->id_ns.lbaf[lba_index].ds;
|
||||
uint64_t slba = le64_to_cpu(rw->slba);
|
||||
uint32_t nlb = le16_to_cpu(rw->nlb) + 1;
|
||||
uint64_t offset = slba << data_shift;
|
||||
uint32_t count = nlb << data_shift;
|
||||
uint64_t offset = nvme_l2b(ns, slba);
|
||||
uint32_t count = nvme_l2b(ns, nlb);
|
||||
uint16_t status;
|
||||
|
||||
trace_pci_nvme_write_zeroes(nvme_cid(req), slba, nlb);
|
||||
@ -674,10 +672,8 @@ static uint16_t nvme_rw(NvmeCtrl *n, NvmeRequest *req)
|
||||
uint32_t nlb = le32_to_cpu(rw->nlb) + 1;
|
||||
uint64_t slba = le64_to_cpu(rw->slba);
|
||||
|
||||
uint8_t lba_index = NVME_ID_NS_FLBAS_INDEX(ns->id_ns.flbas);
|
||||
uint8_t data_shift = ns->id_ns.lbaf[lba_index].ds;
|
||||
uint64_t data_size = (uint64_t)nlb << data_shift;
|
||||
uint64_t data_offset = slba << data_shift;
|
||||
uint64_t data_size = nvme_l2b(ns, nlb);
|
||||
uint64_t data_offset = nvme_l2b(ns, slba);
|
||||
int is_write = rw->opcode == NVME_CMD_WRITE ? 1 : 0;
|
||||
enum BlockAcctType acct = is_write ? BLOCK_ACCT_WRITE : BLOCK_ACCT_READ;
|
||||
uint16_t status;
|
||||
|
@ -77,6 +77,12 @@ static inline uint8_t nvme_ns_lbads(NvmeNamespace *ns)
|
||||
return nvme_ns_lbaf(ns)->ds;
|
||||
}
|
||||
|
||||
/* convert an LBA to the equivalent in bytes */
|
||||
static inline size_t nvme_l2b(NvmeNamespace *ns, uint64_t lba)
|
||||
{
|
||||
return lba << nvme_ns_lbads(ns);
|
||||
}
|
||||
|
||||
#define TYPE_NVME "nvme"
|
||||
#define NVME(obj) \
|
||||
OBJECT_CHECK(NvmeCtrl, (obj), TYPE_NVME)
|
||||
|
Loading…
Reference in New Issue
Block a user