nvmf/vfio-user: avoid division in cq_is_full()

Avoid using the modulus operator in the hot-path cq_is_full(),
by aping how cq_tail_advance() is written.

Signed-off-by: John Levon <john.levon@nutanix.com>
Change-Id: Idbdf1715ab30d08233b38aa7691f0212ae93a542
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11445
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
This commit is contained in:
John Levon 2022-02-08 10:49:43 +00:00 committed by Jim Harris
parent b16da6ca62
commit 58e75cf714

View File

@ -469,6 +469,23 @@ cq_tail_advance(struct nvmf_vfio_user_cq *cq)
}
}
static inline bool
cq_is_full(struct nvmf_vfio_user_ctrlr *ctrlr, struct nvmf_vfio_user_cq *cq)
{
uint32_t qindex;
assert(ctrlr != NULL);
assert(cq != NULL);
qindex = *cq_tailp(cq) + 1;
if (spdk_unlikely(qindex == cq->size)) {
qindex = 0;
}
return qindex == *cq_dbl_headp(ctrlr, cq);
}
/* TODO: wrapper to data structure */
static inline size_t
vfio_user_migr_data_len(void)
@ -978,16 +995,6 @@ asq_setup(struct nvmf_vfio_user_ctrlr *ctrlr)
return 0;
}
static inline bool
cq_is_full(struct nvmf_vfio_user_ctrlr *ctrlr,
struct nvmf_vfio_user_cq *cq)
{
assert(ctrlr != NULL);
assert(cq != NULL);
return ((*cq_tailp(cq) + 1) % cq->size) == *cq_dbl_headp(ctrlr, cq);
}
static int
acq_setup(struct nvmf_vfio_user_ctrlr *ctrlr)
{