From nobody Mon May 6 18:23:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.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 (zohomail.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 ARC-Seal: i=1; a=rsa-sha256; t=1584818102; cv=none; d=zohomail.com; s=zohoarc; b=Wx7R6hkCRXguFy5ste4noH5XCHPuFVLUHenMJlFtHhEv8xo+hMQ5R4yOzt/rRhrUJMThfF0otrz7zmCQXJw/wRxAe/EHWmRKpkpdj57b3Jpdv0mxk26KwmdSA0jYh7T6PU8xR65P2YdsNGj44v8Hpyo4o6uGw2mZGMLrb4m59OI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584818102; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=m5gz0JlOnw+UpHFzqPtGTuq9wcw2D7Vvrwm78V+zTTA=; b=nvUzuOnzf7WDVubFbTpXFMFINGv0iLcfes9mhd6Lee39xMev1+71a4pdHpJ5NkCY5ocyLc78K4zbX7fylzrqwDQUUU1CHPkpNGGkS9LvaTI3HlkScQPellt8reUkKXeUAqOtGpYptj0Ycr/kwbaTQkdP+OidIBIJnafUqqLWPR4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.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 header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584818102591514.5971435363214; Sat, 21 Mar 2020 12:15:02 -0700 (PDT) Received: from localhost ([::1]:39886 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFjaH-0007Y5-EY for importer@patchew.org; Sat, 21 Mar 2020 15:15:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39562) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFjYd-0005Pv-Js for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jFjYc-0005lq-Il for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:19 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:39241) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jFjYc-0005lR-DG for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:18 -0400 Received: by mail-wr1-x42e.google.com with SMTP id h6so11584098wrs.6 for ; Sat, 21 Mar 2020 12:13:18 -0700 (PDT) Received: from localhost.localdomain ([37.142.144.12]) by smtp.gmail.com with ESMTPSA id i1sm15226252wrs.18.2020.03.21.12.13.15 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 21 Mar 2020 12:13:16 -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=m5gz0JlOnw+UpHFzqPtGTuq9wcw2D7Vvrwm78V+zTTA=; b=Spczl3WShUBDAAAiGAH+IkAENIeXGMdDUPKjyyVMgfI519Tx/7gS79lH84TjFFqoFk 2ZZ9MI4XVzkyTkHkfiRek7OGK/R6gwJiKaZQ7kwUCPx+beP9uxm5OpVih//esfENKcFr mWxogw5I0FkPUVan4aOZakQehte/YuFgOmj69Z1AVjwjfN4zcNCPxq1AWSzbzazSmwkt TCItf2BKQpMUvC40wUBDecFUpb0gv4lSKFHBNyC750zhZJenGfwCRINbmso2+Fm/AnBt RV7zp1LQmqBU1/usFZZ1FIdymopU5y/KgirEqJbIiI0ulIlUYcIJYT5qyJNQTUNPPRxN MRng== 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=m5gz0JlOnw+UpHFzqPtGTuq9wcw2D7Vvrwm78V+zTTA=; b=lZmbYgo4avr8B9U/rLr8WntIWBxMOkz9lWO2uEGula1/SlX6jQES8vL98FKnBhzH2L /zOrsEY2p4lIVGUzeZZN7Vfd/GJsXJ3t9wpKx6fewfD0v6fVDWzqxUJNIebXhfdU519D SPnHFhTEXIme4ptOK23WKXieMIVaYf27IRuGzjrQdDhfGvjygztZAWLBavgJtpUiEBD0 DQCbczSwneIC3sHd0Rs5AsJ3GjIcw9VpnpKtqcHRjIdkf1NiHIF4lGhVU0yfJuPq2HBT Vo8R4mGNT9Jv99ppDS5WKnLiipuPX8SAVP7vwlD8CLYWp2o60P3BvmWCVSn57IeGFJOp KQVw== X-Gm-Message-State: ANhLgQ343M7GFnYjoF4AdQmLatjwa0sLtjBmmJcm3s9LJ0Wd9oYKOdJn /Ogd6P+X4sNv/L6tVl3IQ0SjRZ4D X-Google-Smtp-Source: ADFU+vv9GSFIqG6UcxLJQW/zlCVT1FdtUstZ3Nl/GHHBgwiCrhEnate9bzidEAy5Nu7ddzY6iRQwzw== X-Received: by 2002:adf:ef92:: with SMTP id d18mr18629386wro.193.1584817997161; Sat, 21 Mar 2020 12:13:17 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Subject: [Qemu-devel] [PATCH PULL 1/4] hw/rdma/vmw/pvrdma_dev_ring: Replace strncpy with pstrcpy Date: Sat, 21 Mar 2020 21:13:08 +0200 Message-Id: <20200321191311.31537-2-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20200321191311.31537-1-marcel.apfelbaum@gmail.com> References: <20200321191311.31537-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::42e X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jusual@redhat.com, stefanha@redhat.com, yuval.shaia.ml@gmail.com, quintela@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: Julia Suvorova ring->name is defined as 'char name[MAX_RING_NAME_SZ]'. Replace untruncated strncpy with QEMU function. This case prevented QEMU from compiling with --enable-sanitizers. Signed-off-by: Julia Suvorova Message-Id: <20200318134849.237011-1-jusual@redhat.com> Reviewed-by: Yuval Shaia Reviewed-by: Stefan Hajnoczi Signed-off-by: Marcel Apfelbaum --- hw/rdma/vmw/pvrdma_dev_ring.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/rdma/vmw/pvrdma_dev_ring.c b/hw/rdma/vmw/pvrdma_dev_ring.c index d7bc7f5ccc..c2b3dd70a9 100644 --- a/hw/rdma/vmw/pvrdma_dev_ring.c +++ b/hw/rdma/vmw/pvrdma_dev_ring.c @@ -16,6 +16,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci.h" #include "cpu.h" +#include "qemu/cutils.h" =20 #include "trace.h" =20 @@ -30,8 +31,7 @@ int pvrdma_ring_init(PvrdmaRing *ring, const char *name, = PCIDevice *dev, int i; int rc =3D 0; =20 - strncpy(ring->name, name, MAX_RING_NAME_SZ); - ring->name[MAX_RING_NAME_SZ - 1] =3D 0; + pstrcpy(ring->name, MAX_RING_NAME_SZ, name); ring->dev =3D dev; ring->ring_state =3D ring_state; ring->max_elems =3D max_elems; --=20 2.17.2 From nobody Mon May 6 18:23:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.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 (zohomail.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 ARC-Seal: i=1; a=rsa-sha256; t=1584818160; cv=none; d=zohomail.com; s=zohoarc; b=lr2rGsWwzyYw1wF4dXMnok5gnkxpSCV318wTNdaQMfe+fa/ORkW83E7nj0rZTsoZQqvY/04gh4y8x8B8a8ylY+EM0lTAIIEwEMXcpkKpCaOTfelNI18Y7QDBWvbkS0qDZcWeAOoX2FQkhJPIm64gQFpsoZSPaZOA4ZqtRlmKi7o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584818160; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=9WcigWUnLHfXhXyLoz7lUzEcGO8vLAxIfw1iSBHyvI4=; b=HWMIAbBYwF/OpsGipyLxqcx7y2yws8IX+nJdC85PLy259yWmlzKaDzKBHVZ3R3zkHiMIE9/iStqq+xq32ldtrxvneG66hO0xs+gp4xj6f0hzTqnvmZMzVUQ8anJcnsEkq68jy99XlkhzlqvP7XLiQ1Xq4bZQ0UyDlhUNKcbLwlI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.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 header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584818160369116.58558354344427; Sat, 21 Mar 2020 12:16:00 -0700 (PDT) Received: from localhost ([::1]:39910 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFjbD-0000IC-4m for importer@patchew.org; Sat, 21 Mar 2020 15:15:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39573) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFjYf-0005RE-Pg for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jFjYe-0005nH-Em for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:21 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:46943) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jFjYe-0005mk-8V for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:20 -0400 Received: by mail-wr1-x441.google.com with SMTP id j17so8194953wru.13 for ; Sat, 21 Mar 2020 12:13:20 -0700 (PDT) Received: from localhost.localdomain ([37.142.144.12]) by smtp.gmail.com with ESMTPSA id i1sm15226252wrs.18.2020.03.21.12.13.17 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 21 Mar 2020 12:13:18 -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=9WcigWUnLHfXhXyLoz7lUzEcGO8vLAxIfw1iSBHyvI4=; b=Hj4pl9j4shIQnskpqwUaOjpWyPpISN3fijSdZLQBi+YhNggk3eyH2fRKVtA824ddNM Eg+c9wmAGbwAqXAibuaPM9Rfs4TLx9vzLfQDih3nwYG1wI0CNeD9d2MP2HHj4w+IYSDR YUfsDk/ZF11p7K/LDr1Y62e1K9rPZ1iKdYrhE2BmzJWNtQ7ATXGneP5n9RCjba3Ysoks YCkvb0X2bONM4c+BZ9rv2QaXgxWwm0YFNDR2wiQ6E6eldbr0p1uFStf6YjTun2fzSey9 PRRifPDtDbNzA4P3+R2tXyIyR5/pmTpdzdv1xg+XOt/Ahc7Qk12aSZrSDiJ6N4cAE1So zzhg== 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=9WcigWUnLHfXhXyLoz7lUzEcGO8vLAxIfw1iSBHyvI4=; b=qK5nmpnp2rkiK4JM3PAP2FEQKUELm7MfvYAjDLEXzrelbjMjAz04yTY4OtjQW4fKtV no5EQjTpmi0gryVK65SQ8bW5tgGN/u0rce2hHTACs6LYbQEnMN/u6Lm4MvOuf9Elc1i/ uUtF3q6/LSXWs7vBeVsvaMSDI+do4bLhD8CxLE5Ucd9LUGojKUlWpLPPRVs6x5QLK4Iv 2FY6NxNsOozaYXjwASwyzd8tqAsoD1NTyGjYG9Ky0vZ1EbZ31H+MG4sj6kztskQ6TU5X Ydx+UCJF5tK3DqaefadwMIUwcRiod44WBilx+lQUvUszOvn3F6gCYK8Gh3tAVr1CDn4v TXSg== X-Gm-Message-State: ANhLgQ39Vhl2hrB2FpvbwA2xFq854AfRO+7OSRaNw2MiIfm7uzMntkSa XLdfb1Hf6NsTeof6CDiaW+aqKhLn X-Google-Smtp-Source: ADFU+vs77amrZMIzWmc1ciNWrtCrZXTd3DzY20GTrnLqnKtZjogN4b8zqwktfxM4hDuV2gU4PxAY7w== X-Received: by 2002:adf:de8b:: with SMTP id w11mr3926356wrl.397.1584817998978; Sat, 21 Mar 2020 12:13:18 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Subject: [Qemu-devel] [PATCH PULL 2/4] hw/rdma: Cosmetic change - no need for two sge arrays Date: Sat, 21 Mar 2020 21:13:09 +0200 Message-Id: <20200321191311.31537-3-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20200321191311.31537-1-marcel.apfelbaum@gmail.com> References: <20200321191311.31537-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jusual@redhat.com, stefanha@redhat.com, yuval.shaia.ml@gmail.com, quintela@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 build_host_sge_array uses two sge arrays, one for input and one for output. Since the size of the two arrays is the same, the function can write directly to the given source array (i.e. input/output argument). Signed-off-by: Yuval Shaia Reviewed-by: Marcel Apfelbaum Message-Id: <20200320143429.9490-2-yuval.shaia.ml@gmail.com> Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_backend.c | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c index c346407cd3..b7ffbef9c0 100644 --- a/hw/rdma/rdma_backend.c +++ b/hw/rdma/rdma_backend.c @@ -378,30 +378,25 @@ 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, uint64_t *total_length) + struct ibv_sge *sge, uint8_t num_sge, + uint64_t *total_length) { RdmaRmMR *mr; - int ssge_idx; + int idx; =20 - for (ssge_idx =3D 0; ssge_idx < num_sge; ssge_idx++) { - mr =3D rdma_rm_get_mr(rdma_dev_res, ssge[ssge_idx].lkey); + for (idx =3D 0; idx < num_sge; idx++) { + mr =3D rdma_rm_get_mr(rdma_dev_res, sge[idx].lkey); if (unlikely(!mr)) { - rdma_error_report("Invalid lkey 0x%x", ssge[ssge_idx].lkey); - return VENDOR_ERR_INVLKEY | ssge[ssge_idx].lkey; + rdma_error_report("Invalid lkey 0x%x", sge[idx].lkey); + return VENDOR_ERR_INVLKEY | sge[idx].lkey; } =20 #ifdef LEGACY_RDMA_REG_MR - dsge->addr =3D (uintptr_t)mr->virt + ssge[ssge_idx].addr - mr->sta= rt; -#else - dsge->addr =3D ssge[ssge_idx].addr; + sge[idx].addr =3D (uintptr_t)mr->virt + sge[idx].addr - mr->start; #endif - dsge->length =3D ssge[ssge_idx].length; - dsge->lkey =3D rdma_backend_mr_lkey(&mr->backend_mr); + sge[idx].lkey =3D rdma_backend_mr_lkey(&mr->backend_mr); =20 - *total_length +=3D dsge->length; - - dsge++; + *total_length +=3D sge[idx].length; } =20 return 0; @@ -484,7 +479,6 @@ void rdma_backend_post_send(RdmaBackendDev *backend_dev, void *ctx) { BackendCtx *bctx; - struct ibv_sge new_sge[MAX_SGE]; uint32_t bctx_id; int rc; struct ibv_send_wr wr =3D {}, *bad_wr; @@ -518,7 +512,7 @@ void rdma_backend_post_send(RdmaBackendDev *backend_dev, =20 rdma_protected_gslist_append_int32(&qp->cqe_ctx_list, bctx_id); =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, sge, num_sge, &backend_dev->rdma_dev_res->stats.tx_len); if (rc) { complete_work(IBV_WC_GENERAL_ERR, rc, ctx); @@ -538,7 +532,7 @@ void rdma_backend_post_send(RdmaBackendDev *backend_dev, wr.num_sge =3D num_sge; wr.opcode =3D IBV_WR_SEND; wr.send_flags =3D IBV_SEND_SIGNALED; - wr.sg_list =3D new_sge; + wr.sg_list =3D sge; wr.wr_id =3D bctx_id; =20 rc =3D ibv_post_send(qp->ibqp, &wr, &bad_wr); @@ -601,7 +595,6 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_dev, struct ibv_sge *sge, uint32_t num_sge, void *c= tx) { BackendCtx *bctx; - struct ibv_sge new_sge[MAX_SGE]; uint32_t bctx_id; int rc; struct ibv_recv_wr wr =3D {}, *bad_wr; @@ -635,7 +628,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(backend_dev->rdma_dev_res, new_sge, sge, n= um_sge, + rc =3D build_host_sge_array(backend_dev->rdma_dev_res, sge, num_sge, &backend_dev->rdma_dev_res->stats.rx_bufs_le= n); if (rc) { complete_work(IBV_WC_GENERAL_ERR, rc, ctx); @@ -643,7 +636,7 @@ void rdma_backend_post_recv(RdmaBackendDev *backend_dev, } =20 wr.num_sge =3D num_sge; - wr.sg_list =3D new_sge; + wr.sg_list =3D sge; wr.wr_id =3D bctx_id; rc =3D ibv_post_recv(qp->ibqp, &wr, &bad_wr); if (rc) { @@ -671,7 +664,6 @@ void rdma_backend_post_srq_recv(RdmaBackendDev *backend= _dev, uint32_t num_sge, void *ctx) { BackendCtx *bctx; - struct ibv_sge new_sge[MAX_SGE]; uint32_t bctx_id; int rc; struct ibv_recv_wr wr =3D {}, *bad_wr; @@ -688,7 +680,7 @@ void rdma_backend_post_srq_recv(RdmaBackendDev *backend= _dev, =20 rdma_protected_gslist_append_int32(&srq->cqe_ctx_list, bctx_id); =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, sge, num_sge, &backend_dev->rdma_dev_res->stats.rx_bufs_le= n); if (rc) { complete_work(IBV_WC_GENERAL_ERR, rc, ctx); @@ -696,7 +688,7 @@ void rdma_backend_post_srq_recv(RdmaBackendDev *backend= _dev, } =20 wr.num_sge =3D num_sge; - wr.sg_list =3D new_sge; + wr.sg_list =3D sge; wr.wr_id =3D bctx_id; rc =3D ibv_post_srq_recv(srq->ibsrq, &wr, &bad_wr); if (rc) { --=20 2.17.2 From nobody Mon May 6 18:23:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.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 (zohomail.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 ARC-Seal: i=1; a=rsa-sha256; t=1584818053; cv=none; d=zohomail.com; s=zohoarc; b=NdOXsONhAmyENVE1SecUF2r/bLJLeD3I1GjMcEp0Snh3u1gpEDnossmqxemxmG31f0Lw+HPJcKYRK4eE4h7BCjrLLB/BqJcj3sq8VJl6cK/Cs0m83M8r5z5Aof2c467iJyMgk/6NazO632r6QNrP8jSl8L8UPBDhWf/jJk2miwo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584818053; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=LcthiP02YGDEpiJDziYu4vlQ7hb4BbGLQNZ9o3R4LnI=; b=ELV/xl55AdrTNB2V2YJ+YmR07yMwP2xdUiic9lRgLtYu6Xku4G7Zh7+5s5ZLjcp3HEVAukSk27CyaCZYdGLZnhp9RrtbfBztRlKbt2LND6Ay06bAS485YZ5e2uWLO/bM0y04fAFslFqAY0EnDjCsiDWP3qZeqjyqUw0YWZiDk3k= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.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 header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584818053375157.35882567379986; Sat, 21 Mar 2020 12:14:13 -0700 (PDT) Received: from localhost ([::1]:39878 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFjZU-0006MK-5j for importer@patchew.org; Sat, 21 Mar 2020 15:14:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39584) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFjYh-0005Tc-Nl for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jFjYg-0005oH-HQ for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:23 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:33022) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jFjYg-0005nn-BX for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:22 -0400 Received: by mail-wr1-x442.google.com with SMTP id a25so11630452wrd.0 for ; Sat, 21 Mar 2020 12:13:22 -0700 (PDT) Received: from localhost.localdomain ([37.142.144.12]) by smtp.gmail.com with ESMTPSA id i1sm15226252wrs.18.2020.03.21.12.13.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 21 Mar 2020 12:13:20 -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=LcthiP02YGDEpiJDziYu4vlQ7hb4BbGLQNZ9o3R4LnI=; b=IdvXNVh/1FSUd/L5HissVFsSnMHaeeX9rm1P4TMk3663o2p/hK4WFtRjvjmvi8c9V8 rnocxkBaMyenwdKklqqBW3R5HMx6DOC4WL9JlfQMNyI+GOaJXlENDxkf/Njh4rGeZuVA yKCtsKuFFBm9i1yVf9Qb+OTFrIonwpnFN83qC9ZFzropmHjPhU0jehjFoixHU2UCMENg PAkrrUN0GASMtRsNyLE17b2IKoUySa5PvN1zoTcDRro6dBPIGixX9JrESYE2hJVp+RgE Tt7ZZcJagxFvFZ+/wJhMd0bC/1NEwP4LDSwFqctVOo5cSUYM0ZUhZ2Zy8fJTqaYkAN6V tbqw== 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=LcthiP02YGDEpiJDziYu4vlQ7hb4BbGLQNZ9o3R4LnI=; b=FC6zKJ+iLxdcgYyo9dhBU6GFZKHqR84XaawZXBputPgI3j032/PzohOmblwBctdre8 f/vqKy1WEDKT4skbf8fQw8Elex3de7tkcNnbEQg6VgR6JiCmb0S6U/eiecBo0ElSt/vt 7h5HSC1QYzo52rt2DsMGcoGa2fng2DAfdevVIhpRPfFcwJTvge0mFNlfBPn0TnegeGAk /o7uYZzx/9LNjvIs2kK09K8ucEO/keMPYqk7OGUyxV0IVtZ/g1PBFy8ZOXDRCDC/HEZZ abLfTJk8C2KRiozEF7unA1kBX1rVxAULcKAfnKFHZ1RhemG7TWzvlOVCe8R8/zLkL7L+ 8jKg== X-Gm-Message-State: ANhLgQ1rvKvEgVxJ71pOwzHnVImYbmnJzUlJyvSOV5YS6Bf1FqpO0iTX J1cPnTj5KAtu6vddXdYQmCQdtKTZ X-Google-Smtp-Source: ADFU+vvOe8yGgDTXks5tjxBRCI5cKjOxw5ZdAeT/y8dqhmu/qMNjYzb+vEm0J2FciAfz6i4l1fBo7Q== X-Received: by 2002:adf:9cca:: with SMTP id h10mr7338699wre.167.1584818001035; Sat, 21 Mar 2020 12:13:21 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Subject: [Qemu-devel] [PATCH PULL 3/4] hw/rdma: Skip data-path mr_id translation Date: Sat, 21 Mar 2020 21:13:10 +0200 Message-Id: <20200321191311.31537-4-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20200321191311.31537-1-marcel.apfelbaum@gmail.com> References: <20200321191311.31537-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 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jusual@redhat.com, stefanha@redhat.com, yuval.shaia.ml@gmail.com, quintela@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 With the change made in commit 68b89aee71 ("Utilize ibv_reg_mr_iova for memory registration") the MR emulation is no longer needed in order to translate the guest addresses into host addresses. With that, the next obvious step is to skip entirely the processing in data-path. To accomplish this, return the backend's lkey to driver so we will not need to do the emulated mr_id to backend mr_id translation in data-path. The function build_host_sge_array is still called in data-path but only for backward computability with statistics collection. While there, as a cosmetic change to make the code cleaner - make one copy of the function rdma_backend_create_mr and leave the redundant guest_start argument in the legacy code. Signed-off-by: Yuval Shaia Reviewed-by: Marcel Apfelbaum Message-Id: <20200320143429.9490-3-yuval.shaia.ml@gmail.com> Signed-off-by: Marcel Apfelbaum --- hw/rdma/rdma_backend.c | 21 ++++++++++++++------- hw/rdma/rdma_backend.h | 5 ----- hw/rdma/rdma_rm.c | 13 ++++++------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/hw/rdma/rdma_backend.c b/hw/rdma/rdma_backend.c index b7ffbef9c0..3dd39fe1a7 100644 --- a/hw/rdma/rdma_backend.c +++ b/hw/rdma/rdma_backend.c @@ -377,6 +377,7 @@ static void ah_cache_init(void) destroy_ah_hash_key, destroy_ah_hast_d= ata); } =20 +#ifdef LEGACY_RDMA_REG_MR static int build_host_sge_array(RdmaDeviceResources *rdma_dev_res, struct ibv_sge *sge, uint8_t num_sge, uint64_t *total_length) @@ -391,9 +392,7 @@ static int build_host_sge_array(RdmaDeviceResources *rd= ma_dev_res, return VENDOR_ERR_INVLKEY | sge[idx].lkey; } =20 -#ifdef LEGACY_RDMA_REG_MR sge[idx].addr =3D (uintptr_t)mr->virt + sge[idx].addr - mr->start; -#endif sge[idx].lkey =3D rdma_backend_mr_lkey(&mr->backend_mr); =20 *total_length +=3D sge[idx].length; @@ -401,6 +400,19 @@ static int build_host_sge_array(RdmaDeviceResources *r= dma_dev_res, =20 return 0; } +#else +static inline int build_host_sge_array(RdmaDeviceResources *rdma_dev_res, + struct ibv_sge *sge, uint8_t num_sg= e, + uint64_t *total_length) +{ + int idx; + + for (idx =3D 0; idx < num_sge; idx++) { + *total_length +=3D sge[idx].length; + } + return 0; +} +#endif =20 static void trace_mad_message(const char *title, char *buf, int len) { @@ -731,13 +743,8 @@ void rdma_backend_destroy_pd(RdmaBackendPD *pd) } } =20 -#ifdef LEGACY_RDMA_REG_MR -int rdma_backend_create_mr(RdmaBackendMR *mr, RdmaBackendPD *pd, void *add= r, - size_t length, int access) -#else int rdma_backend_create_mr(RdmaBackendMR *mr, RdmaBackendPD *pd, void *add= r, size_t length, uint64_t guest_start, int access) -#endif { #ifdef LEGACY_RDMA_REG_MR mr->ibmr =3D ibv_reg_mr(pd->ibpd, addr, length, access); diff --git a/hw/rdma/rdma_backend.h b/hw/rdma/rdma_backend.h index 127f96e2d5..225af481e0 100644 --- a/hw/rdma/rdma_backend.h +++ b/hw/rdma/rdma_backend.h @@ -78,13 +78,8 @@ int rdma_backend_query_port(RdmaBackendDev *backend_dev, int rdma_backend_create_pd(RdmaBackendDev *backend_dev, RdmaBackendPD *pd); void rdma_backend_destroy_pd(RdmaBackendPD *pd); =20 -#ifdef LEGACY_RDMA_REG_MR -int rdma_backend_create_mr(RdmaBackendMR *mr, RdmaBackendPD *pd, void *add= r, - size_t length, int access); -#else int rdma_backend_create_mr(RdmaBackendMR *mr, RdmaBackendPD *pd, void *add= r, size_t length, uint64_t guest_start, int access= ); -#endif void rdma_backend_destroy_mr(RdmaBackendMR *mr); =20 int rdma_backend_create_cq(RdmaBackendDev *backend_dev, RdmaBackendCQ *cq, diff --git a/hw/rdma/rdma_rm.c b/hw/rdma/rdma_rm.c index 1524dfaeaa..7e9ea283c9 100644 --- a/hw/rdma/rdma_rm.c +++ b/hw/rdma/rdma_rm.c @@ -227,21 +227,20 @@ int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, ui= nt32_t pd_handle, mr->length =3D guest_length; mr->virt +=3D (mr->start & (TARGET_PAGE_SIZE - 1)); =20 -#ifdef LEGACY_RDMA_REG_MR - ret =3D rdma_backend_create_mr(&mr->backend_mr, &pd->backend_pd, m= r->virt, - mr->length, access_flags); -#else ret =3D rdma_backend_create_mr(&mr->backend_mr, &pd->backend_pd, m= r->virt, mr->length, guest_start, access_flags= ); -#endif if (ret) { ret =3D -EIO; goto out_dealloc_mr; } +#ifdef LEGACY_RDMA_REG_MR + /* We keep mr_handle in lkey so send and recv get get mr ptr */ + *lkey =3D *mr_handle; +#else + *lkey =3D rdma_backend_mr_lkey(&mr->backend_mr); +#endif } =20 - /* We keep mr_handle in lkey so send and recv get get mr ptr */ - *lkey =3D *mr_handle; *rkey =3D -1; =20 mr->pd_handle =3D pd_handle; --=20 2.17.2 From nobody Mon May 6 18:23:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.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 (zohomail.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 ARC-Seal: i=1; a=rsa-sha256; t=1584818220; cv=none; d=zohomail.com; s=zohoarc; b=ThVvKILSSXM7+sXcG9Dv7cuGj0VjAUOucEUxKEG/vjow7upDwJhVFB40/66CYN21s8W23/q2x5ataJzckrzPBulDkiBl2Lrn6NOqrAiOLW1I5Do7lVuNDfalRMLIY/BKjz5l25nZcJhCMaEViyYn7KcKABaYj/W3CypyxTotL3Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584818220; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=sspz/br+P8mUAXaacMtETm/32ruEWwdUnsySxlRkdEg=; b=fvqEx/7c6k602657P3ZDXmJepQTf2oPGWVKO9FVfyDw10pDiFAzvPWDIYnpd66C2w+Ych9mRbxLD4BEK5G7Fgm0skyn/IJcFUvqsPZ510wQnKUyCeTgodSkiLDrGHd2EOXh1YD0q+qNf8l6HNag+ZWEq1rueoZwx5ruA79BivU8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.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 header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584818220498304.47753114543707; Sat, 21 Mar 2020 12:17:00 -0700 (PDT) Received: from localhost ([::1]:39922 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFjcB-0001LP-AV for importer@patchew.org; Sat, 21 Mar 2020 15:16:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39595) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFjYj-0005Vb-AJ for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jFjYi-0005qD-9K for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:25 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:54547) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jFjYi-0005p4-3b for qemu-devel@nongnu.org; Sat, 21 Mar 2020 15:13:24 -0400 Received: by mail-wm1-x342.google.com with SMTP id f130so8833632wmf.4 for ; Sat, 21 Mar 2020 12:13:24 -0700 (PDT) Received: from localhost.localdomain ([37.142.144.12]) by smtp.gmail.com with ESMTPSA id i1sm15226252wrs.18.2020.03.21.12.13.21 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 21 Mar 2020 12:13:22 -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=sspz/br+P8mUAXaacMtETm/32ruEWwdUnsySxlRkdEg=; b=gRXJS2wvF9x8E1wNK0xgIqCDDJm/HzlZT3vxrdSap0MObaE5Qd9Pmahl43/xswU7i2 l1hElMblmPyQXhnqAq0QFUpl+mnlctLKflOc5xoFOGfGcuUcqJQuPySStOy8UJfi7uF1 nY3A7fzNgpMP2ou1dbaclIobgHl+aKidC2sQhR0qtefkzhknJeAld7bFbUM3FN7AiKpa v1eAl8llG9H6ubtKLepFy78rbXrXcIKHlC4kONBHYPdXxdxGNHvrMoN/6UAVvhvOL/EE nSvR5kU/rTrflUR3RIIpndxE7uQfrNAU3Ayd8t144XE99sX43tF2VlvdLmqdBF1tmia7 yJPw== 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=sspz/br+P8mUAXaacMtETm/32ruEWwdUnsySxlRkdEg=; b=rD+9A+Vp/UTnSJlCFuFWShm+yOfdyyCsxHhsRCThNZvWKllTGIeEwBUvTXlF5hh+o1 SiVdSln27QlTEk1QsSbeOE8bgQ41rNfRbzjj1XATV93BmuwfbUpzDK8vvH77iSRGIZdl 1aGQ3BSanBhMAJ8ilpvKHyh3kI/iscGemvpMXW0H3Y1qlgNRZsUb76rIWku8K8iXZWI2 LKFPPXiqGfyg9c1F1Zy3iugKTJgxaJrAVFPJOZXsEwSzkt7danFKtNi5d540Ng0I70mI ZthZdvsU2oWmLuya/xmaeN8TAXQJ9erAutAc0YDcEPRArel2n/pthlkqNN3yeVtUZWyq H7Vg== X-Gm-Message-State: ANhLgQ29aj4Bp7p/auqvTJbhs65FTpHdUxBbOT7z6SXz7AmciLF/EngP 6OP7MnW1qNRcX3Sp468WvPi6O52v X-Google-Smtp-Source: ADFU+vvj0dx3RdKk1pibdINBNN/Bm2KEsW0U36u6py3iV6j2B/qOWPlgTtGMJEJjX6wNBtwlWZegpw== X-Received: by 2002:a7b:c305:: with SMTP id k5mr18431419wmj.189.1584818002856; Sat, 21 Mar 2020 12:13:22 -0700 (PDT) From: Marcel Apfelbaum To: qemu-devel@nongnu.org, peter.maydell@linaro.org Subject: [Qemu-devel] [PATCH PULL 4/4] hw/rdma: avoid suspicious strncpy() use Date: Sat, 21 Mar 2020 21:13:11 +0200 Message-Id: <20200321191311.31537-5-marcel.apfelbaum@gmail.com> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20200321191311.31537-1-marcel.apfelbaum@gmail.com> References: <20200321191311.31537-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::342 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jusual@redhat.com, stefanha@redhat.com, yuval.shaia.ml@gmail.com, quintela@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: Stefan Hajnoczi gcc (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1) with sanitizers enabled reports the following error: CC x86_64-softmmu/hw/rdma/vmw/pvrdma_dev_ring.o In file included from /usr/include/string.h:495, from include/qemu/osdep.h:101, from hw/rdma/vmw/pvrdma_dev_ring.c:16: In function =E2=80=98strncpy=E2=80=99, inlined from =E2=80=98pvrdma_ring_init=E2=80=99 at hw/rdma/vmw/pvrdma_d= ev_ring.c:33:5: /usr/include/bits/string_fortified.h:106:10: error: =E2=80=98__builtin_strn= cpy=E2=80=99 specified bound 32 equals destination size [-Werror=3Dstringop= -truncation] 106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__de= st)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~= ~~~~ Use pstrcpy() instead of strncpy(). It is guaranteed to NUL-terminate strings. Signed-off-by: Stefan Hajnoczi Reviewed-by: Juan Quintela Reviewed-by: Yuval Shaia Message-Id: <20200316160702.478964-3-stefanha@redhat.com> Signed-off-by: Marcel Apfelbaum --- hw/rdma/vmw/pvrdma_dev_ring.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/rdma/vmw/pvrdma_dev_ring.c b/hw/rdma/vmw/pvrdma_dev_ring.c index c2b3dd70a9..c122fe7035 100644 --- a/hw/rdma/vmw/pvrdma_dev_ring.c +++ b/hw/rdma/vmw/pvrdma_dev_ring.c @@ -14,6 +14,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/cutils.h" #include "hw/pci/pci.h" #include "cpu.h" #include "qemu/cutils.h" --=20 2.17.2