From patchwork Tue Oct 24 13:11:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Moti Haimovsky X-Patchwork-Id: 30793 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C9D971B7F0; Tue, 24 Oct 2017 15:12:32 +0200 (CEST) Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10076.outbound.protection.outlook.com [40.107.1.76]) by dpdk.org (Postfix) with ESMTP id 7FAD02882 for ; Tue, 24 Oct 2017 15:12:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=3zgO/p6c7K6lcNVBhD6zSCQ/h1lNXtWI1BKYpJcjatc=; b=vAC0tTPibvvsv0ZK6JN8QR94r3l7zjG0kKWF6jBygVNYwu+gMX36Sz9GP83qCVf0KEqDOfgxtfqaVL+f9o3qzeop0xtLt75e23pbSC34IIrqD932JarOC6kvuTHl4rDN+ZMtsN1d/G10ZETQhP5Lgvu4Gc0TOdM5tYn5cEpL+Uc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=motih@mellanox.com; Received: from mellanox.com (37.142.13.130) by HE1PR05MB1915.eurprd05.prod.outlook.com (2a01:111:e400:7b74::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.156.4; Tue, 24 Oct 2017 13:12:28 +0000 From: Moti Haimovsky To: adrien.mazarguil@6wind.com Cc: dev@dpdk.org, Moti Haimovsky Date: Tue, 24 Oct 2017 16:11:14 +0300 Message-Id: <1508850674-181964-1-git-send-email-motih@mellanox.com> X-Mailer: git-send-email 1.8.3.1 MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: VI1PR08CA0121.eurprd08.prod.outlook.com (2603:10a6:800:d4::23) To HE1PR05MB1915.eurprd05.prod.outlook.com (2a01:111:e400:7b74::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 88a1b53e-fbcb-4af5-9149-08d51ae0e0dc X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(4534020)(4602075)(4627075)(201703031133081)(201702281549075)(2017052603199); SRVR:HE1PR05MB1915; X-Microsoft-Exchange-Diagnostics: 1; HE1PR05MB1915; 3:FKd+2USRJiBXgQVb6nfF17BWDg8swqxosZtvBf61nkiZbt4ISUAWSMTUSE2Es4Cr9A2aO1nDOAq3KrztPaeSGD0uBhBUNNHceOKYRSLbj2sOxuwfKqaMY/PaKs9WAhvNpjpRKrhn54Y9rPijDj3AsX0J9Q41ax9mu7voQ6SuRbN0XQUWVsx5U4AZAmVpNGdvdrrKCWhsaZRPxkhQ8CDvJga7WhT1cgdtmM8tgQUaJ2TpqrFXihZXF2N6Y9kefWRu; 25:P6ucWXLhjFyIPY687SJ1Orf0J99nWTlDI4BXsYy+2obUa4+DrpR3bisf+OwAbgWRbqQXHKDgsLKkdJD9PczNzxv2LFLWIEkyL3NVDOAn3oNS80PQeYi9+YPpvlJKw+VCvedI/qktAS3gQGgzlzI7vvyjeHxiSCcb+/XrE2htZAWwgRaFK57EueX5C8F8evl7jMqSBE9YO6iL9QubIsD3SxQfguutOPUDO8Y0YTRY6LTFr/+karC7Qv0ifzh2IsM7Rq0ibWDtUkVi3zgHwtrSOK0YFiI7M7iLI/1AHpGqTLORe41H0wW0/wI3NG8BR8Bo7MLdNijp7C5AmOY6BQMdcw==; 31:yFEkIBRcyTNem4i+DxgKUf5WXrfQxg9QDnf8APzjOOyg1aBMgITovD201J4jP5xNNs+aRulJFsXO2fElQW5Pm1853FBpuP3mbalg7OQcF/bGWCPldDvXrpx/g3uhiNZJVt1bWy7NxvUj3895X/RtXoBYDTfpbZYMI/YwGhSt4n3HNrgy10Ha4EzwQRMGQ39fzOuCx98olHxE5+d0azXy0sE8sDdooEkWMeCPpy+1jvY= X-MS-TrafficTypeDiagnostic: HE1PR05MB1915: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; HE1PR05MB1915; 20:8srCJ072MuOGK2CQ9Lck/uR7Q/bfv9rwXaKuv+1JqftZemhWxH1fmxPJHO8XXCVjQ65t0BTqoODMtFicm2e+swiwN3tXgyX+v31cNMj3NtTbcq7YbYmuy+GXTF1E9qoAXFhE43bwveO9GDTfyGigmNfzOlOZ5uPjmsb6LN7TKwurGU+xUVvSkY0L2jRvtr8BWfZ40vFmRM9Ea+Ib+nW48PPArk6KADXnnj8Lv5RVLQSTK3Uc0eSfy0jn2p37/B1j+95kuU5IQoFx9/DQ8iSBnDGi/mY1u44aZfRPBdPhAXjcz2avuX7viPTJRzlbeYCT4QjKKtGS5DlRNDF7kPZSrAufDO9qfziBbWiNhP67l3C6TgA5kZA6ZwRzjDZuTsDKnbGIF78j8hpmJVqUG78mQb5LDOBVdndQb9HsZhoIWpCRtg80toqnQFWcYbRlQ55f4U+gqqH3WEZgu8no9vc1oyGGSMXQlFnBcc0kSRAvfQvKJ2e1G9y8z3f4svqddItz; 4:W9GBnyB2ybvqBc/+6s8iItCbLQYDDL3CKTOKyzo/pN6nZgIEQiY2ZQcg3rwMaAZ3XDkMgaVokm6R3H1ZDSWxcQbvavdxui58g8U9Nn/YZZ6WmTrVMNR/cBcm6jJWxJ0Oa4RZyj65103J5Rri+6gxwusozH9VgRZVHYfRVHDnIjfhaSlnKp7ufauFy0vCzbF4xLc5XaXwgoo1M6PHPx9/isQpQ8s/FtSafoEolClbkYgGckhe7kVF4RcDP/v4xtGA X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(3002001)(3231020)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123558100)(20161123562025)(20161123555025)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:HE1PR05MB1915; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:HE1PR05MB1915; X-Forefront-PRVS: 047001DADA X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(39860400002)(189002)(199003)(86362001)(189998001)(48376002)(2351001)(101416001)(53936002)(50466002)(105586002)(316002)(33646002)(2361001)(81156014)(81166006)(8936002)(16526018)(3846002)(4326008)(106356001)(8676002)(6116002)(36756003)(69596002)(66066001)(5003940100001)(2906002)(5660300001)(6666003)(33026002)(6916009)(7736002)(21086003)(47776003)(107886003)(305945005)(4720700003)(50986999)(16586007)(97736004)(478600001)(68736007)(25786009)(55016002)(50226002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR05MB1915; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR05MB1915; 23:DMuzrlukCbDuKrfHY7YdOu7gobh+f1hkaOgZdCu3v?= 80peOONZ5wI6wKQRRv+4oyN9ORhFDXBjg/saGp+wvNtxT46QN0QL4tvXTBdbzzNwlikwl5XD9wgkb/pweXaEq+wJFj6fahbC53/gtIkdWddiuMbNiMaQxs+FMfj+EITx8Ve8oA4iLOLOzyRvW5I2slT0OGnrwxPiZMjoF18MMgvaMY9MKAgsXbK0Wp0azPpumN2pBzdhd0Gf/zGbGGc1NgBJyopjeC2jLJCb4GmiQ66Dr4XHEPbM/DDJIVa+ryriTO4UR/28zQBduHs36T8Uj4C4oYMD65DJeZjh8Ie1SfFd/2wXkKZciWyiSqiqboHuMtUYsIUFlzBeJHhGvkEide2bJKZFHUdPDefV20XUZrV6xWGm30aHJQOuUZu24MTHn1RjEhW563FNUXTJE1fQ1ifUIeMsAzRsP6ZawFwENvqnZZXXUT8RcA30Q+AJhegW57ARtU5hAvnXzPzu4dA5J7Py2JU/trAMhcll6lBhm0Oip6yA9mPCIzCmpH2PRevfSXXYpxw9Tcvv05OoW8+1k4SqfcX0z+wELNRxYMandUoCWk+w9HTMYYxN1wQJvQdKkNlWWMrQEGOMc++dzmWOBVZRhFYLDfqwnC/EnCj28MprGLOEpUi714AgDPx+nvFtB24SbH0DiHRh8tDvIyMkxJ0t69dDcGhBeCipOjrpwqJUOIo6CwbexAP4NhXJ5MxSNrSVi7VPdNILrrlgJD8R6ho1mpxB5cM/JO9siH5fspUgo8wnIXJ8awooQ0sk0a9NrFSoc9KD3aqFIRvyIlCJOeCZRnOrZ+P+tP42CfMnkc5mvX7XJUae8LMXXV/WN+RZQU5V54bC4aKxeECZSgqkVwkEx0U+rnJNqgQ8vCvzR+WFgzG8gTU21y8UgcQASxrSZSH/NLhDyfcekYwwmF17ZVijd9QsMnGKV6aRalrZpX5qlTQvulhoy/8oKlFm6e91l0XB8jzdL94tnuOHqt4PbyYYeNtmxrJJnZoyU7Nw5hQQKfjl9UritzOHapMQjX623v01fXUF+FmawBpHMgdAMOt7qqKme1qJhWhax07OzBy0qbph4vfbcF1z8Wk60JTPwjcTK2jdSmb9rd816YbCQoer+yKi57gEIKIsNKoNWVqpQ== X-Microsoft-Exchange-Diagnostics: 1; HE1PR05MB1915; 6:oJmdrbYDnr/AYeRmgKThRU6ySM+rzvo2pzjMiBt0815C5VawcHsapooHdyB2wbKBhiXETI0ScWHDV/kXg3kOHxIm3knnTlctnE3VPs7Dglp+1muSea551xDFjr1vMTjB8OHBUtLe3ptv6hQxZOW4kkzZiWamm8J1DY3pyHkAHECJq6auqY6m2T9Sx88pT8aMdaYCb23LGBMCILbcbeLrfrTde5aHgXkTHqJ52P/L7np6L73uY7ntcB/Sa2bKcbMykccca9f15TokNsnpwU2m51draZ0sGuIuxj0vcqicd7lTxqfCazcfU2H1ITlhmwkSasHXMAFIkBW3+OQwJF0TAg==; 5:bpxlDrdgae20zvQyfJLUg5fAp7KZ2tFMy+9WpjIa+XpDYW/TFJKF1ZzNyHnz9iRRcaV6501Q8E7IZj4rmE5b+zr9M3KFGrSC9Dgbh4RYAhBExPDQJ1Wkr0ZImw9L4QQWEAI+Jg7YGRgslFGt7RdG0g==; 24:fVcdwbClOkfwUbVDL0rBEoKqOTEm2zGUwoS8Sdtn6kXuHMdFSCjqcUmDFs8GPt0X5zPMxpGw5gyu28QdfXRLvbLSrT1aBoQqhrIKwl1CE3U=; 7:cHCRwgOXCH1NrIyW/sytYslsP+W02JLex+VY6AkfrBOcp41BasejmAljaWN4mI9jRrOFYlwXyDKDOqU9Xfq0Qdid1ENM9r1zZfoOUVhxWh4+7owgRUqqv+TKCHjKShrd+2ZvBIUftECB0uOLlPFPdWQLFHtISIajPirFw9jhtkCy5h4OtxqxlcH3afcnMRic+e32RmoDM9H1yXOvULiGKtcUsuqJjbTKL8wLrb6ujtM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Oct 2017 13:12:28.2528 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 88a1b53e-fbcb-4af5-9149-08d51ae0e0dc X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR05MB1915 Subject: [dpdk-dev] [PATCH v2] net/mlx4: fix no Rx interrupts X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This commit addresses the issue of rx interrupts support with the new Rx datapath introduced in DPDK version 17.11. In order to generate an Rx interrupt an event queue is armed with the consumer index of the Rx completion queue. Since version 17.11 this index is handled by the PMD so it is now the responsibility of the PMD to write this value when enabling Rx interrupts. Fixes: 6681b845034c ("net/mlx4: add Rx bypassing Verbs") Signed-off-by: Moti Haimovsky --- V2: * Rebased on top of ff3397e9 ("net/mlx4: relax Rx queue configuration order") --- drivers/net/mlx4/mlx4_intr.c | 38 +++++++++++++++++++++++++++++++++++++- drivers/net/mlx4/mlx4_prm.h | 9 +++++++++ drivers/net/mlx4/mlx4_rxq.c | 6 +++++- 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/drivers/net/mlx4/mlx4_intr.c b/drivers/net/mlx4/mlx4_intr.c index 3806322..217c591 100644 --- a/drivers/net/mlx4/mlx4_intr.c +++ b/drivers/net/mlx4/mlx4_intr.c @@ -53,6 +53,7 @@ #include #include #include +#include #include #include "mlx4.h" @@ -239,6 +240,40 @@ } /** + * MLX4 CQ notification . + * + * @param rxq + * Pointer to receive queue structure. + * @param solicited + * Is request solicited or not. + * + * @return + * Always 0. + */ +static int +mlx4_arm_cq(struct rxq *rxq, int solicited) +{ + struct mlx4_cq *cq = &rxq->mcq; + uint64_t doorbell; + uint32_t sn = cq->arm_sn & MLX4_CQ_DB_GEQ_N_MASK; + uint32_t ci = cq->cons_index & MLX4_CQ_DB_CI_MASK; + uint32_t cmd = solicited ? MLX4_CQ_DB_REQ_NOT_SOL : MLX4_CQ_DB_REQ_NOT; + void *cq_db_reg = (char *)cq->cq_uar + MLX4_CQ_DOORBELL; + + *cq->arm_db = rte_cpu_to_be_32(sn << 28 | cmd | ci); + /* + * Make sure that the doorbell record in host memory is + * written before ringing the doorbell via PCI MMIO. + */ + rte_wmb(); + doorbell = sn << 28 | cmd | cq->cqn; + doorbell <<= 32; + doorbell |= ci; + rte_write64(rte_cpu_to_be_64(doorbell), cq_db_reg); + return 0; +} + +/** * Uninstall interrupt handler. * * @param priv @@ -333,6 +368,7 @@ WARN("unable to disable interrupt on rx queue %d", idx); } else { + rxq->mcq.arm_sn++; ibv_ack_cq_events(rxq->cq, 1); } return -ret; @@ -358,7 +394,7 @@ if (!rxq || !rxq->channel) ret = EINVAL; else - ret = ibv_req_notify_cq(rxq->cq, 0); + ret = mlx4_arm_cq(rxq, 0); if (ret) { rte_errno = ret; WARN("unable to arm interrupt on rx queue %d", idx); diff --git a/drivers/net/mlx4/mlx4_prm.h b/drivers/net/mlx4/mlx4_prm.h index 3a77502..92f2fec 100644 --- a/drivers/net/mlx4/mlx4_prm.h +++ b/drivers/net/mlx4/mlx4_prm.h @@ -78,6 +78,11 @@ enum { MLX4_CQE_L2_TUNNEL_IPOK = (int)(1u << 31), }; +/* Completion queue events, numbers and masks. */ +#define MLX4_CQ_DB_GEQ_N_MASK 0x3 +#define MLX4_CQ_DB_CI_MASK 0xffffff +#define MLX4_CQ_DOORBELL 0x20 + /* Send queue information. */ struct mlx4_sq { uint8_t *buf; /**< SQ buffer. */ @@ -100,6 +105,10 @@ struct mlx4_cq { uint32_t cqe_64:1; /**< CQ entry size is 64 bytes. */ uint32_t cons_index; /**< Last queue entry that was handled. */ uint32_t *set_ci_db; /**< Pointer to the completion queue doorbell. */ + uint32_t *arm_db; /**< Pointer to doorbell for arming Rx events. */ + int arm_sn; /**< Rx event counter. */ + void *cq_uar; /**< CQ user access region. */ + uint32_t cqn; /**< CQ number. */ }; /** diff --git a/drivers/net/mlx4/mlx4_rxq.c b/drivers/net/mlx4/mlx4_rxq.c index 4c50077..24262cb 100644 --- a/drivers/net/mlx4/mlx4_rxq.c +++ b/drivers/net/mlx4/mlx4_rxq.c @@ -510,7 +510,7 @@ void mlx4_rss_detach(struct mlx4_rss *rss) struct rte_mbuf *(*elts)[elts_n] = rxq->elts; struct mlx4dv_obj mlxdv; struct mlx4dv_rwq dv_rwq; - struct mlx4dv_cq dv_cq; + struct mlx4dv_cq dv_cq = { .comp_mask = MLX4DV_CQ_MASK_UAR, }; const char *msg; struct ibv_cq *cq = NULL; struct ibv_wq *wq = NULL; @@ -604,6 +604,10 @@ void mlx4_rss_detach(struct mlx4_rss *rss) rxq->mcq.cqe_cnt = dv_cq.cqe_cnt; rxq->mcq.set_ci_db = dv_cq.set_ci_db; rxq->mcq.cqe_64 = (dv_cq.cqe_size & 64) ? 1 : 0; + rxq->mcq.arm_db = dv_cq.arm_db; + rxq->mcq.arm_sn = dv_cq.arm_sn; + rxq->mcq.cqn = dv_cq.cqn; + rxq->mcq.cq_uar = dv_cq.cq_uar; /* Update doorbell counter. */ rxq->rq_ci = elts_n / sges_n; rte_wmb();