From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747010783704.4682622221167; Sat, 16 Mar 2019 07:36:50 -0700 (PDT) Received: from localhost ([127.0.0.1]:42580 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AQS-00027Z-BG for importer@patchew.org; Sat, 16 Mar 2019 10:36:40 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49513) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOM-0000lX-CZ for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOK-0000UG-On for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:30 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]:53742) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOK-0000Te-Bg for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:28 -0400 Received: by mail-wm1-x32b.google.com with SMTP id e74so9042514wmg.3 for ; Sat, 16 Mar 2019 07:34:28 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.25 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oeCLUJeqFX/3m5HV9T/ZaQf5IsaonoxH4mRVJIXrSBc=; b=B5bmBK2AmsAuCQB+mLLYmZu7e2QUC9PNp6ognPPLc+wtICGQgoYUl1eKdf+a+kB3y6 rqsdAqwxHsJwAdJucp7CX5IhUYCIjk5L1aJf+SL387v2iHo85JoeXqRJdZhWTXC57Np8 WK0BlXBIw3CHgtP4bpmlufQS7k/V8cn1sisK3WXKeW65DsDUjtGSSmbHtkEBo0ISmr+d WQeFElGGy5ghr8ebEHQpltxqHISWs9Z7Ym4Js3NtdbmoZ6woYWALYU5lQ5yp4hLdgKA4 O919OzWlBBDToZZvaooQocU3lfHOFmz/0tnqo+513qn/PjxjaKFXznv15Ml65c5HiaLJ KfpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oeCLUJeqFX/3m5HV9T/ZaQf5IsaonoxH4mRVJIXrSBc=; b=gDq7o0VLEPKyoU0qQPqWcAYMobZvA/XNnyyf0M03KbNJzJI9O2jtpb84fXiLF0CFOs Gx5MEGxAok6/OsvGrZ/SCbpsiLssfPtIbBfX4oAz8A8uS8yNEJ5TJ+3lb7446mBACfA/ B+9cfs3+zteno304LLJBEQMxOCEWxAY143OuGPltzg+RvfWmx6CaDWucvEC2hcrXfDqK kBpt3Baxh17w4gBAy09WnwhEwifSo+Gu5jRroFdVG869wqKjo19l9mEaFk8+7aQE1LOL iyHJvDv73h9DWEW1MD0RSNPeUbrSmkay/hCS/W2qEqpZ1DVZi0ebso3NcgVCbmHMkgR+ HhLg== X-Gm-Message-State: APjAAAV2ToQmkwa6bSHY6UFrB3O5NVTQ9QZeTH7yx3F079Obe4bCRCQh LASI3cNjl+ByqI5inAC2e8OtQ7J2 X-Google-Smtp-Source: APXvYqzSj/bGi2XUgo2w25UA8Vt8wD+4UDXpxCqz6syofqnf9uIyLGJgGur6oElGgBp+K4Vq8mdQZw== X-Received: by 2002:a05:600c:20e:: with SMTP id 14mr5960788wmi.144.1552746866844; Sat, 16 Mar 2019 07:34:26 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:04 +0200 Message-Id: <20190316143421.8194-2-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::32b Subject: [Qemu-devel] [PATCH PULL 01/18] contrib/rdmacm-mux: Fix out-of-bounds risk X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) From: Yuval Shaia The function get_fd extract context from the received MAD message and uses it as a key to fetch the destination fd from the mapping table. A context can be dgid in case of CM request message or comm_id in case of CM SIDR response message. When MAD message with a smaller size as expected for the message type received we are hitting out-of-bounds where we are looking for the context out of message boundaries. Fix it by validating the message size. Reported-by Sam Smith Signed-off-by: Yuval Shaia Message-Id: <20190212112347.1605-1-yuval.shaia@oracle.com> Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Marcel Apfelbaum Reported-by Sam Smith --- contrib/rdmacm-mux/main.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/contrib/rdmacm-mux/main.c b/contrib/rdmacm-mux/main.c index ae88c77a1e..21cc804367 100644 --- a/contrib/rdmacm-mux/main.c +++ b/contrib/rdmacm-mux/main.c @@ -300,7 +300,7 @@ static void hash_tbl_remove_fd_ifid_pair(int fd) pthread_rwlock_unlock(&server.lock); } =20 -static int get_fd(const char *mad, int *fd, __be64 *gid_ifid) +static int get_fd(const char *mad, int umad_len, int *fd, __be64 *gid_ifid) { struct umad_hdr *hdr =3D (struct umad_hdr *)mad; char *data =3D (char *)hdr + sizeof(*hdr); @@ -308,13 +308,35 @@ static int get_fd(const char *mad, int *fd, __be64 *g= id_ifid) uint16_t attr_id =3D be16toh(hdr->attr_id); int rc =3D 0; =20 + if (umad_len <=3D sizeof(*hdr)) { + rc =3D -EINVAL; + syslog(LOG_DEBUG, "Ignoring MAD packets with header only\n"); + goto out; + } + switch (attr_id) { case UMAD_CM_ATTR_REQ: + if (unlikely(umad_len < sizeof(*hdr) + CM_REQ_DGID_POS + + sizeof(*gid_ifid))) { + rc =3D -EINVAL; + syslog(LOG_WARNING, + "Invalid MAD packet size (%d) for attr_id 0x%x\n", umad= _len, + attr_id); + goto out; + } memcpy(gid_ifid, data + CM_REQ_DGID_POS, sizeof(*gid_ifid)); rc =3D hash_tbl_search_fd_by_ifid(fd, gid_ifid); break; =20 case UMAD_CM_ATTR_SIDR_REQ: + if (unlikely(umad_len < sizeof(*hdr) + CM_SIDR_REQ_DGID_POS + + sizeof(*gid_ifid))) { + rc =3D -EINVAL; + syslog(LOG_WARNING, + "Invalid MAD packet size (%d) for attr_id 0x%x\n", umad= _len, + attr_id); + goto out; + } memcpy(gid_ifid, data + CM_SIDR_REQ_DGID_POS, sizeof(*gid_ifid)); rc =3D hash_tbl_search_fd_by_ifid(fd, gid_ifid); break; @@ -331,6 +353,13 @@ static int get_fd(const char *mad, int *fd, __be64 *gi= d_ifid) data +=3D sizeof(comm_id); /* Fall through */ case UMAD_CM_ATTR_SIDR_REP: + if (unlikely(umad_len < sizeof(*hdr) + sizeof(comm_id))) { + rc =3D -EINVAL; + syslog(LOG_WARNING, + "Invalid MAD packet size (%d) for attr_id 0x%x\n", umad= _len, + attr_id); + goto out; + } memcpy(&comm_id, data, sizeof(comm_id)); if (comm_id) { rc =3D hash_tbl_search_fd_by_comm_id(comm_id, fd, gid_ifid); @@ -344,6 +373,7 @@ static int get_fd(const char *mad, int *fd, __be64 *gid= _ifid) =20 syslog(LOG_DEBUG, "mad_to_vm: %d 0x%x 0x%x\n", *fd, attr_id, comm_id); =20 +out: return rc; } =20 @@ -372,7 +402,8 @@ static void *umad_recv_thread_func(void *args) } while (rc && server.run); =20 if (server.run) { - rc =3D get_fd(msg.umad.mad, &fd, &msg.hdr.sgid.global.interfac= e_id); + rc =3D get_fd(msg.umad.mad, msg.umad_len, &fd, + &msg.hdr.sgid.global.interface_id); if (rc) { continue; } --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747724147777.8703805011079; Sat, 16 Mar 2019 07:48:44 -0700 (PDT) Received: from localhost ([127.0.0.1]:42743 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5Ac0-0003gM-OM for importer@patchew.org; Sat, 16 Mar 2019 10:48:36 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49681) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOh-00015X-I9 for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOP-0000XI-KZ for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:51 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:45299) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOO-0000W2-M9 for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:33 -0400 Received: by mail-wr1-x443.google.com with SMTP id h99so12416123wrh.12 for ; Sat, 16 Mar 2019 07:34:32 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.26 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QAsV8f/+XO64o6IvpKl0l/u3NfV4YJjeK6TiRGPakHg=; b=cX11uJHJzHxm4TRvtmzlnlMNYvAP30Uaal4HXhHIJ4b4OM5IhWFbkUEC6dfieiknQG aM5iaX8rYjzDwfCrQWtJ8H9N3qEAFQ8vVwgAAcm9EQjH1dY2kRHz7HY4pKmgiVuhH3PW AJPCUWcAvq1TMsbkdE4dtcFBd7V9IUSKvHsM9ZIwROl1h+Q55CZZMe6zsLlPIerH18yU sTOPr+uV+GaGrseS2YabXIW2MQwroAeeWo9Z4jnjij5bYc7ltG6CUsuPGi52XJFk9jf6 I7i4Xtj8EjXnifIzUeo5gEx3me6vPUvbTWv0fkOCrwdAnog6e1n7lo57boK4zvF4ODMN lk8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=QAsV8f/+XO64o6IvpKl0l/u3NfV4YJjeK6TiRGPakHg=; b=cXGf4KOPkTPa2ZsjcYySHZzfDmSPhYi+YyPfHffSJKpIbkZErphfVC7epSuwII6SqX CADGy5LqlAImq+jDWg27surTCiFrxiKD3uxh6akUAHZ/y/nfr1Pl8hHI326bG2soon9e vuncfgiou5RrTf7VgLPv0Cj7SeVt5AP+/DjrgCvogLIWOJa8dkm04k/Py8xpFSM/EYPQ 9s/o5aYD1hg0P6Ujnmtp3YkYOhAmIbcyxfJh/BNIFNHWF6hTXgjIxwAPPOUpMba/JAZj 8V1JW2oVTHqSRuuhLj+U234OX83b4LIxtPg68o5VcxLFLrsX/bZy6ZMeyH0MNmboSXPm AzCw== X-Gm-Message-State: APjAAAVlMZbiN3O7g4STUveJ8ca/q5dHnxo7OJTeSs2n2i1J21XAYfKe G5OHgWzolQTFrhSiF87jaGVC/gYm X-Google-Smtp-Source: APXvYqySLmGoSh5kGGXzxujOXEiz+rsX/XoYVikKcYQL7IzY1/o16rMAuup1mO00et03xkHvz6YigA== X-Received: by 2002:adf:d84d:: with SMTP id k13mr6649912wrl.154.1552746869539; Sat, 16 Mar 2019 07:34:29 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:05 +0200 Message-Id: <20190316143421.8194-3-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PATCH PULL 02/18] hw/rdma: Switch to generic error reporting way X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Yuval Shaia Utilize error_report for all pr_err calls and some pr_dbg that are considered as errors. For the remaining pr_dbg calls, the important ones were replaced by trace points while other deleted. Some of the functions got renamed to include prefix "rdma/pvrdma" in the function name. Signed-off-by: Yuval Shaia Reviewed-by: Marcel Apfelbaum Message-Id: <1552300155-25216-2-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_backend.c | 354 ++++++++++++++-------------------- hw/rdma/rdma_backend.h | 4 +- hw/rdma/rdma_rm.c | 130 +++++-------- hw/rdma/rdma_rm.h | 10 +- hw/rdma/rdma_utils.c | 15 +- hw/rdma/rdma_utils.h | 45 +---- hw/rdma/trace-events | 32 ++- hw/rdma/vmw/pvrdma.h | 2 +- hw/rdma/vmw/pvrdma_cmd.c | 113 +++-------- hw/rdma/vmw/pvrdma_dev_ring.c | 26 +-- hw/rdma/vmw/pvrdma_main.c | 144 +++++--------- hw/rdma/vmw/pvrdma_qp_ops.c | 49 ++--- hw/rdma/vmw/trace-events | 16 +- 13 files changed, 363 insertions(+), 577 deletions(-) diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c index fd571f21e5..d138591c86 100644 --- a/hw/rdma/rdma_backend.c +++ b/hw/rdma/rdma_backend.c @@ -14,7 +14,6 @@ */ =20 #include "qemu/osdep.h" -#include "qemu/error-report.h" #include "sysemu/sysemu.h" #include "qapi/error.h" #include "qapi/qmp/qlist.h" @@ -39,7 +38,6 @@ =20 typedef struct BackendCtx { void *up_ctx; - bool is_tx_req; struct ibv_sge sge; /* Used to save MAD recv buffer */ } BackendCtx; =20 @@ -52,7 +50,7 @@ static void (*comp_handler)(void *ctx, struct ibv_wc *wc); =20 static void dummy_comp_handler(void *ctx, struct ibv_wc *wc) { - pr_err("No completion handler is registered\n"); + rdma_error_report("No completion handler is registered"); } =20 static inline void complete_work(enum ibv_wc_status status, uint32_t vendo= r_err, @@ -66,29 +64,24 @@ static inline void complete_work(enum ibv_wc_status sta= tus, uint32_t vendor_err, comp_handler(ctx, &wc); } =20 -static void poll_cq(RdmaDeviceResources *rdma_dev_res, struct ibv_cq *ibcq) +static void rdma_poll_cq(RdmaDeviceResources *rdma_dev_res, struct ibv_cq = *ibcq) { int i, ne; BackendCtx *bctx; struct ibv_wc wc[2]; =20 - pr_dbg("Entering poll_cq loop on cq %p\n", ibcq); do { ne =3D ibv_poll_cq(ibcq, ARRAY_SIZE(wc), wc); =20 - pr_dbg("Got %d completion(s) from cq %p\n", ne, ibcq); + trace_rdma_poll_cq(ne, ibcq); =20 for (i =3D 0; i < ne; i++) { - pr_dbg("wr_id=3D0x%" PRIx64 "\n", wc[i].wr_id); - pr_dbg("status=3D%d\n", wc[i].status); - bctx =3D rdma_rm_get_cqe_ctx(rdma_dev_res, wc[i].wr_id); if (unlikely(!bctx)) { - pr_dbg("Error: Failed to find ctx for req %" PRId64 "\n", - wc[i].wr_id); + rdma_error_report("No matching ctx for req %"PRId64, + wc[i].wr_id); continue; } - pr_dbg("Processing %s CQE\n", bctx->is_tx_req ? "send" : "recv= "); =20 comp_handler(bctx->up_ctx, &wc[i]); =20 @@ -98,7 +91,7 @@ static void poll_cq(RdmaDeviceResources *rdma_dev_res, st= ruct ibv_cq *ibcq) } while (ne > 0); =20 if (ne < 0) { - pr_dbg("Got error %d from ibv_poll_cq\n", ne); + rdma_error_report("ibv_poll_cq fail, rc=3D%d, errno=3D%d", ne, err= no); } } =20 @@ -115,12 +108,10 @@ static void *comp_handler_thread(void *arg) flags =3D fcntl(backend_dev->channel->fd, F_GETFL); rc =3D fcntl(backend_dev->channel->fd, F_SETFL, flags | O_NONBLOCK); if (rc < 0) { - pr_dbg("Fail to change to non-blocking mode\n"); + rdma_error_report("Failed to change backend channel FD to non-bloc= king"); return NULL; } =20 - pr_dbg("Starting\n"); - pfds[0].fd =3D backend_dev->channel->fd; pfds[0].events =3D G_IO_IN | G_IO_HUP | G_IO_ERR; =20 @@ -132,27 +123,25 @@ static void *comp_handler_thread(void *arg) } while (!rc && backend_dev->comp_thread.run); =20 if (backend_dev->comp_thread.run) { - pr_dbg("Waiting for completion on channel %p\n", backend_dev->= channel); rc =3D ibv_get_cq_event(backend_dev->channel, &ev_cq, &ev_ctx); - pr_dbg("ibv_get_cq_event=3D%d\n", rc); if (unlikely(rc)) { - pr_dbg("---> ibv_get_cq_event (%d)\n", rc); + rdma_error_report("ibv_get_cq_event fail, rc=3D%d, errno= =3D%d", rc, + errno); continue; } =20 rc =3D ibv_req_notify_cq(ev_cq, 0); if (unlikely(rc)) { - pr_dbg("Error %d from ibv_req_notify_cq\n", rc); + rdma_error_report("ibv_req_notify_cq fail, rc=3D%d, errno= =3D%d", rc, + errno); } =20 - poll_cq(backend_dev->rdma_dev_res, ev_cq); + rdma_poll_cq(backend_dev->rdma_dev_res, ev_cq); =20 ibv_ack_cq_events(ev_cq, 1); } } =20 - pr_dbg("Going down\n"); - /* TODO: Post cqe for all remaining buffs that were posted */ =20 backend_dev->comp_thread.is_running =3D false; @@ -177,55 +166,54 @@ static inline int rdmacm_mux_can_process_async(RdmaBa= ckendDev *backend_dev) return atomic_read(&backend_dev->rdmacm_mux.can_receive); } =20 -static int check_mux_op_status(CharBackend *mad_chr_be) +static int rdmacm_mux_check_op_status(CharBackend *mad_chr_be) { RdmaCmMuxMsg msg =3D {}; int ret; =20 - pr_dbg("Reading response\n"); ret =3D qemu_chr_fe_read_all(mad_chr_be, (uint8_t *)&msg, sizeof(msg)); if (ret !=3D sizeof(msg)) { - pr_dbg("Invalid message size %d, expecting %ld\n", ret, sizeof(msg= )); + rdma_error_report("Got invalid message from mux: size %d, expectin= g %d", + ret, (int)sizeof(msg)); return -EIO; } =20 - pr_dbg("msg_type=3D%d\n", msg.hdr.msg_type); - pr_dbg("op_code=3D%d\n", msg.hdr.op_code); - pr_dbg("err_code=3D%d\n", msg.hdr.err_code); + trace_rdmacm_mux_check_op_status(msg.hdr.msg_type, msg.hdr.op_code, + msg.hdr.err_code); =20 if (msg.hdr.msg_type !=3D RDMACM_MUX_MSG_TYPE_RESP) { - pr_dbg("Invalid message type %d\n", msg.hdr.msg_type); + rdma_error_report("Got invalid message type %d", msg.hdr.msg_type); return -EIO; } =20 if (msg.hdr.err_code !=3D RDMACM_MUX_ERR_CODE_OK) { - pr_dbg("Operation failed in mux, error code %d\n", msg.hdr.err_cod= e); + rdma_error_report("Operation failed in mux, error code %d", + msg.hdr.err_code); return -EIO; } =20 return 0; } =20 -static int exec_rdmacm_mux_req(RdmaBackendDev *backend_dev, RdmaCmMuxMsg *= msg) +static int rdmacm_mux_send(RdmaBackendDev *backend_dev, RdmaCmMuxMsg *msg) { int rc =3D 0; =20 - pr_dbg("Executing request %d\n", msg->hdr.op_code); - msg->hdr.msg_type =3D RDMACM_MUX_MSG_TYPE_REQ; + trace_rdmacm_mux("send", msg->hdr.msg_type, msg->hdr.op_code); disable_rdmacm_mux_async(backend_dev); rc =3D qemu_chr_fe_write(backend_dev->rdmacm_mux.chr_be, (const uint8_t *)msg, sizeof(*msg)); if (rc !=3D sizeof(*msg)) { enable_rdmacm_mux_async(backend_dev); - pr_dbg("Fail to send request to rdmacm_mux (rc=3D%d)\n", rc); + rdma_error_report("Failed to send request to rdmacm_mux (rc=3D%d)"= , rc); return -EIO; } =20 - rc =3D check_mux_op_status(backend_dev->rdmacm_mux.chr_be); + rc =3D rdmacm_mux_check_op_status(backend_dev->rdmacm_mux.chr_be); if (rc) { - pr_dbg("Fail to execute rdmacm_mux request %d (rc=3D%d)\n", - msg->hdr.op_code, rc); + rdma_error_report("Failed to execute rdmacm_mux request %d (rc=3D%= d)", + msg->hdr.op_code, rc); } =20 enable_rdmacm_mux_async(backend_dev); @@ -237,7 +225,6 @@ static void stop_backend_thread(RdmaBackendThread *thre= ad) { thread->run =3D false; while (thread->is_running) { - pr_dbg("Waiting for thread to complete\n"); sleep(THR_POLL_TO / SCALE_US / 2); } } @@ -273,7 +260,7 @@ int rdma_backend_query_port(RdmaBackendDev *backend_dev, =20 rc =3D ibv_query_port(backend_dev->context, backend_dev->port_num, por= t_attr); if (rc) { - pr_dbg("Error %d from ibv_query_port\n", rc); + rdma_error_report("ibv_query_port fail, rc=3D%d, errno=3D%d", rc, = errno); return -EIO; } =20 @@ -282,7 +269,7 @@ int rdma_backend_query_port(RdmaBackendDev *backend_dev, =20 void rdma_backend_poll_cq(RdmaDeviceResources *rdma_dev_res, RdmaBackendCQ= *cq) { - poll_cq(rdma_dev_res, cq->ibcq); + rdma_poll_cq(rdma_dev_res, cq->ibcq); } =20 static GHashTable *ah_hash; @@ -294,8 +281,8 @@ static struct ibv_ah *create_ah(RdmaBackendDev *backend= _dev, struct ibv_pd *pd, struct ibv_ah *ah =3D g_hash_table_lookup(ah_hash, ah_key); =20 if (ah) { - trace_create_ah_cache_hit(be64_to_cpu(dgid->global.subnet_prefix), - be64_to_cpu(dgid->global.interface_id)); + trace_rdma_create_ah_cache_hit(be64_to_cpu(dgid->global.subnet_pre= fix), + be64_to_cpu(dgid->global.interface_= id)); g_bytes_unref(ah_key); } else { struct ibv_ah_attr ah_attr =3D { @@ -312,13 +299,13 @@ static struct ibv_ah *create_ah(RdmaBackendDev *backe= nd_dev, struct ibv_pd *pd, g_hash_table_insert(ah_hash, ah_key, ah); } else { g_bytes_unref(ah_key); - pr_dbg("Fail to create AH for gid <0x%" PRIx64 ", 0x%" PRIx64 = ">\n", - be64_to_cpu(dgid->global.subnet_prefix), - be64_to_cpu(dgid->global.interface_id)); + rdma_error_report("Failed to create AH for gid <0x%" PRIx64", = 0x%"PRIx64">", + be64_to_cpu(dgid->global.subnet_prefix), + be64_to_cpu(dgid->global.interface_id)); } =20 - trace_create_ah_cache_miss(be64_to_cpu(dgid->global.subnet_prefix), - be64_to_cpu(dgid->global.interface_id)); + trace_rdma_create_ah_cache_miss(be64_to_cpu(dgid->global.subnet_pr= efix), + be64_to_cpu(dgid->global.interface= _id)); } =20 return ah; @@ -349,12 +336,10 @@ static int build_host_sge_array(RdmaDeviceResources *= rdma_dev_res, RdmaRmMR *mr; int ssge_idx; =20 - pr_dbg("num_sge=3D%d\n", num_sge); - for (ssge_idx =3D 0; ssge_idx < num_sge; ssge_idx++) { mr =3D rdma_rm_get_mr(rdma_dev_res, ssge[ssge_idx].lkey); if (unlikely(!mr)) { - pr_dbg("Invalid lkey 0x%x\n", ssge[ssge_idx].lkey); + rdma_error_report("Invalid lkey 0x%x", ssge[ssge_idx].lkey); return VENDOR_ERR_INVLKEY | ssge[ssge_idx].lkey; } =20 @@ -362,17 +347,28 @@ static int build_host_sge_array(RdmaDeviceResources *= rdma_dev_res, dsge->length =3D ssge[ssge_idx].length; dsge->lkey =3D rdma_backend_mr_lkey(&mr->backend_mr); =20 - pr_dbg("ssge->addr=3D0x%" PRIx64 "\n", ssge[ssge_idx].addr); - pr_dbg("dsge->addr=3D0x%" PRIx64 "\n", dsge->addr); - pr_dbg("dsge->length=3D%d\n", dsge->length); - pr_dbg("dsge->lkey=3D0x%x\n", dsge->lkey); - dsge++; } =20 return 0; } =20 +static void trace_mad_message(const char *title, char *buf, int len) +{ + int i; + char *b =3D g_malloc0(len * 3 + 1); + char b1[4]; + + for (i =3D 0; i < len; i++) { + sprintf(b1, "%.2X ", buf[i] & 0x000000FF); + strcat(b, b1); + } + + trace_rdma_mad_message(title, len, b); + + g_free(b); +} + static int mad_send(RdmaBackendDev *backend_dev, uint8_t sgid_idx, union ibv_gid *sgid, struct ibv_sge *sge, uint32_t num= _sge) { @@ -380,8 +376,6 @@ static int mad_send(RdmaBackendDev *backend_dev, uint8_= t sgid_idx, char *hdr, *data; int ret; =20 - pr_dbg("num_sge=3D%d\n", num_sge); - if (num_sge !=3D 2) { return -EINVAL; } @@ -390,7 +384,6 @@ static int mad_send(RdmaBackendDev *backend_dev, uint8_= t sgid_idx, memcpy(msg.hdr.sgid.raw, sgid->raw, sizeof(msg.hdr.sgid)); =20 msg.umad_len =3D sge[0].length + sge[1].length; - pr_dbg("umad_len=3D%d\n", msg.umad_len); =20 if (msg.umad_len > sizeof(msg.umad.mad)) { return -ENOMEM; @@ -398,36 +391,31 @@ static int mad_send(RdmaBackendDev *backend_dev, uint= 8_t sgid_idx, =20 msg.umad.hdr.addr.qpn =3D htobe32(1); msg.umad.hdr.addr.grh_present =3D 1; - pr_dbg("sgid_idx=3D%d\n", sgid_idx); - pr_dbg("sgid=3D0x%llx\n", sgid->global.interface_id); msg.umad.hdr.addr.gid_index =3D sgid_idx; memcpy(msg.umad.hdr.addr.gid, sgid->raw, sizeof(msg.umad.hdr.addr.gid)= ); msg.umad.hdr.addr.hop_limit =3D 0xFF; =20 hdr =3D rdma_pci_dma_map(backend_dev->dev, sge[0].addr, sge[0].length); if (!hdr) { - pr_dbg("Fail to map to sge[0]\n"); return -ENOMEM; } data =3D rdma_pci_dma_map(backend_dev->dev, sge[1].addr, sge[1].length= ); if (!data) { - pr_dbg("Fail to map to sge[1]\n"); rdma_pci_dma_unmap(backend_dev->dev, hdr, sge[0].length); return -ENOMEM; } =20 - pr_dbg_buf("mad_hdr", hdr, sge[0].length); - pr_dbg_buf("mad_data", data, sge[1].length); - memcpy(&msg.umad.mad[0], hdr, sge[0].length); memcpy(&msg.umad.mad[sge[0].length], data, sge[1].length); =20 rdma_pci_dma_unmap(backend_dev->dev, data, sge[1].length); rdma_pci_dma_unmap(backend_dev->dev, hdr, sge[0].length); =20 - ret =3D exec_rdmacm_mux_req(backend_dev, &msg); + trace_mad_message("send", msg.umad.mad, msg.umad_len); + + ret =3D rdmacm_mux_send(backend_dev, &msg); if (ret) { - pr_dbg("Fail to send MAD to rdma_umadmux (%d)\n", ret); + rdma_error_report("Failed to send MAD to rdma_umadmux (%d)", ret); return -EIO; } =20 @@ -447,12 +435,11 @@ void rdma_backend_post_send(RdmaBackendDev *backend_d= ev, int rc; struct ibv_send_wr wr =3D {0}, *bad_wr; =20 - if (!qp->ibqp) { /* This field does not get initialized for QP0 and QP= 1 */ + if (!qp->ibqp) { /* This field is not initialized for QP0 and QP1 */ if (qp_type =3D=3D IBV_QPT_SMI) { - pr_dbg("QP0 unsupported\n"); + rdma_error_report("Got QP0 request"); complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_QP0, ctx); } else if (qp_type =3D=3D IBV_QPT_GSI) { - pr_dbg("QP1\n"); rc =3D mad_send(backend_dev, sgid_idx, sgid, sge, num_sge); if (rc) { complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_MAD_SEND, ctx= ); @@ -463,22 +450,17 @@ void rdma_backend_post_send(RdmaBackendDev *backend_d= ev, return; } =20 - pr_dbg("num_sge=3D%d\n", num_sge); - bctx =3D g_malloc0(sizeof(*bctx)); bctx->up_ctx =3D ctx; - bctx->is_tx_req =3D 1; =20 rc =3D rdma_rm_alloc_cqe_ctx(backend_dev->rdma_dev_res, &bctx_id, bctx= ); if (unlikely(rc)) { - pr_dbg("Failed to allocate cqe_ctx\n"); complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_NOMEM, ctx); goto out_free_bctx; } =20 rc =3D build_host_sge_array(backend_dev->rdma_dev_res, new_sge, sge, n= um_sge); if (rc) { - pr_dbg("Error: Failed to build host SGE array\n"); complete_work(IBV_WC_GENERAL_ERR, rc, ctx); goto out_dealloc_cqe_ctx; } @@ -500,10 +482,9 @@ void rdma_backend_post_send(RdmaBackendDev *backend_de= v, wr.wr_id =3D bctx_id; =20 rc =3D ibv_post_send(qp->ibqp, &wr, &bad_wr); - pr_dbg("ibv_post_send=3D%d\n", rc); if (rc) { - pr_dbg("Fail (%d, %d) to post send WQE to qpn %d\n", rc, errno, - qp->ibqp->qp_num); + rdma_error_report("ibv_post_send fail, qpn=3D0x%x, rc=3D%d, errno= =3D%d", + qp->ibqp->qp_num, rc, errno); complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_FAIL_BACKEND, ctx); goto out_dealloc_cqe_ctx; } @@ -526,29 +507,23 @@ static unsigned int save_mad_recv_buffer(RdmaBackendD= ev *backend_dev, uint32_t bctx_id; =20 if (num_sge !=3D 1) { - pr_dbg("Invalid num_sge (%d), expecting 1\n", num_sge); + rdma_error_report("Invalid num_sge (%d), expecting 1", num_sge); return VENDOR_ERR_INV_NUM_SGE; } =20 if (sge[0].length < RDMA_MAX_PRIVATE_DATA + sizeof(struct ibv_grh)) { - pr_dbg("Too small buffer for MAD\n"); + rdma_error_report("Too small buffer for MAD"); return VENDOR_ERR_INV_MAD_BUFF; } =20 - pr_dbg("addr=3D0x%" PRIx64"\n", sge[0].addr); - pr_dbg("length=3D%d\n", sge[0].length); - pr_dbg("lkey=3D%d\n", sge[0].lkey); - bctx =3D g_malloc0(sizeof(*bctx)); =20 rc =3D rdma_rm_alloc_cqe_ctx(backend_dev->rdma_dev_res, &bctx_id, bctx= ); if (unlikely(rc)) { g_free(bctx); - pr_dbg("Fail to allocate cqe_ctx\n"); return VENDOR_ERR_NOMEM; } =20 - pr_dbg("bctx_id %d, bctx %p, ctx %p\n", bctx_id, bctx, ctx); bctx->up_ctx =3D ctx; bctx->sge =3D *sge; =20 @@ -572,11 +547,10 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_d= ev, =20 if (!qp->ibqp) { /* This field does not get initialized for QP0 and QP= 1 */ if (qp_type =3D=3D IBV_QPT_SMI) { - pr_dbg("QP0 unsupported\n"); + rdma_error_report("Got QP0 request"); complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_QP0, ctx); } if (qp_type =3D=3D IBV_QPT_GSI) { - pr_dbg("QP1\n"); rc =3D save_mad_recv_buffer(backend_dev, sge, num_sge, ctx); if (rc) { complete_work(IBV_WC_GENERAL_ERR, rc, ctx); @@ -585,22 +559,17 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_d= ev, return; } =20 - pr_dbg("num_sge=3D%d\n", num_sge); - bctx =3D g_malloc0(sizeof(*bctx)); bctx->up_ctx =3D ctx; - bctx->is_tx_req =3D 0; =20 rc =3D rdma_rm_alloc_cqe_ctx(rdma_dev_res, &bctx_id, bctx); if (unlikely(rc)) { - pr_dbg("Failed to allocate cqe_ctx\n"); complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_NOMEM, ctx); goto out_free_bctx; } =20 rc =3D build_host_sge_array(rdma_dev_res, new_sge, sge, num_sge); if (rc) { - pr_dbg("Error: Failed to build host SGE array\n"); complete_work(IBV_WC_GENERAL_ERR, rc, ctx); goto out_dealloc_cqe_ctx; } @@ -609,10 +578,9 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_de= v, wr.sg_list =3D new_sge; wr.wr_id =3D bctx_id; rc =3D ibv_post_recv(qp->ibqp, &wr, &bad_wr); - pr_dbg("ibv_post_recv=3D%d\n", rc); if (rc) { - pr_dbg("Fail (%d, %d) to post recv WQE to qpn %d\n", rc, errno, - qp->ibqp->qp_num); + rdma_error_report("ibv_post_recv fail, qpn=3D0x%x, rc=3D%d, errno= =3D%d", + qp->ibqp->qp_num, rc, errno); complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_FAIL_BACKEND, ctx); goto out_dealloc_cqe_ctx; } @@ -630,7 +598,12 @@ int rdma_backend_create_pd(RdmaBackendDev *backend_dev= , RdmaBackendPD *pd) { pd->ibpd =3D ibv_alloc_pd(backend_dev->context); =20 - return pd->ibpd ? 0 : -EIO; + if (!pd->ibpd) { + rdma_error_report("ibv_alloc_pd fail, errno=3D%d", errno); + return -EIO; + } + + return 0; } =20 void rdma_backend_destroy_pd(RdmaBackendPD *pd) @@ -643,16 +616,15 @@ void rdma_backend_destroy_pd(RdmaBackendPD *pd) int rdma_backend_create_mr(RdmaBackendMR *mr, RdmaBackendPD *pd, void *add= r, size_t length, int access) { - pr_dbg("addr=3D0x%p\n", addr); - pr_dbg("len=3D%zu\n", length); mr->ibmr =3D ibv_reg_mr(pd->ibpd, addr, length, access); - if (mr->ibmr) { - pr_dbg("lkey=3D0x%x\n", mr->ibmr->lkey); - pr_dbg("rkey=3D0x%x\n", mr->ibmr->rkey); - mr->ibpd =3D pd->ibpd; + if (!mr->ibmr) { + rdma_error_report("ibv_reg_mr fail, errno=3D%d", errno); + return -EIO; } =20 - return mr->ibmr ? 0 : -EIO; + mr->ibpd =3D pd->ibpd; + + return 0; } =20 void rdma_backend_destroy_mr(RdmaBackendMR *mr) @@ -667,21 +639,21 @@ int rdma_backend_create_cq(RdmaBackendDev *backend_de= v, RdmaBackendCQ *cq, { int rc; =20 - pr_dbg("cqe=3D%d\n", cqe); - - pr_dbg("dev->channel=3D%p\n", backend_dev->channel); cq->ibcq =3D ibv_create_cq(backend_dev->context, cqe + 1, NULL, backend_dev->channel, 0); + if (!cq->ibcq) { + rdma_error_report("ibv_create_cq fail, errno=3D%d", errno); + return -EIO; + } =20 - if (cq->ibcq) { - rc =3D ibv_req_notify_cq(cq->ibcq, 0); - if (rc) { - pr_dbg("Error %d from ibv_req_notify_cq\n", rc); - } - cq->backend_dev =3D backend_dev; + rc =3D ibv_req_notify_cq(cq->ibcq, 0); + if (rc) { + rdma_warn_report("ibv_req_notify_cq fail, rc=3D%d, errno=3D%d", rc= , errno); } =20 - return cq->ibcq ? 0 : -EIO; + cq->backend_dev =3D backend_dev; + + return 0; } =20 void rdma_backend_destroy_cq(RdmaBackendCQ *cq) @@ -700,7 +672,6 @@ int rdma_backend_create_qp(RdmaBackendQP *qp, uint8_t q= p_type, struct ibv_qp_init_attr attr =3D {0}; =20 qp->ibqp =3D 0; - pr_dbg("qp_type=3D%d\n", qp_type); =20 switch (qp_type) { case IBV_QPT_GSI: @@ -713,7 +684,7 @@ int rdma_backend_create_qp(RdmaBackendQP *qp, uint8_t q= p_type, break; =20 default: - pr_dbg("Unsupported QP type %d\n", qp_type); + rdma_error_report("Unsupported QP type %d", qp_type); return -EIO; } =20 @@ -725,14 +696,9 @@ int rdma_backend_create_qp(RdmaBackendQP *qp, uint8_t = qp_type, attr.cap.max_send_sge =3D max_send_sge; attr.cap.max_recv_sge =3D max_recv_sge; =20 - pr_dbg("max_send_wr=3D%d\n", max_send_wr); - pr_dbg("max_recv_wr=3D%d\n", max_recv_wr); - pr_dbg("max_send_sge=3D%d\n", max_send_sge); - pr_dbg("max_recv_sge=3D%d\n", max_recv_sge); - qp->ibqp =3D ibv_create_qp(pd->ibpd, &attr); - if (likely(!qp->ibqp)) { - pr_dbg("Error from ibv_create_qp\n"); + if (!qp->ibqp) { + rdma_error_report("ibv_create_qp fail, errno=3D%d", errno); return -EIO; } =20 @@ -740,8 +706,6 @@ int rdma_backend_create_qp(RdmaBackendQP *qp, uint8_t q= p_type, =20 /* TODO: Query QP to get max_inline_data and save it to be used in sen= d */ =20 - pr_dbg("qpn=3D0x%x\n", qp->ibqp->qp_num); - return 0; } =20 @@ -751,9 +715,6 @@ int rdma_backend_qp_state_init(RdmaBackendDev *backend_= dev, RdmaBackendQP *qp, struct ibv_qp_attr attr =3D {0}; int rc, attr_mask; =20 - pr_dbg("qpn=3D0x%x\n", qp->ibqp->qp_num); - pr_dbg("sport_num=3D%d\n", backend_dev->port_num); - attr_mask =3D IBV_QP_STATE | IBV_QP_PKEY_INDEX | IBV_QP_PORT; attr.qp_state =3D IBV_QPS_INIT; attr.pkey_index =3D 0; @@ -762,21 +723,23 @@ int rdma_backend_qp_state_init(RdmaBackendDev *backen= d_dev, RdmaBackendQP *qp, switch (qp_type) { case IBV_QPT_RC: attr_mask |=3D IBV_QP_ACCESS_FLAGS; + trace_rdma_backend_rc_qp_state_init(qp->ibqp->qp_num); break; =20 case IBV_QPT_UD: attr.qkey =3D qkey; attr_mask |=3D IBV_QP_QKEY; + trace_rdma_backend_ud_qp_state_init(qp->ibqp->qp_num, qkey); break; =20 default: - pr_dbg("Unsupported QP type %d\n", qp_type); + rdma_error_report("Unsupported QP type %d", qp_type); return -EIO; } =20 rc =3D ibv_modify_qp(qp->ibqp, &attr, attr_mask); if (rc) { - pr_dbg("Error %d from ibv_modify_qp\n", rc); + rdma_error_report("ibv_modify_qp fail, rc=3D%d, errno=3D%d", rc, e= rrno); return -EIO; } =20 @@ -802,14 +765,6 @@ int rdma_backend_qp_state_rtr(RdmaBackendDev *backend_= dev, RdmaBackendQP *qp, =20 switch (qp_type) { case IBV_QPT_RC: - pr_dbg("dgid=3D0x%" PRIx64 ",%" PRIx64 "\n", - be64_to_cpu(ibv_gid.global.subnet_prefix), - be64_to_cpu(ibv_gid.global.interface_id)); - pr_dbg("dqpn=3D0x%x\n", dqpn); - pr_dbg("sgid_idx=3D%d\n", qp->sgid_idx); - pr_dbg("sport_num=3D%d\n", backend_dev->port_num); - pr_dbg("rq_psn=3D0x%x\n", rq_psn); - attr.path_mtu =3D IBV_MTU_1024; attr.dest_qp_num =3D dqpn; attr.max_dest_rd_atomic =3D 1; @@ -824,20 +779,28 @@ int rdma_backend_qp_state_rtr(RdmaBackendDev *backend= _dev, RdmaBackendQP *qp, attr_mask |=3D IBV_QP_AV | IBV_QP_PATH_MTU | IBV_QP_DEST_QPN | IBV_QP_RQ_PSN | IBV_QP_MAX_DEST_RD_ATOMIC | IBV_QP_MIN_RNR_TIMER; + + trace_rdma_backend_rc_qp_state_rtr(qp->ibqp->qp_num, + be64_to_cpu(ibv_gid.global. + subnet_prefix), + be64_to_cpu(ibv_gid.global. + interface_id), + qp->sgid_idx, dqpn, rq_psn); break; =20 case IBV_QPT_UD: - pr_dbg("qkey=3D0x%x\n", qkey); if (use_qkey) { attr.qkey =3D qkey; attr_mask |=3D IBV_QP_QKEY; } + trace_rdma_backend_ud_qp_state_rtr(qp->ibqp->qp_num, use_qkey ? qk= ey : + 0); break; } =20 rc =3D ibv_modify_qp(qp->ibqp, &attr, attr_mask); if (rc) { - pr_dbg("Error %d from ibv_modify_qp\n", rc); + rdma_error_report("ibv_modify_qp fail, rc=3D%d, errno=3D%d", rc, e= rrno); return -EIO; } =20 @@ -850,9 +813,6 @@ int rdma_backend_qp_state_rts(RdmaBackendQP *qp, uint8_= t qp_type, struct ibv_qp_attr attr =3D {0}; int rc, attr_mask; =20 - pr_dbg("qpn=3D0x%x\n", qp->ibqp->qp_num); - pr_dbg("sq_psn=3D0x%x\n", sq_psn); - attr.qp_state =3D IBV_QPS_RTS; attr.sq_psn =3D sq_psn; attr_mask =3D IBV_QP_STATE | IBV_QP_SQ_PSN; @@ -866,20 +826,22 @@ int rdma_backend_qp_state_rts(RdmaBackendQP *qp, uint= 8_t qp_type, =20 attr_mask |=3D IBV_QP_TIMEOUT | IBV_QP_RETRY_CNT | IBV_QP_RNR_RETR= Y | IBV_QP_MAX_QP_RD_ATOMIC; + trace_rdma_backend_rc_qp_state_rts(qp->ibqp->qp_num, sq_psn); break; =20 case IBV_QPT_UD: if (use_qkey) { - pr_dbg("qkey=3D0x%x\n", qkey); attr.qkey =3D qkey; attr_mask |=3D IBV_QP_QKEY; } + trace_rdma_backend_ud_qp_state_rts(qp->ibqp->qp_num, sq_psn, + use_qkey ? qkey : 0); break; } =20 rc =3D ibv_modify_qp(qp->ibqp, &attr, attr_mask); if (rc) { - pr_dbg("Error %d from ibv_modify_qp\n", rc); + rdma_error_report("ibv_modify_qp fail, rc=3D%d, errno=3D%d", rc, e= rrno); return -EIO; } =20 @@ -890,7 +852,6 @@ int rdma_backend_query_qp(RdmaBackendQP *qp, struct ibv= _qp_attr *attr, int attr_mask, struct ibv_qp_init_attr *init_att= r) { if (!qp->ibqp) { - pr_dbg("QP1\n"); attr->qp_state =3D IBV_QPS_RTS; return 0; } @@ -906,20 +867,23 @@ void rdma_backend_destroy_qp(RdmaBackendQP *qp) } =20 #define CHK_ATTR(req, dev, member, fmt) ({ \ - pr_dbg("%s=3D"fmt","fmt"\n", #member, dev.member, req->member); \ + trace_rdma_check_dev_attr(#member, dev.member, req->member); \ if (req->member > dev.member) { \ - warn_report("%s =3D "fmt" is higher than host device capability "f= mt, \ - #member, req->member, dev.member); \ + rdma_warn_report("%s =3D "fmt" is higher than host device capabili= ty "fmt, \ + #member, req->member, dev.member); \ req->member =3D dev.member; \ } \ - pr_dbg("%s=3D"fmt"\n", #member, req->member); }) +}) =20 static int init_device_caps(RdmaBackendDev *backend_dev, struct ibv_device_attr *dev_attr) { struct ibv_device_attr bk_dev_attr; + int rc; =20 - if (ibv_query_device(backend_dev->context, &bk_dev_attr)) { + rc =3D ibv_query_device(backend_dev->context, &bk_dev_attr); + if (rc) { + rdma_error_report("ibv_query_device fail, rc=3D%d, errno=3D%d", rc= , errno); return -EIO; } =20 @@ -928,9 +892,7 @@ static int init_device_caps(RdmaBackendDev *backend_dev, CHK_ATTR(dev_attr, bk_dev_attr, max_mr_size, "%" PRId64); CHK_ATTR(dev_attr, bk_dev_attr, max_qp, "%d"); CHK_ATTR(dev_attr, bk_dev_attr, max_sge, "%d"); - CHK_ATTR(dev_attr, bk_dev_attr, max_qp_wr, "%d"); CHK_ATTR(dev_attr, bk_dev_attr, max_cq, "%d"); - CHK_ATTR(dev_attr, bk_dev_attr, max_cqe, "%d"); CHK_ATTR(dev_attr, bk_dev_attr, max_mr, "%d"); CHK_ATTR(dev_attr, bk_dev_attr, max_pd, "%d"); CHK_ATTR(dev_attr, bk_dev_attr, max_qp_rd_atom, "%d"); @@ -946,10 +908,6 @@ static inline void build_mad_hdr(struct ibv_grh *grh, = union ibv_gid *sgid, grh->paylen =3D htons(paylen); grh->sgid =3D *sgid; grh->dgid =3D *my_gid; - - pr_dbg("paylen=3D%d (net=3D0x%x)\n", paylen, grh->paylen); - pr_dbg("dgid=3D0x%llx\n", my_gid->global.interface_id); - pr_dbg("sgid=3D0x%llx\n", sgid->global.interface_id); } =20 static void process_incoming_mad_req(RdmaBackendDev *backend_dev, @@ -960,21 +918,13 @@ static void process_incoming_mad_req(RdmaBackendDev *= backend_dev, BackendCtx *bctx; char *mad; =20 - pr_dbg("umad_len=3D%d\n", msg->umad_len); - -#ifdef PVRDMA_DEBUG - struct umad_hdr *hdr =3D (struct umad_hdr *)&msg->umad.mad; - pr_dbg("bv %x cls %x cv %x mtd %x st %d tid %" PRIx64 " at %x atm %x\n= ", - hdr->base_version, hdr->mgmt_class, hdr->class_version, - hdr->method, hdr->status, be64toh(hdr->tid), - hdr->attr_id, hdr->attr_mod); -#endif + trace_mad_message("recv", msg->umad.mad, msg->umad_len); =20 qemu_mutex_lock(&backend_dev->recv_mads_list.lock); o_ctx_id =3D qlist_pop(backend_dev->recv_mads_list.list); qemu_mutex_unlock(&backend_dev->recv_mads_list.lock); if (!o_ctx_id) { - pr_dbg("No more free MADs buffers, waiting for a while\n"); + rdma_warn_report("No more free MADs buffers, waiting for a while"); sleep(THR_POLL_TO); return; } @@ -982,12 +932,10 @@ static void process_incoming_mad_req(RdmaBackendDev *= backend_dev, cqe_ctx_id =3D qnum_get_uint(qobject_to(QNum, o_ctx_id)); bctx =3D rdma_rm_get_cqe_ctx(backend_dev->rdma_dev_res, cqe_ctx_id); if (unlikely(!bctx)) { - pr_dbg("Error: Fail to find ctx for %ld\n", cqe_ctx_id); + rdma_error_report("No matching ctx for req %ld", cqe_ctx_id); return; } =20 - pr_dbg("id %ld, bctx %p, ctx %p\n", cqe_ctx_id, bctx, bctx->up_ctx); - mad =3D rdma_pci_dma_map(backend_dev->dev, bctx->sge.addr, bctx->sge.length); if (!mad || bctx->sge.length < msg->umad_len + MAD_HDR_SIZE) { @@ -995,7 +943,6 @@ static void process_incoming_mad_req(RdmaBackendDev *ba= ckend_dev, bctx->up_ctx); } else { struct ibv_wc wc =3D {0}; - pr_dbg_buf("mad", msg->umad.mad, msg->umad_len); memset(mad, 0, bctx->sge.length); build_mad_hdr((struct ibv_grh *)mad, (union ibv_gid *)&msg->umad.hdr.addr.gid, &msg->hdr.= sgid, @@ -1025,13 +972,11 @@ static void rdmacm_mux_read(void *opaque, const uint= 8_t *buf, int size) RdmaBackendDev *backend_dev =3D (RdmaBackendDev *)opaque; RdmaCmMuxMsg *msg =3D (RdmaCmMuxMsg *)buf; =20 - pr_dbg("Got %d bytes\n", size); - pr_dbg("msg_type=3D%d\n", msg->hdr.msg_type); - pr_dbg("op_code=3D%d\n", msg->hdr.op_code); + trace_rdmacm_mux("read", msg->hdr.msg_type, msg->hdr.op_code); =20 if (msg->hdr.msg_type !=3D RDMACM_MUX_MSG_TYPE_REQ && msg->hdr.op_code !=3D RDMACM_MUX_OP_CODE_MAD) { - pr_dbg("Error: Not a MAD request, skipping\n"); + rdma_error_report("Error: Not a MAD request, skipping"); return; } process_incoming_mad_req(backend_dev, msg); @@ -1045,7 +990,7 @@ static int mad_init(RdmaBackendDev *backend_dev, CharB= ackend *mad_chr_be) =20 ret =3D qemu_chr_fe_backend_connected(backend_dev->rdmacm_mux.chr_be); if (!ret) { - pr_dbg("Missing chardev for MAD multiplexer\n"); + rdma_error_report("Missing chardev for MAD multiplexer"); return -EIO; } =20 @@ -1063,7 +1008,6 @@ static int mad_init(RdmaBackendDev *backend_dev, Char= Backend *mad_chr_be) =20 static void mad_fini(RdmaBackendDev *backend_dev) { - pr_dbg("Stopping MAD\n"); disable_rdmacm_mux_async(backend_dev); qemu_chr_fe_disconnect(backend_dev->rdmacm_mux.chr_be); if (backend_dev->recv_mads_list.list) { @@ -1079,17 +1023,15 @@ int rdma_backend_get_gid_index(RdmaBackendDev *back= end_dev, int ret; int i =3D 0; =20 - pr_dbg("0x%llx, 0x%llx\n", - (long long unsigned int)be64_to_cpu(gid->global.subnet_prefix), - (long long unsigned int)be64_to_cpu(gid->global.interface_id)); - do { ret =3D ibv_query_gid(backend_dev->context, backend_dev->port_num,= i, &sgid); i++; } while (!ret && (memcmp(&sgid, gid, sizeof(*gid)))); =20 - pr_dbg("gid_index=3D%d\n", i - 1); + trace_rdma_backend_get_gid_index(be64_to_cpu(gid->global.subnet_prefix= ), + be64_to_cpu(gid->global.interface_id), + i - 1); =20 return ret ? ret : i - 1; } @@ -1100,16 +1042,15 @@ int rdma_backend_add_gid(RdmaBackendDev *backend_de= v, const char *ifname, RdmaCmMuxMsg msg =3D {}; int ret; =20 - pr_dbg("0x%llx, 0x%llx\n", - (long long unsigned int)be64_to_cpu(gid->global.subnet_prefix), - (long long unsigned int)be64_to_cpu(gid->global.interface_id)); + trace_rdma_backend_gid_change("add", be64_to_cpu(gid->global.subnet_pr= efix), + be64_to_cpu(gid->global.interface_id)); =20 msg.hdr.op_code =3D RDMACM_MUX_OP_CODE_REG; memcpy(msg.hdr.sgid.raw, gid->raw, sizeof(msg.hdr.sgid)); =20 - ret =3D exec_rdmacm_mux_req(backend_dev, &msg); + ret =3D rdmacm_mux_send(backend_dev, &msg); if (ret) { - pr_dbg("Fail to register GID to rdma_umadmux (%d)\n", ret); + rdma_error_report("Failed to register GID to rdma_umadmux (%d)", r= et); return -EIO; } =20 @@ -1126,16 +1067,16 @@ int rdma_backend_del_gid(RdmaBackendDev *backend_de= v, const char *ifname, RdmaCmMuxMsg msg =3D {}; int ret; =20 - pr_dbg("0x%llx, 0x%llx\n", - (long long unsigned int)be64_to_cpu(gid->global.subnet_prefix), - (long long unsigned int)be64_to_cpu(gid->global.interface_id)); + trace_rdma_backend_gid_change("del", be64_to_cpu(gid->global.subnet_pr= efix), + be64_to_cpu(gid->global.interface_id)); =20 msg.hdr.op_code =3D RDMACM_MUX_OP_CODE_UNREG; memcpy(msg.hdr.sgid.raw, gid->raw, sizeof(msg.hdr.sgid)); =20 - ret =3D exec_rdmacm_mux_req(backend_dev, &msg); + ret =3D rdmacm_mux_send(backend_dev, &msg); if (ret) { - pr_dbg("Fail to unregister GID from rdma_umadmux (%d)\n", ret); + rdma_error_report("Failed to unregister GID from rdma_umadmux (%d)= ", + ret); return -EIO; } =20 @@ -1149,8 +1090,7 @@ int rdma_backend_del_gid(RdmaBackendDev *backend_dev,= const char *ifname, int rdma_backend_init(RdmaBackendDev *backend_dev, PCIDevice *pdev, RdmaDeviceResources *rdma_dev_res, const char *backend_device_name, uint8_t port_num, - struct ibv_device_attr *dev_attr, CharBackend *mad_c= hr_be, - Error **errp) + struct ibv_device_attr *dev_attr, CharBackend *mad_c= hr_be) { int i; int ret =3D 0; @@ -1167,12 +1107,12 @@ int rdma_backend_init(RdmaBackendDev *backend_dev, = PCIDevice *pdev, =20 dev_list =3D ibv_get_device_list(&num_ibv_devices); if (!dev_list) { - error_setg(errp, "Failed to get IB devices list"); + rdma_error_report("Failed to get IB devices list"); return -EIO; } =20 if (num_ibv_devices =3D=3D 0) { - error_setg(errp, "No IB devices were found"); + rdma_error_report("No IB devices were found"); ret =3D -ENXIO; goto out_free_dev_list; } @@ -1187,8 +1127,8 @@ int rdma_backend_init(RdmaBackendDev *backend_dev, PC= IDevice *pdev, =20 backend_dev->ib_dev =3D dev_list[i]; if (!backend_dev->ib_dev) { - error_setg(errp, "Failed to find IB device %s", - backend_device_name); + rdma_error_report("Failed to find IB device %s", + backend_device_name); ret =3D -EIO; goto out_free_dev_list; } @@ -1196,28 +1136,26 @@ int rdma_backend_init(RdmaBackendDev *backend_dev, = PCIDevice *pdev, backend_dev->ib_dev =3D *dev_list; } =20 - pr_dbg("Using backend device %s, port %d\n", - ibv_get_device_name(backend_dev->ib_dev), backend_dev->port_num= ); - pr_dbg("uverb device %s\n", backend_dev->ib_dev->dev_name); + rdma_info_report("uverb device %s", backend_dev->ib_dev->dev_name); =20 backend_dev->context =3D ibv_open_device(backend_dev->ib_dev); if (!backend_dev->context) { - error_setg(errp, "Failed to open IB device"); + rdma_error_report("Failed to open IB device %s", + ibv_get_device_name(backend_dev->ib_dev)); ret =3D -EIO; goto out; } =20 backend_dev->channel =3D ibv_create_comp_channel(backend_dev->context); if (!backend_dev->channel) { - error_setg(errp, "Failed to create IB communication channel"); + rdma_error_report("Failed to create IB communication channel"); ret =3D -EIO; goto out_close_device; } - pr_dbg("dev->backend_dev.channel=3D%p\n", backend_dev->channel); =20 ret =3D init_device_caps(backend_dev, dev_attr); if (ret) { - error_setg(errp, "Failed to initialize device capabilities"); + rdma_error_report("Failed to initialize device capabilities"); ret =3D -EIO; goto out_destroy_comm_channel; } @@ -1225,7 +1163,7 @@ int rdma_backend_init(RdmaBackendDev *backend_dev, PC= IDevice *pdev, =20 ret =3D mad_init(backend_dev, mad_chr_be); if (ret) { - error_setg(errp, "Fail to initialize mad"); + rdma_error_report("Failed to initialize mad"); ret =3D -EIO; goto out_destroy_comm_channel; } @@ -1253,13 +1191,11 @@ out: =20 void rdma_backend_start(RdmaBackendDev *backend_dev) { - pr_dbg("Starting rdma_backend\n"); start_comp_thread(backend_dev); } =20 void rdma_backend_stop(RdmaBackendDev *backend_dev) { - pr_dbg("Stopping rdma_backend\n"); stop_backend_thread(&backend_dev->comp_thread); } =20 diff --git a/hw/rdma/rdma_backend.h b/hw/rdma/rdma_backend.h index 5114c90e67..8e53a72bf2 100644 --- a/hw/rdma/rdma_backend.h +++ b/hw/rdma/rdma_backend.h @@ -58,8 +58,8 @@ static inline uint32_t rdma_backend_mr_rkey(const RdmaBac= kendMR *mr) int rdma_backend_init(RdmaBackendDev *backend_dev, PCIDevice *pdev, RdmaDeviceResources *rdma_dev_res, const char *backend_device_name, uint8_t port_num, - struct ibv_device_attr *dev_attr, CharBackend *mad_c= hr_be, - Error **errp); + struct ibv_device_attr *dev_attr, + CharBackend *mad_chr_be); void rdma_backend_fini(RdmaBackendDev *backend_dev); int rdma_backend_add_gid(RdmaBackendDev *backend_dev, const char *ifname, union ibv_gid *gid); diff --git a/hw/rdma/rdma_rm.c b/hw/rdma/rdma_rm.c index 268ff633a4..66177b42f5 100644 --- a/hw/rdma/rdma_rm.c +++ b/hw/rdma/rdma_rm.c @@ -17,6 +17,7 @@ #include "qapi/error.h" #include "cpu.h" =20 +#include "trace.h" #include "rdma_utils.h" #include "rdma_backend.h" #include "rdma_rm.h" @@ -49,25 +50,26 @@ static inline void res_tbl_free(RdmaRmResTbl *tbl) g_free(tbl->bitmap); } =20 -static inline void *res_tbl_get(RdmaRmResTbl *tbl, uint32_t handle) +static inline void *rdma_res_tbl_get(RdmaRmResTbl *tbl, uint32_t handle) { - pr_dbg("%s, handle=3D%d\n", tbl->name, handle); + trace_rdma_res_tbl_get(tbl->name, handle); =20 if ((handle < tbl->tbl_sz) && (test_bit(handle, tbl->bitmap))) { return tbl->tbl + handle * tbl->res_sz; } else { - pr_dbg("Invalid handle %d\n", handle); + rdma_error_report("Table %s, invalid handle %d", tbl->name, handle= ); return NULL; } } =20 -static inline void *res_tbl_alloc(RdmaRmResTbl *tbl, uint32_t *handle) +static inline void *rdma_res_tbl_alloc(RdmaRmResTbl *tbl, uint32_t *handle) { qemu_mutex_lock(&tbl->lock); =20 *handle =3D find_first_zero_bit(tbl->bitmap, tbl->tbl_sz); if (*handle > tbl->tbl_sz) { - pr_dbg("Failed to alloc, bitmap is full\n"); + rdma_error_report("Table %s, failed to allocate, bitmap is full", + tbl->name); qemu_mutex_unlock(&tbl->lock); return NULL; } @@ -78,14 +80,14 @@ static inline void *res_tbl_alloc(RdmaRmResTbl *tbl, ui= nt32_t *handle) =20 memset(tbl->tbl + *handle * tbl->res_sz, 0, tbl->res_sz); =20 - pr_dbg("%s, handle=3D%d\n", tbl->name, *handle); + trace_rdma_res_tbl_alloc(tbl->name, *handle); =20 return tbl->tbl + *handle * tbl->res_sz; } =20 -static inline void res_tbl_dealloc(RdmaRmResTbl *tbl, uint32_t handle) +static inline void rdma_res_tbl_dealloc(RdmaRmResTbl *tbl, uint32_t handle) { - pr_dbg("%s, handle=3D%d\n", tbl->name, handle); + trace_rdma_res_tbl_dealloc(tbl->name, handle); =20 qemu_mutex_lock(&tbl->lock); =20 @@ -102,7 +104,7 @@ int rdma_rm_alloc_pd(RdmaDeviceResources *dev_res, Rdma= BackendDev *backend_dev, RdmaRmPD *pd; int ret =3D -ENOMEM; =20 - pd =3D res_tbl_alloc(&dev_res->pd_tbl, pd_handle); + pd =3D rdma_res_tbl_alloc(&dev_res->pd_tbl, pd_handle); if (!pd) { goto out; } @@ -118,7 +120,7 @@ int rdma_rm_alloc_pd(RdmaDeviceResources *dev_res, Rdma= BackendDev *backend_dev, return 0; =20 out_tbl_dealloc: - res_tbl_dealloc(&dev_res->pd_tbl, *pd_handle); + rdma_res_tbl_dealloc(&dev_res->pd_tbl, *pd_handle); =20 out: return ret; @@ -126,7 +128,7 @@ out: =20 RdmaRmPD *rdma_rm_get_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle) { - return res_tbl_get(&dev_res->pd_tbl, pd_handle); + return rdma_res_tbl_get(&dev_res->pd_tbl, pd_handle); } =20 void rdma_rm_dealloc_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle) @@ -135,14 +137,14 @@ void rdma_rm_dealloc_pd(RdmaDeviceResources *dev_res,= uint32_t pd_handle) =20 if (pd) { rdma_backend_destroy_pd(&pd->backend_pd); - res_tbl_dealloc(&dev_res->pd_tbl, pd_handle); + rdma_res_tbl_dealloc(&dev_res->pd_tbl, pd_handle); } } =20 int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, uint32_t pd_handle, - uint64_t guest_start, size_t guest_length, void *host= _virt, - int access_flags, uint32_t *mr_handle, uint32_t *lkey, - uint32_t *rkey) + uint64_t guest_start, uint64_t guest_length, + void *host_virt, int access_flags, uint32_t *mr_handl= e, + uint32_t *lkey, uint32_t *rkey) { RdmaRmMR *mr; int ret =3D 0; @@ -150,20 +152,15 @@ int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, ui= nt32_t pd_handle, =20 pd =3D rdma_rm_get_pd(dev_res, pd_handle); if (!pd) { - pr_dbg("Invalid PD\n"); return -EINVAL; } =20 - mr =3D res_tbl_alloc(&dev_res->mr_tbl, mr_handle); + mr =3D rdma_res_tbl_alloc(&dev_res->mr_tbl, mr_handle); if (!mr) { - pr_dbg("Failed to allocate obj in table\n"); return -ENOMEM; } - pr_dbg("mr_handle=3D%d\n", *mr_handle); - - pr_dbg("host_virt=3D0x%p\n", host_virt); - pr_dbg("guest_start=3D0x%" PRIx64 "\n", guest_start); - pr_dbg("length=3D%zu\n", guest_length); + trace_rdma_rm_alloc_mr(*mr_handle, host_virt, guest_start, guest_lengt= h, + access_flags); =20 if (host_virt) { mr->virt =3D host_virt; @@ -174,7 +171,6 @@ int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, uint= 32_t pd_handle, ret =3D rdma_backend_create_mr(&mr->backend_mr, &pd->backend_pd, m= r->virt, mr->length, access_flags); if (ret) { - pr_dbg("Fail in rdma_backend_create_mr, err=3D%d\n", ret); ret =3D -EIO; goto out_dealloc_mr; } @@ -189,14 +185,14 @@ int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, ui= nt32_t pd_handle, return 0; =20 out_dealloc_mr: - res_tbl_dealloc(&dev_res->mr_tbl, *mr_handle); + rdma_res_tbl_dealloc(&dev_res->mr_tbl, *mr_handle); =20 return ret; } =20 RdmaRmMR *rdma_rm_get_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle) { - return res_tbl_get(&dev_res->mr_tbl, mr_handle); + return rdma_res_tbl_get(&dev_res->mr_tbl, mr_handle); } =20 void rdma_rm_dealloc_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle) @@ -205,12 +201,12 @@ void rdma_rm_dealloc_mr(RdmaDeviceResources *dev_res,= uint32_t mr_handle) =20 if (mr) { rdma_backend_destroy_mr(&mr->backend_mr); - pr_dbg("start=3D0x%" PRIx64 "\n", mr->start); + trace_rdma_rm_dealloc_mr(mr_handle, mr->start); if (mr->start) { mr->virt -=3D (mr->start & (TARGET_PAGE_SIZE - 1)); munmap(mr->virt, mr->length); } - res_tbl_dealloc(&dev_res->mr_tbl, mr_handle); + rdma_res_tbl_dealloc(&dev_res->mr_tbl, mr_handle); } } =20 @@ -222,12 +218,13 @@ int rdma_rm_alloc_uc(RdmaDeviceResources *dev_res, ui= nt32_t pfn, /* TODO: Need to make sure pfn is between bar start address and * bsd+RDMA_BAR2_UAR_SIZE if (pfn > RDMA_BAR2_UAR_SIZE) { - pr_err("pfn out of range (%d > %d)\n", pfn, RDMA_BAR2_UAR_SIZE); + rdma_error_report("pfn out of range (%d > %d)", pfn, + RDMA_BAR2_UAR_SIZE); return -ENOMEM; } */ =20 - uc =3D res_tbl_alloc(&dev_res->uc_tbl, uc_handle); + uc =3D rdma_res_tbl_alloc(&dev_res->uc_tbl, uc_handle); if (!uc) { return -ENOMEM; } @@ -237,7 +234,7 @@ int rdma_rm_alloc_uc(RdmaDeviceResources *dev_res, uint= 32_t pfn, =20 RdmaRmUC *rdma_rm_get_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle) { - return res_tbl_get(&dev_res->uc_tbl, uc_handle); + return rdma_res_tbl_get(&dev_res->uc_tbl, uc_handle); } =20 void rdma_rm_dealloc_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle) @@ -245,13 +242,13 @@ void rdma_rm_dealloc_uc(RdmaDeviceResources *dev_res,= uint32_t uc_handle) RdmaRmUC *uc =3D rdma_rm_get_uc(dev_res, uc_handle); =20 if (uc) { - res_tbl_dealloc(&dev_res->uc_tbl, uc_handle); + rdma_res_tbl_dealloc(&dev_res->uc_tbl, uc_handle); } } =20 RdmaRmCQ *rdma_rm_get_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle) { - return res_tbl_get(&dev_res->cq_tbl, cq_handle); + return rdma_res_tbl_get(&dev_res->cq_tbl, cq_handle); } =20 int rdma_rm_alloc_cq(RdmaDeviceResources *dev_res, RdmaBackendDev *backend= _dev, @@ -260,7 +257,7 @@ int rdma_rm_alloc_cq(RdmaDeviceResources *dev_res, Rdma= BackendDev *backend_dev, int rc; RdmaRmCQ *cq; =20 - cq =3D res_tbl_alloc(&dev_res->cq_tbl, cq_handle); + cq =3D rdma_res_tbl_alloc(&dev_res->cq_tbl, cq_handle); if (!cq) { return -ENOMEM; } @@ -287,8 +284,6 @@ void rdma_rm_req_notify_cq(RdmaDeviceResources *dev_res= , uint32_t cq_handle, { RdmaRmCQ *cq; =20 - pr_dbg("cq_handle=3D%d, notify=3D0x%x\n", cq_handle, notify); - cq =3D rdma_rm_get_cq(dev_res, cq_handle); if (!cq) { return; @@ -297,8 +292,6 @@ void rdma_rm_req_notify_cq(RdmaDeviceResources *dev_res= , uint32_t cq_handle, if (cq->notify !=3D CNT_SET) { cq->notify =3D notify ? CNT_ARM : CNT_CLEAR; } - - pr_dbg("notify=3D%d\n", cq->notify); } =20 void rdma_rm_dealloc_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle) @@ -312,7 +305,7 @@ void rdma_rm_dealloc_cq(RdmaDeviceResources *dev_res, u= int32_t cq_handle) =20 rdma_backend_destroy_cq(&cq->backend_cq); =20 - res_tbl_dealloc(&dev_res->cq_tbl, cq_handle); + rdma_res_tbl_dealloc(&dev_res->cq_tbl, cq_handle); } =20 RdmaRmQP *rdma_rm_get_qp(RdmaDeviceResources *dev_res, uint32_t qpn) @@ -323,6 +316,10 @@ RdmaRmQP *rdma_rm_get_qp(RdmaDeviceResources *dev_res,= uint32_t qpn) =20 g_bytes_unref(key); =20 + if (!qp) { + rdma_error_report("Invalid QP handle %d", qpn); + } + return qp; } =20 @@ -338,11 +335,8 @@ int rdma_rm_alloc_qp(RdmaDeviceResources *dev_res, uin= t32_t pd_handle, RdmaRmPD *pd; uint32_t rm_qpn; =20 - pr_dbg("qp_type=3D%d\n", qp_type); - pd =3D rdma_rm_get_pd(dev_res, pd_handle); if (!pd) { - pr_err("Invalid pd handle (%d)\n", pd_handle); return -EINVAL; } =20 @@ -350,8 +344,8 @@ int rdma_rm_alloc_qp(RdmaDeviceResources *dev_res, uint= 32_t pd_handle, rcq =3D rdma_rm_get_cq(dev_res, recv_cq_handle); =20 if (!scq || !rcq) { - pr_err("Invalid send_cqn or recv_cqn (%d, %d)\n", - send_cq_handle, recv_cq_handle); + rdma_error_report("Invalid send_cqn or recv_cqn (%d, %d)", + send_cq_handle, recv_cq_handle); return -EINVAL; } =20 @@ -360,11 +354,10 @@ int rdma_rm_alloc_qp(RdmaDeviceResources *dev_res, ui= nt32_t pd_handle, rcq->notify =3D CNT_SET; } =20 - qp =3D res_tbl_alloc(&dev_res->qp_tbl, &rm_qpn); + qp =3D rdma_res_tbl_alloc(&dev_res->qp_tbl, &rm_qpn); if (!qp) { return -ENOMEM; } - pr_dbg("rm_qpn=3D%d\n", rm_qpn); =20 qp->qpn =3D rm_qpn; qp->qp_state =3D IBV_QPS_RESET; @@ -382,13 +375,13 @@ int rdma_rm_alloc_qp(RdmaDeviceResources *dev_res, ui= nt32_t pd_handle, } =20 *qpn =3D rdma_backend_qpn(&qp->backend_qp); - pr_dbg("rm_qpn=3D%d, backend_qpn=3D0x%x\n", rm_qpn, *qpn); + trace_rdma_rm_alloc_qp(rm_qpn, *qpn, qp_type); g_hash_table_insert(dev_res->qp_hash, g_bytes_new(qpn, sizeof(*qpn)), = qp); =20 return 0; =20 out_dealloc_qp: - res_tbl_dealloc(&dev_res->qp_tbl, qp->qpn); + rdma_res_tbl_dealloc(&dev_res->qp_tbl, qp->qpn); =20 return rc; } @@ -402,28 +395,22 @@ int rdma_rm_modify_qp(RdmaDeviceResources *dev_res, R= dmaBackendDev *backend_dev, RdmaRmQP *qp; int ret; =20 - pr_dbg("qpn=3D0x%x\n", qp_handle); - pr_dbg("qkey=3D0x%x\n", qkey); - qp =3D rdma_rm_get_qp(dev_res, qp_handle); if (!qp) { return -EINVAL; } =20 - pr_dbg("qp_type=3D%d\n", qp->qp_type); - pr_dbg("attr_mask=3D0x%x\n", attr_mask); - if (qp->qp_type =3D=3D IBV_QPT_SMI) { - pr_dbg("QP0 unsupported\n"); + rdma_error_report("Got QP0 request"); return -EPERM; } else if (qp->qp_type =3D=3D IBV_QPT_GSI) { - pr_dbg("QP1\n"); return 0; } =20 + trace_rdma_rm_modify_qp(qp_handle, attr_mask, qp_state, sgid_idx); + if (attr_mask & IBV_QP_STATE) { qp->qp_state =3D qp_state; - pr_dbg("qp_state=3D%d\n", qp->qp_state); =20 if (qp->qp_state =3D=3D IBV_QPS_INIT) { ret =3D rdma_backend_qp_state_init(backend_dev, &qp->backend_q= p, @@ -435,11 +422,11 @@ int rdma_rm_modify_qp(RdmaDeviceResources *dev_res, R= dmaBackendDev *backend_dev, =20 if (qp->qp_state =3D=3D IBV_QPS_RTR) { /* Get backend gid index */ - pr_dbg("Guest sgid_idx=3D%d\n", sgid_idx); sgid_idx =3D rdma_rm_get_backend_gid_index(dev_res, backend_de= v, sgid_idx); if (sgid_idx <=3D 0) { /* TODO check also less than bk.max_sgi= d */ - pr_dbg("Fail to get bk sgid_idx for sgid_idx %d\n", sgid_i= dx); + rdma_error_report("Failed to get bk sgid_idx for sgid_idx = %d", + sgid_idx); return -EIO; } =20 @@ -471,15 +458,11 @@ int rdma_rm_query_qp(RdmaDeviceResources *dev_res, Rd= maBackendDev *backend_dev, { RdmaRmQP *qp; =20 - pr_dbg("qpn=3D0x%x\n", qp_handle); - qp =3D rdma_rm_get_qp(dev_res, qp_handle); if (!qp) { return -EINVAL; } =20 - pr_dbg("qp_type=3D%d\n", qp->qp_type); - return rdma_backend_query_qp(&qp->backend_qp, attr, attr_mask, init_at= tr); } =20 @@ -499,20 +482,18 @@ void rdma_rm_dealloc_qp(RdmaDeviceResources *dev_res,= uint32_t qp_handle) =20 rdma_backend_destroy_qp(&qp->backend_qp); =20 - res_tbl_dealloc(&dev_res->qp_tbl, qp->qpn); + rdma_res_tbl_dealloc(&dev_res->qp_tbl, qp->qpn); } =20 void *rdma_rm_get_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t cqe_ctx_i= d) { void **cqe_ctx; =20 - cqe_ctx =3D res_tbl_get(&dev_res->cqe_ctx_tbl, cqe_ctx_id); + cqe_ctx =3D rdma_res_tbl_get(&dev_res->cqe_ctx_tbl, cqe_ctx_id); if (!cqe_ctx) { return NULL; } =20 - pr_dbg("ctx=3D%p\n", *cqe_ctx); - return *cqe_ctx; } =20 @@ -521,12 +502,11 @@ int rdma_rm_alloc_cqe_ctx(RdmaDeviceResources *dev_re= s, uint32_t *cqe_ctx_id, { void **cqe_ctx; =20 - cqe_ctx =3D res_tbl_alloc(&dev_res->cqe_ctx_tbl, cqe_ctx_id); + cqe_ctx =3D rdma_res_tbl_alloc(&dev_res->cqe_ctx_tbl, cqe_ctx_id); if (!cqe_ctx) { return -ENOMEM; } =20 - pr_dbg("ctx=3D%p\n", ctx); *cqe_ctx =3D ctx; =20 return 0; @@ -534,7 +514,7 @@ int rdma_rm_alloc_cqe_ctx(RdmaDeviceResources *dev_res,= uint32_t *cqe_ctx_id, =20 void rdma_rm_dealloc_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t cqe_ct= x_id) { - res_tbl_dealloc(&dev_res->cqe_ctx_tbl, cqe_ctx_id); + rdma_res_tbl_dealloc(&dev_res->cqe_ctx_tbl, cqe_ctx_id); } =20 int rdma_rm_add_gid(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_= dev, @@ -544,7 +524,6 @@ int rdma_rm_add_gid(RdmaDeviceResources *dev_res, RdmaB= ackendDev *backend_dev, =20 rc =3D rdma_backend_add_gid(backend_dev, ifname, gid); if (rc) { - pr_dbg("Fail to add gid\n"); return -EINVAL; } =20 @@ -565,7 +544,6 @@ int rdma_rm_del_gid(RdmaDeviceResources *dev_res, RdmaB= ackendDev *backend_dev, rc =3D rdma_backend_del_gid(backend_dev, ifname, &dev_res->port.gid_tbl[gid_idx].gid); if (rc) { - pr_dbg("Fail to delete gid\n"); return -EINVAL; } =20 @@ -580,7 +558,7 @@ int rdma_rm_get_backend_gid_index(RdmaDeviceResources *= dev_res, RdmaBackendDev *backend_dev, int sgid_id= x) { if (unlikely(sgid_idx < 0 || sgid_idx >=3D MAX_PORT_GIDS)) { - pr_dbg("Got invalid sgid_idx %d\n", sgid_idx); + rdma_error_report("Got invalid sgid_idx %d", sgid_idx); return -EINVAL; } =20 @@ -590,9 +568,6 @@ int rdma_rm_get_backend_gid_index(RdmaDeviceResources *= dev_res, &dev_res->port.gid_tbl[sgid_idx].gid); } =20 - pr_dbg("backend_gid_index=3D%d\n", - dev_res->port.gid_tbl[sgid_idx].backend_gid_index); - return dev_res->port.gid_tbl[sgid_idx].backend_gid_index; } =20 @@ -624,8 +599,7 @@ static void fini_ports(RdmaDeviceResources *dev_res, } } =20 -int rdma_rm_init(RdmaDeviceResources *dev_res, struct ibv_device_attr *dev= _attr, - Error **errp) +int rdma_rm_init(RdmaDeviceResources *dev_res, struct ibv_device_attr *dev= _attr) { dev_res->qp_hash =3D g_hash_table_new_full(g_bytes_hash, g_bytes_equal, destroy_qp_hash_key, NULL); diff --git a/hw/rdma/rdma_rm.h b/hw/rdma/rdma_rm.h index 3c602c04c0..f9b2ec5076 100644 --- a/hw/rdma/rdma_rm.h +++ b/hw/rdma/rdma_rm.h @@ -20,8 +20,8 @@ #include "rdma_backend_defs.h" #include "rdma_rm_defs.h" =20 -int rdma_rm_init(RdmaDeviceResources *dev_res, struct ibv_device_attr *dev= _attr, - Error **errp); +int rdma_rm_init(RdmaDeviceResources *dev_res, + struct ibv_device_attr *dev_attr); void rdma_rm_fini(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_de= v, const char *ifname); =20 @@ -31,9 +31,9 @@ RdmaRmPD *rdma_rm_get_pd(RdmaDeviceResources *dev_res, ui= nt32_t pd_handle); void rdma_rm_dealloc_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle); =20 int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, uint32_t pd_handle, - uint64_t guest_start, size_t guest_length, void *host= _virt, - int access_flags, uint32_t *mr_handle, uint32_t *lkey, - uint32_t *rkey); + uint64_t guest_start, uint64_t guest_length, + void *host_virt, int access_flags, uint32_t *mr_handl= e, + uint32_t *lkey, uint32_t *rkey); RdmaRmMR *rdma_rm_get_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle); void rdma_rm_dealloc_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle); =20 diff --git a/hw/rdma/rdma_utils.c b/hw/rdma/rdma_utils.c index 4fbea8cde2..b9f07fcda7 100644 --- a/hw/rdma/rdma_utils.c +++ b/hw/rdma/rdma_utils.c @@ -14,26 +14,23 @@ */ =20 #include "qemu/osdep.h" +#include "trace.h" #include "rdma_utils.h" =20 -#ifdef PVRDMA_DEBUG -unsigned long pr_dbg_cnt; -#endif - void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t plen) { void *p; hwaddr len =3D plen; =20 if (!addr) { - pr_dbg("addr is NULL\n"); + rdma_error_report("addr is NULL"); return NULL; } =20 p =3D pci_dma_map(dev, addr, &len, DMA_DIRECTION_TO_DEVICE); if (!p) { - pr_dbg("Fail in pci_dma_map, addr=3D0x%" PRIx64 ", len=3D%" PRId64= "\n", - addr, len); + rdma_error_report("pci_dma_map fail, addr=3D0x%"PRIx64", len=3D%"P= RId64, + addr, len); return NULL; } =20 @@ -42,14 +39,14 @@ void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr,= dma_addr_t plen) return NULL; } =20 - pr_dbg("0x%" PRIx64 " -> %p (len=3D% " PRId64 ")\n", addr, p, len); + trace_rdma_pci_dma_map(addr, p, len); =20 return p; } =20 void rdma_pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len) { - pr_dbg("%p\n", buffer); + trace_rdma_pci_dma_unmap(buffer); if (buffer) { pci_dma_unmap(dev, buffer, len, DMA_DIRECTION_TO_DEVICE, 0); } diff --git a/hw/rdma/rdma_utils.h b/hw/rdma/rdma_utils.h index 4490ea0b94..acd148837f 100644 --- a/hw/rdma/rdma_utils.h +++ b/hw/rdma/rdma_utils.h @@ -17,48 +17,17 @@ #ifndef RDMA_UTILS_H #define RDMA_UTILS_H =20 +#include "qemu/error-report.h" #include "hw/pci/pci.h" #include "sysemu/dma.h" #include "stdio.h" =20 -#define pr_info(fmt, ...) \ - fprintf(stdout, "%s: %-20s (%3d): " fmt, "rdma", __func__, __LINE__,\ - ## __VA_ARGS__) - -#define pr_err(fmt, ...) \ - fprintf(stderr, "%s: Error at %-20s (%3d): " fmt, "rdma", __func__, \ - __LINE__, ## __VA_ARGS__) - -#ifdef PVRDMA_DEBUG -extern unsigned long pr_dbg_cnt; - -#define init_pr_dbg(void) \ -{ \ - pr_dbg_cnt =3D 0; \ -} - -#define pr_dbg(fmt, ...) \ - fprintf(stdout, "%lx %ld: %-20s (%3d): " fmt, pthread_self(), pr_dbg_c= nt++, \ - __func__, __LINE__, ## __VA_ARGS__) - -#define pr_dbg_buf(title, buf, len) \ -{ \ - int i; \ - char *b =3D g_malloc0(len * 3 + 1); \ - char b1[4]; \ - for (i =3D 0; i < len; i++) { \ - sprintf(b1, "%.2X ", buf[i] & 0x000000FF); \ - strcat(b, b1); \ - } \ - pr_dbg("%s (%d): %s\n", title, len, b); \ - g_free(b); \ -} - -#else -#define init_pr_dbg(void) -#define pr_dbg(fmt, ...) -#define pr_dbg_buf(title, buf, len) -#endif +#define rdma_error_report(fmt, ...) \ + error_report("%s: " fmt, "rdma", ## __VA_ARGS__) +#define rdma_warn_report(fmt, ...) \ + warn_report("%s: " fmt, "rdma", ## __VA_ARGS__) +#define rdma_info_report(fmt, ...) \ + info_report("%s: " fmt, "rdma", ## __VA_ARGS__) =20 void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t plen); void rdma_pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len); diff --git a/hw/rdma/trace-events b/hw/rdma/trace-events index c4c202e647..0fad56c882 100644 --- a/hw/rdma/trace-events +++ b/hw/rdma/trace-events @@ -1,5 +1,31 @@ # See docs/tracing.txt for syntax documentation. =20 -#hw/rdma/rdma_backend.c -create_ah_cache_hit(uint64_t subnet, uint64_t net_id) "subnet =3D 0x%"PRIx= 64" net_id =3D 0x%"PRIx64 -create_ah_cache_miss(uint64_t subnet, uint64_t net_id) "subnet =3D 0x%"PRI= x64" net_id =3D 0x%"PRIx64 +# hw/rdma/rdma_backend.c +rdma_check_dev_attr(const char *name, int max_bk, int max_fe) "%s: be=3D%d= , fe=3D%d" +rdma_create_ah_cache_hit(uint64_t subnet, uint64_t if_id) "subnet=3D0x%"PR= Ix64",if_id=3D0x%"PRIx64 +rdma_create_ah_cache_miss(uint64_t subnet, uint64_t if_id) "subnet=3D0x%"P= RIx64",if_id=3D0x%"PRIx64 +rdma_poll_cq(int ne, void *ibcq) "Got %d completion(s) from cq %p" +rdmacm_mux(const char *title, int msg_type, int op_code) "%s: msg_type=3D%= d, op_code=3D%d" +rdmacm_mux_check_op_status(int msg_type, int op_code, int err_code) "resp:= msg_type=3D%d, op_code=3D%d, err_code=3D%d" +rdma_mad_message(const char *title, int len, char *data) "mad %s (%d): %s" +rdma_backend_rc_qp_state_init(uint32_t qpn) "RC QP 0x%x switch to INIT" +rdma_backend_ud_qp_state_init(uint32_t qpn, uint32_t qkey) "UD QP 0x%x swi= tch to INIT, qkey=3D0x%x" +rdma_backend_rc_qp_state_rtr(uint32_t qpn, uint64_t subnet, uint64_t ifid,= uint8_t sgid_idx, uint32_t dqpn, uint32_t rq_psn) "RC QP 0x%x switch to RT= R, subnet =3D 0x%"PRIx64", ifid =3D 0x%"PRIx64 ", sgid_idx=3D%d, dqpn=3D0x%= x, rq_psn=3D0x%x" +rdma_backend_ud_qp_state_rtr(uint32_t qpn, uint32_t qkey) "UD QP 0x%x swit= ch to RTR, qkey=3D0x%x" +rdma_backend_rc_qp_state_rts(uint32_t qpn, uint32_t sq_psn) "RC QP 0x%x sw= itch to RTS, sq_psn=3D0x%x, " +rdma_backend_ud_qp_state_rts(uint32_t qpn, uint32_t sq_psn, uint32_t qkey)= "UD QP 0x%x switch to RTS, sq_psn=3D0x%x, qkey=3D0x%x" +rdma_backend_get_gid_index(uint64_t subnet, uint64_t ifid, int gid_idx) "s= ubnet=3D0x%"PRIx64", ifid=3D0x%"PRIx64 ", gid_idx=3D%d" +rdma_backend_gid_change(const char *op, uint64_t subnet, uint64_t ifid) "%= s subnet=3D0x%"PRIx64", ifid=3D0x%"PRIx64 + +# hw/rdma/rdma_rm.c +rdma_res_tbl_get(char *name, uint32_t handle) "tbl %s, handle %d" +rdma_res_tbl_alloc(char *name, uint32_t handle) "tbl %s, handle %d" +rdma_res_tbl_dealloc(char *name, uint32_t handle) "tbl %s, handle %d" +rdma_rm_alloc_mr(uint32_t mr_handle, void *host_virt, uint64_t guest_start= , uint64_t guest_length, int access_flags) "mr_handle=3D%d, host_virt=3D%p,= guest_start=3D0x%"PRIx64", length=3D%" PRId64", access_flags=3D0x%x" +rdma_rm_dealloc_mr(uint32_t mr_handle, uint64_t guest_start) "mr_handle=3D= %d, guest_start=3D0x%"PRIx64 +rdma_rm_alloc_qp(uint32_t rm_qpn, uint32_t backend_qpn, uint8_t qp_type) "= rm_qpn=3D%d, backend_qpn=3D0x%x, qp_type=3D%d" +rdma_rm_modify_qp(uint32_t qpn, uint32_t attr_mask, int qp_state, uint8_t = sgid_idx) "qpn=3D0x%x, attr_mask=3D0x%x, qp_state=3D%d, sgid_idx=3D%d" + +# hw/rdma/rdma_utils.c +rdma_pci_dma_map(uint64_t addr, void *vaddr, uint64_t len) "0x%"PRIx64" ->= %p (len=3D%" PRId64")" +rdma_pci_dma_unmap(void *vaddr) "%p" diff --git a/hw/rdma/vmw/pvrdma.h b/hw/rdma/vmw/pvrdma.h index ffae36986e..0879224957 100644 --- a/hw/rdma/vmw/pvrdma.h +++ b/hw/rdma/vmw/pvrdma.h @@ -127,6 +127,6 @@ static inline void post_interrupt(PVRDMADev *dev, unsig= ned vector) } } =20 -int execute_command(PVRDMADev *dev); +int pvrdma_exec_cmd(PVRDMADev *dev); =20 #endif diff --git a/hw/rdma/vmw/pvrdma_cmd.c b/hw/rdma/vmw/pvrdma_cmd.c index 89920887bf..21a55e225a 100644 --- a/hw/rdma/vmw/pvrdma_cmd.c +++ b/hw/rdma/vmw/pvrdma_cmd.c @@ -14,7 +14,6 @@ */ =20 #include "qemu/osdep.h" -#include "qemu/error-report.h" #include "cpu.h" #include "hw/hw.h" #include "hw/pci/pci.h" @@ -24,6 +23,7 @@ #include "../rdma_rm.h" #include "../rdma_utils.h" =20 +#include "trace.h" #include "pvrdma.h" #include "standard-headers/rdma/vmw_pvrdma-abi.h" =20 @@ -35,40 +35,38 @@ static void *pvrdma_map_to_pdir(PCIDevice *pdev, uint64= _t pdir_dma, void *host_virt =3D NULL, *curr_page; =20 if (!nchunks) { - pr_dbg("nchunks=3D0\n"); + rdma_error_report("Got nchunks=3D0"); return NULL; } =20 dir =3D rdma_pci_dma_map(pdev, pdir_dma, TARGET_PAGE_SIZE); if (!dir) { - error_report("PVRDMA: Failed to map to page directory"); + rdma_error_report("Failed to map to page directory"); return NULL; } =20 tbl =3D rdma_pci_dma_map(pdev, dir[0], TARGET_PAGE_SIZE); if (!tbl) { - error_report("PVRDMA: Failed to map to page table 0"); + rdma_error_report("Failed to map to page table 0"); goto out_unmap_dir; } =20 curr_page =3D rdma_pci_dma_map(pdev, (dma_addr_t)tbl[0], TARGET_PAGE_S= IZE); if (!curr_page) { - error_report("PVRDMA: Failed to map the first page"); + rdma_error_report("Failed to map the page 0"); goto out_unmap_tbl; } =20 host_virt =3D mremap(curr_page, 0, length, MREMAP_MAYMOVE); - pr_dbg("mremap %p -> %p\n", curr_page, host_virt); if (host_virt =3D=3D MAP_FAILED) { host_virt =3D NULL; - error_report("PVRDMA: Failed to remap memory for host_virt"); + rdma_error_report("Failed to remap memory for host_virt"); goto out_unmap_tbl; } + trace_pvrdma_map_to_pdir_host_virt(curr_page, host_virt); =20 rdma_pci_dma_unmap(pdev, curr_page, TARGET_PAGE_SIZE); =20 - pr_dbg("host_virt=3D%p\n", host_virt); - dir_idx =3D 0; tbl_idx =3D 1; addr_idx =3D 1; @@ -76,28 +74,28 @@ static void *pvrdma_map_to_pdir(PCIDevice *pdev, uint64= _t pdir_dma, if (tbl_idx =3D=3D TARGET_PAGE_SIZE / sizeof(uint64_t)) { tbl_idx =3D 0; dir_idx++; - pr_dbg("Mapping to table %d\n", dir_idx); rdma_pci_dma_unmap(pdev, tbl, TARGET_PAGE_SIZE); tbl =3D rdma_pci_dma_map(pdev, dir[dir_idx], TARGET_PAGE_SIZE); if (!tbl) { - error_report("PVRDMA: Failed to map to page table %d", dir= _idx); + rdma_error_report("Failed to map to page table %d", dir_id= x); goto out_unmap_host_virt; } } =20 - pr_dbg("guest_dma[%d]=3D0x%" PRIx64 "\n", addr_idx, tbl[tbl_idx]); - curr_page =3D rdma_pci_dma_map(pdev, (dma_addr_t)tbl[tbl_idx], TARGET_PAGE_SIZE); if (!curr_page) { - error_report("PVRDMA: Failed to map to page %d, dir %d", tbl_i= dx, - dir_idx); + rdma_error_report("Failed to map to page %d, dir %d", tbl_idx, + dir_idx); goto out_unmap_host_virt; } =20 mremap(curr_page, 0, TARGET_PAGE_SIZE, MREMAP_MAYMOVE | MREMAP_FIX= ED, host_virt + TARGET_PAGE_SIZE * addr_idx); =20 + trace_pvrdma_map_to_pdir_next_page(addr_idx, curr_page, host_virt + + TARGET_PAGE_SIZE * addr_idx); + rdma_pci_dma_unmap(pdev, curr_page, TARGET_PAGE_SIZE); =20 addr_idx++; @@ -127,7 +125,6 @@ static int query_port(PVRDMADev *dev, union pvrdma_cmd_= req *req, struct pvrdma_cmd_query_port_resp *resp =3D &rsp->query_port_resp; struct pvrdma_port_attr attrs =3D {0}; =20 - pr_dbg("port=3D%d\n", cmd->port_num); if (cmd->port_num > MAX_PORTS) { return -EINVAL; } @@ -159,12 +156,10 @@ static int query_pkey(PVRDMADev *dev, union pvrdma_cm= d_req *req, struct pvrdma_cmd_query_pkey *cmd =3D &req->query_pkey; struct pvrdma_cmd_query_pkey_resp *resp =3D &rsp->query_pkey_resp; =20 - pr_dbg("port=3D%d\n", cmd->port_num); if (cmd->port_num > MAX_PORTS) { return -EINVAL; } =20 - pr_dbg("index=3D%d\n", cmd->index); if (cmd->index > MAX_PKEYS) { return -EINVAL; } @@ -172,7 +167,6 @@ static int query_pkey(PVRDMADev *dev, union pvrdma_cmd_= req *req, memset(resp, 0, sizeof(*resp)); =20 resp->pkey =3D PVRDMA_PKEY; - pr_dbg("pkey=3D0x%x\n", resp->pkey); =20 return 0; } @@ -184,8 +178,6 @@ static int create_pd(PVRDMADev *dev, union pvrdma_cmd_r= eq *req, struct pvrdma_cmd_create_pd_resp *resp =3D &rsp->create_pd_resp; int rc; =20 - pr_dbg("context=3D0x%x\n", cmd->ctx_handle ? cmd->ctx_handle : 0); - memset(resp, 0, sizeof(*resp)); rc =3D rdma_rm_alloc_pd(&dev->rdma_dev_res, &dev->backend_dev, &resp->pd_handle, cmd->ctx_handle); @@ -198,8 +190,6 @@ static int destroy_pd(PVRDMADev *dev, union pvrdma_cmd_= req *req, { struct pvrdma_cmd_destroy_pd *cmd =3D &req->destroy_pd; =20 - pr_dbg("pd_handle=3D%d\n", cmd->pd_handle); - rdma_rm_dealloc_pd(&dev->rdma_dev_res, cmd->pd_handle); =20 return 0; @@ -216,15 +206,11 @@ static int create_mr(PVRDMADev *dev, union pvrdma_cmd= _req *req, =20 memset(resp, 0, sizeof(*resp)); =20 - pr_dbg("pd_handle=3D%d\n", cmd->pd_handle); - pr_dbg("access_flags=3D0x%x\n", cmd->access_flags); - pr_dbg("flags=3D0x%x\n", cmd->flags); - if (!(cmd->flags & PVRDMA_MR_FLAG_DMA)) { host_virt =3D pvrdma_map_to_pdir(pci_dev, cmd->pdir_dma, cmd->nchu= nks, cmd->length); if (!host_virt) { - pr_dbg("Failed to map to pdir\n"); + rdma_error_report("Failed to map to pdir"); return -EINVAL; } } @@ -244,8 +230,6 @@ static int destroy_mr(PVRDMADev *dev, union pvrdma_cmd_= req *req, { struct pvrdma_cmd_destroy_mr *cmd =3D &req->destroy_mr; =20 - pr_dbg("mr_handle=3D%d\n", cmd->mr_handle); - rdma_rm_dealloc_mr(&dev->rdma_dev_res, cmd->mr_handle); =20 return 0; @@ -260,20 +244,19 @@ static int create_cq_ring(PCIDevice *pci_dev , Pvrdma= Ring **ring, char ring_name[MAX_RING_NAME_SZ]; =20 if (!nchunks || nchunks > PVRDMA_MAX_FAST_REG_PAGES) { - pr_dbg("invalid nchunks: %d\n", nchunks); + rdma_error_report("Got invalid nchunks: %d", nchunks); return rc; } =20 - pr_dbg("pdir_dma=3D0x%llx\n", (long long unsigned int)pdir_dma); dir =3D rdma_pci_dma_map(pci_dev, pdir_dma, TARGET_PAGE_SIZE); if (!dir) { - pr_dbg("Failed to map to CQ page directory\n"); + rdma_error_report("Failed to map to CQ page directory"); goto out; } =20 tbl =3D rdma_pci_dma_map(pci_dev, dir[0], TARGET_PAGE_SIZE); if (!tbl) { - pr_dbg("Failed to map to CQ page table\n"); + rdma_error_report("Failed to map to CQ page table"); goto out; } =20 @@ -284,7 +267,7 @@ static int create_cq_ring(PCIDevice *pci_dev , PvrdmaRi= ng **ring, rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE); =20 if (!r->ring_state) { - pr_dbg("Failed to map to CQ ring state\n"); + rdma_error_report("Failed to map to CQ ring state"); goto out_free_ring; } =20 @@ -339,8 +322,6 @@ static int create_cq(PVRDMADev *dev, union pvrdma_cmd_r= eq *req, return rc; } =20 - pr_dbg("ring=3D%p\n", ring); - rc =3D rdma_rm_alloc_cq(&dev->rdma_dev_res, &dev->backend_dev, cmd->cq= e, &resp->cq_handle, ring); if (rc) { @@ -359,11 +340,9 @@ static int destroy_cq(PVRDMADev *dev, union pvrdma_cmd= _req *req, RdmaRmCQ *cq; PvrdmaRing *ring; =20 - pr_dbg("cq_handle=3D%d\n", cmd->cq_handle); - cq =3D rdma_rm_get_cq(&dev->rdma_dev_res, cmd->cq_handle); if (!cq) { - pr_dbg("Invalid CQ handle\n"); + rdma_error_report("Got invalid CQ handle"); return -EINVAL; } =20 @@ -388,42 +367,33 @@ static int create_qp_rings(PCIDevice *pci_dev, uint64= _t pdir_dma, =20 if (!spages || spages > PVRDMA_MAX_FAST_REG_PAGES || !rpages || rpages > PVRDMA_MAX_FAST_REG_PAGES) { - pr_dbg("invalid pages: %d, %d\n", spages, rpages); + rdma_error_report("Got invalid page count for QP ring: %d, %d", sp= ages, + rpages); return rc; } =20 - pr_dbg("pdir_dma=3D0x%llx\n", (long long unsigned int)pdir_dma); dir =3D rdma_pci_dma_map(pci_dev, pdir_dma, TARGET_PAGE_SIZE); if (!dir) { - pr_dbg("Failed to map to CQ page directory\n"); + rdma_error_report("Failed to map to CQ page directory"); goto out; } =20 tbl =3D rdma_pci_dma_map(pci_dev, dir[0], TARGET_PAGE_SIZE); if (!tbl) { - pr_dbg("Failed to map to CQ page table\n"); + rdma_error_report("Failed to map to CQ page table"); goto out; } =20 sr =3D g_malloc(2 * sizeof(*rr)); rr =3D &sr[1]; - pr_dbg("sring=3D%p\n", sr); - pr_dbg("rring=3D%p\n", rr); =20 *rings =3D sr; =20 - pr_dbg("scqe=3D%d\n", scqe); - pr_dbg("smax_sge=3D%d\n", smax_sge); - pr_dbg("spages=3D%d\n", spages); - pr_dbg("rcqe=3D%d\n", rcqe); - pr_dbg("rmax_sge=3D%d\n", rmax_sge); - pr_dbg("rpages=3D%d\n", rpages); - /* Create send ring */ sr->ring_state =3D (struct pvrdma_ring *) rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE); if (!sr->ring_state) { - pr_dbg("Failed to map to CQ ring state\n"); + rdma_error_report("Failed to map to CQ ring state"); goto out_free_sr_mem; } =20 @@ -468,9 +438,7 @@ out: =20 static void destroy_qp_rings(PvrdmaRing *ring) { - pr_dbg("sring=3D%p\n", &ring[0]); pvrdma_ring_free(&ring[0]); - pr_dbg("rring=3D%p\n", &ring[1]); pvrdma_ring_free(&ring[1]); =20 rdma_pci_dma_unmap(ring->dev, ring->ring_state, TARGET_PAGE_SIZE); @@ -487,9 +455,6 @@ static int create_qp(PVRDMADev *dev, union pvrdma_cmd_r= eq *req, =20 memset(resp, 0, sizeof(*resp)); =20 - pr_dbg("total_chunks=3D%d\n", cmd->total_chunks); - pr_dbg("send_chunks=3D%d\n", cmd->send_chunks); - rc =3D create_qp_rings(PCI_DEVICE(dev), cmd->pdir_dma, &rings, cmd->max_send_wr, cmd->max_send_sge, cmd->send_ch= unks, cmd->max_recv_wr, cmd->max_recv_sge, @@ -498,8 +463,6 @@ static int create_qp(PVRDMADev *dev, union pvrdma_cmd_r= eq *req, return rc; } =20 - pr_dbg("rings=3D%p\n", rings); - rc =3D rdma_rm_alloc_qp(&dev->rdma_dev_res, cmd->pd_handle, cmd->qp_ty= pe, cmd->max_send_wr, cmd->max_send_sge, cmd->send_cq_handle, cmd->max_recv_wr, @@ -525,8 +488,6 @@ static int modify_qp(PVRDMADev *dev, union pvrdma_cmd_r= eq *req, struct pvrdma_cmd_modify_qp *cmd =3D &req->modify_qp; int rc; =20 - pr_dbg("qp_handle=3D%d\n", cmd->qp_handle); - memset(rsp, 0, sizeof(*rsp)); =20 /* No need to verify sgid_index since it is u8 */ @@ -551,9 +512,6 @@ static int query_qp(PVRDMADev *dev, union pvrdma_cmd_re= q *req, struct ibv_qp_init_attr init_attr; int rc; =20 - pr_dbg("qp_handle=3D%d\n", cmd->qp_handle); - pr_dbg("attr_mask=3D0x%x\n", cmd->attr_mask); - memset(rsp, 0, sizeof(*rsp)); =20 rc =3D rdma_rm_query_qp(&dev->rdma_dev_res, &dev->backend_dev, cmd->qp= _handle, @@ -572,7 +530,6 @@ static int destroy_qp(PVRDMADev *dev, union pvrdma_cmd_= req *req, =20 qp =3D rdma_rm_get_qp(&dev->rdma_dev_res, cmd->qp_handle); if (!qp) { - pr_dbg("Invalid QP handle\n"); return -EINVAL; } =20 @@ -591,16 +548,10 @@ static int create_bind(PVRDMADev *dev, union pvrdma_c= md_req *req, int rc; union ibv_gid *gid =3D (union ibv_gid *)&cmd->new_gid; =20 - pr_dbg("index=3D%d\n", cmd->index); - if (cmd->index >=3D MAX_PORT_GIDS) { return -EINVAL; } =20 - pr_dbg("gid[%d]=3D0x%llx,0x%llx\n", cmd->index, - (long long unsigned int)be64_to_cpu(gid->global.subnet_prefix), - (long long unsigned int)be64_to_cpu(gid->global.interface_id)); - rc =3D rdma_rm_add_gid(&dev->rdma_dev_res, &dev->backend_dev, dev->backend_eth_device_name, gid, cmd->index); =20 @@ -614,8 +565,6 @@ static int destroy_bind(PVRDMADev *dev, union pvrdma_cm= d_req *req, =20 struct pvrdma_cmd_destroy_bind *cmd =3D &req->destroy_bind; =20 - pr_dbg("index=3D%d\n", cmd->index); - if (cmd->index >=3D MAX_PORT_GIDS) { return -EINVAL; } @@ -633,8 +582,6 @@ static int create_uc(PVRDMADev *dev, union pvrdma_cmd_r= eq *req, struct pvrdma_cmd_create_uc_resp *resp =3D &rsp->create_uc_resp; int rc; =20 - pr_dbg("pfn=3D%d\n", cmd->pfn); - memset(resp, 0, sizeof(*resp)); rc =3D rdma_rm_alloc_uc(&dev->rdma_dev_res, cmd->pfn, &resp->ctx_handl= e); =20 @@ -646,8 +593,6 @@ static int destroy_uc(PVRDMADev *dev, union pvrdma_cmd_= req *req, { struct pvrdma_cmd_destroy_uc *cmd =3D &req->destroy_uc; =20 - pr_dbg("ctx_handle=3D%d\n", cmd->ctx_handle); - rdma_rm_dealloc_uc(&dev->rdma_dev_res, cmd->ctx_handle); =20 return 0; @@ -680,22 +625,21 @@ static struct cmd_handler cmd_handlers[] =3D { {PVRDMA_CMD_DESTROY_BIND, PVRDMA_CMD_DESTROY_BIND_RESP_NOOP, destroy_b= ind}, }; =20 -int execute_command(PVRDMADev *dev) +int pvrdma_exec_cmd(PVRDMADev *dev) { int err =3D 0xFFFF; DSRInfo *dsr_info; =20 dsr_info =3D &dev->dsr_info; =20 - pr_dbg("cmd=3D%d\n", dsr_info->req->hdr.cmd); if (dsr_info->req->hdr.cmd >=3D sizeof(cmd_handlers) / sizeof(struct cmd_handler)) { - pr_dbg("Unsupported command\n"); + rdma_error_report("Unsupported command"); goto out; } =20 if (!cmd_handlers[dsr_info->req->hdr.cmd].exec) { - pr_dbg("Unsupported command (not implemented yet)\n"); + rdma_error_report("Unsupported command (not implemented yet)"); goto out; } =20 @@ -704,7 +648,8 @@ int execute_command(PVRDMADev *dev) dsr_info->rsp->hdr.response =3D dsr_info->req->hdr.response; dsr_info->rsp->hdr.ack =3D cmd_handlers[dsr_info->req->hdr.cmd].ack; dsr_info->rsp->hdr.err =3D err < 0 ? -err : 0; - pr_dbg("rsp->hdr.err=3D%d\n", dsr_info->rsp->hdr.err); + + trace_pvrdma_exec_cmd(dsr_info->req->hdr.cmd, dsr_info->rsp->hdr.err); =20 out: set_reg_val(dev, PVRDMA_REG_ERR, err); diff --git a/hw/rdma/vmw/pvrdma_dev_ring.c b/hw/rdma/vmw/pvrdma_dev_ring.c index e8e5b502f6..d7bc7f5ccc 100644 --- a/hw/rdma/vmw/pvrdma_dev_ring.c +++ b/hw/rdma/vmw/pvrdma_dev_ring.c @@ -17,6 +17,8 @@ #include "hw/pci/pci.h" #include "cpu.h" =20 +#include "trace.h" + #include "../rdma_utils.h" #include "standard-headers/drivers/infiniband/hw/vmw_pvrdma/pvrdma_ring.h" #include "pvrdma_dev_ring.h" @@ -30,13 +32,10 @@ int pvrdma_ring_init(PvrdmaRing *ring, const char *name= , PCIDevice *dev, =20 strncpy(ring->name, name, MAX_RING_NAME_SZ); ring->name[MAX_RING_NAME_SZ - 1] =3D 0; - pr_dbg("Initializing %s ring\n", ring->name); ring->dev =3D dev; ring->ring_state =3D ring_state; ring->max_elems =3D max_elems; ring->elem_sz =3D elem_sz; - pr_dbg("ring->elem_sz=3D%zu\n", ring->elem_sz); - pr_dbg("npages=3D%d\n", npages); /* TODO: Give a moment to think if we want to redo driver settings atomic_set(&ring->ring_state->prod_tail, 0); atomic_set(&ring->ring_state->cons_head, 0); @@ -46,14 +45,14 @@ int pvrdma_ring_init(PvrdmaRing *ring, const char *name= , PCIDevice *dev, =20 for (i =3D 0; i < npages; i++) { if (!tbl[i]) { - pr_err("npages=3D%ld but tbl[%d] is NULL\n", (long)npages, i); + rdma_error_report("npages=3D%d but tbl[%d] is NULL", npages, i= ); continue; } =20 ring->pages[i] =3D rdma_pci_dma_map(dev, tbl[i], TARGET_PAGE_SIZE); if (!ring->pages[i]) { rc =3D -ENOMEM; - pr_dbg("Failed to map to page %d\n", i); + rdma_error_report("Failed to map to page %d in ring %s", i, na= me); goto out_free; } memset(ring->pages[i], 0, TARGET_PAGE_SIZE); @@ -78,7 +77,7 @@ void *pvrdma_ring_next_elem_read(PvrdmaRing *ring) =20 e =3D pvrdma_idx_ring_has_data(ring->ring_state, ring->max_elems, &idx= ); if (e <=3D 0) { - pr_dbg("No more data in ring\n"); + trace_pvrdma_ring_next_elem_read_no_data(ring->name); return NULL; } =20 @@ -89,11 +88,6 @@ void *pvrdma_ring_next_elem_read(PvrdmaRing *ring) void pvrdma_ring_read_inc(PvrdmaRing *ring) { pvrdma_idx_ring_inc(&ring->ring_state->cons_head, ring->max_elems); - /* - pr_dbg("%s: t=3D%d, h=3D%d, m=3D%ld\n", ring->name, - ring->ring_state->prod_tail, ring->ring_state->cons_head, - ring->max_elems); - */ } =20 void *pvrdma_ring_next_elem_write(PvrdmaRing *ring) @@ -103,13 +97,13 @@ void *pvrdma_ring_next_elem_write(PvrdmaRing *ring) =20 idx =3D pvrdma_idx_ring_has_space(ring->ring_state, ring->max_elems, &= tail); if (idx <=3D 0) { - pr_dbg("CQ is full\n"); + rdma_error_report("CQ is full"); return NULL; } =20 idx =3D pvrdma_idx(&ring->ring_state->prod_tail, ring->max_elems); if (idx < 0 || tail !=3D idx) { - pr_dbg("invalid idx\n"); + rdma_error_report("Invalid idx %d", idx); return NULL; } =20 @@ -120,11 +114,6 @@ void *pvrdma_ring_next_elem_write(PvrdmaRing *ring) void pvrdma_ring_write_inc(PvrdmaRing *ring) { pvrdma_idx_ring_inc(&ring->ring_state->prod_tail, ring->max_elems); - /* - pr_dbg("%s: t=3D%d, h=3D%d, m=3D%ld\n", ring->name, - ring->ring_state->prod_tail, ring->ring_state->cons_head, - ring->max_elems); - */ } =20 void pvrdma_ring_free(PvrdmaRing *ring) @@ -137,7 +126,6 @@ void pvrdma_ring_free(PvrdmaRing *ring) return; } =20 - pr_dbg("ring->npages=3D%d\n", ring->npages); while (ring->npages--) { rdma_pci_dma_unmap(ring->dev, ring->pages[ring->npages], TARGET_PAGE_SIZE); diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c index d2bdb5ba8c..81ae08bd8d 100644 --- a/hw/rdma/vmw/pvrdma_main.c +++ b/hw/rdma/vmw/pvrdma_main.c @@ -69,25 +69,22 @@ static int init_dev_ring(PvrdmaRing *ring, struct pvrdm= a_ring **ring_state, uint64_t *dir, *tbl; int rc =3D 0; =20 - pr_dbg("Initializing device ring %s\n", name); - pr_dbg("pdir_dma=3D0x%llx\n", (long long unsigned int)dir_addr); - pr_dbg("num_pages=3D%d\n", num_pages); dir =3D rdma_pci_dma_map(pci_dev, dir_addr, TARGET_PAGE_SIZE); if (!dir) { - pr_err("Failed to map to page directory\n"); + rdma_error_report("Failed to map to page directory (ring %s)", nam= e); rc =3D -ENOMEM; goto out; } tbl =3D rdma_pci_dma_map(pci_dev, dir[0], TARGET_PAGE_SIZE); if (!tbl) { - pr_err("Failed to map to page table\n"); + rdma_error_report("Failed to map to page table (ring %s)", name); rc =3D -ENOMEM; goto out_free_dir; } =20 *ring_state =3D rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE); if (!*ring_state) { - pr_err("Failed to map to ring state\n"); + rdma_error_report("Failed to map to ring state (ring %s)", name); rc =3D -ENOMEM; goto out_free_tbl; } @@ -100,7 +97,6 @@ static int init_dev_ring(PvrdmaRing *ring, struct pvrdma= _ring **ring_state, sizeof(struct pvrdma_cqne), (dma_addr_t *)&tbl[1], (dma_addr_t)num_pages - 1= ); if (rc) { - pr_err("Failed to initialize ring\n"); rc =3D -ENOMEM; goto out_free_ring_state; } @@ -155,11 +151,10 @@ static int load_dsr(PVRDMADev *dev) free_dsr(dev); =20 /* Map to DSR */ - pr_dbg("dsr_dma=3D0x%llx\n", (long long unsigned int)dev->dsr_info.dma= ); dev->dsr_info.dsr =3D rdma_pci_dma_map(pci_dev, dev->dsr_info.dma, sizeof(struct pvrdma_device_shared_region)); if (!dev->dsr_info.dsr) { - pr_err("Failed to map to DSR\n"); + rdma_error_report("Failed to map to DSR"); rc =3D -ENOMEM; goto out; } @@ -169,21 +164,19 @@ static int load_dsr(PVRDMADev *dev) dsr =3D dsr_info->dsr; =20 /* Map to command slot */ - pr_dbg("cmd_dma=3D0x%llx\n", (long long unsigned int)dsr->cmd_slot_dma= ); dsr_info->req =3D rdma_pci_dma_map(pci_dev, dsr->cmd_slot_dma, sizeof(union pvrdma_cmd_req)); if (!dsr_info->req) { - pr_err("Failed to map to command slot address\n"); + rdma_error_report("Failed to map to command slot address"); rc =3D -ENOMEM; goto out_free_dsr; } =20 /* Map to response slot */ - pr_dbg("rsp_dma=3D0x%llx\n", (long long unsigned int)dsr->resp_slot_dm= a); dsr_info->rsp =3D rdma_pci_dma_map(pci_dev, dsr->resp_slot_dma, sizeof(union pvrdma_cmd_resp)); if (!dsr_info->rsp) { - pr_err("Failed to map to response slot address\n"); + rdma_error_report("Failed to map to response slot address"); rc =3D -ENOMEM; goto out_free_req; } @@ -193,7 +186,6 @@ static int load_dsr(PVRDMADev *dev) pci_dev, dsr->cq_ring_pages.pdir_dma, dsr->cq_ring_pages.num_pages); if (rc) { - pr_err("Failed to map to initialize CQ ring\n"); rc =3D -ENOMEM; goto out_free_rsp; } @@ -203,7 +195,6 @@ static int load_dsr(PVRDMADev *dev) "dev_async", pci_dev, dsr->async_ring_pages.pdir_dm= a, dsr->async_ring_pages.num_pages); if (rc) { - pr_err("Failed to map to initialize event ring\n"); rc =3D -ENOMEM; goto out_free_rsp; } @@ -230,24 +221,15 @@ static void init_dsr_dev_caps(PVRDMADev *dev) struct pvrdma_device_shared_region *dsr; =20 if (dev->dsr_info.dsr =3D=3D NULL) { - pr_err("Can't initialized DSR\n"); + rdma_error_report("Can't initialized DSR"); return; } =20 dsr =3D dev->dsr_info.dsr; - dsr->caps.fw_ver =3D PVRDMA_FW_VERSION; - pr_dbg("fw_ver=3D0x%" PRIx64 "\n", dsr->caps.fw_ver); - dsr->caps.mode =3D PVRDMA_DEVICE_MODE_ROCE; - pr_dbg("mode=3D%d\n", dsr->caps.mode); - dsr->caps.gid_types |=3D PVRDMA_GID_TYPE_FLAG_ROCE_V1; - pr_dbg("gid_types=3D0x%x\n", dsr->caps.gid_types); - dsr->caps.max_uar =3D RDMA_BAR2_UAR_SIZE; - pr_dbg("max_uar=3D%d\n", dsr->caps.max_uar); - dsr->caps.max_mr_size =3D dev->dev_attr.max_mr_size; dsr->caps.max_qp =3D dev->dev_attr.max_qp; dsr->caps.max_qp_wr =3D dev->dev_attr.max_qp_wr; @@ -257,23 +239,11 @@ static void init_dsr_dev_caps(PVRDMADev *dev) dsr->caps.max_mr =3D dev->dev_attr.max_mr; dsr->caps.max_pd =3D dev->dev_attr.max_pd; dsr->caps.max_ah =3D dev->dev_attr.max_ah; - dsr->caps.gid_tbl_len =3D MAX_GIDS; - pr_dbg("gid_tbl_len=3D%d\n", dsr->caps.gid_tbl_len); - dsr->caps.sys_image_guid =3D 0; - pr_dbg("sys_image_guid=3D%" PRIx64 "\n", dsr->caps.sys_image_guid); - dsr->caps.node_guid =3D dev->node_guid; - pr_dbg("node_guid=3D%" PRIx64 "\n", be64_to_cpu(dsr->caps.node_guid)); - dsr->caps.phys_port_cnt =3D MAX_PORTS; - pr_dbg("phys_port_cnt=3D%d\n", dsr->caps.phys_port_cnt); - dsr->caps.max_pkeys =3D MAX_PKEYS; - pr_dbg("max_pkeys=3D%d\n", dsr->caps.max_pkeys); - - pr_dbg("Initialized\n"); } =20 static void uninit_msix(PCIDevice *pdev, int used_vectors) @@ -288,7 +258,7 @@ static void uninit_msix(PCIDevice *pdev, int used_vecto= rs) msix_uninit(pdev, &dev->msix, &dev->msix); } =20 -static int init_msix(PCIDevice *pdev, Error **errp) +static int init_msix(PCIDevice *pdev) { PVRDMADev *dev =3D PVRDMA_DEV(pdev); int i; @@ -299,14 +269,14 @@ static int init_msix(PCIDevice *pdev, Error **errp) RDMA_MSIX_PBA, 0, NULL); =20 if (rc < 0) { - error_setg(errp, "Failed to initialize MSI-X"); + rdma_error_report("Failed to initialize MSI-X"); return rc; } =20 for (i =3D 0; i < RDMA_MAX_INTRS; i++) { rc =3D msix_vector_use(PCI_DEVICE(dev), i); if (rc < 0) { - error_setg(errp, "Fail mark MSI-X vector %d", i); + rdma_error_report("Fail mark MSI-X vector %d", i); uninit_msix(pdev, i); return rc; } @@ -319,9 +289,6 @@ static void pvrdma_fini(PCIDevice *pdev) { PVRDMADev *dev =3D PVRDMA_DEV(pdev); =20 - pr_dbg("Closing device %s %x.%x\n", pdev->name, PCI_SLOT(pdev->devfn), - PCI_FUNC(pdev->devfn)); - pvrdma_qp_ops_fini(); =20 rdma_rm_fini(&dev->rdma_dev_res, &dev->backend_dev, @@ -335,8 +302,8 @@ static void pvrdma_fini(PCIDevice *pdev) uninit_msix(pdev, RDMA_MAX_INTRS); } =20 - pr_dbg("Device %s %x.%x is down\n", pdev->name, PCI_SLOT(pdev->devfn), - PCI_FUNC(pdev->devfn)); + rdma_info_report("Device %s %x.%x is down", pdev->name, + PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn)); } =20 static void pvrdma_stop(PVRDMADev *dev) @@ -353,32 +320,26 @@ static void activate_device(PVRDMADev *dev) { pvrdma_start(dev); set_reg_val(dev, PVRDMA_REG_ERR, 0); - pr_dbg("Device activated\n"); } =20 static int unquiesce_device(PVRDMADev *dev) { - pr_dbg("Device unquiesced\n"); return 0; } =20 static void reset_device(PVRDMADev *dev) { pvrdma_stop(dev); - - pr_dbg("Device reset complete\n"); } =20 -static uint64_t regs_read(void *opaque, hwaddr addr, unsigned size) +static uint64_t pvrdma_regs_read(void *opaque, hwaddr addr, unsigned size) { PVRDMADev *dev =3D opaque; uint32_t val; =20 - /* pr_dbg("addr=3D0x%lx, size=3D%d\n", addr, size); */ - if (get_reg_val(dev, addr, &val)) { - pr_dbg("Error trying to read REG value from address 0x%x\n", - (uint32_t)addr); + rdma_error_report("Failed to read REG value from address 0x%x", + (uint32_t)addr); return -EINVAL; } =20 @@ -387,25 +348,24 @@ static uint64_t regs_read(void *opaque, hwaddr addr, = unsigned size) return val; } =20 -static void regs_write(void *opaque, hwaddr addr, uint64_t val, unsigned s= ize) +static void pvrdma_regs_write(void *opaque, hwaddr addr, uint64_t val, + unsigned size) { PVRDMADev *dev =3D opaque; =20 - /* pr_dbg("addr=3D0x%lx, val=3D0x%x, size=3D%d\n", addr, (uint32_t)val= , size); */ - if (set_reg_val(dev, addr, val)) { - pr_err("Fail to set REG value, addr=3D0x%" PRIx64 ", val=3D0x%" PR= Ix64 "\n", - addr, val); + rdma_error_report("Failed to set REG value, addr=3D0x%"PRIx64 ", v= al=3D0x%"PRIx64, + addr, val); return; } =20 - trace_pvrdma_regs_write(addr, val); - switch (addr) { case PVRDMA_REG_DSRLOW: + trace_pvrdma_regs_write(addr, val, "DSRLOW", ""); dev->dsr_info.dma =3D val; break; case PVRDMA_REG_DSRHIGH: + trace_pvrdma_regs_write(addr, val, "DSRHIGH", ""); dev->dsr_info.dma |=3D val << 32; load_dsr(dev); init_dsr_dev_caps(dev); @@ -413,23 +373,27 @@ static void regs_write(void *opaque, hwaddr addr, uin= t64_t val, unsigned size) case PVRDMA_REG_CTL: switch (val) { case PVRDMA_DEVICE_CTL_ACTIVATE: + trace_pvrdma_regs_write(addr, val, "CTL", "ACTIVATE"); activate_device(dev); break; case PVRDMA_DEVICE_CTL_UNQUIESCE: + trace_pvrdma_regs_write(addr, val, "CTL", "UNQUIESCE"); unquiesce_device(dev); break; case PVRDMA_DEVICE_CTL_RESET: + trace_pvrdma_regs_write(addr, val, "CTL", "URESET"); reset_device(dev); break; } break; case PVRDMA_REG_IMR: - pr_dbg("Interrupt mask=3D0x%" PRIx64 "\n", val); + trace_pvrdma_regs_write(addr, val, "INTR_MASK", ""); dev->interrupt_mask =3D val; break; case PVRDMA_REG_REQUEST: if (val =3D=3D 0) { - execute_command(dev); + trace_pvrdma_regs_write(addr, val, "REQUEST", ""); + pvrdma_exec_cmd(dev); } break; default: @@ -438,8 +402,8 @@ static void regs_write(void *opaque, hwaddr addr, uint6= 4_t val, unsigned size) } =20 static const MemoryRegionOps regs_ops =3D { - .read =3D regs_read, - .write =3D regs_write, + .read =3D pvrdma_regs_read, + .write =3D pvrdma_regs_write, .endianness =3D DEVICE_LITTLE_ENDIAN, .impl =3D { .min_access_size =3D sizeof(uint32_t), @@ -447,54 +411,58 @@ static const MemoryRegionOps regs_ops =3D { }, }; =20 -static uint64_t uar_read(void *opaque, hwaddr addr, unsigned size) +static uint64_t pvrdma_uar_read(void *opaque, hwaddr addr, unsigned size) { return 0xffffffff; } =20 -static void uar_write(void *opaque, hwaddr addr, uint64_t val, unsigned si= ze) +static void pvrdma_uar_write(void *opaque, hwaddr addr, uint64_t val, + unsigned size) { PVRDMADev *dev =3D opaque; =20 - /* pr_dbg("addr=3D0x%lx, val=3D0x%x, size=3D%d\n", addr, (uint32_t)val= , size); */ - switch (addr & 0xFFF) { /* Mask with 0xFFF as each UC gets page */ case PVRDMA_UAR_QP_OFFSET: - pr_dbg("UAR QP command, addr=3D0x%" PRIx64 ", val=3D0x%" PRIx64 "\= n", - (uint64_t)addr, val); if (val & PVRDMA_UAR_QP_SEND) { + trace_pvrdma_uar_write(addr, val, "QP", "SEND", + val & PVRDMA_UAR_HANDLE_MASK, 0); pvrdma_qp_send(dev, val & PVRDMA_UAR_HANDLE_MASK); } if (val & PVRDMA_UAR_QP_RECV) { + trace_pvrdma_uar_write(addr, val, "QP", "RECV", + val & PVRDMA_UAR_HANDLE_MASK, 0); pvrdma_qp_recv(dev, val & PVRDMA_UAR_HANDLE_MASK); } break; case PVRDMA_UAR_CQ_OFFSET: - /* pr_dbg("UAR CQ cmd, addr=3D0x%x, val=3D0x%lx\n", (uint32_t)addr= , val); */ if (val & PVRDMA_UAR_CQ_ARM) { + trace_pvrdma_uar_write(addr, val, "CQ", "ARM", + val & PVRDMA_UAR_HANDLE_MASK, + !!(val & PVRDMA_UAR_CQ_ARM_SOL)); rdma_rm_req_notify_cq(&dev->rdma_dev_res, val & PVRDMA_UAR_HANDLE_MASK, !!(val & PVRDMA_UAR_CQ_ARM_SOL)); } if (val & PVRDMA_UAR_CQ_ARM_SOL) { - pr_dbg("UAR_CQ_ARM_SOL (%" PRIx64 ")\n", - val & PVRDMA_UAR_HANDLE_MASK); + trace_pvrdma_uar_write(addr, val, "CQ", "ARMSOL - not supporte= d", 0, + 0); } if (val & PVRDMA_UAR_CQ_POLL) { - pr_dbg("UAR_CQ_POLL (%" PRIx64 ")\n", val & PVRDMA_UAR_HANDLE_= MASK); + trace_pvrdma_uar_write(addr, val, "CQ", "POLL", + val & PVRDMA_UAR_HANDLE_MASK, 0); pvrdma_cq_poll(&dev->rdma_dev_res, val & PVRDMA_UAR_HANDLE_MAS= K); } break; default: - pr_err("Unsupported command, addr=3D0x%" PRIx64 ", val=3D0x%" PRIx= 64 "\n", - addr, val); + rdma_error_report("Unsupported command, addr=3D0x%"PRIx64", val=3D= 0x%"PRIx64, + addr, val); break; } } =20 static const MemoryRegionOps uar_ops =3D { - .read =3D uar_read, - .write =3D uar_write, + .read =3D pvrdma_uar_read, + .write =3D pvrdma_uar_write, .endianness =3D DEVICE_LITTLE_ENDIAN, .impl =3D { .min_access_size =3D sizeof(uint32_t), @@ -551,11 +519,9 @@ static void init_dev_caps(PVRDMADev *dev) (wr_sz + sizeof(struct pvrdma_sge) * dev->dev_attr.max_sge) - TARGET_PAGE_SIZE; /* First page is ring state ^^^^ */ - pr_dbg("max_qp_wr=3D%d\n", dev->dev_attr.max_qp_wr); =20 dev->dev_attr.max_cqe =3D pg_tbl_bytes / sizeof(struct pvrdma_cqe) - TARGET_PAGE_SIZE; /* First page is ring state = */ - pr_dbg("max_cqe=3D%d\n", dev->dev_attr.max_cqe); } =20 static int pvrdma_check_ram_shared(Object *obj, void *opaque) @@ -585,10 +551,8 @@ static void pvrdma_realize(PCIDevice *pdev, Error **er= rp) bool ram_shared =3D false; PCIDevice *func0; =20 - init_pr_dbg(); - - pr_dbg("Initializing device %s %x.%x\n", pdev->name, - PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn)); + rdma_info_report("Initializing device %s %x.%x", pdev->name, + PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn)); =20 if (TARGET_PAGE_SIZE !=3D getpagesize()) { error_setg(errp, "Target page size must be the same as host page s= ize"); @@ -598,8 +562,6 @@ static void pvrdma_realize(PCIDevice *pdev, Error **err= p) func0 =3D pci_get_function_0(pdev); /* Break if not vmxnet3 device in slot 0 */ if (strcmp(object_get_typename(&func0->qdev.parent_obj), TYPE_VMXNET3)= ) { - pr_dbg("func0 type is %s\n", - object_get_typename(&func0->qdev.parent_obj)); error_setg(errp, "Device on %x.0 must be %s", PCI_SLOT(pdev->devfn= ), TYPE_VMXNET3); return; @@ -626,21 +588,21 @@ static void pvrdma_realize(PCIDevice *pdev, Error **e= rrp) =20 init_regs(pdev); =20 - rc =3D init_msix(pdev, errp); + rc =3D init_msix(pdev); if (rc) { goto out; } =20 rc =3D rdma_backend_init(&dev->backend_dev, pdev, &dev->rdma_dev_res, dev->backend_device_name, dev->backend_port_num, - &dev->dev_attr, &dev->mad_chr, errp); + &dev->dev_attr, &dev->mad_chr); if (rc) { goto out; } =20 init_dev_caps(dev); =20 - rc =3D rdma_rm_init(&dev->rdma_dev_res, &dev->dev_attr, errp); + rc =3D rdma_rm_init(&dev->rdma_dev_res, &dev->dev_attr); if (rc) { goto out; } @@ -656,7 +618,7 @@ static void pvrdma_realize(PCIDevice *pdev, Error **err= p) out: if (rc) { pvrdma_fini(pdev); - error_append_hint(errp, "Device fail to load\n"); + error_append_hint(errp, "Device failed to load\n"); } } =20 diff --git a/hw/rdma/vmw/pvrdma_qp_ops.c b/hw/rdma/vmw/pvrdma_qp_ops.c index ce5a60e184..16db726dac 100644 --- a/hw/rdma/vmw/pvrdma_qp_ops.c +++ b/hw/rdma/vmw/pvrdma_qp_ops.c @@ -19,6 +19,8 @@ #include "../rdma_rm.h" #include "../rdma_backend.h" =20 +#include "trace.h" + #include "pvrdma.h" #include "standard-headers/rdma/vmw_pvrdma-abi.h" #include "pvrdma_qp_ops.h" @@ -55,18 +57,14 @@ static int pvrdma_post_cqe(PVRDMADev *dev, uint32_t cq_= handle, RdmaRmCQ *cq =3D rdma_rm_get_cq(&dev->rdma_dev_res, cq_handle); =20 if (unlikely(!cq)) { - pr_dbg("Invalid cqn %d\n", cq_handle); return -EINVAL; } =20 ring =3D (PvrdmaRing *)cq->opaque; - pr_dbg("ring=3D%p\n", ring); =20 /* Step #1: Put CQE on CQ ring */ - pr_dbg("Writing CQE\n"); cqe1 =3D pvrdma_ring_next_elem_write(ring); if (unlikely(!cqe1)) { - pr_dbg("No CQEs in ring\n"); return -EINVAL; } =20 @@ -80,19 +78,13 @@ static int pvrdma_post_cqe(PVRDMADev *dev, uint32_t cq_= handle, cqe1->wc_flags =3D wc->wc_flags; cqe1->vendor_err =3D wc->vendor_err; =20 - pr_dbg("wr_id=3D%" PRIx64 "\n", cqe1->wr_id); - pr_dbg("qp=3D0x%lx\n", cqe1->qp); - pr_dbg("opcode=3D%d\n", cqe1->opcode); - pr_dbg("status=3D%d\n", cqe1->status); - pr_dbg("byte_len=3D%d\n", cqe1->byte_len); - pr_dbg("src_qp=3D%d\n", cqe1->src_qp); - pr_dbg("wc_flags=3D%d\n", cqe1->wc_flags); - pr_dbg("vendor_err=3D%d\n", cqe1->vendor_err); + trace_pvrdma_post_cqe(cq_handle, cq->notify, cqe1->wr_id, cqe1->qp, + cqe1->opcode, cqe1->status, cqe1->byte_len, + cqe1->src_qp, cqe1->wc_flags, cqe1->vendor_err); =20 pvrdma_ring_write_inc(ring); =20 /* Step #2: Put CQ number on dsr completion ring */ - pr_dbg("Writing CQNE\n"); cqne =3D pvrdma_ring_next_elem_write(&dev->dsr_info.cq); if (unlikely(!cqne)) { return -EINVAL; @@ -101,7 +93,6 @@ static int pvrdma_post_cqe(PVRDMADev *dev, uint32_t cq_h= andle, cqne->info =3D cq_handle; pvrdma_ring_write_inc(&dev->dsr_info.cq); =20 - pr_dbg("cq->notify=3D%d\n", cq->notify); if (cq->notify !=3D CNT_CLEAR) { if (cq->notify =3D=3D CNT_ARM) { cq->notify =3D CNT_CLEAR; @@ -151,23 +142,17 @@ void pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handl= e) int sgid_idx; union ibv_gid *sgid; =20 - pr_dbg("qp_handle=3D0x%x\n", qp_handle); - qp =3D rdma_rm_get_qp(&dev->rdma_dev_res, qp_handle); if (unlikely(!qp)) { - pr_dbg("Invalid qpn\n"); return; } =20 ring =3D (PvrdmaRing *)qp->opaque; - pr_dbg("sring=3D%p\n", ring); =20 wqe =3D (struct PvrdmaSqWqe *)pvrdma_ring_next_elem_read(ring); while (wqe) { CompHandlerCtx *comp_ctx; =20 - pr_dbg("wr_id=3D%" PRIx64 "\n", wqe->hdr.wr_id); - /* Prepare CQE */ comp_ctx =3D g_malloc(sizeof(CompHandlerCtx)); comp_ctx->dev =3D dev; @@ -178,26 +163,25 @@ void pvrdma_qp_send(PVRDMADev *dev, uint32_t qp_handl= e) =20 sgid =3D rdma_rm_get_gid(&dev->rdma_dev_res, wqe->hdr.wr.ud.av.gid= _index); if (!sgid) { - pr_dbg("Fail to get gid for idx %d\n", wqe->hdr.wr.ud.av.gid_i= ndex); + rdma_error_report("Failed to get gid for idx %d", + wqe->hdr.wr.ud.av.gid_index); complete_with_error(VENDOR_ERR_INV_GID_IDX, comp_ctx); continue; } - pr_dbg("sgid_id=3D%d, sgid=3D0x%llx\n", wqe->hdr.wr.ud.av.gid_inde= x, - sgid->global.interface_id); =20 sgid_idx =3D rdma_rm_get_backend_gid_index(&dev->rdma_dev_res, &dev->backend_dev, wqe->hdr.wr.ud.av.gid_ind= ex); if (sgid_idx <=3D 0) { - pr_dbg("Fail to get bk sgid_idx for sgid_idx %d\n", - wqe->hdr.wr.ud.av.gid_index); + rdma_error_report("Failed to get bk sgid_idx for sgid_idx %d", + wqe->hdr.wr.ud.av.gid_index); complete_with_error(VENDOR_ERR_INV_GID_IDX, comp_ctx); continue; } =20 if (wqe->hdr.num_sge > dev->dev_attr.max_sge) { - pr_dbg("Invalid num_sge=3D%d (max %d)\n", wqe->hdr.num_sge, - dev->dev_attr.max_sge); + rdma_error_report("Invalid num_sge=3D%d (max %d)", wqe->hdr.nu= m_sge, + dev->dev_attr.max_sge); complete_with_error(VENDOR_ERR_INV_NUM_SGE, comp_ctx); continue; } @@ -221,23 +205,17 @@ void pvrdma_qp_recv(PVRDMADev *dev, uint32_t qp_handl= e) PvrdmaRqWqe *wqe; PvrdmaRing *ring; =20 - pr_dbg("qp_handle=3D0x%x\n", qp_handle); - qp =3D rdma_rm_get_qp(&dev->rdma_dev_res, qp_handle); if (unlikely(!qp)) { - pr_dbg("Invalid qpn\n"); return; } =20 ring =3D &((PvrdmaRing *)qp->opaque)[1]; - pr_dbg("rring=3D%p\n", ring); =20 wqe =3D (struct PvrdmaRqWqe *)pvrdma_ring_next_elem_read(ring); while (wqe) { CompHandlerCtx *comp_ctx; =20 - pr_dbg("wr_id=3D%" PRIx64 "\n", wqe->hdr.wr_id); - /* Prepare CQE */ comp_ctx =3D g_malloc(sizeof(CompHandlerCtx)); comp_ctx->dev =3D dev; @@ -247,8 +225,8 @@ void pvrdma_qp_recv(PVRDMADev *dev, uint32_t qp_handle) comp_ctx->cqe.opcode =3D IBV_WC_RECV; =20 if (wqe->hdr.num_sge > dev->dev_attr.max_sge) { - pr_dbg("Invalid num_sge=3D%d (max %d)\n", wqe->hdr.num_sge, - dev->dev_attr.max_sge); + rdma_error_report("Invalid num_sge=3D%d (max %d)", wqe->hdr.nu= m_sge, + dev->dev_attr.max_sge); complete_with_error(VENDOR_ERR_INV_NUM_SGE, comp_ctx); continue; } @@ -270,7 +248,6 @@ void pvrdma_cq_poll(RdmaDeviceResources *dev_res, uint3= 2_t cq_handle) =20 cq =3D rdma_rm_get_cq(dev_res, cq_handle); if (!cq) { - pr_dbg("Invalid CQ# %d\n", cq_handle); return; } =20 diff --git a/hw/rdma/vmw/trace-events b/hw/rdma/vmw/trace-events index b3f9e2b19f..0122266ad7 100644 --- a/hw/rdma/vmw/trace-events +++ b/hw/rdma/vmw/trace-events @@ -1,5 +1,17 @@ # See docs/tracing.txt for syntax documentation. =20 # hw/rdma/vmw/pvrdma_main.c -pvrdma_regs_read(uint64_t addr, uint64_t val) "regs[0x%"PRIx64"] =3D 0x%"P= RIx64 -pvrdma_regs_write(uint64_t addr, uint64_t val) "regs[0x%"PRIx64"] =3D 0x%"= PRIx64 +pvrdma_regs_read(uint64_t addr, uint64_t val) "pvrdma.regs[0x%"PRIx64"]=3D= 0x%"PRIx64 +pvrdma_regs_write(uint64_t addr, uint64_t val, const char *reg_name, const= char *val_name) "pvrdma.regs[0x%"PRIx64"]=3D0x%"PRIx64" (%s %s)" +pvrdma_uar_write(uint64_t addr, uint64_t val, const char *reg_name, const = char *val_name, int val1, int val2) "uar[0x%"PRIx64"]=3D0x%"PRIx64" (cls=3D= %s, op=3D%s, obj=3D%d, val=3D%d)" + +# hw/rdma/vmw/pvrdma_cmd.c +pvrdma_map_to_pdir_host_virt(void *vfirst, void *vremaped) "mremap %p -> %= p" +pvrdma_map_to_pdir_next_page(int page_idx, void *vnext, void *vremaped) "m= remap [%d] %p -> %p" +pvrdma_exec_cmd(int cmd, int err) "cmd=3D%d, err=3D%d" + +# hw/rdma/vmw/pvrdma_dev_ring.c +pvrdma_ring_next_elem_read_no_data(char *ring_name) "pvrdma_ring %s is emp= ty" + +# hw/rdma/vmw/pvrdma_qp_ops.c +pvrdma_post_cqe(uint32_t cq_handle, int notify, uint64_t wr_id, uint64_t q= pn, uint32_t op_code, uint32_t status, uint32_t byte_len, uint32_t src_qp, = uint32_t wc_flags, uint32_t vendor_err) "cq_handle=3D%d, notify=3D%d, wr_id= =3D0x%"PRIx64", qpn=3D0x%"PRIx64", opcode=3D%d, status=3D%d, byte_len=3D%d,= src_qp=3D%d, wc_flags=3D%d, vendor_err=3D%d" --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747013461877.4636975362497; Sat, 16 Mar 2019 07:36:53 -0700 (PDT) Received: from localhost ([127.0.0.1]:42582 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AQa-0002Ca-4X for importer@patchew.org; Sat, 16 Mar 2019 10:36:48 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49550) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOR-0000oD-FL for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOP-0000Wm-51 for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:35 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:39366) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOO-0000Vt-Kh for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:33 -0400 Received: by mail-wr1-x441.google.com with SMTP id p8so12457938wrq.6 for ; Sat, 16 Mar 2019 07:34:32 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.29 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=3BHdWRw/I2mQJ5ddyQvsNmHD93DWER8WHM1dpXT9UjU=; b=EPevzEi7rSUDG2L3nW0bvq+gvrO783D+NRh8g0KGPjtK4Wal0urcKfqOVM1mayb5d0 0bK/uF3cEEG6ENhELzTg3RFb/2k++Lz/q6MlwqagzmE8kGZJ7fhbAK+V8apdJgiag0qM KWghCVaEkE1/FzwjWdmORcCIAUdXZ1UG4EOy5ytw9IAFsfnT8e6lJihPKeuNktAVj17B oZhvUrJd4BUZ5a2qgW3ZpIu0UsQQNMZCkRYO+J/idh6qOVwJaD2RQy9GgS12uR/LjmXE WrhSkDhzRm2m9Bj2A5yc47kCG5RhiSC6N69STnLvSbOGxXxRgt2zQ9A+kBXDTTiHpk63 S6FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=3BHdWRw/I2mQJ5ddyQvsNmHD93DWER8WHM1dpXT9UjU=; b=QM0wub6qJQlDUAiisb980bEuBUfSuW41AM8JEeyBaNwUJc75/VxFZ3fpLg8skju9JY mjoXKLpTIrIljiZVhq7nDsQ7xkQWJIOkva9+nWwj+yzt1qwiRZvMtbROhwjGoBH+V4U2 3TrIgtUEZZTadDw5VtBjoWa9WJGNe0y28pxhhbrGz/qTrnlxFkP+fAtXuvA5my7JleGI U6fKGtDtf9Xzg/xS+a0+ZAfgeXI53RtCgx2OXBTqbSGhrOc4AKRqCnKAqBrqkpzTTLXP H+619G5qHiZdrf2CqXR9wlL4iPowhGJtqILxeSw+juwxG+K4dGnB8AW8O8CVqn7v5M3c Txng== X-Gm-Message-State: APjAAAV2CewNm7r/PamAxVQDASvvxrlf8gPVkFVBC88KI3NuwMghhz2i g8Vm02e+4LHeviXsMgbnHGVd5ZaE X-Google-Smtp-Source: APXvYqzkRz+yq085D5NwhxL0Ushkk2NYH9Kdf5zJCPAvFfNN6ayTkC2fDgyI6CdnJJcdqXXgaK22VQ== X-Received: by 2002:adf:ba94:: with SMTP id p20mr5879568wrg.213.1552746871205; Sat, 16 Mar 2019 07:34:31 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:06 +0200 Message-Id: <20190316143421.8194-4-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::441 Subject: [Qemu-devel] [PATCH PULL 03/18] hw/rdma: Introduce protected qlist X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Yuval Shaia To make code more readable move handling of protected list to a rdma_utils Signed-off-by: Yuval Shaia Reviewed-by: Marcel Apfelbaum Message-Id: <1552300155-25216-3-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_backend.c | 20 +++++-------------- hw/rdma/rdma_backend_defs.h | 8 ++------ hw/rdma/rdma_utils.c | 39 +++++++++++++++++++++++++++++++++++++ hw/rdma/rdma_utils.h | 9 +++++++++ 4 files changed, 55 insertions(+), 21 deletions(-) diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c index d138591c86..37edf42215 100644 --- a/hw/rdma/rdma_backend.c +++ b/hw/rdma/rdma_backend.c @@ -527,9 +527,7 @@ static unsigned int save_mad_recv_buffer(RdmaBackendDev= *backend_dev, bctx->up_ctx =3D ctx; bctx->sge =3D *sge; =20 - qemu_mutex_lock(&backend_dev->recv_mads_list.lock); - qlist_append_int(backend_dev->recv_mads_list.list, bctx_id); - qemu_mutex_unlock(&backend_dev->recv_mads_list.lock); + rdma_protected_qlist_append_int64(&backend_dev->recv_mads_list, bctx_i= d); =20 return 0; } @@ -913,23 +911,19 @@ static inline void build_mad_hdr(struct ibv_grh *grh,= union ibv_gid *sgid, static void process_incoming_mad_req(RdmaBackendDev *backend_dev, RdmaCmMuxMsg *msg) { - QObject *o_ctx_id; unsigned long cqe_ctx_id; BackendCtx *bctx; char *mad; =20 trace_mad_message("recv", msg->umad.mad, msg->umad_len); =20 - qemu_mutex_lock(&backend_dev->recv_mads_list.lock); - o_ctx_id =3D qlist_pop(backend_dev->recv_mads_list.list); - qemu_mutex_unlock(&backend_dev->recv_mads_list.lock); - if (!o_ctx_id) { + cqe_ctx_id =3D rdma_protected_qlist_pop_int64(&backend_dev->recv_mads_= list); + if (cqe_ctx_id =3D=3D -ENOENT) { rdma_warn_report("No more free MADs buffers, waiting for a while"); sleep(THR_POLL_TO); return; } =20 - cqe_ctx_id =3D qnum_get_uint(qobject_to(QNum, o_ctx_id)); bctx =3D rdma_rm_get_cqe_ctx(backend_dev->rdma_dev_res, cqe_ctx_id); if (unlikely(!bctx)) { rdma_error_report("No matching ctx for req %ld", cqe_ctx_id); @@ -994,8 +988,7 @@ static int mad_init(RdmaBackendDev *backend_dev, CharBa= ckend *mad_chr_be) return -EIO; } =20 - qemu_mutex_init(&backend_dev->recv_mads_list.lock); - backend_dev->recv_mads_list.list =3D qlist_new(); + rdma_protected_qlist_init(&backend_dev->recv_mads_list); =20 enable_rdmacm_mux_async(backend_dev); =20 @@ -1010,10 +1003,7 @@ static void mad_fini(RdmaBackendDev *backend_dev) { disable_rdmacm_mux_async(backend_dev); qemu_chr_fe_disconnect(backend_dev->rdmacm_mux.chr_be); - if (backend_dev->recv_mads_list.list) { - qlist_destroy_obj(QOBJECT(backend_dev->recv_mads_list.list)); - qemu_mutex_destroy(&backend_dev->recv_mads_list.lock); - } + rdma_protected_qlist_destroy(&backend_dev->recv_mads_list); } =20 int rdma_backend_get_gid_index(RdmaBackendDev *backend_dev, diff --git a/hw/rdma/rdma_backend_defs.h b/hw/rdma/rdma_backend_defs.h index 15ae8b970e..a8c15b09ab 100644 --- a/hw/rdma/rdma_backend_defs.h +++ b/hw/rdma/rdma_backend_defs.h @@ -20,6 +20,7 @@ #include "chardev/char-fe.h" #include #include "contrib/rdmacm-mux/rdmacm-mux.h" +#include "rdma_utils.h" =20 typedef struct RdmaDeviceResources RdmaDeviceResources; =20 @@ -30,11 +31,6 @@ typedef struct RdmaBackendThread { bool is_running; /* Set by the thread to report its status */ } RdmaBackendThread; =20 -typedef struct RecvMadList { - QemuMutex lock; - QList *list; -} RecvMadList; - typedef struct RdmaCmMux { CharBackend *chr_be; int can_receive; @@ -48,7 +44,7 @@ typedef struct RdmaBackendDev { struct ibv_context *context; struct ibv_comp_channel *channel; uint8_t port_num; - RecvMadList recv_mads_list; + RdmaProtectedQList recv_mads_list; RdmaCmMux rdmacm_mux; } RdmaBackendDev; =20 diff --git a/hw/rdma/rdma_utils.c b/hw/rdma/rdma_utils.c index b9f07fcda7..0a8abe572d 100644 --- a/hw/rdma/rdma_utils.c +++ b/hw/rdma/rdma_utils.c @@ -14,6 +14,8 @@ */ =20 #include "qemu/osdep.h" +#include "qapi/qmp/qlist.h" +#include "qapi/qmp/qnum.h" #include "trace.h" #include "rdma_utils.h" =20 @@ -51,3 +53,40 @@ void rdma_pci_dma_unmap(PCIDevice *dev, void *buffer, dm= a_addr_t len) pci_dma_unmap(dev, buffer, len, DMA_DIRECTION_TO_DEVICE, 0); } } + +void rdma_protected_qlist_init(RdmaProtectedQList *list) +{ + qemu_mutex_init(&list->lock); + list->list =3D qlist_new(); +} + +void rdma_protected_qlist_destroy(RdmaProtectedQList *list) +{ + if (list->list) { + qlist_destroy_obj(QOBJECT(list->list)); + qemu_mutex_destroy(&list->lock); + list->list =3D NULL; + } +} + +void rdma_protected_qlist_append_int64(RdmaProtectedQList *list, int64_t v= alue) +{ + qemu_mutex_lock(&list->lock); + qlist_append_int(list->list, value); + qemu_mutex_unlock(&list->lock); +} + +int64_t rdma_protected_qlist_pop_int64(RdmaProtectedQList *list) +{ + QObject *obj; + + qemu_mutex_lock(&list->lock); + obj =3D qlist_pop(list->list); + qemu_mutex_unlock(&list->lock); + + if (!obj) { + return -ENOENT; + } + + return qnum_get_uint(qobject_to(QNum, obj)); +} diff --git a/hw/rdma/rdma_utils.h b/hw/rdma/rdma_utils.h index acd148837f..a8bf1d4fec 100644 --- a/hw/rdma/rdma_utils.h +++ b/hw/rdma/rdma_utils.h @@ -29,8 +29,17 @@ #define rdma_info_report(fmt, ...) \ info_report("%s: " fmt, "rdma", ## __VA_ARGS__) =20 +typedef struct RdmaProtectedQList { + QemuMutex lock; + QList *list; +} RdmaProtectedQList; + void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t plen); void rdma_pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len); +void rdma_protected_qlist_init(RdmaProtectedQList *list); +void rdma_protected_qlist_destroy(RdmaProtectedQList *list); +void rdma_protected_qlist_append_int64(RdmaProtectedQList *list, int64_t v= alue); +int64_t rdma_protected_qlist_pop_int64(RdmaProtectedQList *list); =20 static inline void addrconf_addr_eui48(uint8_t *eui, const char *addr) { --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747182403530.6621998256904; Sat, 16 Mar 2019 07:39:42 -0700 (PDT) Received: from localhost ([127.0.0.1]:42606 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5ATI-0004V3-7x for importer@patchew.org; Sat, 16 Mar 2019 10:39:36 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49557) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOS-0000oF-MF for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOR-0000Y1-6C for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:36 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:41068) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOQ-0000Xa-PX for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:35 -0400 Received: by mail-wr1-x444.google.com with SMTP id p1so12433403wrs.8 for ; Sat, 16 Mar 2019 07:34:34 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=TojS5oiQeA7UbBVQIzqnuGXBXWwpcJDFdf1d+U42fNI=; b=kc4QosEVEw4yYpaIpNOvvZZUVRV5ppV1cBF+q4mUyyZr3Zkj+Fcg4Kfrry+nzDSN44 usFvjRbeP/BvGORJRdnsFlnaLR6KhI8S2EEWBhj7TKm/sX4l6LLUSIIa6ZfSq5K+5tsh Qt4+QkYnfn3q3++BdlQzigZ8w+KbFd3AEycsyqSQ+w9iqws+cAvbH/xPYzJr+IsRzcos YMs0DZ+Z3ymn0OvOJo5ii9eui6QpLZDnUi9w3C2Yrk9aCajMzrMFyzlQnlaWtoRqyQpP MqK7D1B126nDuw0uvmaCnRSxFmlYUMD4nuks8mNODhXKkOvv/Z8ZzBC9s4M+pvDx/p+R vVLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=TojS5oiQeA7UbBVQIzqnuGXBXWwpcJDFdf1d+U42fNI=; b=Lugfd2op3BODtLCMSvhVCvAI7v9AVkMMHLcS6HESe97ZCMX2/fqgWgoASHu4XnD8KF Cbjo5OWznRgwJqYNgka31luD6smIpVMjqzEROPkELhH/8tXTD6ifO7wvwenPnglifhsG l8yAu/cX3nSSkXAZavI8jWmTSMPcRnxsLOUjEBfY9Auf4hkOd10x3OWp5oX6j3msAFvQ rTFucT26AfdO14A2D4TI4PMRv2QOZfK7XSSAL0ldRFwnPytU03spZJLJ4uIQ1WIPAORL k5sAZxJIsEF4WgP0dkLoI7CmCnduqzMIxHRFDbvuYQeFT6w5aoDAsx6qY/13y/WYa/US L2OA== X-Gm-Message-State: APjAAAVmGjBS55BMVUui+2BG0gN08swgm79oE3IehjsG7N2VW1dmpjow XczKJfmXWMLsaj9y5jh+zg1l3iew X-Google-Smtp-Source: APXvYqxyCVoODtglOyDwXEvhEJcSjb15m6F3BcJnuMJiqA9pishlimtG7QpCrwv8LzFB5F0yMJBa4Q== X-Received: by 2002:adf:f3c5:: with SMTP id g5mr5915282wrp.247.1552746873482; Sat, 16 Mar 2019 07:34:33 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:07 +0200 Message-Id: <20190316143421.8194-5-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PATCH PULL 04/18] hw/rdma: Protect against concurrent execution of poll_cq X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Yuval Shaia The function rdma_poll_cq is called from two contexts - completion handler thread which sense new completion on backend channel and explicitly as result of guest issuing poll_cq command. Add lock to protect against concurrent executions. Signed-off-by: Yuval Shaia Reviewed-by: Marcel Apfelbaum Message-Id: <1552300155-25216-4-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_backend.c | 2 ++ hw/rdma/rdma_rm.c | 4 ++++ hw/rdma/rdma_rm_defs.h | 1 + 3 files changed, 7 insertions(+) diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c index 37edf42215..18975401d9 100644 --- a/hw/rdma/rdma_backend.c +++ b/hw/rdma/rdma_backend.c @@ -70,6 +70,7 @@ static void rdma_poll_cq(RdmaDeviceResources *rdma_dev_re= s, struct ibv_cq *ibcq) BackendCtx *bctx; struct ibv_wc wc[2]; =20 + qemu_mutex_lock(&rdma_dev_res->lock); do { ne =3D ibv_poll_cq(ibcq, ARRAY_SIZE(wc), wc); =20 @@ -89,6 +90,7 @@ static void rdma_poll_cq(RdmaDeviceResources *rdma_dev_re= s, struct ibv_cq *ibcq) g_free(bctx); } } while (ne > 0); + qemu_mutex_unlock(&rdma_dev_res->lock); =20 if (ne < 0) { rdma_error_report("ibv_poll_cq fail, rc=3D%d, errno=3D%d", ne, err= no); diff --git a/hw/rdma/rdma_rm.c b/hw/rdma/rdma_rm.c index 66177b42f5..7ea62a9e60 100644 --- a/hw/rdma/rdma_rm.c +++ b/hw/rdma/rdma_rm.c @@ -617,12 +617,16 @@ int rdma_rm_init(RdmaDeviceResources *dev_res, struct= ibv_device_attr *dev_attr) =20 init_ports(dev_res); =20 + qemu_mutex_init(&dev_res->lock); + return 0; } =20 void rdma_rm_fini(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_de= v, const char *ifname) { + qemu_mutex_destroy(&dev_res->lock); + fini_ports(dev_res, backend_dev, ifname); =20 res_tbl_free(&dev_res->uc_tbl); diff --git a/hw/rdma/rdma_rm_defs.h b/hw/rdma/rdma_rm_defs.h index 0ba61d1838..f0ee1f3072 100644 --- a/hw/rdma/rdma_rm_defs.h +++ b/hw/rdma/rdma_rm_defs.h @@ -105,6 +105,7 @@ typedef struct RdmaDeviceResources { RdmaRmResTbl cq_tbl; RdmaRmResTbl cqe_ctx_tbl; GHashTable *qp_hash; /* Keeps mapping between real and emulated */ + QemuMutex lock; } RdmaDeviceResources; =20 #endif --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 155274702009613.91972841805773; Sat, 16 Mar 2019 07:37:00 -0700 (PDT) Received: from localhost ([127.0.0.1]:42584 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AQi-0002Iu-Sp for importer@patchew.org; Sat, 16 Mar 2019 10:36:56 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49582) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOV-0000pZ-4A for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOS-0000Z1-Uk for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:39 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:39367) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOS-0000YO-ER for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:36 -0400 Received: by mail-wr1-x441.google.com with SMTP id p8so12458059wrq.6 for ; Sat, 16 Mar 2019 07:34:36 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=DAoPlkXJ1e0DQjEmHZ+yXkYxrXlZa2OuC68FwKQelvo=; b=Y6Uipv6lUE2AMWF1EkkYwUwAg5DqJSW/nVLjnk18vnvs/IDvi6zNNjv3hxlsdfiQRG PN607rhKs6eLdJW0Gh9YhoffXJ1psqYHnyl56Jy1/cmdIPfMkuQxA+LjtmpqLyO5Gznq KiaMOIa9bwGgqUOBKhT43YAVw2jNxCFxcz5WNe34FBR2AWHlCDak+1Dm3NnTVFSMWtWt rjOHjzh8zSQt4p2pvDJ/qR2LAlEXkAh+Ol8TMdcYcl2OHMGReJ1ypW2SyWTJu8MTHjtW ptJYu84cFtEubCj8gOodHyD+t44TS+vPRt86zw8rBhA6b34JH1fzoUiwpDGhyVri7nLP U66Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=DAoPlkXJ1e0DQjEmHZ+yXkYxrXlZa2OuC68FwKQelvo=; b=VgFUfGJJqJ2BNwBX94cYF9DANIe0349G/vLQ5ZORw/qAA2l4KOW4LQIKxQuXzzMt4g X5Kj/lZNBK6Dtux9ao8PqRDdJwkJN3Y+q0BkCViceXv5AxQpkDMEfzTHFj3azpjHgrx2 WuswBfZr6+AB3MU2fOAgUzP33Ad0TqZByYT8+gqcDnvLi6zmZBfjhk4ZrIBTLQQokY8Z d4uBtnNmcb1/rwsarxn4bokHpnBa14/K66/cOivyzZ8Hlk2QoaiacyIyJgkgb4OqK5t/ TGKf0CSYTF+Q9nUOr4FMV43effN/OkcoS9+JS8/EpwEpSUQdVn9qSzJ4ngT8B8eUE+Oy JLFg== X-Gm-Message-State: APjAAAU4MDS16wLzWgviJrN6uBcoVfVr3uf4+uaVHRYZfu9RKkrF1y7+ F9QQlQkYIrG/8AZlXb3LuZyB5Ktw X-Google-Smtp-Source: APXvYqwkcwGEVRCV/ZCPgvhaIOS5uHOvDBxD8N66QhFVjyv3srJn2GC0VHrbd//uigyAsMnJ7CuSYQ== X-Received: by 2002:a5d:414c:: with SMTP id c12mr2401500wrq.106.1552746875215; Sat, 16 Mar 2019 07:34:35 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:08 +0200 Message-Id: <20190316143421.8194-6-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::441 Subject: [Qemu-devel] [PATCH PULL 05/18] hw/pvrdma: Collect debugging statistics X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Yuval Shaia Add counters to enable enhance debugging Signed-off-by: Yuval Shaia Message-Id: <1552300155-25216-5-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_backend.c | 70 +++++++++++++++++++++++++++++---------- hw/rdma/rdma_rm.c | 7 ++++ hw/rdma/rdma_rm_defs.h | 27 ++++++++++++++- hw/rdma/vmw/pvrdma.h | 10 ++++++ hw/rdma/vmw/pvrdma_cmd.c | 2 ++ hw/rdma/vmw/pvrdma_main.c | 8 +++++ 6 files changed, 106 insertions(+), 18 deletions(-) diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c index 18975401d9..e8af9741b1 100644 --- a/hw/rdma/rdma_backend.c +++ b/hw/rdma/rdma_backend.c @@ -64,9 +64,9 @@ static inline void complete_work(enum ibv_wc_status statu= s, uint32_t vendor_err, comp_handler(ctx, &wc); } =20 -static void rdma_poll_cq(RdmaDeviceResources *rdma_dev_res, struct ibv_cq = *ibcq) +static int rdma_poll_cq(RdmaDeviceResources *rdma_dev_res, struct ibv_cq *= ibcq) { - int i, ne; + int i, ne, total_ne =3D 0; BackendCtx *bctx; struct ibv_wc wc[2]; =20 @@ -89,12 +89,18 @@ static void rdma_poll_cq(RdmaDeviceResources *rdma_dev_= res, struct ibv_cq *ibcq) rdma_rm_dealloc_cqe_ctx(rdma_dev_res, wc[i].wr_id); g_free(bctx); } + total_ne +=3D ne; } while (ne > 0); + atomic_sub(&rdma_dev_res->stats.missing_cqe, total_ne); qemu_mutex_unlock(&rdma_dev_res->lock); =20 if (ne < 0) { rdma_error_report("ibv_poll_cq fail, rc=3D%d, errno=3D%d", ne, err= no); } + + rdma_dev_res->stats.completions +=3D total_ne; + + return total_ne; } =20 static void *comp_handler_thread(void *arg) @@ -122,6 +128,9 @@ static void *comp_handler_thread(void *arg) while (backend_dev->comp_thread.run) { do { rc =3D qemu_poll_ns(pfds, 1, THR_POLL_TO * (int64_t)SCALE_MS); + if (!rc) { + backend_dev->rdma_dev_res->stats.poll_cq_ppoll_to++; + } } while (!rc && backend_dev->comp_thread.run); =20 if (backend_dev->comp_thread.run) { @@ -138,6 +147,7 @@ static void *comp_handler_thread(void *arg) errno); } =20 + backend_dev->rdma_dev_res->stats.poll_cq_from_bk++; rdma_poll_cq(backend_dev->rdma_dev_res, ev_cq); =20 ibv_ack_cq_events(ev_cq, 1); @@ -271,7 +281,13 @@ int rdma_backend_query_port(RdmaBackendDev *backend_de= v, =20 void rdma_backend_poll_cq(RdmaDeviceResources *rdma_dev_res, RdmaBackendCQ= *cq) { - rdma_poll_cq(rdma_dev_res, cq->ibcq); + int polled; + + rdma_dev_res->stats.poll_cq_from_guest++; + polled =3D rdma_poll_cq(rdma_dev_res, cq->ibcq); + if (!polled) { + rdma_dev_res->stats.poll_cq_from_guest_empty++; + } } =20 static GHashTable *ah_hash; @@ -333,7 +349,7 @@ static void ah_cache_init(void) =20 static int build_host_sge_array(RdmaDeviceResources *rdma_dev_res, struct ibv_sge *dsge, struct ibv_sge *ssge, - uint8_t num_sge) + uint8_t num_sge, uint64_t *total_length) { RdmaRmMR *mr; int ssge_idx; @@ -349,6 +365,8 @@ static int build_host_sge_array(RdmaDeviceResources *rd= ma_dev_res, dsge->length =3D ssge[ssge_idx].length; dsge->lkey =3D rdma_backend_mr_lkey(&mr->backend_mr); =20 + *total_length +=3D dsge->length; + dsge++; } =20 @@ -445,8 +463,10 @@ void rdma_backend_post_send(RdmaBackendDev *backend_de= v, rc =3D mad_send(backend_dev, sgid_idx, sgid, sge, num_sge); if (rc) { complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_MAD_SEND, ctx= ); + backend_dev->rdma_dev_res->stats.mad_tx_err++; } else { complete_work(IBV_WC_SUCCESS, 0, ctx); + backend_dev->rdma_dev_res->stats.mad_tx++; } } return; @@ -458,20 +478,21 @@ void rdma_backend_post_send(RdmaBackendDev *backend_d= ev, rc =3D rdma_rm_alloc_cqe_ctx(backend_dev->rdma_dev_res, &bctx_id, bctx= ); if (unlikely(rc)) { complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_NOMEM, ctx); - goto out_free_bctx; + goto err_free_bctx; } =20 - rc =3D build_host_sge_array(backend_dev->rdma_dev_res, new_sge, sge, n= um_sge); + rc =3D build_host_sge_array(backend_dev->rdma_dev_res, new_sge, sge, n= um_sge, + &backend_dev->rdma_dev_res->stats.tx_len); if (rc) { complete_work(IBV_WC_GENERAL_ERR, rc, ctx); - goto out_dealloc_cqe_ctx; + goto err_dealloc_cqe_ctx; } =20 if (qp_type =3D=3D IBV_QPT_UD) { wr.wr.ud.ah =3D create_ah(backend_dev, qp->ibpd, sgid_idx, dgid); if (!wr.wr.ud.ah) { complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_FAIL_BACKEND, ctx= ); - goto out_dealloc_cqe_ctx; + goto err_dealloc_cqe_ctx; } wr.wr.ud.remote_qpn =3D dqpn; wr.wr.ud.remote_qkey =3D dqkey; @@ -488,15 +509,19 @@ void rdma_backend_post_send(RdmaBackendDev *backend_d= ev, rdma_error_report("ibv_post_send fail, qpn=3D0x%x, rc=3D%d, errno= =3D%d", qp->ibqp->qp_num, rc, errno); complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_FAIL_BACKEND, ctx); - goto out_dealloc_cqe_ctx; + goto err_dealloc_cqe_ctx; } =20 + atomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe); + backend_dev->rdma_dev_res->stats.tx++; + return; =20 -out_dealloc_cqe_ctx: +err_dealloc_cqe_ctx: + backend_dev->rdma_dev_res->stats.tx_err++; rdma_rm_dealloc_cqe_ctx(backend_dev->rdma_dev_res, bctx_id); =20 -out_free_bctx: +err_free_bctx: g_free(bctx); } =20 @@ -554,6 +579,9 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_dev, rc =3D save_mad_recv_buffer(backend_dev, sge, num_sge, ctx); if (rc) { complete_work(IBV_WC_GENERAL_ERR, rc, ctx); + rdma_dev_res->stats.mad_rx_bufs_err++; + } else { + rdma_dev_res->stats.mad_rx_bufs++; } } return; @@ -565,13 +593,14 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_d= ev, rc =3D rdma_rm_alloc_cqe_ctx(rdma_dev_res, &bctx_id, bctx); if (unlikely(rc)) { complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_NOMEM, ctx); - goto out_free_bctx; + goto err_free_bctx; } =20 - rc =3D build_host_sge_array(rdma_dev_res, new_sge, sge, num_sge); + rc =3D build_host_sge_array(rdma_dev_res, new_sge, sge, num_sge, + &backend_dev->rdma_dev_res->stats.rx_bufs_le= n); if (rc) { complete_work(IBV_WC_GENERAL_ERR, rc, ctx); - goto out_dealloc_cqe_ctx; + goto err_dealloc_cqe_ctx; } =20 wr.num_sge =3D num_sge; @@ -582,15 +611,19 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_d= ev, rdma_error_report("ibv_post_recv fail, qpn=3D0x%x, rc=3D%d, errno= =3D%d", qp->ibqp->qp_num, rc, errno); complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_FAIL_BACKEND, ctx); - goto out_dealloc_cqe_ctx; + goto err_dealloc_cqe_ctx; } =20 + atomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe); + rdma_dev_res->stats.rx_bufs++; + return; =20 -out_dealloc_cqe_ctx: +err_dealloc_cqe_ctx: + backend_dev->rdma_dev_res->stats.rx_bufs_err++; rdma_rm_dealloc_cqe_ctx(rdma_dev_res, bctx_id); =20 -out_free_bctx: +err_free_bctx: g_free(bctx); } =20 @@ -929,12 +962,14 @@ static void process_incoming_mad_req(RdmaBackendDev *= backend_dev, bctx =3D rdma_rm_get_cqe_ctx(backend_dev->rdma_dev_res, cqe_ctx_id); if (unlikely(!bctx)) { rdma_error_report("No matching ctx for req %ld", cqe_ctx_id); + backend_dev->rdma_dev_res->stats.mad_rx_err++; return; } =20 mad =3D rdma_pci_dma_map(backend_dev->dev, bctx->sge.addr, bctx->sge.length); if (!mad || bctx->sge.length < msg->umad_len + MAD_HDR_SIZE) { + backend_dev->rdma_dev_res->stats.mad_rx_err++; complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_INV_MAD_BUFF, bctx->up_ctx); } else { @@ -949,6 +984,7 @@ static void process_incoming_mad_req(RdmaBackendDev *ba= ckend_dev, wc.byte_len =3D msg->umad_len; wc.status =3D IBV_WC_SUCCESS; wc.wc_flags =3D IBV_WC_GRH; + backend_dev->rdma_dev_res->stats.mad_rx++; comp_handler(bctx->up_ctx, &wc); } =20 diff --git a/hw/rdma/rdma_rm.c b/hw/rdma/rdma_rm.c index 7ea62a9e60..35fa1ab44e 100644 --- a/hw/rdma/rdma_rm.c +++ b/hw/rdma/rdma_rm.c @@ -37,6 +37,7 @@ static inline void res_tbl_init(const char *name, RdmaRmR= esTbl *tbl, tbl->bitmap =3D bitmap_new(tbl_sz); tbl->tbl_sz =3D tbl_sz; tbl->res_sz =3D res_sz; + tbl->used =3D 0; qemu_mutex_init(&tbl->lock); } =20 @@ -76,6 +77,8 @@ static inline void *rdma_res_tbl_alloc(RdmaRmResTbl *tbl,= uint32_t *handle) =20 set_bit(*handle, tbl->bitmap); =20 + tbl->used++; + qemu_mutex_unlock(&tbl->lock); =20 memset(tbl->tbl + *handle * tbl->res_sz, 0, tbl->res_sz); @@ -93,6 +96,7 @@ static inline void rdma_res_tbl_dealloc(RdmaRmResTbl *tbl= , uint32_t handle) =20 if (handle < tbl->tbl_sz) { clear_bit(handle, tbl->bitmap); + tbl->used--; } =20 qemu_mutex_unlock(&tbl->lock); @@ -619,6 +623,9 @@ int rdma_rm_init(RdmaDeviceResources *dev_res, struct i= bv_device_attr *dev_attr) =20 qemu_mutex_init(&dev_res->lock); =20 + memset(&dev_res->stats, 0, sizeof(dev_res->stats)); + atomic_set(&dev_res->stats.missing_cqe, 0); + return 0; } =20 diff --git a/hw/rdma/rdma_rm_defs.h b/hw/rdma/rdma_rm_defs.h index f0ee1f3072..4b8d704cfe 100644 --- a/hw/rdma/rdma_rm_defs.h +++ b/hw/rdma/rdma_rm_defs.h @@ -34,7 +34,9 @@ #define MAX_QP_INIT_RD_ATOM 16 #define MAX_AH 64 =20 -#define MAX_RM_TBL_NAME 16 +#define MAX_RM_TBL_NAME 16 +#define MAX_CONSEQ_EMPTY_POLL_CQ 4096 /* considered as error above this= */ + typedef struct RdmaRmResTbl { char name[MAX_RM_TBL_NAME]; QemuMutex lock; @@ -42,6 +44,7 @@ typedef struct RdmaRmResTbl { size_t tbl_sz; size_t res_sz; void *tbl; + uint32_t used; /* number of used entries in the table */ } RdmaRmResTbl; =20 typedef struct RdmaRmPD { @@ -96,6 +99,27 @@ typedef struct RdmaRmPort { enum ibv_port_state state; } RdmaRmPort; =20 +typedef struct RdmaRmStats { + uint64_t tx; + uint64_t tx_len; + uint64_t tx_err; + uint64_t rx_bufs; + uint64_t rx_bufs_len; + uint64_t rx_bufs_err; + uint64_t completions; + uint64_t mad_tx; + uint64_t mad_tx_err; + uint64_t mad_rx; + uint64_t mad_rx_err; + uint64_t mad_rx_bufs; + uint64_t mad_rx_bufs_err; + uint64_t poll_cq_from_bk; + uint64_t poll_cq_from_guest; + uint64_t poll_cq_from_guest_empty; + uint64_t poll_cq_ppoll_to; + uint32_t missing_cqe; +} RdmaRmStats; + typedef struct RdmaDeviceResources { RdmaRmPort port; RdmaRmResTbl pd_tbl; @@ -106,6 +130,7 @@ typedef struct RdmaDeviceResources { RdmaRmResTbl cqe_ctx_tbl; GHashTable *qp_hash; /* Keeps mapping between real and emulated */ QemuMutex lock; + RdmaRmStats stats; } RdmaDeviceResources; =20 #endif diff --git a/hw/rdma/vmw/pvrdma.h b/hw/rdma/vmw/pvrdma.h index 0879224957..a8a04a253c 100644 --- a/hw/rdma/vmw/pvrdma.h +++ b/hw/rdma/vmw/pvrdma.h @@ -70,6 +70,14 @@ typedef struct DSRInfo { PvrdmaRing cq; } DSRInfo; =20 +typedef struct PVRDMADevStats { + uint64_t commands; + uint64_t regs_reads; + uint64_t regs_writes; + uint64_t uar_writes; + uint64_t interrupts; +} PVRDMADevStats; + typedef struct PVRDMADev { PCIDevice parent_obj; MemoryRegion msix; @@ -89,6 +97,7 @@ typedef struct PVRDMADev { CharBackend mad_chr; VMXNET3State *func0; Notifier shutdown_notifier; + PVRDMADevStats stats; } PVRDMADev; #define PVRDMA_DEV(dev) OBJECT_CHECK(PVRDMADev, (dev), PVRDMA_HW_NAME) =20 @@ -123,6 +132,7 @@ static inline void post_interrupt(PVRDMADev *dev, unsig= ned vector) PCIDevice *pci_dev =3D PCI_DEVICE(dev); =20 if (likely(!dev->interrupt_mask)) { + dev->stats.interrupts++; msix_notify(pci_dev, vector); } } diff --git a/hw/rdma/vmw/pvrdma_cmd.c b/hw/rdma/vmw/pvrdma_cmd.c index 21a55e225a..6d56746357 100644 --- a/hw/rdma/vmw/pvrdma_cmd.c +++ b/hw/rdma/vmw/pvrdma_cmd.c @@ -651,6 +651,8 @@ int pvrdma_exec_cmd(PVRDMADev *dev) =20 trace_pvrdma_exec_cmd(dsr_info->req->hdr.cmd, dsr_info->rsp->hdr.err); =20 + dev->stats.commands++; + out: set_reg_val(dev, PVRDMA_REG_ERR, err); post_interrupt(dev, INTR_VEC_CMD_RING); diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c index 81ae08bd8d..dd35646324 100644 --- a/hw/rdma/vmw/pvrdma_main.c +++ b/hw/rdma/vmw/pvrdma_main.c @@ -337,6 +337,8 @@ static uint64_t pvrdma_regs_read(void *opaque, hwaddr a= ddr, unsigned size) PVRDMADev *dev =3D opaque; uint32_t val; =20 + dev->stats.regs_reads++; + if (get_reg_val(dev, addr, &val)) { rdma_error_report("Failed to read REG value from address 0x%x", (uint32_t)addr); @@ -353,6 +355,8 @@ static void pvrdma_regs_write(void *opaque, hwaddr addr= , uint64_t val, { PVRDMADev *dev =3D opaque; =20 + dev->stats.regs_writes++; + if (set_reg_val(dev, addr, val)) { rdma_error_report("Failed to set REG value, addr=3D0x%"PRIx64 ", v= al=3D0x%"PRIx64, addr, val); @@ -421,6 +425,8 @@ static void pvrdma_uar_write(void *opaque, hwaddr addr,= uint64_t val, { PVRDMADev *dev =3D opaque; =20 + dev->stats.uar_writes++; + switch (addr & 0xFFF) { /* Mask with 0xFFF as each UC gets page */ case PVRDMA_UAR_QP_OFFSET: if (val & PVRDMA_UAR_QP_SEND) { @@ -612,6 +618,8 @@ static void pvrdma_realize(PCIDevice *pdev, Error **err= p) goto out; } =20 + memset(&dev->stats, 0, sizeof(dev->stats)); + dev->shutdown_notifier.notify =3D pvrdma_shutdown_notifier; qemu_register_shutdown_notifier(&dev->shutdown_notifier); =20 --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747526246514.0998286441364; Sat, 16 Mar 2019 07:45:26 -0700 (PDT) Received: from localhost ([127.0.0.1]:42691 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AYq-0001Bd-3h for importer@patchew.org; Sat, 16 Mar 2019 10:45:20 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49759) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOx-0001IK-QO for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOv-0000s6-3j for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:07 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:39369) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOu-0000qi-Lp for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:05 -0400 Received: by mail-wr1-x441.google.com with SMTP id p8so12458781wrq.6 for ; Sat, 16 Mar 2019 07:35:03 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.35 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=gyWG2fNJOhzuupqPY5E/v2SdFww67Gm55iW4ibJFxNI=; b=NLnn+cLIUChFgR2AkcVLQERN0ugRYEsEr1b7Eic3omol5Dvsw9WqzoRbp91Hv5YUtp g1rfLZZNk77rjsbrJADsYT5QjdvQqULVy658RdtusWYp0H47kUyUEYiurdKKQt0P9SoP sRlCDS3vP741UTXwYym5H8RkRFQ4jzR27mw+l9xjFnQjgNwhKgVMAIl068cTMx17bC7a 5/rgzFwKghrHAy1B51VbYykvigxl+XdSfwOl6KlvKQ1pzqLG25+Yj/P6m3yZrhSFED/m cyQ1B0yeDCgkW/sVog1uLUPJpPrJuvIQpudwRPgVLLRzIUEIqXGzhaIIAptFfaQatgBt N0rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=gyWG2fNJOhzuupqPY5E/v2SdFww67Gm55iW4ibJFxNI=; b=e7jWFBSHo4E130MSOmAcmqfm7McDM+aQZBomB/Pxe08itI3HtMp8QVhQGSUbdVSXW3 HisgxWmV2ZE5IYJPsk0Sb/LwvKZVxc563MUfMfmrLNQ2FHB0VRvjLmDpS8cIlEzaNdSK JwA+HcC8lP5o8w1QtS5RFF3WfMrlB1cBSUt/7e9d10thrsus6CX7Z674Kx2E03qXXNa1 XXnQ6pV2pR30gRrUV5irDOV6HzWGWPp3Fs9AfA1o+mSVWML8BNh2tSkxlVztYXz2KjGD pd6/ke+SLqNDNIKRx7k6ekN3gl9OCcO8KnAkQOxkrIL9f6vztnsaRqJRMrntGBE6fOel i4gg== X-Gm-Message-State: APjAAAV3AWquqGJvXh9KwG2P0SWSM1TGCuJQcSfGF6yEW4x5BqscckKJ 1hMOtChVJTJbA1QscANu+iOI42gi X-Google-Smtp-Source: APXvYqw7DrGCLMlHnEtPxqPWz6qsakZO1nCVoq/WakBLc4PNSN6bwVSo7Y06v7KrQgaHc9afp6NC3Q== X-Received: by 2002:adf:bc89:: with SMTP id g9mr3985985wrh.102.1552746876823; Sat, 16 Mar 2019 07:34:36 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:09 +0200 Message-Id: <20190316143421.8194-7-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::441 Subject: [Qemu-devel] [PATCH PULL 06/18] {hmp, hw/pvrdma}: Expose device internals via monitor interface X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Yuval Shaia Allow interrogating device internals through HMP interface. The exposed indicators can be used for troubleshooting by developers or sysadmin. There is no need to expose these attributes to a management system (e.x. libvirt) because (1) most of them are not "device-management' related info and (2) there is no guarantee the interface is stable. Signed-off-by: Yuval Shaia Acked-by: Dr. David Alan Gilbert Acked-by: Markus Armbruster Message-Id: <1552300155-25216-6-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Marcel Apfelbaum Signed-off-by: Marcel Apfelbaum --- hmp-commands-info.hx | 14 +++++++++++ hmp.c | 27 ++++++++++++++++++++ hmp.h | 1 + hw/rdma/Makefile.objs | 2 +- hw/rdma/rdma.c | 30 ++++++++++++++++++++++ hw/rdma/rdma_rm.c | 53 +++++++++++++++++++++++++++++++++++++++ hw/rdma/rdma_rm.h | 1 + hw/rdma/vmw/pvrdma_main.c | 26 +++++++++++++++++++ include/hw/rdma/rdma.h | 40 +++++++++++++++++++++++++++++ 9 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 hw/rdma/rdma.c create mode 100644 include/hw/rdma/rdma.h diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx index cbee8b944d..c59444c461 100644 --- a/hmp-commands-info.hx +++ b/hmp-commands-info.hx @@ -202,6 +202,20 @@ STEXI @item info pic @findex info pic Show PIC state. +ETEXI + + { + .name =3D "rdma", + .args_type =3D "", + .params =3D "", + .help =3D "show RDMA state", + .cmd =3D hmp_info_rdma, + }, + +STEXI +@item info rdma +@findex info rdma +Show RDMA state. ETEXI =20 { diff --git a/hmp.c b/hmp.c index 4a702d5b97..fa1e59a2fc 100644 --- a/hmp.c +++ b/hmp.c @@ -51,6 +51,7 @@ #include "qemu/error-report.h" #include "exec/ramlist.h" #include "hw/intc/intc.h" +#include "hw/rdma/rdma.h" #include "migration/snapshot.h" #include "migration/misc.h" =20 @@ -1013,6 +1014,32 @@ void hmp_info_pic(Monitor *mon, const QDict *qdict) hmp_info_pic_foreach, mon); } =20 +static int hmp_info_rdma_foreach(Object *obj, void *opaque) +{ + RdmaProvider *rdma; + RdmaProviderClass *k; + Monitor *mon =3D opaque; + + if (object_dynamic_cast(obj, INTERFACE_RDMA_PROVIDER)) { + rdma =3D RDMA_PROVIDER(obj); + k =3D RDMA_PROVIDER_GET_CLASS(obj); + if (k->print_statistics) { + k->print_statistics(mon, rdma); + } else { + monitor_printf(mon, "RDMA statistics not available for %s.\n", + object_get_typename(obj)); + } + } + + return 0; +} + +void hmp_info_rdma(Monitor *mon, const QDict *qdict) +{ + object_child_foreach_recursive(object_get_root(), + hmp_info_rdma_foreach, mon); +} + void hmp_info_pci(Monitor *mon, const QDict *qdict) { PciInfoList *info_list, *info; diff --git a/hmp.h b/hmp.h index e0f32f04d3..43617f2646 100644 --- a/hmp.h +++ b/hmp.h @@ -36,6 +36,7 @@ void hmp_info_spice(Monitor *mon, const QDict *qdict); void hmp_info_balloon(Monitor *mon, const QDict *qdict); void hmp_info_irq(Monitor *mon, const QDict *qdict); void hmp_info_pic(Monitor *mon, const QDict *qdict); +void hmp_info_rdma(Monitor *mon, const QDict *qdict); void hmp_info_pci(Monitor *mon, const QDict *qdict); void hmp_info_block_jobs(Monitor *mon, const QDict *qdict); void hmp_info_tpm(Monitor *mon, const QDict *qdict); diff --git a/hw/rdma/Makefile.objs b/hw/rdma/Makefile.objs index bd36cbf51c..c354e60e5b 100644 --- a/hw/rdma/Makefile.objs +++ b/hw/rdma/Makefile.objs @@ -1,5 +1,5 @@ ifeq ($(CONFIG_PVRDMA),y) -obj-$(CONFIG_PCI) +=3D rdma_utils.o rdma_backend.o rdma_rm.o +obj-$(CONFIG_PCI) +=3D rdma_utils.o rdma_backend.o rdma_rm.o rdma.o obj-$(CONFIG_PCI) +=3D vmw/pvrdma_dev_ring.o vmw/pvrdma_cmd.o \ vmw/pvrdma_qp_ops.o vmw/pvrdma_main.o endif diff --git a/hw/rdma/rdma.c b/hw/rdma/rdma.c new file mode 100644 index 0000000000..7bec0d0d2c --- /dev/null +++ b/hw/rdma/rdma.c @@ -0,0 +1,30 @@ +/* + * RDMA device interface + * + * Copyright (C) 2018 Oracle + * Copyright (C) 2018 Red Hat Inc + * + * Authors: + * Yuval Shaia + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "hw/rdma/rdma.h" +#include "qemu/module.h" + +static const TypeInfo rdma_hmp_info =3D { + .name =3D INTERFACE_RDMA_PROVIDER, + .parent =3D TYPE_INTERFACE, + .class_size =3D sizeof(RdmaProviderClass), +}; + +static void rdma_register_types(void) +{ + type_register_static(&rdma_hmp_info); +} + +type_init(rdma_register_types) diff --git a/hw/rdma/rdma_rm.c b/hw/rdma/rdma_rm.c index 35fa1ab44e..b50e192b49 100644 --- a/hw/rdma/rdma_rm.c +++ b/hw/rdma/rdma_rm.c @@ -16,6 +16,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "cpu.h" +#include "monitor/monitor.h" =20 #include "trace.h" #include "rdma_utils.h" @@ -26,6 +27,58 @@ #define PG_DIR_SZ { TARGET_PAGE_SIZE / sizeof(__u64) } #define PG_TBL_SZ { TARGET_PAGE_SIZE / sizeof(__u64) } =20 +void rdma_dump_device_counters(Monitor *mon, RdmaDeviceResources *dev_res) +{ + monitor_printf(mon, "\ttx : %" PRId64 "\n", + dev_res->stats.tx); + monitor_printf(mon, "\ttx_len : %" PRId64 "\n", + dev_res->stats.tx_len); + monitor_printf(mon, "\ttx_err : %" PRId64 "\n", + dev_res->stats.tx_err); + monitor_printf(mon, "\trx_bufs : %" PRId64 "\n", + dev_res->stats.rx_bufs); + monitor_printf(mon, "\trx_bufs_len : %" PRId64 "\n", + dev_res->stats.rx_bufs_len); + monitor_printf(mon, "\trx_bufs_err : %" PRId64 "\n", + dev_res->stats.rx_bufs_err); + monitor_printf(mon, "\tcomps : %" PRId64 "\n", + dev_res->stats.completions); + monitor_printf(mon, "\tmissing_comps : %" PRId32 "\n", + dev_res->stats.missing_cqe); + monitor_printf(mon, "\tpoll_cq (bk) : %" PRId64 "\n", + dev_res->stats.poll_cq_from_bk); + monitor_printf(mon, "\tpoll_cq_ppoll_to : %" PRId64 "\n", + dev_res->stats.poll_cq_ppoll_to); + monitor_printf(mon, "\tpoll_cq (fe) : %" PRId64 "\n", + dev_res->stats.poll_cq_from_guest); + monitor_printf(mon, "\tpoll_cq_empty : %" PRId64 "\n", + dev_res->stats.poll_cq_from_guest_empty); + monitor_printf(mon, "\tmad_tx : %" PRId64 "\n", + dev_res->stats.mad_tx); + monitor_printf(mon, "\tmad_tx_err : %" PRId64 "\n", + dev_res->stats.mad_tx_err); + monitor_printf(mon, "\tmad_rx : %" PRId64 "\n", + dev_res->stats.mad_rx); + monitor_printf(mon, "\tmad_rx_err : %" PRId64 "\n", + dev_res->stats.mad_rx_err); + monitor_printf(mon, "\tmad_rx_bufs : %" PRId64 "\n", + dev_res->stats.mad_rx_bufs); + monitor_printf(mon, "\tmad_rx_bufs_err : %" PRId64 "\n", + dev_res->stats.mad_rx_bufs_err); + monitor_printf(mon, "\tPDs : %" PRId32 "\n", + dev_res->pd_tbl.used); + monitor_printf(mon, "\tMRs : %" PRId32 "\n", + dev_res->mr_tbl.used); + monitor_printf(mon, "\tUCs : %" PRId32 "\n", + dev_res->uc_tbl.used); + monitor_printf(mon, "\tQPs : %" PRId32 "\n", + dev_res->qp_tbl.used); + monitor_printf(mon, "\tCQs : %" PRId32 "\n", + dev_res->cq_tbl.used); + monitor_printf(mon, "\tCEQ_CTXs : %" PRId32 "\n", + dev_res->cqe_ctx_tbl.used); +} + static inline void res_tbl_init(const char *name, RdmaRmResTbl *tbl, uint32_t tbl_sz, uint32_t res_sz) { diff --git a/hw/rdma/rdma_rm.h b/hw/rdma/rdma_rm.h index f9b2ec5076..4f03f9b8c5 100644 --- a/hw/rdma/rdma_rm.h +++ b/hw/rdma/rdma_rm.h @@ -81,5 +81,6 @@ static inline union ibv_gid *rdma_rm_get_gid(RdmaDeviceRe= sources *dev_res, { return &dev_res->port.gid_tbl[sgid_idx].gid; } +void rdma_dump_device_counters(Monitor *mon, RdmaDeviceResources *dev_res); =20 #endif diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c index dd35646324..729a2df5a0 100644 --- a/hw/rdma/vmw/pvrdma_main.c +++ b/hw/rdma/vmw/pvrdma_main.c @@ -25,6 +25,8 @@ #include "cpu.h" #include "trace.h" #include "sysemu/sysemu.h" +#include "monitor/monitor.h" +#include "hw/rdma/rdma.h" =20 #include "../rdma_rm.h" #include "../rdma_backend.h" @@ -55,6 +57,26 @@ static Property pvrdma_dev_properties[] =3D { DEFINE_PROP_END_OF_LIST(), }; =20 +static void pvrdma_print_statistics(Monitor *mon, RdmaProvider *obj) +{ + PVRDMADev *dev =3D PVRDMA_DEV(obj); + PCIDevice *pdev =3D PCI_DEVICE(dev); + + monitor_printf(mon, "%s, %x.%x\n", pdev->name, PCI_SLOT(pdev->devfn), + PCI_FUNC(pdev->devfn)); + monitor_printf(mon, "\tcommands : %" PRId64 "\n", + dev->stats.commands); + monitor_printf(mon, "\tregs_reads : %" PRId64 "\n", + dev->stats.regs_reads); + monitor_printf(mon, "\tregs_writes : %" PRId64 "\n", + dev->stats.regs_writes); + monitor_printf(mon, "\tuar_writes : %" PRId64 "\n", + dev->stats.uar_writes); + monitor_printf(mon, "\tinterrupts : %" PRId64 "\n", + dev->stats.interrupts); + rdma_dump_device_counters(mon, &dev->rdma_dev_res); +} + static void free_dev_ring(PCIDevice *pci_dev, PvrdmaRing *ring, void *ring_state) { @@ -639,6 +661,7 @@ static void pvrdma_class_init(ObjectClass *klass, void = *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); PCIDeviceClass *k =3D PCI_DEVICE_CLASS(klass); + RdmaProviderClass *ir =3D INTERFACE_RDMA_PROVIDER_CLASS(klass); =20 k->realize =3D pvrdma_realize; k->exit =3D pvrdma_exit; @@ -650,6 +673,8 @@ static void pvrdma_class_init(ObjectClass *klass, void = *data) dc->desc =3D "RDMA Device"; dc->props =3D pvrdma_dev_properties; set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); + + ir->print_statistics =3D pvrdma_print_statistics; } =20 static const TypeInfo pvrdma_info =3D { @@ -659,6 +684,7 @@ static const TypeInfo pvrdma_info =3D { .class_init =3D pvrdma_class_init, .interfaces =3D (InterfaceInfo[]) { { INTERFACE_CONVENTIONAL_PCI_DEVICE }, + { INTERFACE_RDMA_PROVIDER }, { } } }; diff --git a/include/hw/rdma/rdma.h b/include/hw/rdma/rdma.h new file mode 100644 index 0000000000..68290fb58c --- /dev/null +++ b/include/hw/rdma/rdma.h @@ -0,0 +1,40 @@ +/* + * RDMA device interface + * + * Copyright (C) 2019 Oracle + * Copyright (C) 2019 Red Hat Inc + * + * Authors: + * Yuval Shaia + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#ifndef RDMA_H +#define RDMA_H + +#include "qom/object.h" + +#define INTERFACE_RDMA_PROVIDER "rdma" + +#define INTERFACE_RDMA_PROVIDER_CLASS(klass) \ + OBJECT_CLASS_CHECK(RdmaProviderClass, (klass), \ + INTERFACE_RDMA_PROVIDER) +#define RDMA_PROVIDER_GET_CLASS(obj) \ + OBJECT_GET_CLASS(RdmaProviderClass, (obj), \ + INTERFACE_RDMA_PROVIDER) +#define RDMA_PROVIDER(obj) \ + INTERFACE_CHECK(RdmaProvider, (obj), \ + INTERFACE_RDMA_PROVIDER) + +typedef struct RdmaProvider RdmaProvider; + +typedef struct RdmaProviderClass { + InterfaceClass parent; + + void (*print_statistics)(Monitor *mon, RdmaProvider *obj); +} RdmaProviderClass; + +#endif --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747200593425.34247279208284; Sat, 16 Mar 2019 07:40:00 -0700 (PDT) Received: from localhost ([127.0.0.1]:42610 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5ATc-00050I-FG for importer@patchew.org; Sat, 16 Mar 2019 10:39:56 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49604) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOX-0000tw-Tu for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOW-0000aw-2g for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:41 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:33393) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOV-0000aD-Ic for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:39 -0400 Received: by mail-wr1-x443.google.com with SMTP id i8so12462086wrm.0 for ; Sat, 16 Mar 2019 07:34:39 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.36 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=jjtiVm5laNUI+FaMfYqrZQoi5cpZE659yzaUL3yK/j8=; b=N4N7KM7JAH8IjOr1GPGDMYtiBDiwVIxLRItVlXt4S8mrfVJ9IipzXeVNCq/8GH8fWO nIA/5lubN8OdUbsqUTMJYZ9Mf3ddbu4YIJixBsVdgbHxwZOEGnQEw7ZWQIVsSL0uC7XC f4elnHTsyyWXdWGLk+G/mT725r++txckEdI776Pz+XFZpa+glRF8NvlRnIKg/JgsRptR dGsap2Z+/u3WwZLGxbGfSdY1GlJyCMjsX5NPRym1Mw0ehuMQ13E/4RSt8Fj/QhbikQdT l9yfBwtjYNQg4/Le3vcC+YmHvQuu6caKC6ZnDsWcKRceCYlq3Xtd95epL4zF1iJAmxng yraQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=jjtiVm5laNUI+FaMfYqrZQoi5cpZE659yzaUL3yK/j8=; b=c1gneJ4UncYs1ql8Xg72NNhEfEwCLzwkW9gsWzLzXpb8DlGz7aWM51gXS3ACOSxP3M /Go/h/Meqtrrnrxu4xmEaVj/FFxFQJLBjiRLssV2wbrjwaVyakz7rQACm6HTHOc23CQp y7K313WlDsv2tdToB+0X/IhfFs9SnGpqc13K2bSrcCUZxOJpX6PvMoL+OcG+sgSxGRTw DnzYRmGNSle9LGks7lLAjxq7ZttfbEUZUJm5o9Nax0Mc69vQxYu+t46PvVexOB9ATCEB Hvfbo6EIbne4H2KvxNr9QDjSW96UCy9tKHBJuIsph7qu8V4REvYWKEJAJlAEz4XYNvKz mdEQ== X-Gm-Message-State: APjAAAWx1mzi1sJsRPvODPf8gltiis8ig7qrEGp09+pguuAuTHvpTP2+ VwIl5VJzITS2/eQ85npW+oPFBQRc X-Google-Smtp-Source: APXvYqxUhZq18mEarkHjJHc+x3KTgJh2ZMe/Tqx8Rimig2Tqd9J+SEyvORD80ltMeyDQDwS7h707tQ== X-Received: by 2002:adf:ba84:: with SMTP id p4mr6098588wrg.156.1552746878424; Sat, 16 Mar 2019 07:34:38 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:10 +0200 Message-Id: <20190316143421.8194-8-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PATCH PULL 07/18] hw/rdma: Free all MAD receive buffers when device is closed X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Yuval Shaia When device is going down free all saved MAD buffers. Signed-off-by: Yuval Shaia Reviewed-by: Marcel Apfelbaum Message-Id: <1552300155-25216-7-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_backend.c | 34 +++++++++++++++++++++++++++++++++- hw/rdma/vmw/pvrdma_main.c | 2 ++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c index e8af9741b1..d0bbe57bd2 100644 --- a/hw/rdma/rdma_backend.c +++ b/hw/rdma/rdma_backend.c @@ -64,6 +64,33 @@ static inline void complete_work(enum ibv_wc_status stat= us, uint32_t vendor_err, comp_handler(ctx, &wc); } =20 +static void free_cqe_ctx(gpointer data, gpointer user_data) +{ + BackendCtx *bctx; + RdmaDeviceResources *rdma_dev_res =3D user_data; + unsigned long cqe_ctx_id =3D GPOINTER_TO_INT(data); + + bctx =3D rdma_rm_get_cqe_ctx(rdma_dev_res, cqe_ctx_id); + if (bctx) { + rdma_rm_dealloc_cqe_ctx(rdma_dev_res, cqe_ctx_id); + } + g_free(bctx); +} + +static void clean_recv_mads(RdmaBackendDev *backend_dev) +{ + unsigned long cqe_ctx_id; + + do { + cqe_ctx_id =3D rdma_protected_qlist_pop_int64(&backend_dev-> + recv_mads_list); + if (cqe_ctx_id !=3D -ENOENT) { + free_cqe_ctx(GINT_TO_POINTER(cqe_ctx_id), + backend_dev->rdma_dev_res); + } + } while (cqe_ctx_id !=3D -ENOENT); +} + static int rdma_poll_cq(RdmaDeviceResources *rdma_dev_res, struct ibv_cq *= ibcq) { int i, ne, total_ne =3D 0; @@ -1037,6 +1064,11 @@ static int mad_init(RdmaBackendDev *backend_dev, Cha= rBackend *mad_chr_be) return 0; } =20 +static void mad_stop(RdmaBackendDev *backend_dev) +{ + clean_recv_mads(backend_dev); +} + static void mad_fini(RdmaBackendDev *backend_dev) { disable_rdmacm_mux_async(backend_dev); @@ -1224,12 +1256,12 @@ void rdma_backend_start(RdmaBackendDev *backend_dev) =20 void rdma_backend_stop(RdmaBackendDev *backend_dev) { + mad_stop(backend_dev); stop_backend_thread(&backend_dev->comp_thread); } =20 void rdma_backend_fini(RdmaBackendDev *backend_dev) { - rdma_backend_stop(backend_dev); mad_fini(backend_dev); g_hash_table_destroy(ah_hash); ibv_destroy_comp_channel(backend_dev->channel); diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c index 729a2df5a0..04845f46f7 100644 --- a/hw/rdma/vmw/pvrdma_main.c +++ b/hw/rdma/vmw/pvrdma_main.c @@ -313,6 +313,8 @@ static void pvrdma_fini(PCIDevice *pdev) =20 pvrdma_qp_ops_fini(); =20 + rdma_backend_stop(&dev->backend_dev); + rdma_rm_fini(&dev->rdma_dev_res, &dev->backend_dev, dev->backend_eth_device_name); =20 --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747257861908.1166979814672; Sat, 16 Mar 2019 07:40:57 -0700 (PDT) Received: from localhost ([127.0.0.1]:42639 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AUU-0005lX-M1 for importer@patchew.org; Sat, 16 Mar 2019 10:40:50 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49632) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOb-0000ww-9n for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOX-0000dL-PH for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:45 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:39368) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOX-0000bv-AV for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:41 -0400 Received: by mail-wr1-x442.google.com with SMTP id p8so12458176wrq.6 for ; Sat, 16 Mar 2019 07:34:41 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ec48wfgFNASv38Z4rQKWviwiNe9w8XB5FP05e5K3h90=; b=H/cJYE7WLUE3hoZXG9+5cx+oszerHSkifFOTWZHpOJ4NyZuYLC/7Xgh7XtAktZ8E/m lgdfHIP51GMsRH5kuTfaOrJOsSdFBUITkUlGpEVQvxbYW9MCmaz8WEKAd5PNrNJmhU2B 5zrN2Jy4re1cdiAMZMQ2SO361EAm2XqvW1y1uJhm2m7N7zH0MV30SosTQGTtwo1GBXbL gK8p5XQ8v+0MgQxlGdVxM7N9r1AwgkFkvn6dAsR38tepUkDS/Z9o3rP1o/oEh55qg8DV qG8Jlewn7bDtUlhSj5ROlvlxR9Jv8wHTy+n2pSXuBj2IimcUx91HpEoO969nP3feg2So QaBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ec48wfgFNASv38Z4rQKWviwiNe9w8XB5FP05e5K3h90=; b=FagbEYcvCP8dLUp8bYGHfMgk128VYAvOsjpF7SxGq/FafwweiNzF0v47yZDRQM6CHA EcWMgpi5GNBZUBl6bWAwPHMEA13ZYudfiJ9QvaBGEvdU4LwSIKuNo50vBZ67EWCTlnKn cj46PV2EBgeOd7fhZq2gYLsblotguUT6K7zUipzMj0SKDEoyZkfdgv6FiekeMTKylWus 2xCI1FVo9TEBjvvc+Sc2o56OKVHaBYjzeoVu3N38NiNFbsdYxv6bbs+rHHN84mFPuk0N 8n4NfFtP+CKeZpTsIj5QrU+Kh3tZ7QvR0H7AftBYqZDdCL4/kxt1sBrF6kDIZ+6gaA22 aQcg== X-Gm-Message-State: APjAAAWx8qYPvwCfDztl0lNCUMgjJK+9hZj710KSady1SGqDrSgx/mml j+YbqkD2Hf4Q6x0QbWZhw5DQw12n X-Google-Smtp-Source: APXvYqylryoZnYazRtnonaqniYOPCM2fItW25e4G1q7QyEiUBRkElvmwuiAbP2A1YcsW6pRvWDVmuA== X-Received: by 2002:adf:db02:: with SMTP id s2mr6228559wri.206.1552746879999; Sat, 16 Mar 2019 07:34:39 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:11 +0200 Message-Id: <20190316143421.8194-9-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PATCH PULL 08/18] hw/rdma: Free all receive buffers when QP is destroyed X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Yuval Shaia When QP is destroyed the backend QP is destroyed as well. This ensures we clean all received buffer we posted to it. However, a contexts of these buffers are still remain in the device. Fix it by maintaining a list of buffer's context and free them when QP is destroyed. Signed-off-by: Yuval Shaia Reviewed-by: Marcel Apfelbaum Message-Id: <1552300155-25216-8-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_backend.c | 26 ++++++++++++++++++++------ hw/rdma/rdma_backend.h | 2 +- hw/rdma/rdma_backend_defs.h | 2 +- hw/rdma/rdma_rm.c | 2 +- hw/rdma/rdma_utils.c | 29 +++++++++++++++++++++++++++++ hw/rdma/rdma_utils.h | 11 +++++++++++ 6 files changed, 63 insertions(+), 9 deletions(-) diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c index d0bbe57bd2..e124d8d16b 100644 --- a/hw/rdma/rdma_backend.c +++ b/hw/rdma/rdma_backend.c @@ -39,6 +39,7 @@ typedef struct BackendCtx { void *up_ctx; struct ibv_sge sge; /* Used to save MAD recv buffer */ + RdmaBackendQP *backend_qp; /* To maintain recv buffers */ } BackendCtx; =20 struct backend_umad { @@ -73,6 +74,7 @@ static void free_cqe_ctx(gpointer data, gpointer user_dat= a) bctx =3D rdma_rm_get_cqe_ctx(rdma_dev_res, cqe_ctx_id); if (bctx) { rdma_rm_dealloc_cqe_ctx(rdma_dev_res, cqe_ctx_id); + atomic_dec(&rdma_dev_res->stats.missing_cqe); } g_free(bctx); } @@ -85,13 +87,15 @@ static void clean_recv_mads(RdmaBackendDev *backend_dev) cqe_ctx_id =3D rdma_protected_qlist_pop_int64(&backend_dev-> recv_mads_list); if (cqe_ctx_id !=3D -ENOENT) { + atomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe); free_cqe_ctx(GINT_TO_POINTER(cqe_ctx_id), backend_dev->rdma_dev_res); } } while (cqe_ctx_id !=3D -ENOENT); } =20 -static int rdma_poll_cq(RdmaDeviceResources *rdma_dev_res, struct ibv_cq *= ibcq) +static int rdma_poll_cq(RdmaBackendDev *backend_dev, + RdmaDeviceResources *rdma_dev_res, struct ibv_cq *= ibcq) { int i, ne, total_ne =3D 0; BackendCtx *bctx; @@ -113,6 +117,8 @@ static int rdma_poll_cq(RdmaDeviceResources *rdma_dev_r= es, struct ibv_cq *ibcq) =20 comp_handler(bctx->up_ctx, &wc[i]); =20 + rdma_protected_gslist_remove_int32(&bctx->backend_qp->cqe_ctx_= list, + wc[i].wr_id); rdma_rm_dealloc_cqe_ctx(rdma_dev_res, wc[i].wr_id); g_free(bctx); } @@ -175,14 +181,12 @@ static void *comp_handler_thread(void *arg) } =20 backend_dev->rdma_dev_res->stats.poll_cq_from_bk++; - rdma_poll_cq(backend_dev->rdma_dev_res, ev_cq); + rdma_poll_cq(backend_dev, backend_dev->rdma_dev_res, ev_cq); =20 ibv_ack_cq_events(ev_cq, 1); } } =20 - /* TODO: Post cqe for all remaining buffs that were posted */ - backend_dev->comp_thread.is_running =3D false; =20 qemu_thread_exit(0); @@ -311,7 +315,7 @@ void rdma_backend_poll_cq(RdmaDeviceResources *rdma_dev= _res, RdmaBackendCQ *cq) int polled; =20 rdma_dev_res->stats.poll_cq_from_guest++; - polled =3D rdma_poll_cq(rdma_dev_res, cq->ibcq); + polled =3D rdma_poll_cq(cq->backend_dev, rdma_dev_res, cq->ibcq); if (!polled) { rdma_dev_res->stats.poll_cq_from_guest_empty++; } @@ -501,6 +505,7 @@ void rdma_backend_post_send(RdmaBackendDev *backend_dev, =20 bctx =3D g_malloc0(sizeof(*bctx)); bctx->up_ctx =3D ctx; + bctx->backend_qp =3D qp; =20 rc =3D rdma_rm_alloc_cqe_ctx(backend_dev->rdma_dev_res, &bctx_id, bctx= ); if (unlikely(rc)) { @@ -508,6 +513,8 @@ void rdma_backend_post_send(RdmaBackendDev *backend_dev, goto err_free_bctx; } =20 + rdma_protected_gslist_append_int32(&qp->cqe_ctx_list, bctx_id); + rc =3D build_host_sge_array(backend_dev->rdma_dev_res, new_sge, sge, n= um_sge, &backend_dev->rdma_dev_res->stats.tx_len); if (rc) { @@ -616,6 +623,7 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_dev, =20 bctx =3D g_malloc0(sizeof(*bctx)); bctx->up_ctx =3D ctx; + bctx->backend_qp =3D qp; =20 rc =3D rdma_rm_alloc_cqe_ctx(rdma_dev_res, &bctx_id, bctx); if (unlikely(rc)) { @@ -623,6 +631,8 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_dev, goto err_free_bctx; } =20 + rdma_protected_gslist_append_int32(&qp->cqe_ctx_list, bctx_id); + rc =3D build_host_sge_array(rdma_dev_res, new_sge, sge, num_sge, &backend_dev->rdma_dev_res->stats.rx_bufs_le= n); if (rc) { @@ -762,6 +772,8 @@ int rdma_backend_create_qp(RdmaBackendQP *qp, uint8_t q= p_type, return -EIO; } =20 + rdma_protected_gslist_init(&qp->cqe_ctx_list); + qp->ibpd =3D pd->ibpd; =20 /* TODO: Query QP to get max_inline_data and save it to be used in sen= d */ @@ -919,11 +931,13 @@ int rdma_backend_query_qp(RdmaBackendQP *qp, struct i= bv_qp_attr *attr, return ibv_query_qp(qp->ibqp, attr, attr_mask, init_attr); } =20 -void rdma_backend_destroy_qp(RdmaBackendQP *qp) +void rdma_backend_destroy_qp(RdmaBackendQP *qp, RdmaDeviceResources *dev_r= es) { if (qp->ibqp) { ibv_destroy_qp(qp->ibqp); } + g_slist_foreach(qp->cqe_ctx_list.list, free_cqe_ctx, dev_res); + rdma_protected_gslist_destroy(&qp->cqe_ctx_list); } =20 #define CHK_ATTR(req, dev, member, fmt) ({ \ diff --git a/hw/rdma/rdma_backend.h b/hw/rdma/rdma_backend.h index 8e53a72bf2..c54eaf2e4a 100644 --- a/hw/rdma/rdma_backend.h +++ b/hw/rdma/rdma_backend.h @@ -102,7 +102,7 @@ int rdma_backend_qp_state_rts(RdmaBackendQP *qp, uint8_= t qp_type, uint32_t sq_psn, uint32_t qkey, bool use_qke= y); int rdma_backend_query_qp(RdmaBackendQP *qp, struct ibv_qp_attr *attr, int attr_mask, struct ibv_qp_init_attr *init_att= r); -void rdma_backend_destroy_qp(RdmaBackendQP *qp); +void rdma_backend_destroy_qp(RdmaBackendQP *qp, RdmaDeviceResources *dev_r= es); =20 void rdma_backend_post_send(RdmaBackendDev *backend_dev, RdmaBackendQP *qp, uint8_t qp_type, diff --git a/hw/rdma/rdma_backend_defs.h b/hw/rdma/rdma_backend_defs.h index a8c15b09ab..817153dc8c 100644 --- a/hw/rdma/rdma_backend_defs.h +++ b/hw/rdma/rdma_backend_defs.h @@ -26,7 +26,6 @@ typedef struct RdmaDeviceResources RdmaDeviceResources; =20 typedef struct RdmaBackendThread { QemuThread thread; - QemuMutex mutex; bool run; /* Set by thread manager to let thread know it should exit */ bool is_running; /* Set by the thread to report its status */ } RdmaBackendThread; @@ -66,6 +65,7 @@ typedef struct RdmaBackendQP { struct ibv_pd *ibpd; struct ibv_qp *ibqp; uint8_t sgid_idx; + RdmaProtectedGSList cqe_ctx_list; } RdmaBackendQP; =20 #endif diff --git a/hw/rdma/rdma_rm.c b/hw/rdma/rdma_rm.c index b50e192b49..bac3b2f4a6 100644 --- a/hw/rdma/rdma_rm.c +++ b/hw/rdma/rdma_rm.c @@ -537,7 +537,7 @@ void rdma_rm_dealloc_qp(RdmaDeviceResources *dev_res, u= int32_t qp_handle) return; } =20 - rdma_backend_destroy_qp(&qp->backend_qp); + rdma_backend_destroy_qp(&qp->backend_qp, dev_res); =20 rdma_res_tbl_dealloc(&dev_res->qp_tbl, qp->qpn); } diff --git a/hw/rdma/rdma_utils.c b/hw/rdma/rdma_utils.c index 0a8abe572d..73f279104c 100644 --- a/hw/rdma/rdma_utils.c +++ b/hw/rdma/rdma_utils.c @@ -90,3 +90,32 @@ int64_t rdma_protected_qlist_pop_int64(RdmaProtectedQLis= t *list) =20 return qnum_get_uint(qobject_to(QNum, obj)); } + +void rdma_protected_gslist_init(RdmaProtectedGSList *list) +{ + qemu_mutex_init(&list->lock); +} + +void rdma_protected_gslist_destroy(RdmaProtectedGSList *list) +{ + if (list->list) { + g_slist_free(list->list); + list->list =3D NULL; + } +} + +void rdma_protected_gslist_append_int32(RdmaProtectedGSList *list, + int32_t value) +{ + qemu_mutex_lock(&list->lock); + list->list =3D g_slist_prepend(list->list, GINT_TO_POINTER(value)); + qemu_mutex_unlock(&list->lock); +} + +void rdma_protected_gslist_remove_int32(RdmaProtectedGSList *list, + int32_t value) +{ + qemu_mutex_lock(&list->lock); + list->list =3D g_slist_remove(list->list, GINT_TO_POINTER(value)); + qemu_mutex_unlock(&list->lock); +} diff --git a/hw/rdma/rdma_utils.h b/hw/rdma/rdma_utils.h index a8bf1d4fec..2d42249691 100644 --- a/hw/rdma/rdma_utils.h +++ b/hw/rdma/rdma_utils.h @@ -34,12 +34,23 @@ typedef struct RdmaProtectedQList { QList *list; } RdmaProtectedQList; =20 +typedef struct RdmaProtectedGSList { + QemuMutex lock; + GSList *list; +} RdmaProtectedGSList; + void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t plen); void rdma_pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len); void rdma_protected_qlist_init(RdmaProtectedQList *list); void rdma_protected_qlist_destroy(RdmaProtectedQList *list); void rdma_protected_qlist_append_int64(RdmaProtectedQList *list, int64_t v= alue); int64_t rdma_protected_qlist_pop_int64(RdmaProtectedQList *list); +void rdma_protected_gslist_init(RdmaProtectedGSList *list); +void rdma_protected_gslist_destroy(RdmaProtectedGSList *list); +void rdma_protected_gslist_append_int32(RdmaProtectedGSList *list, + int32_t value); +void rdma_protected_gslist_remove_int32(RdmaProtectedGSList *list, + int32_t value); =20 static inline void addrconf_addr_eui48(uint8_t *eui, const char *addr) { --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747191601142.0917970497103; Sat, 16 Mar 2019 07:39:51 -0700 (PDT) Received: from localhost ([127.0.0.1]:42608 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5ATS-0004dL-GR for importer@patchew.org; Sat, 16 Mar 2019 10:39:46 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49627) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOb-0000wd-1V for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOZ-0000eH-78 for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:45 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:39035) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOY-0000ds-RN for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:43 -0400 Received: by mail-wr1-x432.google.com with SMTP id p8so12458219wrq.6 for ; Sat, 16 Mar 2019 07:34:42 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.40 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=JJOqcp8KkDIwlwLX1ZTlt0FLRymCVd0aYZZPKDeydoY=; b=diNdk539xVYeqqW/6KvvKBJQb0JybSZ4uRYLLsZNbwAdKccKgat8WELFpgN3UjmT45 +nR/tbgR2zjkdammUZyMrtBNGTLfN+O2SFpbtZ2//2VsFa+uxH5gGBBR0deUAe6HPus+ qrm+IGkQSet4L39CYQHdtHYUPQ/foWRvrRFPz4fUsq5k7g5MZ4feaGb2PHeYZJJoy8jI TbXgyUQTZt8zPQ8qAdNXmW21UOSwY+OUhTCcOqeGWP/a+llXTl+jSCTya3+ft4/CRpk9 KPy5P9TUtOdG/m48Ea8Muhj3J2s0B6GWAkXI6kxi2csh6cClm/TNKkWesBSTRd7IB+Sw iGZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=JJOqcp8KkDIwlwLX1ZTlt0FLRymCVd0aYZZPKDeydoY=; b=fgYHXViWxLaEUtyQ74pHaOMAog49oOErsgi/fnBJtijrD6mmI/gxr3aBA2NE6E4fIe TX90rOgw5cSgi1+xXClWUiKlFmTy0bmh5qx/WvJMFTQxZ6oFDJCIcDkYGvRtO9Ap1LNG Op4b0qnKpc7pJv0GApNQ8al/bhKU2+TTeImUJ3FJN8X+uqQ14hmi1DT/Rkbm7A96sdNY Q7P5urixApBhoj6YivGM7Xf/RNgBU2mxSZxmEf6f3jDU0jmPwi14MGVRKa7dYJxeaq2Y /FkLUWaXIXXcpn+SonVjkISznuAILwI8hF3QGRAjMgJnIPzO0uTa+IgxjZJMQsGdMEmV EFkw== X-Gm-Message-State: APjAAAW6CNIZ+7VzGRPpei8xc8XNWXlWDZjOyxs2tyCnfVTDl4i7kxBX e5FLkJR14pWXG1cfQ9oGcXD8q+H5 X-Google-Smtp-Source: APXvYqw/YR56Q8/pGeLZq4DHtplzWaZPCiGyuQLdGbn+yfo0zs0Uh5SSE9eJtZ9BPvZ7H4x/a16avg== X-Received: by 2002:adf:eb46:: with SMTP id u6mr5540626wrn.288.1552746881605; Sat, 16 Mar 2019 07:34:41 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:12 +0200 Message-Id: <20190316143421.8194-10-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::432 Subject: [Qemu-devel] [PATCH PULL 09/18] hw/pvrdma: Delete unneeded function argument X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Yuval Shaia The function's argument rdma_dev_res is not needed as it is stored in the backend_dev object at init. Signed-off-by: Yuval Shaia Reviewed-by: Marcel Apfelbaum Message-Id: <1552300155-25216-9-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_backend.c | 13 ++++++------- hw/rdma/rdma_backend.h | 1 - hw/rdma/vmw/pvrdma_qp_ops.c | 3 +-- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c index e124d8d16b..89279e66e7 100644 --- a/hw/rdma/rdma_backend.c +++ b/hw/rdma/rdma_backend.c @@ -594,7 +594,6 @@ static unsigned int save_mad_recv_buffer(RdmaBackendDev= *backend_dev, } =20 void rdma_backend_post_recv(RdmaBackendDev *backend_dev, - RdmaDeviceResources *rdma_dev_res, RdmaBackendQP *qp, uint8_t qp_type, struct ibv_sge *sge, uint32_t num_sge, void *c= tx) { @@ -613,9 +612,9 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_dev, rc =3D save_mad_recv_buffer(backend_dev, sge, num_sge, ctx); if (rc) { complete_work(IBV_WC_GENERAL_ERR, rc, ctx); - rdma_dev_res->stats.mad_rx_bufs_err++; + backend_dev->rdma_dev_res->stats.mad_rx_bufs_err++; } else { - rdma_dev_res->stats.mad_rx_bufs++; + backend_dev->rdma_dev_res->stats.mad_rx_bufs++; } } return; @@ -625,7 +624,7 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_dev, bctx->up_ctx =3D ctx; bctx->backend_qp =3D qp; =20 - rc =3D rdma_rm_alloc_cqe_ctx(rdma_dev_res, &bctx_id, bctx); + rc =3D rdma_rm_alloc_cqe_ctx(backend_dev->rdma_dev_res, &bctx_id, bctx= ); if (unlikely(rc)) { complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_NOMEM, ctx); goto err_free_bctx; @@ -633,7 +632,7 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_dev, =20 rdma_protected_gslist_append_int32(&qp->cqe_ctx_list, bctx_id); =20 - rc =3D build_host_sge_array(rdma_dev_res, new_sge, sge, num_sge, + rc =3D build_host_sge_array(backend_dev->rdma_dev_res, new_sge, sge, n= um_sge, &backend_dev->rdma_dev_res->stats.rx_bufs_le= n); if (rc) { complete_work(IBV_WC_GENERAL_ERR, rc, ctx); @@ -652,13 +651,13 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_d= ev, } =20 atomic_inc(&backend_dev->rdma_dev_res->stats.missing_cqe); - rdma_dev_res->stats.rx_bufs++; + backend_dev->rdma_dev_res->stats.rx_bufs++; =20 return; =20 err_dealloc_cqe_ctx: backend_dev->rdma_dev_res->stats.rx_bufs_err++; - rdma_rm_dealloc_cqe_ctx(rdma_dev_res, bctx_id); + rdma_rm_dealloc_cqe_ctx(backend_dev->rdma_dev_res, bctx_id); =20 err_free_bctx: g_free(bctx); diff --git a/hw/rdma/rdma_backend.h b/hw/rdma/rdma_backend.h index c54eaf2e4a..38056d97c7 100644 --- a/hw/rdma/rdma_backend.h +++ b/hw/rdma/rdma_backend.h @@ -111,7 +111,6 @@ void rdma_backend_post_send(RdmaBackendDev *backend_dev, union ibv_gid *dgid, uint32_t dqpn, uint32_t d= qkey, void *ctx); void rdma_backend_post_recv(RdmaBackendDev *backend_dev, - RdmaDeviceResources *rdma_dev_res, RdmaBackendQP *qp, uint8_t qp_type, struct ibv_sge *sge, uint32_t num_sge, void *c= tx); =20 diff --git a/hw/rdma/vmw/pvrdma_qp_ops.c b/hw/rdma/vmw/pvrdma_qp_ops.c index 16db726dac..508d8fca3c 100644 --- a/hw/rdma/vmw/pvrdma_qp_ops.c +++ b/hw/rdma/vmw/pvrdma_qp_ops.c @@ -231,8 +231,7 @@ void pvrdma_qp_recv(PVRDMADev *dev, uint32_t qp_handle) continue; } =20 - rdma_backend_post_recv(&dev->backend_dev, &dev->rdma_dev_res, - &qp->backend_qp, qp->qp_type, + rdma_backend_post_recv(&dev->backend_dev, &qp->backend_qp, qp->qp_= type, (struct ibv_sge *)&wqe->sge[0], wqe->hdr.nu= m_sge, comp_ctx); =20 --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747376907983.2734313932563; Sat, 16 Mar 2019 07:42:56 -0700 (PDT) Received: from localhost ([127.0.0.1]:42668 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AWN-0007P9-Kr for importer@patchew.org; Sat, 16 Mar 2019 10:42:47 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49635) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOb-0000xZ-Ng for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOa-0000ey-Mp for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:45 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:42244) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOa-0000ec-Bl for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:44 -0400 Received: by mail-wr1-x444.google.com with SMTP id n9so8354625wrr.9 for ; Sat, 16 Mar 2019 07:34:44 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.41 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=rrAkUiLd6iYYVLP5w6MWcWy/D+iS+FEt3gDrC3E+T60=; b=ioe4EpA0hRb+FHNL2fGST8SqGkN+DtHE9OEV6G2rD6dUaOdK8BLR6UH1VviscVbbv0 ZwjidISN+MsiTgLwPQpjaj7Z7RSKi2Hs6wTTs1JpR+/HssQNO91aVrSC76RnMBlCfMat NOxdKZ4Of1bEydxSNPSIhcs/A5Iuvvijpc13F1ZEmvgDjwQBn7k5nfHQp0e3Eb6fZWjO Pgb6MKnEp0DwX7yIOH3vp9wh+fuEhNp556Q5A0jIzW0UpGY36e4nYrDAcJmSnUdzx3j4 ly9Noblmbel84gCsklsFNJmHplHUuE3oqhIdnt2BAStkQ8qNuOd2OYCdFDupWLutbuK2 W3eQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=rrAkUiLd6iYYVLP5w6MWcWy/D+iS+FEt3gDrC3E+T60=; b=RDkAzccyjRIYdY7tnU6lDkEzdQwaSpeCJ5rUQRwKhYlyrHWxM3vrRqWIO8Ug9nZUxs /nDdIOd2dikxHfQMRvmZ5oJn1wNBh5F7oZGBSNCrBrBWeiS1Q9on+bpBS6DY5eIBeRf3 cEvopaRd32UWMvmC6mKfpVYatlNyR5+i8uYbd8E6xcu2NcLzNa7Rdy5QmfJrnk8BgHoO 6B1PBloCzW/+aFIVB1CR15bUAv9i2Y0/7/akXK3OJpNFhBczN+AveD0Lb8XmxSmxF79e WEp3079+/Twkf5TDv7QWMuSly8T2G2D5ii1pBCDXzimy/WPFMvWTFCp+8qCK3Vm52dL2 AwfQ== X-Gm-Message-State: APjAAAXa3FWQTmLDVeHTi4TxeulfCGNVoECpmhNaJQirBwd/MCwtnRf1 eqDE0cyzsq1ntImQ47TCejwVcqMN X-Google-Smtp-Source: APXvYqwWznYSkUwb2xt2c9cux4zNy2lciqKLEOuJUWc9PrZ+ZD6yAAfcMHC7/PPT4lu+S5WdIcW7TQ== X-Received: by 2002:adf:f48d:: with SMTP id l13mr6420168wro.2.1552746883183; Sat, 16 Mar 2019 07:34:43 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:13 +0200 Message-Id: <20190316143421.8194-11-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PATCH PULL 10/18] hw/pvrdma: Delete pvrdma_exit function X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Yuval Shaia This hook is not called and was implemented by mistake. Signed-off-by: Yuval Shaia Reviewed-by: Marcel Apfelbaum Message-Id: <1552300155-25216-10-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib Signed-off-by: Marcel Apfelbaum --- hw/rdma/vmw/pvrdma_main.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c index 04845f46f7..a4afceda14 100644 --- a/hw/rdma/vmw/pvrdma_main.c +++ b/hw/rdma/vmw/pvrdma_main.c @@ -654,11 +654,6 @@ out: } } =20 -static void pvrdma_exit(PCIDevice *pdev) -{ - pvrdma_fini(pdev); -} - static void pvrdma_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -666,7 +661,6 @@ static void pvrdma_class_init(ObjectClass *klass, void = *data) RdmaProviderClass *ir =3D INTERFACE_RDMA_PROVIDER_CLASS(klass); =20 k->realize =3D pvrdma_realize; - k->exit =3D pvrdma_exit; k->vendor_id =3D PCI_VENDOR_ID_VMWARE; k->device_id =3D PCI_DEVICE_ID_VMWARE_PVRDMA; k->revision =3D 0x00; --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 155274754014458.51133804832443; Sat, 16 Mar 2019 07:45:40 -0700 (PDT) Received: from localhost ([127.0.0.1]:42695 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AZ5-0001MO-5Y for importer@patchew.org; Sat, 16 Mar 2019 10:45:35 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49653) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOd-000107-Il for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOc-0000fu-CR for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:47 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:52806) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOc-0000fS-1i for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:46 -0400 Received: by mail-wm1-x343.google.com with SMTP id f65so9073868wma.2 for ; Sat, 16 Mar 2019 07:34:45 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=DSoEdfrjVRdfp/m1/7ECXPl0oyQXgV7ytfPasHBd1X8=; b=He2i40aVP7zaUGy7HkeIS/rYzcnVGZL8MuWaUTYWFLxU/G1Ih9JcKbVBAcVBQKTe06 /dzEyhoXI1oBFvR52nypBaQbtjvnC2UpvlsjdhjSzzwEvNNOXrNQQSk2/x6r5Y6xkbFW WMdx/gfrbqnlkIaZgWpVTHVO4nu4G/ZII4mvB62iSGtRlmOTRlxcq0yK4kiBMU9z7g+B 2eIG37mHNbxwkF/g1/F+epoGFK/axVzFJ49grM9CCcwldE16fL4dP++3FsKCijKXJ3ui nBByP6L+QHPzNxzzKeJcQO8ldVubopDWikybXn7ngwS58xfl5xaOg8EFVusbmPcmBWQJ OinQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=DSoEdfrjVRdfp/m1/7ECXPl0oyQXgV7ytfPasHBd1X8=; b=AkHuo7nOo2ycJ9OKyxep744MZIwmtRKOZnsjHMwhDaywD/wHvubLGSaaA12pRJ9a9i IrGDPqMctfL9VgoseQ/z0f1RGIWgGdINogoi/gy7Yaxps2An4ShD4D67+h1ZtTzsBYVR EyrodVkRYcD8BAN2BZu8JZuwYwtIKgkYqID3bFxPDSi9alhnMHZafAXhWtZl4gix7hBo N5t/wuR7cL2bYeed/EKBBvcexAwbYAYL7tx1IXqVOkoillEqW+M8O48CUvtCYmoeci56 5XhxHEGOcYL0mqA4E1s0pYfE9Q36h/acgaF62D9zzRACs3iJYG7Czr3Z5zBM1D41KLps MECg== X-Gm-Message-State: APjAAAXYkUE9XbeERKwWyOIAf7Zr1Yv6k1wE8G2n26371mxPZbBzFOyn xHv4EL8L6aausw6cA1RK+z6H7oyJ X-Google-Smtp-Source: APXvYqywMpQfnYYmVekz/aOv0by7mY/G6G1l8K1ilcCHX4DAhABWp0/L1gZ68vumX/B9oPuc7OwxZg== X-Received: by 2002:a1c:4d08:: with SMTP id o8mr5651931wmh.18.1552746884885; Sat, 16 Mar 2019 07:34:44 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:14 +0200 Message-Id: <20190316143421.8194-12-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::343 Subject: [Qemu-devel] [PATCH PULL 11/18] hw/pvrdma: Unregister from shutdown notifier when device goes down X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Yuval Shaia This hook was installed to close the device when VM is going down. After the device is closed there is no need to be informed on VM shutdown. Signed-off-by: Yuval Shaia Reviewed-by: Marcel Apfelbaum Message-Id: <1552300155-25216-11-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib Signed-off-by: Marcel Apfelbaum --- hw/rdma/vmw/pvrdma_main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c index a4afceda14..49bfbd6d41 100644 --- a/hw/rdma/vmw/pvrdma_main.c +++ b/hw/rdma/vmw/pvrdma_main.c @@ -311,6 +311,8 @@ static void pvrdma_fini(PCIDevice *pdev) { PVRDMADev *dev =3D PVRDMA_DEV(pdev); =20 + notifier_remove(&dev->shutdown_notifier); + pvrdma_qp_ops_fini(); =20 rdma_backend_stop(&dev->backend_dev); --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747424709599.4212428080461; Sat, 16 Mar 2019 07:43:44 -0700 (PDT) Received: from localhost ([127.0.0.1]:42670 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AXF-00088o-Lg for importer@patchew.org; Sat, 16 Mar 2019 10:43:41 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49666) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOf-00013F-7o for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOe-0000gx-3C for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:49 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:33405) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOd-0000gK-IN for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:47 -0400 Received: by mail-wm1-x343.google.com with SMTP id c13so11147319wmb.0 for ; Sat, 16 Mar 2019 07:34:47 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.44 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=t9S31LdSvQJKMWCVRmvC4LLeC7+gHRz+abbDVHBVRZA=; b=dFxVXeTbPvE/gJfN1qworU+LcRENBYU81Ei9TlNl9VSPHvnDSHzlkiLjRIijGBMs4K 5R/aHWq3PtxlosBHtnK7cBwyefqEU09oFlrdFbLCXVa8oKkpy03IeTUYS6YlkQUuOSFQ DvW0/0jt8bH+akLMQ/1ExvlcN04EUDxpTMHI4fpi+0ej70zl53Z6zjQlruld3rrVIJ8c 0vl0H0hSBbZ1nmEOR5Axfe+CpmLSnNnJkws6KR4+zqiFnEWTX7LloqOolB673ZKHtrO/ NE3YSq1ScypkKLxHTZz7e6Io5t/zuvUMGiNfB51M0JBfBeX/AWMz2v7HfIuYcj1dUmAJ tLKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=t9S31LdSvQJKMWCVRmvC4LLeC7+gHRz+abbDVHBVRZA=; b=IDjh2LQbk9g0ipQJGMyWM9UTJuOMDtfumNrYB+1WCEYfHQcGlX3+8ckh/4HsgaZBcp YYSzjy6JEgUIoph4jsd4zaYPQdmuImgOpm8aMdi5/QJznq/4BtDzjgYOPYM87zPITJlv 1yBfYK1vh3LaimOX1CjbCxsIr/RpoGs5U8uaZhI4MIAfOeS26eyj8wsqUE/5aal9v4jI cZTiGvtNJ4AbB3B9B/chWWW/giA0zAV5HCQQ0jZGfZrZijbYuOKO0LM4ZUNuMBeUyP2P MjhdMNTlohSaTGYyqpNODsydoXj1VkzOA0WzIzZAToHPsFUqtL4Ynn+Dfwd83rQuGvlT CHFQ== X-Gm-Message-State: APjAAAXEcksQOw5M0AYpbOTcPXOQTRfsFndC1Vv/joDr9OwLVVdnP9Cm gqNr5Nu1S8O/mpROJ8i/0YkwetmN X-Google-Smtp-Source: APXvYqwcDUyklSzTKdT/WnoZj1kpqllUQP7GWByOxVgDzyUAEW2dVqveqnQxf/Wr5zihOYC7HBi4fA== X-Received: by 2002:a1c:1cf:: with SMTP id 198mr5223707wmb.52.1552746886401; Sat, 16 Mar 2019 07:34:46 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:15 +0200 Message-Id: <20190316143421.8194-13-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::343 Subject: [Qemu-devel] [PATCH PULL 12/18] hw/pvrdma: Provide correct value to object_get_typename X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Yuval Shaia Use base object of PCIDevice in call to object_get_typename(). Signed-off-by: Yuval Shaia Message-Id: <1552300155-25216-12-git-send-email-yuval.shaia@oracle.com> Reviewed-by: Kamal Heib Reviewed-by: Marcel Apfelbaum Signed-off-by: Marcel Apfelbaum --- hw/rdma/vmw/pvrdma_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c index 49bfbd6d41..0b46561bad 100644 --- a/hw/rdma/vmw/pvrdma_main.c +++ b/hw/rdma/vmw/pvrdma_main.c @@ -593,7 +593,7 @@ static void pvrdma_realize(PCIDevice *pdev, Error **err= p) =20 func0 =3D pci_get_function_0(pdev); /* Break if not vmxnet3 device in slot 0 */ - if (strcmp(object_get_typename(&func0->qdev.parent_obj), TYPE_VMXNET3)= ) { + if (strcmp(object_get_typename(OBJECT(func0)), TYPE_VMXNET3)) { error_setg(errp, "Device on %x.0 must be %s", PCI_SLOT(pdev->devfn= ), TYPE_VMXNET3); return; --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747360111442.0092758589069; Sat, 16 Mar 2019 07:42:40 -0700 (PDT) Received: from localhost ([127.0.0.1]:42664 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AW7-0007At-Cb for importer@patchew.org; Sat, 16 Mar 2019 10:42:31 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49744) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOu-0001FB-MI for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOs-0000qm-Qo for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:04 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:46885) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOq-0000ng-V1 for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:01 -0400 Received: by mail-wr1-x434.google.com with SMTP id 33so12460874wrb.13 for ; Sat, 16 Mar 2019 07:35:00 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1Af2nSp//uGiI+ybYID+ypS1DKdRqtDtAbway7umfko=; b=m3kHFTyGMP4/Eo4gacUznpUKCDnm4p4A42MikenaAcU9MTw+Y/Y98k//6QS9znbVzc ye/dwacAfVDXUjz4Og0sg+xhEYpMr336ZdzRayonvj2nJOi0AmlJSU2IS6602DO6zNfr XiiJ7l/uif2CFCK9AMwbeURRhunV1j/P16XBqZ5FuV3pTSUIWjC3+xND434CZeobKkzc z/QNfLPONNLgrk/agcS8oEsa3x9jSFjeec6Kal0XcNNTp9EERO1H/AMbSn/4zK+1f9gv iHMGvqJcF8FqLl5t9HfnCxWV0tiHQ47/I5OwEVCtd/Ozey7fuy9cRKgeVLwvt8IohMbh szMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1Af2nSp//uGiI+ybYID+ypS1DKdRqtDtAbway7umfko=; b=R+O3znnH8JQ/rXBa/4e9UAMvgqTb9maqRq7l8Vfu01qFWiUQSZhH1O/qzt6b50vvRN MophUYK7IFD/k54hJgDAbrHFETAFdvJBO9o6jGiIMtjADOb2JJFPIN3SPXReLFFs9Kil O6Q9SDTHn5yUH3OZv6evvC8tdWQKeq+gHALrOqA9UzB+Ix/a8QnlJ0B0Oj1Hp1ZVcUAA sL5nJcOBtKGyK4nCTCYP3DeOOFd/APXjYtFCj8Ou2Z+ugP9yScd7aNUgsPUBIKn2iZmL dDb1XBQ09ngAGXrSGAtu99NxJIbEPh51KKZFuiDlvN5Fi99QCaIRGjO+mYgA1j4KM+3Z pkzw== X-Gm-Message-State: APjAAAXMPMGTWOyTVwLzLaao7tiX312MuW0uf5XxpLi1aeo7FIixDGiD 2z2zXpX7CL6C1KatRzbx7DTv5ED5 X-Google-Smtp-Source: APXvYqxA6e/i2WiWt5aBKyBZFkGp/NFBkcP7OoEMPEvg5lExZlkqhJKtQYxNYVwM9Uchl2vMfeY7lw== X-Received: by 2002:adf:fb82:: with SMTP id a2mr5818023wrr.214.1552746887904; Sat, 16 Mar 2019 07:34:47 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:16 +0200 Message-Id: <20190316143421.8194-14-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::434 Subject: [Qemu-devel] [PATCH PULL 13/18] hw/rdma: another clang compilation fix X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Configuring QEMU with: configure --target-list=3D"x86_64-softmmu" --cc=3Dclang --enable-pvrdma Results in: qemu/hw/rdma/rdma_rm_defs.h:108:3: error: redefinition of typedef 'RdmaD= eviceResources' is a C11 feature [-Werror,-Wtypedef-redefinition] } RdmaDeviceResources; ^ qemu/hw/rdma/rdma_backend_defs.h:24:36: note: previous definition is here typedef struct RdmaDeviceResources RdmaDeviceResources; Fix by removing one of the 'typedef' definitions. Signed-off-by: Marcel Apfelbaum Message-Id: <20190214154053.15050-1-marcel.apfelbaum@gmail.com> Reviewed-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Kamal Heib Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_rm_defs.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/rdma/rdma_rm_defs.h b/hw/rdma/rdma_rm_defs.h index 4b8d704cfe..c200d311de 100644 --- a/hw/rdma/rdma_rm_defs.h +++ b/hw/rdma/rdma_rm_defs.h @@ -120,7 +120,7 @@ typedef struct RdmaRmStats { uint32_t missing_cqe; } RdmaRmStats; =20 -typedef struct RdmaDeviceResources { +struct RdmaDeviceResources { RdmaRmPort port; RdmaRmResTbl pd_tbl; RdmaRmResTbl mr_tbl; @@ -131,6 +131,6 @@ typedef struct RdmaDeviceResources { GHashTable *qp_hash; /* Keeps mapping between real and emulated */ QemuMutex lock; RdmaRmStats stats; -} RdmaDeviceResources; +}; =20 #endif --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747689626390.4083531601252; Sat, 16 Mar 2019 07:48:09 -0700 (PDT) Received: from localhost ([127.0.0.1]:42741 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AbN-0003Dr-6g for importer@patchew.org; Sat, 16 Mar 2019 10:47:57 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49688) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOj-00016n-Ci for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOh-0000jA-U9 for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:53 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:33939) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOh-0000i5-Hn for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:51 -0400 Received: by mail-wr1-x443.google.com with SMTP id k1so11965015wre.1 for ; Sat, 16 Mar 2019 07:34:50 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=KgE7md9keMb+MLPJNHpI5pkL2zYxwONOSikgwIhjhOE=; b=vM7ntlKfLM0bGFFDjZMhxpWiwi3ODuSVZ9OPlt5pJAOIfpsyjp05LWvHLqWZm9G+rJ va0reF6l6lyEmOV+ZxdX+wgc5a0ShS1Q9Khf8CGdJuyphQ9aWOjHDhM5rXEI+2/IHFmE MtiDhInuAzmrbQjsBt7I1T4pPCbzhkTdb0Xk6DJ2t8sP92b7O0Itj+EYNnzDuB5IYbyU BTvGh6SZJjym7ELQkkTFRoVTxVL7M/NLckSX11KAuTzBfv+hCuckczzhWT7/5UhOBJcG MKO3/7eJToZUM9HqHCyfSpyCRJsGsDOOCHCuCTPf9e1ZWvrSAikHqyJ6Zd6AlArVeYzr 4xig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=KgE7md9keMb+MLPJNHpI5pkL2zYxwONOSikgwIhjhOE=; b=CpW6eAJx4vk2/HFNxCCAf4hQ4UvibCDPv/fHRM6xIPU9lt1roDgFjjIk66qqgXF6Tf sVfEEK/rxcw/o9QD4h/tQh7ggubwXHTm7bxd7kcDi+VAknsANqM70LAZ3IYt17y+pchV Pe9PKrSHMnjQPv8jJ1xwmdv2tR/PGc5ujv+1xLe/1J79JpROnzef+WaQOGo6hH7uGGUi VrBrOjMFYeDGmMog3qUwKZNIynRcfeedSqxa8yI8ZsgWihZteH62qoN6KFCuTb35FtGB UkGs3iAUtsqajhbn/WGhurvLOVh5R/0FDB2MSZcGhYt/TEsysXpprxDPGlidtaxx0C4J gU6Q== X-Gm-Message-State: APjAAAUEo2IYZ6Uh7TMfZexsxcVvEbY0RwY7i1gz1gsBK57dmUMmRcRQ QVATRj0+rA1Bq/pR1ZeQ1H2Tg9nB X-Google-Smtp-Source: APXvYqxmz2HJGPjo1H2HEWh4xbirNoOWgXwdHOwZcDOKs6ooZ13HmCfmPhVkUi7VRkKMVaJFSH9c4g== X-Received: by 2002:a5d:6b07:: with SMTP id v7mr5880330wrw.314.1552746889726; Sat, 16 Mar 2019 07:34:49 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:17 +0200 Message-Id: <20190316143421.8194-15-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::443 Subject: [Qemu-devel] [PATCH PULL 14/18] hw/rdma: Fix broken paths to docs/devel/tracing.txt X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Kamal Heib The tracing.txt file is under "docs/devel" and not "docs". Reviewed-by: Yuval Shaia Signed-off-by: Kamal Heib Message-Id: <20190314153031.7197-2-kamalheib1@gmail.com> Signed-off-by: Marcel Apfelbaum --- hw/rdma/trace-events | 2 +- hw/rdma/vmw/trace-events | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/rdma/trace-events b/hw/rdma/trace-events index 0fad56c882..12868d8a87 100644 --- a/hw/rdma/trace-events +++ b/hw/rdma/trace-events @@ -1,4 +1,4 @@ -# See docs/tracing.txt for syntax documentation. +# See docs/devel/tracing.txt for syntax documentation. =20 # hw/rdma/rdma_backend.c rdma_check_dev_attr(const char *name, int max_bk, int max_fe) "%s: be=3D%d= , fe=3D%d" diff --git a/hw/rdma/vmw/trace-events b/hw/rdma/vmw/trace-events index 0122266ad7..e846d54359 100644 --- a/hw/rdma/vmw/trace-events +++ b/hw/rdma/vmw/trace-events @@ -1,4 +1,4 @@ -# See docs/tracing.txt for syntax documentation. +# See docs/devel/tracing.txt for syntax documentation. =20 # hw/rdma/vmw/pvrdma_main.c pvrdma_regs_read(uint64_t addr, uint64_t val) "pvrdma.regs[0x%"PRIx64"]=3D= 0x%"PRIx64 --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 155274752758815.80502057282024; Sat, 16 Mar 2019 07:45:27 -0700 (PDT) Received: from localhost ([127.0.0.1]:42693 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AYu-0001Ff-CE for importer@patchew.org; Sat, 16 Mar 2019 10:45:24 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49722) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOq-0001Ak-VY for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOp-0000nE-Mz for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:00 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:50785) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOp-0000m0-2p for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:59 -0400 Received: by mail-wm1-x342.google.com with SMTP id z11so537442wmi.0 for ; Sat, 16 Mar 2019 07:34:58 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.49 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qum1ZTndbaU5+Nl9/MfhCqWO+mmVJ4JtcIhui7km96s=; b=Lh9siYaXj7AHzO6dLbttfijcy49vndKMz4+e7WQp/huLDMLxvLaheeR5FgaVkbsxSe J+Y5AaUqRvuqwOsOwJXqJsjylBM49IVMfc7YEPc8miHmzOB9RgXo4oTp1rOO1A6gmLV3 to9ekb7J20lK7NfY99x5h83KTnt4rzvT81etuMaLuQbrZvRWMQH9bpfzFr0kIubLzndb h6UJVryVVzaIRv0be4NqVELipqT6nV+1Z6Z1Jx5MrV+1yAZDLoxzY5JYjesCMuJ4eosF gaK8VAXLggrQ/Ru9f2K+gAPRb56jKK2EsLnUbuhFLPt+c1ZG/xUfgfcOq3kVA/KheEw0 ta4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qum1ZTndbaU5+Nl9/MfhCqWO+mmVJ4JtcIhui7km96s=; b=cHFF//zMiQpw+sx2q/rtd27R2HkU9HCR1L07k4H/SQ6rQpsslHTuFAEwe0Qf8RD2/F zZG5TrO7C3RNE2xEpfCuMUDVTXA58NPuIaZhlYEWftHTXfHOnbcznSkMzH8xLhuNKdii KoRPI1GvDy4aIEgTrqzcsHt3jzpjWeT6nmIaQc8VCiuVU6JzZT99PKu/9qDKwdJHMMSm PAzEFA2K9YZBfW1wBNWAe99zQlrpH0WL48D6XCZcgWCb4/y3VZa8XRp9btQUybMAAC0M /V2AipZ77N7txSU930q5WFxjyKnTSVc463uGUZQi0oh9A6zXbJVmpIUZsh9XK3zjufhG f52g== X-Gm-Message-State: APjAAAXDAThl2DyLoHz+uIhpA2/Ha7lw6vv7Z2gYizwucNQqzLRlCVfx lNibLuaCazLKbZC6RY6Jie9xGCn2 X-Google-Smtp-Source: APXvYqzumEwGHjpmEq7643B/EBarDLPC479d85grFvnGw5B7YRsI/yuLxqTyrQvyTRyi+nZfSuTY7w== X-Received: by 2002:a7b:c08f:: with SMTP id r15mr5496457wmh.36.1552746891289; Sat, 16 Mar 2019 07:34:51 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:18 +0200 Message-Id: <20190316143421.8194-16-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::342 Subject: [Qemu-devel] [PATCH PULL 15/18] hw/rdma: Remove unused parameter from rdma_poll_cq() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Kamal Heib The 'rdma_dev_res' parameter is not used in rdma_poll_cq(), so remove it. Reviewed-by: Yuval Shaia Reviewed-by: Marcel Apfelbaum Signed-off-by: Kamal Heib Message-Id: <20190314153031.7197-3-kamalheib1@gmail.com> Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_backend.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c index 89279e66e7..90983d2846 100644 --- a/hw/rdma/rdma_backend.c +++ b/hw/rdma/rdma_backend.c @@ -94,8 +94,7 @@ static void clean_recv_mads(RdmaBackendDev *backend_dev) } while (cqe_ctx_id !=3D -ENOENT); } =20 -static int rdma_poll_cq(RdmaBackendDev *backend_dev, - RdmaDeviceResources *rdma_dev_res, struct ibv_cq *= ibcq) +static int rdma_poll_cq(RdmaDeviceResources *rdma_dev_res, struct ibv_cq *= ibcq) { int i, ne, total_ne =3D 0; BackendCtx *bctx; @@ -181,7 +180,7 @@ static void *comp_handler_thread(void *arg) } =20 backend_dev->rdma_dev_res->stats.poll_cq_from_bk++; - rdma_poll_cq(backend_dev, backend_dev->rdma_dev_res, ev_cq); + rdma_poll_cq(backend_dev->rdma_dev_res, ev_cq); =20 ibv_ack_cq_events(ev_cq, 1); } @@ -315,7 +314,7 @@ void rdma_backend_poll_cq(RdmaDeviceResources *rdma_dev= _res, RdmaBackendCQ *cq) int polled; =20 rdma_dev_res->stats.poll_cq_from_guest++; - polled =3D rdma_poll_cq(cq->backend_dev, rdma_dev_res, cq->ibcq); + polled =3D rdma_poll_cq(rdma_dev_res, cq->ibcq); if (!polled) { rdma_dev_res->stats.poll_cq_from_guest_empty++; } --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747362275798.0899226379507; Sat, 16 Mar 2019 07:42:42 -0700 (PDT) Received: from localhost ([127.0.0.1]:42666 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AWF-0007H6-5m for importer@patchew.org; Sat, 16 Mar 2019 10:42:39 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49705) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOp-00019c-MF for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOn-0000lm-6K for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:59 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:37471) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOl-0000k5-9z for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:55 -0400 Received: by mail-wm1-x341.google.com with SMTP id v14so67814wmf.2 for ; Sat, 16 Mar 2019 07:34:54 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=oiO5oNvvyneKbtGtvgIPhk2yPowBzz1y7czxQX6rDtY=; b=Qa2yXGSZdh0vrrTobGdhZ8rl2ZaH/iEJAxh6iFxYqEXUJdoAwsiS8LKis/I7vyV7ht aAoWKmTKQaEEJaA1X7v1D+0hdWyRPbvxv8y9/Zf4YHvKBvEj4dhTV+IxJI+WLJRvKkQ1 rvQeIq7pdrPLy9PgJPr7VAKHbJATmUzbIS36+7vYxpI8nxZcvUkiRE9AjOCeEGpxFObm 0kWT0JywSvwjY52RtCcj+njE0K5zstOxg1HbI2OGm3Ao3ZNVDH+svyrm5opNtUdZT1DB C3Xmfy6yzqpkiqFGmRYIpszQ3/xwXp8hOGkkuO9ZEZYbh66Xst2anBdXKfd7Z/Byg96E mCEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=oiO5oNvvyneKbtGtvgIPhk2yPowBzz1y7czxQX6rDtY=; b=s2JGBcBGGHSn1TuU+hJJv1RsrhfENwLPQRP02deqvhT4ZQ+iYYb1+TldaxbGtQ9dtl kf9u/+bkxtz3wyA69iM0+QXKBwpAoeap7MozKPVL6ro5zeYOB+1sGLVbiwmhD2Pcs/l6 yL8lD+7Q4kG4v3kTqZLXqQVHPIqILslOwIlLqmzo8FiFRmPwgLeuTq1Kgigjr9FXTXnD E/KLXqoKtjXgXTOrP8IWzp6ChjqkktoohYmFUIL6L0Rl0WrMc6VPoOzKI4uz8MsIKYiM p7/lhnPteKp6VlAWY4a8XgR5VaUQ4sXjNdGieTmEtyuWBVKGX4XP4tgX8maOSqVq6E4M KTAQ== X-Gm-Message-State: APjAAAX8V9Au2Cd5frXSGSDG8pJ6tjs5fzTYn81g+nqXQg4frei51EPA p4sz8bsXlHOhhI3oF0bl9qWY//Qy X-Google-Smtp-Source: APXvYqxB3jcYyI0iGwKM1IxJT1mUuM8rhv+/5orT92CwTi6xf+oDsfM64zlpjvfnBE9NQGreb/GkTQ== X-Received: by 2002:a1c:4b18:: with SMTP id y24mr5443758wma.111.1552746892853; Sat, 16 Mar 2019 07:34:52 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:19 +0200 Message-Id: <20190316143421.8194-17-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::341 Subject: [Qemu-devel] [PATCH PULL 16/18] hw/rdma: Use {} instead of {0} X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Kamal Heib Initialize structs with {} instead of {0} to make sure that all code is using the same convention. Reviewed-by: Marcel Apfelbaum Signed-off-by: Kamal Heib Reviewed-by: Yuval Shaia Message-Id: <20190314153031.7197-4-kamalheib1@gmail.com> Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_backend.c | 18 +++++++++--------- hw/rdma/vmw/pvrdma_cmd.c | 2 +- hw/rdma/vmw/pvrdma_qp_ops.c | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c index 90983d2846..d1660b6474 100644 --- a/hw/rdma/rdma_backend.c +++ b/hw/rdma/rdma_backend.c @@ -57,7 +57,7 @@ static void dummy_comp_handler(void *ctx, struct ibv_wc *= wc) static inline void complete_work(enum ibv_wc_status status, uint32_t vendo= r_err, void *ctx) { - struct ibv_wc wc =3D {0}; + struct ibv_wc wc =3D {}; =20 wc.status =3D status; wc.vendor_err =3D vendor_err; @@ -273,7 +273,7 @@ static void stop_backend_thread(RdmaBackendThread *thre= ad) =20 static void start_comp_thread(RdmaBackendDev *backend_dev) { - char thread_name[THR_NAME_LEN] =3D {0}; + char thread_name[THR_NAME_LEN] =3D {}; =20 stop_backend_thread(&backend_dev->comp_thread); =20 @@ -483,7 +483,7 @@ void rdma_backend_post_send(RdmaBackendDev *backend_dev, struct ibv_sge new_sge[MAX_SGE]; uint32_t bctx_id; int rc; - struct ibv_send_wr wr =3D {0}, *bad_wr; + struct ibv_send_wr wr =3D {}, *bad_wr; =20 if (!qp->ibqp) { /* This field is not initialized for QP0 and QP1 */ if (qp_type =3D=3D IBV_QPT_SMI) { @@ -600,7 +600,7 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_dev, struct ibv_sge new_sge[MAX_SGE]; uint32_t bctx_id; int rc; - struct ibv_recv_wr wr =3D {0}, *bad_wr; + struct ibv_recv_wr wr =3D {}, *bad_wr; =20 if (!qp->ibqp) { /* This field does not get initialized for QP0 and QP= 1 */ if (qp_type =3D=3D IBV_QPT_SMI) { @@ -737,7 +737,7 @@ int rdma_backend_create_qp(RdmaBackendQP *qp, uint8_t q= p_type, uint32_t max_recv_wr, uint32_t max_send_sge, uint32_t max_recv_sge) { - struct ibv_qp_init_attr attr =3D {0}; + struct ibv_qp_init_attr attr =3D {}; =20 qp->ibqp =3D 0; =20 @@ -782,7 +782,7 @@ int rdma_backend_create_qp(RdmaBackendQP *qp, uint8_t q= p_type, int rdma_backend_qp_state_init(RdmaBackendDev *backend_dev, RdmaBackendQP = *qp, uint8_t qp_type, uint32_t qkey) { - struct ibv_qp_attr attr =3D {0}; + struct ibv_qp_attr attr =3D {}; int rc, attr_mask; =20 attr_mask =3D IBV_QP_STATE | IBV_QP_PKEY_INDEX | IBV_QP_PORT; @@ -821,7 +821,7 @@ int rdma_backend_qp_state_rtr(RdmaBackendDev *backend_d= ev, RdmaBackendQP *qp, union ibv_gid *dgid, uint32_t dqpn, uint32_t rq_psn, uint32_t qkey, bool use_qke= y) { - struct ibv_qp_attr attr =3D {0}; + struct ibv_qp_attr attr =3D {}; union ibv_gid ibv_gid =3D { .global.interface_id =3D dgid->global.interface_id, .global.subnet_prefix =3D dgid->global.subnet_prefix @@ -880,7 +880,7 @@ int rdma_backend_qp_state_rtr(RdmaBackendDev *backend_d= ev, RdmaBackendQP *qp, int rdma_backend_qp_state_rts(RdmaBackendQP *qp, uint8_t qp_type, uint32_t sq_psn, uint32_t qkey, bool use_qke= y) { - struct ibv_qp_attr attr =3D {0}; + struct ibv_qp_attr attr =3D {}; int rc, attr_mask; =20 attr.qp_state =3D IBV_QPS_RTS; @@ -1012,7 +1012,7 @@ static void process_incoming_mad_req(RdmaBackendDev *= backend_dev, complete_work(IBV_WC_GENERAL_ERR, VENDOR_ERR_INV_MAD_BUFF, bctx->up_ctx); } else { - struct ibv_wc wc =3D {0}; + struct ibv_wc wc =3D {}; memset(mad, 0, bctx->sge.length); build_mad_hdr((struct ibv_grh *)mad, (union ibv_gid *)&msg->umad.hdr.addr.gid, &msg->hdr.= sgid, diff --git a/hw/rdma/vmw/pvrdma_cmd.c b/hw/rdma/vmw/pvrdma_cmd.c index 6d56746357..b682e919d5 100644 --- a/hw/rdma/vmw/pvrdma_cmd.c +++ b/hw/rdma/vmw/pvrdma_cmd.c @@ -123,7 +123,7 @@ static int query_port(PVRDMADev *dev, union pvrdma_cmd_= req *req, { struct pvrdma_cmd_query_port *cmd =3D &req->query_port; struct pvrdma_cmd_query_port_resp *resp =3D &rsp->query_port_resp; - struct pvrdma_port_attr attrs =3D {0}; + struct pvrdma_port_attr attrs =3D {}; =20 if (cmd->port_num > MAX_PORTS) { return -EINVAL; diff --git a/hw/rdma/vmw/pvrdma_qp_ops.c b/hw/rdma/vmw/pvrdma_qp_ops.c index 508d8fca3c..5b9786efbe 100644 --- a/hw/rdma/vmw/pvrdma_qp_ops.c +++ b/hw/rdma/vmw/pvrdma_qp_ops.c @@ -114,7 +114,7 @@ static void pvrdma_qp_ops_comp_handler(void *ctx, struc= t ibv_wc *wc) =20 static void complete_with_error(uint32_t vendor_err, void *ctx) { - struct ibv_wc wc =3D {0}; + struct ibv_wc wc =3D {}; =20 wc.status =3D IBV_WC_GENERAL_ERR; wc.vendor_err =3D vendor_err; --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 155274778323583.46791208859224; Sat, 16 Mar 2019 07:49:43 -0700 (PDT) Received: from localhost ([127.0.0.1]:42751 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5Ad2-0004cX-Ar for importer@patchew.org; Sat, 16 Mar 2019 10:49:40 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49720) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOq-0001Ag-U3 for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOp-0000mi-2N for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:00 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:43747) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOn-0000kn-5S for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:57 -0400 Received: by mail-wr1-x441.google.com with SMTP id d17so12434465wre.10 for ; Sat, 16 Mar 2019 07:34:55 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.52 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=T4GbmStQjw3b/srtuKEb66FbSGwG9b8IChWP/lxtFmg=; b=Otp1lnCSNlNZR2zdA7RQ+1fu9gsaRQGtR0iDG3GmClxNMjfqFgtGkx8XxVF2wIwmuQ UOzfshp3OzLq22w/dC3Fq7mJrCQ0yl822iynUxFmk3I4sqfqDTO2sIICSQFXMdE7BO4L PWFrUNElnrerfFulujPZhafis39Uq6iFlCNHQybKFPGTpQM+dJ1jey+OLgZiwYw8qFy6 JT1Ii8W4yo1yz/+KiYsylth65et2EPkDwUlSuFki1k1ehDY2Ky2RQZFNO/gtqp0LCx9X ZYrQ6tdRRL8uJnOSu0Eifp1RNVK7Yy7JeV+J8Iy1XPNwr+wZLuMUeEjsS61MdYx6tM76 S4aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=T4GbmStQjw3b/srtuKEb66FbSGwG9b8IChWP/lxtFmg=; b=V5ZMaczXZ9y4d4kAOZl5QU35Tw0saab96ifmYqWgcAU1hsO7Mg7Y7v+SuPro8daSGq 64BhIRJ1Gf/D5zTfSz2dT3om1QA7fvSwB5oOo1VXZgip6hjN/28mFyDlHsxrZ+X6LBIY mHxod/YzGnI31E8TBo9gcRUUr4p+AMEdyPD3cRS9tYAANUZ+CONoFE+7NPjdo9KSXD8R taBkrXapMQyltnZCnc5FdLIxfESlAvEMnqE0CJIj7kvrSsg9v172X2bQvF5EvPMlWqGr vQ8Z+e4YoNSsypQzOcGBlnCyrAHdQbmv2XNHsWFZGeoI9V56W7pVNmfEqLu2JZ9JQqYa XS0A== X-Gm-Message-State: APjAAAX0Div6o+fKDP/7UEeZq3hAhS77UhjDUPO4TtMlvcFBIQ8OhuxF 8GqXYPBliLNLjEpLTHlt44XMgSzn X-Google-Smtp-Source: APXvYqzWi89JyScUXIxfEVdze1KmJM6xD5OSV7bmE7+mbl39ez3rq3KePLtTomnSqMRvHBWi/1kjnw== X-Received: by 2002:adf:e58f:: with SMTP id l15mr5864198wrm.309.1552746894424; Sat, 16 Mar 2019 07:34:54 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:20 +0200 Message-Id: <20190316143421.8194-18-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::441 Subject: [Qemu-devel] [PATCH PULL 17/18] hw/pvrdma: Fix zero-initialization of resp in {query/modify}_qp X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Kamal Heib Make sure to zero-initialize only the pvrdma_cmd_query_qp_resp and not the whole pvrdma_cmd_resp for query_qp, in modify_qp the resp isn't used so remove it. Reviewed-by: Yuval Shaia Signed-off-by: Kamal Heib Message-Id: <20190314153031.7197-5-kamalheib1@gmail.com> Signed-off-by: Marcel Apfelbaum --- hw/rdma/vmw/pvrdma_cmd.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hw/rdma/vmw/pvrdma_cmd.c b/hw/rdma/vmw/pvrdma_cmd.c index b682e919d5..be8c2b61c9 100644 --- a/hw/rdma/vmw/pvrdma_cmd.c +++ b/hw/rdma/vmw/pvrdma_cmd.c @@ -488,8 +488,6 @@ static int modify_qp(PVRDMADev *dev, union pvrdma_cmd_r= eq *req, struct pvrdma_cmd_modify_qp *cmd =3D &req->modify_qp; int rc; =20 - memset(rsp, 0, sizeof(*rsp)); - /* No need to verify sgid_index since it is u8 */ =20 rc =3D rdma_rm_modify_qp(&dev->rdma_dev_res, &dev->backend_dev, @@ -512,7 +510,7 @@ static int query_qp(PVRDMADev *dev, union pvrdma_cmd_re= q *req, struct ibv_qp_init_attr init_attr; int rc; =20 - memset(rsp, 0, sizeof(*rsp)); + memset(resp, 0, sizeof(*resp)); =20 rc =3D rdma_rm_query_qp(&dev->rdma_dev_res, &dev->backend_dev, cmd->qp= _handle, (struct ibv_qp_attr *)&resp->attrs, cmd->attr_ma= sk, --=20 2.17.1 From nobody Tue May 7 22:47:45 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552747594944695.026005562907; Sat, 16 Mar 2019 07:46:34 -0700 (PDT) Received: from localhost ([127.0.0.1]:42727 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AZw-0002AH-Vn for importer@patchew.org; Sat, 16 Mar 2019 10:46:29 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49723) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5AOq-0001An-WC for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5AOp-0000n7-LV for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:35:00 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]:40517) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5AOn-0000le-Ex for qemu-devel@nongnu.org; Sat, 16 Mar 2019 10:34:59 -0400 Received: by mail-wm1-x32d.google.com with SMTP id u10so6075304wmj.5 for ; Sat, 16 Mar 2019 07:34:57 -0700 (PDT) Received: from localhost.localdomain ([176.228.155.165]) by smtp.gmail.com with ESMTPSA id l8sm7518895wrv.45.2019.03.16.07.34.54 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 16 Mar 2019 07:34:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZzBW0WtMUkYOhea/5pAcRQXq89RHRcqinryjR4yMX3w=; b=USCIvSdg96va3RsJ9jZ6xTbMX6ssS0r+WFff2hj+cP3TZbEG3v1Rtm5hZGhl4mUe+V 8moup96zUNeV9KfxFRT26ouohoIsIc2vep4owizatZctGSi45DRP64O/COm8L3JoJiW9 hyJJiB8hHkdl1TW83oqiXVvbB1/mvDvYy9cptINdDIhulOI3/vnOuGA3IeI3I/6ACWUi 7hdKMFyFOwRIZewAUi7FIRbZbBm+KwwlcRhDSw1XiGQNAElKCODzPY8PZACz8VqFUAlD JUcZm8khR+CMl/g/SnI5wOsllIKnwcJL5T+BZeK1ExM+Xm28ASpaHLHLougO8OiZKsz3 8R6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZzBW0WtMUkYOhea/5pAcRQXq89RHRcqinryjR4yMX3w=; b=O0ad7DDZM1qz5YeGcigGnRp8NVzpgN2OwDGDc3GJBM4EDNw7N1ZbX4Yph3Kgl3/nok keCebC+cFEU5wszzmKKrdQCCwkTf+40PvAov8qkEpWOxzW6xxIuZm5ru8JyJqtAb5d7F I2glJ/WJS2PlxrpWqe0Fe2xBddrv8THc93wYkxv0HOYq2W2XFSeDhuuFal0Ead39s/nh 3dwO0SiXroHh+HHJW9ZIe1vaZIX1hnanl712ibJjpKGcQadaiG3Sk1L+rUEdIiPIG90W 8QHvX+0uLkfgLob/exSRJ114YzxOaxffnz76ZfCCHyf472u4s5LfNHom09aUnm5mfUon vzxw== X-Gm-Message-State: APjAAAURdzBTDn1tbGNKpFJTveuRUY8OQ0RTxJZaKeoRYA/DA0MPnq0E eIY2UyvgarkY2co55AuKbYCMIoPn X-Google-Smtp-Source: APXvYqxkX8SX3nkQM9RJLAbSUEORG4uwQDctQq37Gsox8Ie9aMq2bqMDhsyfS+NqvZQaFlG/z2ehkw== X-Received: by 2002:a1c:e71a:: with SMTP id e26mr4208413wmh.111.1552746896002; Sat, 16 Mar 2019 07:34:56 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Sat, 16 Mar 2019 16:34:21 +0200 Message-Id: <20190316143421.8194-19-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> References: <20190316143421.8194-1-marcel.apfelbaum@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::32d Subject: [Qemu-devel] [PATCH PULL 18/18] hw/rdma: Fix the error prints in create_qp_rings() X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: philmd@redhat.com, kamalheib1@gmail.com, yuval.shaia@oracle.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Kamal Heib The prints should indicate that we are talking about QP and not CQ. Fixes: 98d176f8e592 ("hw/rdma: PVRDMA commands and data-path ops") Reviewed-by: Yuval Shaia Signed-off-by: Kamal Heib Message-Id: <20190227085546.23690-1-kamalheib1@gmail.com> Signed-off-by: Marcel Apfelbaum --- hw/rdma/vmw/pvrdma_cmd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/rdma/vmw/pvrdma_cmd.c b/hw/rdma/vmw/pvrdma_cmd.c index be8c2b61c9..4afcd2037d 100644 --- a/hw/rdma/vmw/pvrdma_cmd.c +++ b/hw/rdma/vmw/pvrdma_cmd.c @@ -374,13 +374,13 @@ static int create_qp_rings(PCIDevice *pci_dev, uint64= _t pdir_dma, =20 dir =3D rdma_pci_dma_map(pci_dev, pdir_dma, TARGET_PAGE_SIZE); if (!dir) { - rdma_error_report("Failed to map to CQ page directory"); + rdma_error_report("Failed to map to QP page directory"); goto out; } =20 tbl =3D rdma_pci_dma_map(pci_dev, dir[0], TARGET_PAGE_SIZE); if (!tbl) { - rdma_error_report("Failed to map to CQ page table"); + rdma_error_report("Failed to map to QP page table"); goto out; } =20 @@ -393,7 +393,7 @@ static int create_qp_rings(PCIDevice *pci_dev, uint64_t= pdir_dma, sr->ring_state =3D (struct pvrdma_ring *) rdma_pci_dma_map(pci_dev, tbl[0], TARGET_PAGE_SIZE); if (!sr->ring_state) { - rdma_error_report("Failed to map to CQ ring state"); + rdma_error_report("Failed to map to QP ring state"); goto out_free_sr_mem; } =20 --=20 2.17.1