mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-17 23:22:12 -06:00
hw/nvme: move format parameter parsing
There is no need to extract the format command parameters for each namespace. Move it to the entry point. Reviewed-by: Keith Busch <kbusch@kernel.org> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
This commit is contained in:
parent
d0c0697b9e
commit
a6de6ed509
1 changed files with 18 additions and 13 deletions
|
@ -5452,6 +5452,11 @@ typedef struct NvmeFormatAIOCB {
|
||||||
uint32_t nsid;
|
uint32_t nsid;
|
||||||
bool broadcast;
|
bool broadcast;
|
||||||
int64_t offset;
|
int64_t offset;
|
||||||
|
|
||||||
|
uint8_t lbaf;
|
||||||
|
uint8_t mset;
|
||||||
|
uint8_t pi;
|
||||||
|
uint8_t pil;
|
||||||
} NvmeFormatAIOCB;
|
} NvmeFormatAIOCB;
|
||||||
|
|
||||||
static void nvme_format_bh(void *opaque);
|
static void nvme_format_bh(void *opaque);
|
||||||
|
@ -5471,14 +5476,9 @@ static const AIOCBInfo nvme_format_aiocb_info = {
|
||||||
.get_aio_context = nvme_get_aio_context,
|
.get_aio_context = nvme_get_aio_context,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void nvme_format_set(NvmeNamespace *ns, NvmeCmd *cmd)
|
static void nvme_format_set(NvmeNamespace *ns, uint8_t lbaf, uint8_t mset,
|
||||||
|
uint8_t pi, uint8_t pil)
|
||||||
{
|
{
|
||||||
uint32_t dw10 = le32_to_cpu(cmd->cdw10);
|
|
||||||
uint8_t lbaf = dw10 & 0xf;
|
|
||||||
uint8_t pi = (dw10 >> 5) & 0x7;
|
|
||||||
uint8_t mset = (dw10 >> 4) & 0x1;
|
|
||||||
uint8_t pil = (dw10 >> 8) & 0x1;
|
|
||||||
|
|
||||||
trace_pci_nvme_format_set(ns->params.nsid, lbaf, mset, pi, pil);
|
trace_pci_nvme_format_set(ns->params.nsid, lbaf, mset, pi, pil);
|
||||||
|
|
||||||
ns->id_ns.dps = (pil << 3) | pi;
|
ns->id_ns.dps = (pil << 3) | pi;
|
||||||
|
@ -5490,7 +5490,6 @@ static void nvme_format_set(NvmeNamespace *ns, NvmeCmd *cmd)
|
||||||
static void nvme_format_ns_cb(void *opaque, int ret)
|
static void nvme_format_ns_cb(void *opaque, int ret)
|
||||||
{
|
{
|
||||||
NvmeFormatAIOCB *iocb = opaque;
|
NvmeFormatAIOCB *iocb = opaque;
|
||||||
NvmeRequest *req = iocb->req;
|
|
||||||
NvmeNamespace *ns = iocb->ns;
|
NvmeNamespace *ns = iocb->ns;
|
||||||
int bytes;
|
int bytes;
|
||||||
|
|
||||||
|
@ -5512,7 +5511,7 @@ static void nvme_format_ns_cb(void *opaque, int ret)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
nvme_format_set(ns, &req->cmd);
|
nvme_format_set(ns, iocb->lbaf, iocb->mset, iocb->pi, iocb->pil);
|
||||||
ns->status = 0x0;
|
ns->status = 0x0;
|
||||||
iocb->ns = NULL;
|
iocb->ns = NULL;
|
||||||
iocb->offset = 0;
|
iocb->offset = 0;
|
||||||
|
@ -5548,9 +5547,6 @@ static void nvme_format_bh(void *opaque)
|
||||||
NvmeFormatAIOCB *iocb = opaque;
|
NvmeFormatAIOCB *iocb = opaque;
|
||||||
NvmeRequest *req = iocb->req;
|
NvmeRequest *req = iocb->req;
|
||||||
NvmeCtrl *n = nvme_ctrl(req);
|
NvmeCtrl *n = nvme_ctrl(req);
|
||||||
uint32_t dw10 = le32_to_cpu(req->cmd.cdw10);
|
|
||||||
uint8_t lbaf = dw10 & 0xf;
|
|
||||||
uint8_t pi = (dw10 >> 5) & 0x7;
|
|
||||||
uint16_t status;
|
uint16_t status;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -5572,7 +5568,7 @@ static void nvme_format_bh(void *opaque)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = nvme_format_check(iocb->ns, lbaf, pi);
|
status = nvme_format_check(iocb->ns, iocb->lbaf, iocb->pi);
|
||||||
if (status) {
|
if (status) {
|
||||||
req->status = status;
|
req->status = status;
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -5595,6 +5591,11 @@ static uint16_t nvme_format(NvmeCtrl *n, NvmeRequest *req)
|
||||||
{
|
{
|
||||||
NvmeFormatAIOCB *iocb;
|
NvmeFormatAIOCB *iocb;
|
||||||
uint32_t nsid = le32_to_cpu(req->cmd.nsid);
|
uint32_t nsid = le32_to_cpu(req->cmd.nsid);
|
||||||
|
uint32_t dw10 = le32_to_cpu(req->cmd.cdw10);
|
||||||
|
uint8_t lbaf = dw10 & 0xf;
|
||||||
|
uint8_t mset = (dw10 >> 4) & 0x1;
|
||||||
|
uint8_t pi = (dw10 >> 5) & 0x7;
|
||||||
|
uint8_t pil = (dw10 >> 8) & 0x1;
|
||||||
uint16_t status;
|
uint16_t status;
|
||||||
|
|
||||||
iocb = qemu_aio_get(&nvme_format_aiocb_info, NULL, nvme_misc_cb, req);
|
iocb = qemu_aio_get(&nvme_format_aiocb_info, NULL, nvme_misc_cb, req);
|
||||||
|
@ -5604,6 +5605,10 @@ static uint16_t nvme_format(NvmeCtrl *n, NvmeRequest *req)
|
||||||
iocb->ret = 0;
|
iocb->ret = 0;
|
||||||
iocb->ns = NULL;
|
iocb->ns = NULL;
|
||||||
iocb->nsid = 0;
|
iocb->nsid = 0;
|
||||||
|
iocb->lbaf = lbaf;
|
||||||
|
iocb->mset = mset;
|
||||||
|
iocb->pi = pi;
|
||||||
|
iocb->pil = pil;
|
||||||
iocb->broadcast = (nsid == NVME_NSID_BROADCAST);
|
iocb->broadcast = (nsid == NVME_NSID_BROADCAST);
|
||||||
iocb->offset = 0;
|
iocb->offset = 0;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue