From: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
To: qemu-devel@nongnu.org, peter.maydell@linaro.org
Cc: yuval.shaia@oracle.com, marcel.apfelbaum@gmail.com,
pjp@fedoraproject.org
Subject: [Qemu-devel] [PATCH PULL 03/31] hw/rdma: Add ability to force notification without re-arm
Date: Sat, 22 Dec 2018 11:50:08 +0200 [thread overview]
Message-ID: <20181222095036.29743-4-marcel.apfelbaum@gmail.com> (raw)
In-Reply-To: <20181222095036.29743-1-marcel.apfelbaum@gmail.com>
From: Yuval Shaia <yuval.shaia@oracle.com>
Upon completion of incoming packet the device pushes CQE to driver's RX
ring and notify the driver (msix).
While for data-path incoming packets the driver needs the ability to
control whether it wished to receive interrupts or not, for control-path
packets such as incoming MAD the driver needs to be notified anyway, it
even do not need to re-arm the notification bit.
Enhance the notification field to support this.
Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com>
Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
---
hw/rdma/rdma_rm.c | 12 ++++++++++--
hw/rdma/rdma_rm_defs.h | 8 +++++++-
hw/rdma/vmw/pvrdma_qp_ops.c | 6 ++++--
3 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/hw/rdma/rdma_rm.c b/hw/rdma/rdma_rm.c
index 8d59a42cd1..4f10fcabcc 100644
--- a/hw/rdma/rdma_rm.c
+++ b/hw/rdma/rdma_rm.c
@@ -263,7 +263,7 @@ int rdma_rm_alloc_cq(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
}
cq->opaque = opaque;
- cq->notify = false;
+ cq->notify = CNT_CLEAR;
rc = rdma_backend_create_cq(backend_dev, &cq->backend_cq, cqe);
if (rc) {
@@ -291,7 +291,10 @@ void rdma_rm_req_notify_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle,
return;
}
- cq->notify = notify;
+ if (cq->notify != CNT_SET) {
+ cq->notify = notify ? CNT_ARM : CNT_CLEAR;
+ }
+
pr_dbg("notify=%d\n", cq->notify);
}
@@ -349,6 +352,11 @@ int rdma_rm_alloc_qp(RdmaDeviceResources *dev_res, uint32_t pd_handle,
return -EINVAL;
}
+ if (qp_type == IBV_QPT_GSI) {
+ scq->notify = CNT_SET;
+ rcq->notify = CNT_SET;
+ }
+
qp = res_tbl_alloc(&dev_res->qp_tbl, &rm_qpn);
if (!qp) {
return -ENOMEM;
diff --git a/hw/rdma/rdma_rm_defs.h b/hw/rdma/rdma_rm_defs.h
index 7228151239..9b399063d3 100644
--- a/hw/rdma/rdma_rm_defs.h
+++ b/hw/rdma/rdma_rm_defs.h
@@ -49,10 +49,16 @@ typedef struct RdmaRmPD {
uint32_t ctx_handle;
} RdmaRmPD;
+typedef enum CQNotificationType {
+ CNT_CLEAR,
+ CNT_ARM,
+ CNT_SET,
+} CQNotificationType;
+
typedef struct RdmaRmCQ {
RdmaBackendCQ backend_cq;
void *opaque;
- bool notify;
+ CQNotificationType notify;
} RdmaRmCQ;
/* MR (DMA region) */
diff --git a/hw/rdma/vmw/pvrdma_qp_ops.c b/hw/rdma/vmw/pvrdma_qp_ops.c
index c668afd0ed..762700a205 100644
--- a/hw/rdma/vmw/pvrdma_qp_ops.c
+++ b/hw/rdma/vmw/pvrdma_qp_ops.c
@@ -89,8 +89,10 @@ static int pvrdma_post_cqe(PVRDMADev *dev, uint32_t cq_handle,
pvrdma_ring_write_inc(&dev->dsr_info.cq);
pr_dbg("cq->notify=%d\n", cq->notify);
- if (cq->notify) {
- cq->notify = false;
+ if (cq->notify != CNT_CLEAR) {
+ if (cq->notify == CNT_ARM) {
+ cq->notify = CNT_CLEAR;
+ }
post_interrupt(dev, INTR_VEC_CMD_COMPLETION_Q);
}
--
2.17.1
next prev parent reply other threads:[~2018-12-22 9:50 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-22 9:50 [Qemu-devel] [PATCH PULL 00/31] RDMA queue Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 01/31] hw/pvrdma: Check the correct return value Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 02/31] contrib/rdmacm-mux: Add implementation of RDMA User MAD multiplexer Marcel Apfelbaum
2019-01-03 10:34 ` Cornelia Huck
2019-01-07 17:28 ` Marcel Apfelbaum
2019-01-07 17:54 ` Cornelia Huck
2019-01-08 8:41 ` Marcel Apfelbaum
2019-01-08 9:18 ` Cornelia Huck
2019-01-12 9:46 ` Marcel Apfelbaum
2018-12-22 9:50 ` Marcel Apfelbaum [this message]
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 04/31] hw/rdma: Return qpn 1 if ibqp is NULL Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 05/31] hw/rdma: Abort send-op if fail to create addr handler Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 06/31] hw/rdma: Add support for MAD packets Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 07/31] hw/pvrdma: Make function reset_device return void Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 08/31] hw/pvrdma: Make default pkey 0xFFFF Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 09/31] hw/pvrdma: Set the correct opcode for recv completion Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 10/31] hw/pvrdma: Set the correct opcode for send completion Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 11/31] qapi: Define new QMP message for pvrdma Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 12/31] hw/pvrdma: Add support to allow guest to configure GID table Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 13/31] vmxnet3: Move some definitions to header file Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 14/31] hw/pvrdma: Make sure PCI function 0 is vmxnet3 Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 15/31] hw/rdma: Initialize node_guid from vmxnet3 mac address Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 16/31] hw/pvrdma: Make device state depend on Ethernet function state Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 17/31] hw/pvrdma: Fill all CQE fields Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 18/31] hw/pvrdma: Fill error code in command's response Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 19/31] hw/rdma: Remove unneeded code that handles more that one port Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 20/31] vl: Introduce shutdown_notifiers Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 21/31] hw/pvrdma: Clean device's resource when system is shutdown Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 22/31] hw/rdma: Do not use bitmap_zero_extend to free bitmap Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 23/31] hw/rdma: Do not call rdma_backend_del_gid on an empty gid Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 24/31] docs: Update pvrdma device documentation Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 25/31] pvrdma: release device resources in case of an error Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 26/31] rdma: check num_sge does not exceed MAX_SGE Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 27/31] pvrdma: add uar_read routine Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 28/31] pvrdma: check number of pages when creating rings Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 29/31] pvrdma: release ring object in case of an error Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 30/31] rdma: remove unused VENDOR_ERR_NO_SGE macro Marcel Apfelbaum
2018-12-22 9:50 ` [Qemu-devel] [PATCH PULL 31/31] pvrdma: check return value from pvrdma_idx_ring_has_ routines Marcel Apfelbaum
2018-12-22 13:59 ` [Qemu-devel] [PATCH PULL 00/31] RDMA queue Peter Maydell
2018-12-22 14:30 ` Marcel Apfelbaum
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181222095036.29743-4-marcel.apfelbaum@gmail.com \
--to=marcel.apfelbaum@gmail.com \
--cc=peter.maydell@linaro.org \
--cc=pjp@fedoraproject.org \
--cc=qemu-devel@nongnu.org \
--cc=yuval.shaia@oracle.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).