mirror of https://github.com/xemu-project/xemu.git
block/nvme: Pair doorbell registers
For each queue doorbell registers are paired as: - Submission Queue Tail Doorbell - Completion Queue Head Doorbell Reflect that in the NVMeRegs structure, and adapt nvme_create_queue_pair() accordingly. Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-Id: <20200904124130.583838-4-philmd@redhat.com> Reviewed-by: Klaus Jensen <k.jensen@samsung.com> Reviewed-by: Fam Zheng <fam@euphon.net> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
c7100f0a0b
commit
e5ff22ba9f
|
@ -84,7 +84,10 @@ typedef struct {
|
||||||
/* Memory mapped registers */
|
/* Memory mapped registers */
|
||||||
typedef volatile struct {
|
typedef volatile struct {
|
||||||
NvmeBar ctrl;
|
NvmeBar ctrl;
|
||||||
uint32_t doorbells[];
|
struct {
|
||||||
|
uint32_t sq_tail;
|
||||||
|
uint32_t cq_head;
|
||||||
|
} doorbells[];
|
||||||
} NVMeRegs;
|
} NVMeRegs;
|
||||||
|
|
||||||
#define INDEX_ADMIN 0
|
#define INDEX_ADMIN 0
|
||||||
|
@ -244,14 +247,14 @@ static NVMeQueuePair *nvme_create_queue_pair(BDRVNVMeState *s,
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
q->sq.doorbell = &s->regs->doorbells[idx * 2 * s->doorbell_scale];
|
q->sq.doorbell = &s->regs->doorbells[idx * s->doorbell_scale].sq_tail;
|
||||||
|
|
||||||
nvme_init_queue(s, &q->cq, size, NVME_CQ_ENTRY_BYTES, &local_err);
|
nvme_init_queue(s, &q->cq, size, NVME_CQ_ENTRY_BYTES, &local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
q->cq.doorbell = &s->regs->doorbells[(idx * 2 + 1) * s->doorbell_scale];
|
q->cq.doorbell = &s->regs->doorbells[idx * s->doorbell_scale].cq_head;
|
||||||
|
|
||||||
return q;
|
return q;
|
||||||
fail:
|
fail:
|
||||||
|
|
Loading…
Reference in New Issue