From patchwork Mon Oct 2 08:23:47 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820367 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="KRHga3zD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5FZg3vWmz9t4X for ; Mon, 2 Oct 2017 19:24:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751120AbdJBIYk (ORCPT ); Mon, 2 Oct 2017 04:24:40 -0400 Received: from mail-bl2nam02on0085.outbound.protection.outlook.com ([104.47.38.85]:59104 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750943AbdJBIYi (ORCPT ); Mon, 2 Oct 2017 04:24:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=CkMNvmhAsGknWOx+xhRNKuCHOmm03+sXwBARJrISWgg=; b=KRHga3zDkPsZ4JU2g/8FEyQB2wAhg/bFLx47zgWJhRFWkUMOjEY8yVYaDyiEgGWne0dUIJJw0+mJ82wqi61O/zB3EeCE5XXLUk/G5PMjgka+F0ciii7LaR80Sh88zbbVZ8QreqkohlReNrCmNPQ2MkFd92nNcDtl+cRt528+OUg= Received: from SN4PR0701CA0016.namprd07.prod.outlook.com (10.161.192.154) by BY2PR07MB487.namprd07.prod.outlook.com (10.141.219.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:24:32 +0000 Received: from BL2FFO11FD025.protection.gbl (2a01:111:f400:7c09::101) by SN4PR0701CA0016.outlook.office365.com (2603:10b6:803:28::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.9 via Frontend Transport; Mon, 2 Oct 2017 08:24:31 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11FD025.mail.protection.outlook.com (10.173.161.104) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:24:30 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:24:22 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 01/12] qed: Add ll2 option to limit the number of bds per packet Date: Mon, 2 Oct 2017 11:23:47 +0300 Message-ID: <1506932638-26268-2-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(2980300002)(428002)(189002)(199003)(50226002)(189998001)(106466001)(69596002)(2906002)(36756003)(2351001)(105586002)(50986999)(76176999)(305945005)(4326008)(50466002)(77096006)(316002)(47776003)(5003940100001)(478600001)(72206003)(356003)(6666003)(16586007)(48376002)(54906003)(86362001)(5660300001)(104016004)(101416001)(2950100002)(6916009)(107886003)(8936002)(81166006)(81156014)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR07MB487; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD025; 1:RAEc35oa266n6mAke72+NoHal9Z4kTuXrC+KLe74qmlKKHESk9XXM94NTa3OXc9Ie8a2a1npFonYX2QOYCH1bxQzD4TQRFz/lSplKjhTQyc4uh9VxYrMo18nT9qVZ1TK X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d14a0ac1-9511-4943-8edd-08d5096f0149 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:BY2PR07MB487; X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB487; 3:M5BCNP0Z+LfGazOX41i3yXgke72niArgJCXpOgqPxwGtJtnD0lnweSfNOwezA+siwNFRcVKf23zV8NwjrH7USC5iELsaF/9+a3a4wOiazaK/v7q77qfVqY0B8+4zwkEKUNhEff6b64iPmoUxP8hMT3pN7bXLE8ou6VORJjiPk5QQqGoMZqBCF1bgdz7BaFaGGq/28I1eJnCsQYhV0z5olh+9hiKNf843PasL38fr1n9Su+0AEx+igR4CZw6d5xftYnVlnWBphS0Ja/cU2T1UNPI4RlsPZgxyhK/cn7qenKWpqvMGu6WRnb1Jd4P15ym5FYwLWOpTNFytjqo3uXaKWg==; 25:t5HJBWZx6duJGp4/7KftyaKfbraaBbbfYmIhXCAHmT0lXUAPjHEWIyn5MHX3YcMa0fHsPzbZZUAnC3tZbEXmQwc/qqdENf58p0GB5+K0aMnNLJz8AGuDj06zOUINZsSfYtFSO7uic04HyVqqtP72USMMlpx9QrYqB4vV19lrmLSSYKUiCQ9Z4lH96XIsvu1GcPPyTzTr7iJPgCXn7x5ZwyehcTLBd5ZkIvVwIzzAs0ZnI3k3jZLJFA3KatrUi/CF0HM7crQ9DA7Q0k6f7APMttlKaZ7++Allihy90muAAswh9nkDLn0sLsIVhZTuYhK26O//7KioNh9pDdFSX6Pucg==; 31:Sro8O1aBxCEiUUixrMIOP16zEhxU8CuLid+VMSz6siIX0G8MMC4ZcbD+Xd0jPSY8IxxkFrbB3VRUbnRjzC7c5Dc8rXe6eNJz/kMi/4Bhk+tM8/lRCW6isUoz3NIKF2iY07uTf+nWzya9gLpPLWBeXW1P3iyPmzPHPG0M2QnaVGtlzZy1vDuhACDYFDhXrvzvIsH+Q85SWUrRMBLfhZfHEGBlBByUghZ0zPptNXC+hEI= X-MS-TrafficTypeDiagnostic: BY2PR07MB487: X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB487; 20:vnd6am5s/1mosg+y3XYKz6vQMymzVW9rr1XDAGrsiHt/hGmZSM4cSIV82hDHOz4NY+kc05yhDJlzkFB/cy1bgZVqaasGC0v+HMWITNpkjIdOrpbdGCrne02rKHO7Ye7xFlWa1wKLctADG7JN2Wub6AEekjYv/aarRg5hN7c1fwM1iRB92T/QC/+ExZdvoyK6Qj66Vef0/Kre0D9ggivt3Km+yX5ss2yqHNjz4aQR704YtrJDylaPf0Nyqz8XUIyVU9kMpbC3+NKq9QLvvOg1jvpvDdfQTsT+6GJRzMrX3DT+XG9lkxIScgty1RlmokI2UGnSfIJP77gg1weUcoSLYuZdgQOrfTEy4w6H5jEe6dpKXtmCeh1L7tTE6qWMESwknpnL0ksRZPbsNzU33bQYcHDKqmIFLuR9vW5Oiyq0fFPmH8oEBZo498aQB6pKnJAdEUdQA6GCu7F8KR+3kEUV1cIDtzMduxlpnAkV7M4yGYVWyGyEecVZUwGbzgpmne+r; 4:z38vbhALMFdeV8AZ4j5CcywmuWE7WU/3jMePzsRCs54qfvPVtVbIJVL84x88kahuhgJw/jnffWRw7XhJAApy+3q2aJBX8/xoO9blvDvG1c77Ra27jGDMxZQkzFCihR35Cm4LtAyhTYGmCx9ylsMy2WjqxsfdCkzWbYY71gClujCyI1X3irVYCj9AYtbBC4xPAhEfQXbFbxKJKT3NbbN8swKZzZPdP+gxTcZ//fWdQUJZo/sMBNQKyhAdmxkqD+hF 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)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123555025)(20161123558100)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BY2PR07MB487; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BY2PR07MB487; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB487; 23:1CE1bBHwD4SWrc7hgT7nlt5VHi/tGbqrdN3oJx8dpPDMzb7CIcK7H0yo2RERwgUifXFojgViPSpUe9b89utZDjiHoVxj4Fo6yM9kAkY9MEMbOx00oVL3x2Kr44FYCCH5HJPgPO0BwzFpWW03hRszif4xtPFvam/HK2DmP+hE6q1DgN/zCedJUlysl3EDQ1kr1l+5XCSQHG+r2pzs3FJIBWiI0GGGBraGw6pp7r9PxIpWoDPAEtd90PlTBFIDwvSN2/T0fi6LiX8tH4Z+KeNG6jP0CJXvAL06dn1OuzaM58w/5dHIQvj3di3RlHNKF5nEsHYLWu7e50KfY4vgaZbD7h+O3fqBs/RpvMrsb4Y8+T20jy59fF9NkEpQvm/UteaVy1eBoi10VvsdPOAv2fyOLjzxM+BcOjDJKw3392otgaKBgOQwLobaqhCHdg3DU2xoIkpWUyCTXMeAWaehooCEThh68iHcIoWG1bbY6rx+MpI+nhGWnDdcFxoHTKt/+caICA4UzcP/odUPjQ/7xAHbfjyQRs4TPgahfIteI7DOyWEmRRCljZ6mKFkJQPjF1tq2idNg2g/hxui+e5/sWklEFrkP+UCHSnKpUsic9zvkMcjEOM4DuT71ZJ6Mxxj3wIhcate1yDZzaeJshM1YyXTPHZb04gbWuVJN6uDHGJ5TdPS38KZFU9gmHKBi3rKUMavWsJtwxxeLd1Lyw6/EkJDfrz2Fqb61RksjcCjUl8mYDpeE5AowFSD8BqPCsRnBT9qf9tF4GAiD831DDUycaOqWcVjn3dA5/WZ0SR70cc0H2S3dniKubrPaHzH3Gi9Tcm2qRqH7r1233swa0BpQwiy8+LzjTwoy4PeF9Q3kYRLuGjl6ygcHBC6AE+L5CRO24xrNLzB7mFiYT0oCg5OIUESh2EdQ1TYV0SJ2ErPVL1vRdFYxMF30WBGBM3/KFx/awikw1JRo9y07Zd5IVD9Jml5KugnBAaH57MnCNSEv1BEgmRmSehsAIHkggf4WJIfo5jwm X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB487; 6:q4A/d2cz2rkIvrebP7U8ZCd0C9kImBBdVCq8dSOhHj4mx32csUb4N+HXi0z2PIQn5OcXennEO02qgrMjaQcBn2KOmjSCus5V/F3HK4FgN8JgUPIZazHo5udoFwT5CSsJkpoK/bYj99uyBpS0JJEhGhqxtb6MLxf8zAkIjUI12IwQtOeYeJ+SNFRMs9fSdotpwUk00/XG4zWK2TndqP+ZUsq/kpB7nulk3r25+GrtqgKxdS3cUL9/CCiGFstFqZhw5rC+6jVw5/cwT+SrXqO5Oh/QcwbpHS2Pv3U2ODyxiFHySbhIiVtiaXb8uNz19axmVFcHGpDqHoE7CNjzSAffrg==; 5:koyCD5Oup30+M+41bWyTuQUmeWkcIv2Y3VXsLeUZcX9986Ee3PHnRTWUAcZcld7fwvMce/690vGfhftgWF748+1hAhBFStLQEsxlkPooZyBa9HlPGz9ZMtNs3iT+d/A6H5HDl4054MpTF6uLagF9Bg==; 24:xv33crn06sc0W6y0ke+7k01Ib1Qx9e2WngarJJ50pAD5tTlr8EBgbRp5KyYeCLgiMOIC2l10nWBL2P65fniU8RS2ij/rLfY0sBHFoCkSqlU=; 7:iRpwtEw3gdsyup/Kh7dFN8Uqzmd9JpFkbOdbDQu1MG6rl0Df2MYD//kwwmbrG8AY7kzJzPoI3sutlxG75VpXtIRbvxLaJTqtXXz9CYWNziOm6fOoDiUJoFp/7Ha7pYWdjxfgLwCN3uMP5/Akgt3OcnCrZtHQYU/jI7zrJ4I+6elGy5CqwnNnQRkxXrA/7SR6B14XyHmbPUM92Ln/T4Vo9Y9oMdzIm8EV4dsK9l24zME= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:24:30.6978 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR07MB487 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org iWARP uses 3 ll2 connections, the maximum number of bds is known during connection setup. This patch modifies the static array in the ll2_tx_packet descriptor to be a flexible array and significantlly reduces memory size. In addition, some redundant fields in the ll2_tx_packet were removed, which also contributed to decreasing the descriptor size. Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_ll2.c | 25 +++++++++++++++++++------ drivers/net/ethernet/qlogic/qed/qed_ll2.h | 7 ++----- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c index 250afa5..10e3a43 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c +++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c @@ -1105,6 +1105,7 @@ static int qed_ll2_acquire_connection_tx(struct qed_hwfn *p_hwfn, struct qed_ll2_info *p_ll2_info) { struct qed_ll2_tx_packet *p_descq; + u32 desc_size; u32 capacity; int rc = 0; @@ -1122,8 +1123,12 @@ static int qed_ll2_acquire_connection_tx(struct qed_hwfn *p_hwfn, goto out; capacity = qed_chain_get_capacity(&p_ll2_info->tx_queue.txq_chain); - p_descq = kcalloc(capacity, sizeof(struct qed_ll2_tx_packet), - GFP_KERNEL); + /* First element is part of the packet, rest are flexibly added */ + desc_size = (sizeof(*p_descq) + + (p_ll2_info->input.tx_max_bds_per_packet - 1) * + sizeof(p_descq->bds_set)); + + p_descq = kcalloc(capacity, desc_size, GFP_KERNEL); if (!p_descq) { rc = -ENOMEM; goto out; @@ -1359,11 +1364,13 @@ int qed_ll2_establish_connection(void *cxt, u8 connection_handle) { struct qed_hwfn *p_hwfn = cxt; struct qed_ll2_info *p_ll2_conn; + struct qed_ll2_tx_packet *p_pkt; struct qed_ll2_rx_queue *p_rx; struct qed_ll2_tx_queue *p_tx; struct qed_ptt *p_ptt; int rc = -EINVAL; u32 i, capacity; + u32 desc_size; u8 qid; p_ptt = qed_ptt_acquire(p_hwfn); @@ -1397,9 +1404,15 @@ int qed_ll2_establish_connection(void *cxt, u8 connection_handle) INIT_LIST_HEAD(&p_tx->sending_descq); spin_lock_init(&p_tx->lock); capacity = qed_chain_get_capacity(&p_tx->txq_chain); - for (i = 0; i < capacity; i++) - list_add_tail(&p_tx->descq_array[i].list_entry, - &p_tx->free_descq); + /* First element is part of the packet, rest are flexibly added */ + desc_size = (sizeof(*p_pkt) + + (p_ll2_conn->input.tx_max_bds_per_packet - 1) * + sizeof(p_pkt->bds_set)); + + for (i = 0; i < capacity; i++) { + p_pkt = (void *)((u8 *)p_tx->descq_array + desc_size * i); + list_add_tail(&p_pkt->list_entry, &p_tx->free_descq); + } p_tx->cur_completing_bd_idx = 0; p_tx->bds_idx = 0; p_tx->b_completing_packet = false; @@ -1698,7 +1711,7 @@ int qed_ll2_prepare_tx_packet(void *cxt, p_tx = &p_ll2_conn->tx_queue; p_tx_chain = &p_tx->txq_chain; - if (pkt->num_of_bds > CORE_LL2_TX_MAX_BDS_PER_PACKET) + if (pkt->num_of_bds > p_ll2_conn->input.tx_max_bds_per_packet) return -EIO; spin_lock_irqsave(&p_tx->lock, flags); diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.h b/drivers/net/ethernet/qlogic/qed/qed_ll2.h index a822528..8019336 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_ll2.h +++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.h @@ -63,17 +63,14 @@ struct qed_ll2_rx_packet { struct qed_ll2_tx_packet { struct list_head list_entry; u16 bd_used; - u16 vlan; - u16 l4_hdr_offset_w; - u8 bd_flags; bool notify_fw; void *cookie; - + /* Flexible Array of bds_set determined by max_bds_per_packet */ struct { struct core_tx_bd *txq_bd; dma_addr_t tx_frag; u16 frag_len; - } bds_set[ETH_TX_MAX_BDS_PER_NON_LSO_PACKET]; + } bds_set[1]; }; struct qed_ll2_rx_queue { From patchwork Mon Oct 2 08:23:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820368 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="EhfCvZBx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5FZk2jz1z9t4X for ; Mon, 2 Oct 2017 19:24:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751133AbdJBIYn (ORCPT ); Mon, 2 Oct 2017 04:24:43 -0400 Received: from mail-sn1nam01on0059.outbound.protection.outlook.com ([104.47.32.59]:22558 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751061AbdJBIYk (ORCPT ); Mon, 2 Oct 2017 04:24:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=D+LgvElR1y9ugf1VHUVy5KEvghx5SPjV3Cjl70GH018=; b=EhfCvZBx25/bwXLfvvT9MgNOSDb5/MTqEC37nPNgO2DmZR+0wGqd4eVCIXASKZnmWYWpCIuiwcWBTKHDDz3rPWqZF7RUKCqyvrumMb9hhNUoGqyaD1PHrI7QVZn5YK1ynkz/NkOI1xqyC+mQz4rTC+lVt/QL2xxQ+or2fecMbsc= Received: from DM5PR07CA0047.namprd07.prod.outlook.com (10.168.109.33) by SN1PR0701MB2093.namprd07.prod.outlook.com (10.163.132.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:24:38 +0000 Received: from BL2FFO11FD023.protection.gbl (2a01:111:f400:7c09::135) by DM5PR07CA0047.outlook.office365.com (2603:10b6:3:16::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:24:38 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11FD023.mail.protection.outlook.com (10.173.161.102) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:24:37 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:24:34 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 02/12] qed: Add ll2 ability of opening a secondary queue Date: Mon, 2 Oct 2017 11:23:48 +0300 Message-ID: <1506932638-26268-3-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(2980300002)(428002)(189002)(199003)(81166006)(81156014)(8676002)(76176999)(50986999)(2906002)(105586002)(106466001)(6666003)(101416001)(8936002)(107886003)(47776003)(478600001)(72206003)(4326008)(2351001)(50226002)(104016004)(36756003)(189998001)(86362001)(575784001)(69596002)(16586007)(5003940100001)(54906003)(316002)(5660300001)(50466002)(48376002)(6916009)(2950100002)(305945005)(77096006)(356003); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR0701MB2093; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD023; 1:FuuPEKslCVeycLogRDlpLvDohdj0X5TEPROXKNyTc9HmkkXDGXkbI2E/sfXYvKeaxcqeiUcdcoK+mm5C+vpH4cwsjMscyqkj300m6B4nZB137ajby8iGTSLgUocaIBc5 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2a09c0e3-10a1-4ad5-c254-08d5096f057a X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:SN1PR0701MB2093; X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2093; 3:QIfxoaX0oqG3UWOPlAmdQcmvRMQQW5+YoqWnfo2d5GG6q23feiqvDKGNx6v+RKrOPjuadgDJWBBgvqvobJNjpVFNYKqB+VRVwRMRBwa+5+osjZG2NBNP4KLTjGLGcuySq/TsxZdtgdn85jGNRCjg5Tdjc+sK5zg+yqSE1AI/jMI+PvvY+Y0QPNVInHyuMqTUB8Yl8T6qW/ZkFotH2tb+UCYbKR7ek8D+XlsU2oM5OOFAbiThHrth7q/OkFEXCUjzPGPTXzIEKpNWTFC8A25U1kBEGUoQB4rlhEeUZuovF07puv2V3GZ4oP3L900eoGhMV5oCLsnMmS6Eb59bIGbI8A==; 25:i8rC+EeTonPY1xQXwIMTjmq1GEVtFJeoQRCH38xhsbk1E5cjgkxMVxJnPWcNEk61B43OhCvMTqMO0vJTiaDSCJwYGAfqM+fGmVddoxu9XN420a1eqQeY1bVHi5xrI5XFnR7cZ+HF0kHdEva/FDx83Wh6NYc1gI+EsQbemOYfY1Clv8pos6+vlnfNcHnt/Z+PYzbOB4AYsLDLuwoi2sd4jo8ZxgV8HOOp09IGI8DDJz8sNzqSvkTN07HnQcDTpVkrhrWTFSJD1X3Z5WwCgB+wllbqZC35sFbqJhWRzE2/JptBURNsWetRZcpSejHlQ3hBOL0sFKbALcqXyYieTI2N5g==; 31:a16sNKX12BZtd7pSOkYTtKCFDRCYgZKTSDnYjc+pJBEiaN9mQ09D2For6TZom2xZlDDF9aQLnXCfiY2rPQdzgBam8qATgGGlE/ia1IZqGAtvKNLWHmfwvqe0fZ7UUJi5x7fQRDTqSlkCjN3rS2Dp/Ai5qw+SVd5IVTtktEqgCS8Kc8CewctgcCxVvY+nE44rwcKjGR+BqqjMXaGK+btXO3pN5mf2SFxdKkxqIO2XTZo= X-MS-TrafficTypeDiagnostic: SN1PR0701MB2093: X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2093; 20:Bs7lbkGPI0egEYJh/Z8E23EDURx26nGX7/lfFDezVJmX3tlbyUvSzmQMM54ZQXdqGLrTRzhrzeIY/b4PLHu+YfMQRLs4Yp96YsDm8dvPOCPfCQiYtnCLMrG2CofuGAL3EEhhugoYQ3WUDW+RLnaN/pkb/X29SSIGl/DJZOkZWio21SYSerAFqR2Y2joLpIqYShK0cySFkZD/JX9PSk7fz6r9YyEAJYiA8jyVxjF82OMpw+rr+v+y4QtzgLy27KzbH5gKLxCXPFeABRpQQLU+xINkG1ae+PTT3fUCAd1AEYAx73M/Eryp69JkjurEiAhCk+N6T23IKPMheHM7WWrbYfvC21eQcrAcpqc3CXXDI+rJ4hbjBSo1IPwiy9OxVQxJ1S7UnFedQykqmPM7YQtujSvgCvPlqp4bLcb+VesyFnQxOqVJmFNctz9mGVtDtOmAfeBdt7EM7TRzKnWe5sxzS2M//AX8aUn/7YJEuu+nKuVQa7DprXHiV8iwZZILC7HD; 4:8P5rh6ANyE7GtNpCO+/drO1Ng1r8KBRzAVzGMy6TnQCGagowDWDgzml+LGu6JPiFjjUsMj5ZhpVaTskMWZ5ITQ9cEeT42pn1jwFUp/FGCCoKvbvWIhsnBuouQpGNpJGI0ie01etxacw/bh45dP/TmXm5LKinh6wCSyp9FvXka8+gFb7k0bgbTkGCjT3/heLbNm60SMqOq7ooc26YVGqJnEbf0gAd9l1AyvG/gjAIdTlNvdLItmj9tlcTYsQDMTIw 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)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123555025)(20161123558100)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:SN1PR0701MB2093; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:SN1PR0701MB2093; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2093; 23:Eido9sPK100z/mBFUmXpDdd9UaCDFWqdrCA0Z24bxByXz5QwJb6nYullGvBc33qkirVWu3mBBT3Pia53qqLB+gPqtt6MEdAQerXWxIor7KOXjZIlKducJNmTn92x23Isd4gTe07J6qi4Na4WRTYNSA1FtVE12hfedjUiIvZZGK5Vk2h6mWjGx/ZNCPvXv1VuuvFldmlHlgE411E0072sByqPlqgp4FR6Vn4jOok1C1WaZEpmYX7TwYjVqXa+XVAN8VqzVYXf6GBWyGMnQjUN1a/w/xJDxLylN5lZ7ldqLj+VIm1Jplr2b+G+AculqBP0GVfgv3F5gVidfxCpTt8nli9zh8Sbw0HWp9nP5D1jRsZXFXubdbe94f2auldGuFGBNjOzs8Z+FfCfafptnFk4wg8gMfC9l24P6PM/XZ7+mnLObaRpbhEar0SRygHxKJeUJl5XsB4DszAJ8TfA6sV7TkGkWlMCAZ7tYBT1Qxh8bsy/z0ISqaPukXa8jzF8CYCg9Ednnj0CxT6hYWT6xJAr3kU3yLGC+KF3tPzWluXtkhgp4ow0VPA06KUVTQbSOGhfRF8V7mDXA5lfT59FZJ1njZfdC688p6PrrbpHKEXMXWf7cLMQf69B0uZ6RM2eTR3vhOlEK/f1TXRWAHmjDh6rm/J7Kfw1QACvrJUB4nOA3xK2ux0ljUhohdPWATEYurh+v9DO8OWPMVFw1JWyDFBeQB0slDqzdvxcG3e7ioxG1qilOaCosuEhAhgrAJTvlwAYTv8Zl3BlEox1e6vC1CS8BWx6NjR3MZKswDhiXhml7YksccXN2gCmcJadZESIt4ZF2wocgeyeqyFB5fyiLJbcKGWPydHzo/a3e3SQm0CRORntmtuQX28HFSKOv690SoPkQy8G9Tw1hh2QEAanJDwhcVR6i9BFmtObKJnVpxCDOXBflZSf+z73Hx2dXw/9LWQfxftAYn0w+ZAAip87BrgAnSHqKna7jBLeDw2G6LrIFtmCRwb7d8Np3tS+1dlIAifvpTI7MgB/f/t0FlMPXPMz6w== X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2093; 6:qU/EFRhGpnDWROtFZjOhdsjLDZwBuBM/233RUqNWgLFGCrrVxuyGgvBY6dVq1sCDzQCCuiI/mLLdfztJxTrD3mPZa8PIcqil7hIt9xbN6AtKaneak9vD920OHePMG4AVuYFT6KpIjRfiH5n/kXlichTTYX7lrpH8Fyki+zIOBiWiOqifODznaVruGlHBjhb2w4Vf8Bi9W/xBQSwWeKMysUPLA38pvaaU1QziTZjB16yLfm6NQiaLQxRs/+EECXx+dY0LiRrBT+3uBUAiDlAQuPRkZzMP2h/3YaUR67hlzN1E3zaZ2losK+XpgaiZToXwWv+lhryDJjKGdWKgLM0Hkg==; 5:zl98+9R6knxEMNepWiDmCn3dWkO3WtCfYpdLgLFShqkCvLQZ2B0tI/WW76eQ0Ge25GG+Ww8ZX+wCGph+HdhQ03neTrSJQLhKEB5E4S1ozcLPdHlAo6edAr0lwbs3fWjbBGsGrB3BYw5aGFf0yWl83g==; 24:voqXMj9jtOPWPIEKbdMUWUkV3ZPnMEc+N9YIyACyWsEFMypC7QPaq6XtGli/RpaufTuOYDXi3y7gbUeGjdqyVPkFc7l7HLqPDdOZdiiPC1A=; 7:8CI8FCBda9GujujvDhpdnWDEee/Yn/RyYz22Hqmvk0gcz6wAPCILdSW2UmGXkkIUH3nQpQS8PUGyvWgrLR7cV3e7+v6YwiikUD2yvVFQK6I90RRmuzVzOZpC3np7y3rH53Uhce6MS4CF6AoTGz5xveO0dguq+xwCzvbIMis0Fv+R/t1pkviyAYy3WVX7t49lhvWu5MSHnKvn2s8ZyZT5XoLDRquzobFN8ekmTTeYJ2g= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:24:37.7156 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR0701MB2093 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When more than one ll2 queue is opened ( that is not an OOO queue ) ll2 code does not have enough information to determine whether the queue is the main one or not, so a new field is added to the acquire input data to expose the control of determining whether the queue is the main queue or a secondary queue. Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_ll2.c | 7 ++++++- drivers/net/ethernet/qlogic/qed/qed_ll2.h | 1 + include/linux/qed/qed_ll2_if.h | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c index 10e3a43..1dd0cca 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c +++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c @@ -894,7 +894,7 @@ static int qed_sp_ll2_rx_queue_start(struct qed_hwfn *p_hwfn, p_ramrod->drop_ttl0_flg = p_ll2_conn->input.rx_drop_ttl0_flg; p_ramrod->inner_vlan_removal_en = p_ll2_conn->input.rx_vlan_removal_en; p_ramrod->queue_id = p_ll2_conn->queue_id; - p_ramrod->main_func_queue = (conn_type == QED_LL2_TYPE_OOO) ? 0 : 1; + p_ramrod->main_func_queue = p_ll2_conn->main_func_queue; if ((IS_MF_DEFAULT(p_hwfn) || IS_MF_SI(p_hwfn)) && p_ramrod->main_func_queue && (conn_type != QED_LL2_TYPE_ROCE) && @@ -1265,6 +1265,11 @@ int qed_ll2_acquire_connection(void *cxt, struct qed_ll2_acquire_data *data) p_ll2_info->tx_dest = (data->input.tx_dest == QED_LL2_TX_DEST_NW) ? CORE_TX_DEST_NW : CORE_TX_DEST_LB; + if (data->input.conn_type == QED_LL2_TYPE_OOO || + data->input.secondary_queue) + p_ll2_info->main_func_queue = false; + else + p_ll2_info->main_func_queue = true; /* Correct maximum number of Tx BDs */ p_tx_max = &p_ll2_info->input.tx_max_bds_per_packet; diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.h b/drivers/net/ethernet/qlogic/qed/qed_ll2.h index 8019336..346f3d3 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_ll2.h +++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.h @@ -121,6 +121,7 @@ struct qed_ll2_info { bool b_active; enum core_tx_dest tx_dest; u8 tx_stats_en; + u8 main_func_queue; struct qed_ll2_rx_queue rx_queue; struct qed_ll2_tx_queue tx_queue; struct qed_ll2_cbs cbs; diff --git a/include/linux/qed/qed_ll2_if.h b/include/linux/qed/qed_ll2_if.h index 89fa0bb..25153ff 100644 --- a/include/linux/qed/qed_ll2_if.h +++ b/include/linux/qed/qed_ll2_if.h @@ -171,6 +171,7 @@ struct qed_ll2_acquire_data_inputs { enum qed_ll2_tx_dest tx_dest; enum qed_ll2_error_handle ai_err_packet_too_big; enum qed_ll2_error_handle ai_err_no_buf; + u8 secondary_queue; u8 gsi_enable; }; From patchwork Mon Oct 2 08:23:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820369 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="L4LZCLy6"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5FZr5nttz9t4X for ; Mon, 2 Oct 2017 19:24:52 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751127AbdJBIYv (ORCPT ); Mon, 2 Oct 2017 04:24:51 -0400 Received: from mail-cys01nam02on0078.outbound.protection.outlook.com ([104.47.37.78]:34399 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750984AbdJBIYr (ORCPT ); Mon, 2 Oct 2017 04:24:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=0oW46LQoqU9Ww3WaK7IlePJmz9TOzAXFmd6t1P6iVMY=; b=L4LZCLy6FiHMcS1nZZvqngB5oJESu2FcV4JoVsiq0HCEln0qRX3b8OlcCxC80dm/WJf3/ElQb8oHwgyZydwQvuW4iMKrOCu/dkzPYZ9N5NroueeII39JbiXtiaLeqzNE3XC0tGUgRFMIhmAKzBHo/achTrGnYK342JAl6jf6I/0= Received: from BY2PR07CA0029.namprd07.prod.outlook.com (10.166.107.24) by CO2PR07MB489.namprd07.prod.outlook.com (10.141.197.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:24:45 +0000 Received: from BL2FFO11FD047.protection.gbl (2a01:111:f400:7c09::115) by BY2PR07CA0029.outlook.office365.com (2a01:111:e400:7bff::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:24:45 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11FD047.mail.protection.outlook.com (10.173.161.209) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:24:44 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:24:41 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 03/12] qed: Add ll2 option for dropping a tx packet Date: Mon, 2 Oct 2017 11:23:49 +0300 Message-ID: <1506932638-26268-4-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(2980300002)(428002)(199003)(189002)(72206003)(86362001)(54906003)(4326008)(575784001)(8676002)(2950100002)(107886003)(81156014)(8936002)(81166006)(2351001)(478600001)(36756003)(6916009)(16586007)(69596002)(316002)(189998001)(106466001)(105586002)(101416001)(77096006)(5660300001)(2906002)(356003)(104016004)(5003940100001)(76176999)(305945005)(50986999)(50226002)(47776003)(48376002)(50466002); DIR:OUT; SFP:1101; SCL:1; SRVR:CO2PR07MB489; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD047; 1:U3hJHOVyiAxvta+WKj1Na8TSWZTWew8vU0Se0V1zuL317Xy2jLm6NKk2sSswWEEHi2HN+HO2Ga9BwmfPylNGv2I+XhlCRgDzx3Xne3fPVk2W/k88Sarna4Yi5dBmCWh1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 80af751c-e1f2-48b8-9f72-08d5096f0972 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:CO2PR07MB489; X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB489; 3:n+EDI0/FPgxeE3LtDDtQ7gsXs3lo0jis9FBmZzNzPQIm3PRYy1KQSHwiZJ3IlG5zw0lrjtUCQCpxfpsrv0OXsxCTV2r5Rrg46u7QdA18fEieyMvLAiqn2LEmPgqRADtvjCShx603jz4zbeGOBpezKdQa969nxIA8iAXVEunYDM1GeuC3QRsOprIuRDdA3mF8wq+rA0NAGvaVLG/X8dRaplb6rYprQfWHfXTVBaMyanzZ7YsnSRbMtzd8DJEWqNgZeFtz1WfJ/fm5UPp9FW9FPRC8neJqUMnvxRMMZb9TpQJEw30H3ObVzcTCCGxj8S5fam8TTkdkKBMhHjmJGBCwOQ==; 25:23F0p3L5JXIZHLrEPIAp7I1QFyTjPNivzN73opGY/R85FZ7nzNk2LfdXoIFAKIfufRM/lYzJZBJsXdMpECzJo1zgalKome0dO1fyuhV4Y997uMmSz0bi+Ox2nZZPdnXi6lu9Oq5b10v8jkTglKQyGeGbqUWbrADB5FDKi9GSy/qO9PurOu/PPDA8zyeFbS2O6DkMncDwtpvigNNhqq8ux/DEay7PerFHhXsKZm86iPka06Cq1Hl2sik23UoWpaY03vqDjIMwZrX+dfTvXEawqoqgXWslHD8mJnSGq9Me1XfEQqEgofg9ojqTXSaPOfPenxgZb7rVXxXJsfsU66SnMw==; 31:Un+OHpncxtR5e2D7Zk9YnB2ciEWHzaWwMRUNXT1W+WbIf5NJP763bOQQRMMy4cHa6bg0bJJ4R2lsXrUmWczu/hkGR0Q8IBDrgwETpqI0YWyTPxbRswiJCIdAdE0xlbTXiTw95uX+ZYudr9SyecOFlNHE0QnfnovcbJU815jFa7q4rhEfqs+8R9nkvOGuI486EUlKfUmegzF9dMxeGTsVjjXMWJ+X5vKw9F0RbomTOLY= X-MS-TrafficTypeDiagnostic: CO2PR07MB489: X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB489; 20:5thkx/bHs7PAgdqWBltyLmI4VQQP5YpS+wijIOfrNZqoFn695aR0Ad57U1u7ya14XGRPwRHv9i2xO7jNR5tkpV2XN/emXR839BgbR5nH3h8Cb4PpApwRiQF3zjx/ckgngQIqCGj1LcEPrlDW+T70nFcJGcM/MvTDVxVxblIV5ZQ2DuwLgGmWfpHlxc+K/YbeYZmtH5+SqG7p+a6GKXyEjMXq37tGpVbrV8RcwSepXEleGwVPX27WwD2wH1FyMJZEAtrWB7cHwPaG1x0cVez1A1kFZNUC9jJqLXDhm0wHJG/Fk7L1LaCw44WtlxRLXqBr3ncdENpXD4HuQRcg8KxGMNCAyMXjiyKGk1PrkDVwtZE+S0mmyPGeVwk3H5TOeGit7g0uxpNd2mws8HBia66JS51BBJppy3k6Wn4+HIZ7EBbwynk7QyIPVHUm4iG+15XA5+OrNyLFix0Wa3eMszYqeotNJ5Cgw0LU4Oneff9yMBCgupEz+WVEj+Q2urM7AyS6; 4:K7qK3a8ievPk66IeQkmLfByeHjlGXNFED7bqaeq05Xn4N5CSfknrfn+T902zr0uZDl7maOnBNHaAbk3ADvDp7au1uQQi51sVbKBanKap35tjKW313rXBJwST4NkwRUOouKWBfm0dAc9iiqELa9rYrysQ4V4Qs45TQwLGHCMso5QoTolBH4gzNrSTWvYfrG/CUGCLFhmauuPAxkN3M8Lubnh8PrVPFa2zGgNXmDtCQHMM1xy3qxFL482dSPo/FdSB 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)(3002001)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(6041248)(20161123564025)(20161123555025)(20161123560025)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CO2PR07MB489; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CO2PR07MB489; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB489; 23:N5gzpZWs7pIRc6Px+e5UdCWlyvihqDt3mvtNi9rayxiaOtG+vbRGqAS85mt+7kLcgluMX8ZvxqWNzqurvzVeTcBKTELKMB3u1SeGMX2ydu6cjfPz3hMCnC/+0+Kvsil5PqVzIxvt7BaZWI5//paFbFaE+EuHNTAo82ZR4d0yAfz0Ze+gal3KoYCWaW7gmuYhESMEGUHHhPZTz25qy9FGR+0RFOP3gZLmJ5+5MUN58+r8nrzzS5C12/eIUIp38WfT8oDS3UHnenSpo21cUTWw3v3uGRhWcKgNs262ZNV4N66ktVopGwpQUDEdH1qBRPsjwjrMdqxC2guJcGGUZ6lmsVZe6Jb26xATfRbq8Qdw+hwrLdkF+Csw6n3nrKSsQq+Myd1kylUviEtQNxiWXpVNHI0IlWxKVmO0eD1haFUEF4NYfz5G0QX7nIh+0ojHgxd8s7qfKqtuJ/7QRzBuDmMba8dAqYdCkZn/8cnmVpz+0ECWEEwjhUTS0p8lB7D3N/fLCPdrE7fDuMzx2bIJSX57S3nUz33UIgUNRtviBJcK4MHFp3FqQRtCK1MCodKRyb1rNePF4fzri6FS8nX32ycLc1dDZdCFZMerVI11CcvyC4cR7Uik3xCR6yKZWww/KfClW9iajtdaqA1T7M2Qmsa4d3zLS/AMTVzq2SfkWlErbO+F9u7RJuqJdI1HFetxsGX1TPxjcqeGEyav91r+vEXrl9KRzSOZIrkU2C1EemfOnk/XaZrn81bNzeZyqo4uHUYK+lyK4O0/mPC1AdFe73roD106APXpqUZfm0tEAplkvPW594aHYRqSyiL3dKAYnsa+ifxLRYRNe19wLpQ1ld4UTX/FhtvlGqpQUJKIJQ7SSOpIW6uRIU/yo7yoHj1qfjQleI+24zgT+mPTJYEDKQZP8k99DtkheMJBqm5rVEf6hIGbYBD1UHamePjizn00p8eiJTeRxJvA1q9yhYRtXl2t0V8Bs8tPb0PDJ7WMztGXo/ALTsPqt7WG95BAkAOV2soC X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB489; 6:ccoWct9tuZN7a4GccQlTwQqlR+zbqHJ4aRT0V/rIRK24Zid53IeAa9x8PQqVny60ZImNCwUYWcRcJ1oseg3N3drzVmlceG+HEha20xbJYVkbaXQZSz/rYLx5a+8ApFgCuMdcSLu59ekoSiOqiNPmRJW1dzWmdmgrQUNA0OZfa+8L1NNTpiuwKIE95cFSHpdYvTzgspBi/5fiS9UlQtBAHTLr0y+h49tS/BHOM8OAf0u9GSQcqzzczdi5t320FJRi3ig+mlHYCVB3RqalmBnVzBekc2RErDhYGjgmvp+i096b3kuNtXHHtSTxZAgiWpAqWjOEoMOCTB3NABE7RC2iNA==; 5:EfDYQhIZ+t9gULqPpufVGxEkgxlTE9is+4MWR/X0UUbD6C/VmvSNaMQUl5SQD5zullEtIMVvEZJD/6cdxJ+l3d005kyvn87RfoXf7l6MZlIgOeDinLL/J9fPNfjvMxoC5Xelte/LkMBc+8suDma1Kg==; 24:yzu62aG7ebzDJdOFRsu+RFM8vwxmTQq7zEAyvsw2G7fQBB9mveAT8GzPjNKY35jVFyt/x1Mgl7qSTLAukAqOv5Wn47WLO17p4SPOqHqUN5A=; 7:uIG5uxmCsXfbhWoADhb4zG4kLR/LNuu1wwgvYiw1vNzgKiEMB5TW83DAyq4THx0JvqBahKmzawxztxPKLNCraE2k3s1qtA7uZkTfmlnuJoLKuALdemGApg3LhQX8X2N5iE+qaFxxh9myW/cHPReGxMBDLZHQIHnnhh8dzZOoOvmlY8KXDXm1VY2NC1X2mqyOenOV2L7nwCWwDaWfjNNpiLYXR/hznAcPfyA28NrZG1M= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:24:44.3887 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR07MB489 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The option of sending a packet on the ll2 and dropping it exists in hardware and was not used until now, thus not exposed. The iWARP unaligned MPA flow requires this functionality for flushing the tx queue. Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_ll2.c | 16 ++++++++++++++-- include/linux/qed/qed_ll2_if.h | 1 + 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c index 1dd0cca..49fcfda 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c +++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c @@ -1597,8 +1597,20 @@ static void qed_ll2_prepare_tx_packet_set(struct qed_hwfn *p_hwfn, roce_flavor = (pkt->qed_roce_flavor == QED_LL2_ROCE) ? CORE_ROCE : CORE_RROCE; - tx_dest = (pkt->tx_dest == QED_LL2_TX_DEST_NW) ? CORE_TX_DEST_NW - : CORE_TX_DEST_LB; + switch (pkt->tx_dest) { + case QED_LL2_TX_DEST_NW: + tx_dest = CORE_TX_DEST_NW; + break; + case QED_LL2_TX_DEST_LB: + tx_dest = CORE_TX_DEST_LB; + break; + case QED_LL2_TX_DEST_DROP: + tx_dest = CORE_TX_DEST_DROP; + break; + default: + tx_dest = CORE_TX_DEST_LB; + break; + } start_bd = (struct core_tx_bd *)qed_chain_produce(p_tx_chain); start_bd->nw_vlan_or_lb_echo = cpu_to_le16(pkt->vlan); diff --git a/include/linux/qed/qed_ll2_if.h b/include/linux/qed/qed_ll2_if.h index 25153ff..aa7cb3b 100644 --- a/include/linux/qed/qed_ll2_if.h +++ b/include/linux/qed/qed_ll2_if.h @@ -64,6 +64,7 @@ enum qed_ll2_roce_flavor_type { enum qed_ll2_tx_dest { QED_LL2_TX_DEST_NW, /* Light L2 TX Destination to the Network */ QED_LL2_TX_DEST_LB, /* Light L2 TX Destination to the Loopback */ + QED_LL2_TX_DEST_DROP, /* Light L2 Drop the TX packet */ QED_LL2_TX_DEST_MAX }; From patchwork Mon Oct 2 08:23:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820370 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="lMCeo6PV"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5Fb10J5yz9t4X for ; Mon, 2 Oct 2017 19:25:01 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751163AbdJBIY7 (ORCPT ); Mon, 2 Oct 2017 04:24:59 -0400 Received: from mail-sn1nam01on0060.outbound.protection.outlook.com ([104.47.32.60]:57388 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751128AbdJBIY5 (ORCPT ); Mon, 2 Oct 2017 04:24:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=lZlS/TcqLJt9xMd2i+yICIiVIdT80RjUQEoTOUgfCgU=; b=lMCeo6PVPeI/J+/n9Ie9xE69JXM6ZFUZGde5rrBCW/DUVxdnEldQ5f9Fren5yCf5T8oYZ9ETRAxdiXUuV47ZN6hITTtGVbE0SbmtqiB3FjG2CY+B9/Acr4y7XrGkCkrjAZNbHoTLGvD2FVUDoEoxD1O25kU4RCpgEh4cZjBikQE= Received: from BY2PR07CA0099.namprd07.prod.outlook.com (2a01:111:e400:7bff::52) by BY1PR0701MB1126.namprd07.prod.outlook.com (2a01:111:e400:4805::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:24:54 +0000 Received: from BL2FFO11FD047.protection.gbl (2a01:111:f400:7c09::110) by BY2PR07CA0099.outlook.office365.com (2a01:111:e400:7bff::52) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:24:53 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11FD047.mail.protection.outlook.com (10.173.161.209) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:24:52 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:24:47 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 04/12] qed: Fix initialization of ll2 offload feature Date: Mon, 2 Oct 2017 11:23:50 +0300 Message-ID: <1506932638-26268-5-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(2980300002)(428002)(199003)(189002)(69596002)(2351001)(50466002)(8936002)(8676002)(478600001)(72206003)(316002)(81156014)(189998001)(107886003)(54906003)(36756003)(356003)(2906002)(16586007)(305945005)(47776003)(104016004)(101416001)(86362001)(106466001)(50226002)(48376002)(81166006)(5003940100001)(50986999)(76176999)(6916009)(4326008)(6666003)(5660300001)(2950100002)(77096006)(105586002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1126; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD047; 1:rpLqFYcOqiB9aXPdhHo/5lMv9n6R4KN8zxghCCVrxRtunK7Ip9XGnx64jvJ2ooTd9WHLxoncFvVxVUq/Iova6l3u84diJ7Bq1SULAP7feZP1njiSkGQhnzTLCJN1bNTv X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3c1d3b50-e26b-4849-32eb-08d5096f0e92 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:BY1PR0701MB1126; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1126; 3:i8+muZnyiSh6jYBBtiYHvfXRiVBVYJC5uo9TA7U6JU4C7ORmurV0v4lh1Gg87OUYBTAkWSj6MBtU24CSg6ZNA+9pAo+OgEey4EO3dNz6FhUFIsC6MvlfDRr64O6zBGPsOub6M/CxH4Y8vmlJVo7YGgVDDnZfgEsRwKQyv9RSyEjI+MZQDNnNPCqowOJqyAAGWd/HQUNxZQ5YavSqSF3HlmzGs9pTeVg6j/U4SLyTjzgUr6cPp4XVx2ewltTe71ESzWZLbwjgzAA48nM2sYXy9hBGJhF6cON2hKfV1IY4ucfEkmOInlFjQXu2tZ13705anSLXeWenz3RlpSEmbi04Gg==; 25:pA57lN0aWyLaY+tukIQ5KXBK1x3BGMkp8dyWXOjgugQo1Z5nr7n0CRzLXrkKpv0fy0Xn9hiMOLtjKfXoWk8s9cpWvIBSj6kAnQg+aXLld71vGlUgkerSLmRcWzDto7jiGPU7fQG92D9gz5T6ggBA1WUwXKlpfMut0Kn5P6RImhsCnHCj3ULv6Y8nxcqh71aOJhFUyvAfroXsrZzd+3WRzVr/z6aKHIipNl2M1UfwMXJiqpG5qeJ8pIOjSz0tlP34Irbq6JfSN5l0mC9c8IT7WEf6Op/7i+AEr5hcwgthQ2S0ZnDD2Ps2TFn29f3zrertzyickcB1BzOw1+R7EBT2ow==; 31:Yx6+nb4LkEZdCuHazLj2Mzi51lOCAQhtSmOvpoN8chfqHmVV/ynFTC8vxa86ww9f3sR0ztNhn0fEFbQZ4Hj1jHC2iKzjM27VqTZY/0KsDvGkBtfIEb23MVIrE0hU2HD9x+8/uT++OfS7NcsMZyr7KCN8q70mDrSAMU2H1/Pms6khyyW9M8KNYc+BOQ9uBYBWxeLH1yqPQfNtKxjmUCTX2Qpbt+Z74sBBzl54KX9Hb3w= X-MS-TrafficTypeDiagnostic: BY1PR0701MB1126: X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1126; 20:S+EOXbb/8NK/zP0oMmtN2KDY1qJ7gj68xDheQM4zp2ROTV3cjTTUECuhP+zb0J0NQSm4PaAean1dwb7aJoOjY0LRHzdPOtQ4OrNmqxDLYYgTulSnw2+s8Jftw7sfhqKfcMnlwJ56ii1U3iAh/y9N0wtvuRcGyqQWDV+x5u6utWYV9M2/elLXwT2iiNZZctJQ9cpIaGyOf7zrMY7JFBKBp1HlG98NA3EMfdchAeagMV8X5gX6S125mtaDi1/eCrASLWjp69X7mFvU38sxjthMWoCHD4HXJafd7J/7TTqdXEeV3umXQElD+vzncOXOVU0BPdyHjxg//F3FnnPibWM/zGznLrJXwbTZmoxJ7mOns9KynYQQQnBZWyfUsHLnIfhUX5erarKsucgA6TaSz1D7lNafWgcU/QshxT5zJl1oTRzouxmx8In4mGOGJ21bNLSXJdt+3U/N//TOysij4JUiJjKMs5kdrh4iMe0lE/jAXCzdZXrYNeI+RZBXBJmlBm+o; 4:/gFkAMsN23nvjweM7o7hDdTEGu7dbpBrNrU+uhRcSJCfH7oo7kha5Mt3G5FqewoE/W3LLRZCnYf+5XwGnl413DbFC1Ts9yt9n9H2DAFIVGMTqD601szQRzIySwZiLQbVpBMDSGXqMQJ6pM3w7ND35WMaOwagu8l0Fk2npoMlcuRavrycoZKGp3o6vRB+Hx/v5Fge7T4DHSP4nTsI/7CJC0OQKW0aTJH+8BA3z0q+0ieC/HxFwJSjAJDWXl37Vt5P 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)(8121501046)(5005006)(100000703101)(100105400095)(93006095)(93001095)(3002001)(10201501046)(6041248)(20161123555025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123560025)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BY1PR0701MB1126; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BY1PR0701MB1126; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1126; 23:pCjQPHPuUS/QNYE5S1HgU/aoWqCU9V+xxI47lSGxQoR0IgDJfRxTpvBTGUqNarki9T9MfzAJGdW4+iciTH/ePxR3KvDmRr8UF/u3GN4s2tWJAjIgIqWeptBTLSTuoAOQfUtZ34Y1Hq+6+F9KjV9aXb0f59dixwLMHBszzo7C3HGS3QJyWxPBXnrF0yd5QQIo0m5WuNdTzVCAa1NMeGJErKdOTUhsu+6PVwsiY2+Qbre1qL0Jx4FJk+rFkeTOW59ORqGLbz30+Xuz0J4WALNHSLCTqfj2EN8YS/x2fJkxMUzDEXI5L/HSYTt8UuUN+SuFJGzHxmyoqRRn705xr93AkujifA4kBpQ03EtlsYlNPVHAAUMNlUSNufNZGrmTvhYFN79ruJf6oHwzPUNNfc5NO0RP0OPc6A9qtzQcRJFqMUT3ggoB8d6fkBxt7jMGVFDniU2kDyV+5QVYNK+dU8D2rWHLkCc10h678ZDMIHonwHpU0Kg3WYx9Xn48eJvhNWKDHG2xIMcZZBt3nBIOzKv9js9gvdUw7uc4bg8vnK5ByfphcjJlvso7RyomaEOtZgnWTssfqFDClVdX5dBR2aRz63taxM9tMjyzrWxGh3F4vILT1CNYB0i3qC2D/v3vOWwh6l1HyHpmPSkOrIdqAuLijR5W9J00AY4agDvVQClOI7sov8hAGIBzYGd48IYVbe2G656si8xxSwYA6xGV/+NipUBzb4lTILwtu3Si4phjWrlFu2hfZt4T6R/XrdLHi4MSHXL6v7Oi9b+lJBlooJ1mej4lcAGNAnwkRhcyHWmAGcRuCuk24ypkZVzQK0L589K1QcYMyW1PBz/MaOhPN/aRjuVUqMJRE5yr2JA/K6svduluIKw2dSdCpw24y91DwGL90E5Jbq/MP+ZcT6MSdIogNQFfPEdrjw9Ic/wwJLp/tjAwIfsiaTQVBKlYoCLDih+vjXRT4v2ZNIcvNG2qI7YnreI3KJm3RcIH2jA5g2ul+w8RWiJBJ1fp/lMi4p24jcZX X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1126; 6:/ZOkOIKWGKiOJHtCX+2oGIKxuf2tJnxLgyrcP+9V+isorlBCAIg/alCfKcoS9vXgaJAs0/UVnKUvZgBlIIY6OPkLrIFxzCaIra9MJ41z1sELIf2bgqmFUR1W5fSHZR07yvbKYB/8hNVw5fytS6AbZwePmvrD0w4pYHwqCfa+9dZnZIbWaLIUja9NhrxFq+47fvCSnOZiZ/4Mm7BAjNUkPQhiSfd1HMZ5jxK0Xip5W2qwtnpFzhlFWZHa8sqvrxnkCyEMvCZsM7JETZiL7N4yrUSL06hF9dEXba+5+c+20EzECYDfmIh1UgN5WGQszWz/GszEzGDQ9cM+EMuoNSe1cw==; 5:rE+0boOs1HuJDrThjOMq7EtczIzBykddSqiGiWdX66FdhxxWResnRQ5hoHB3ZbaJrKMXZQzN54+WI+Ww7/zGJTgFGn3cOzxgqM8kkSgBOvaZzZq5offoy4xZEb1Ah+he1B86/tcLbM4FVCUV3KasZg==; 24:ZfvHKFvIOjWfAvWF4zEzfPQLKDGacQp3e7wS3GOACwBI0xO+sGx7JW7w2SX4T7oJti9p7g+EM/5nexdAqHUYLACwlelOuHeZUjpLCzyN1iA=; 7:k12B8lviS40j1B7z0WHEa+Y4ddH5rOBxu0DFFSjtqvsPUH+fG2Z3+xTa+Qak7R1/c7vO5cjuSZ3iGjwW9VydagV5XO+HEnty35wy6kygb4lyftwUV0XCDxUFCoofwbN1YOA7DNyYyDa21DS46xJbZKeho5TXwRyc0/h4e1D/pMN+ysqQYjfaqGpiSkDMdACT9g4Fl7phhVP8Qe3flV0PL4/zp5rE/RR2/+cZd67oM8U= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:24:52.9843 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1126 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org enable_ip_cksum, enable_l4_cksum, calc_ip_len were added in commit stated below but not passed through to FW. This was OK until now as it wasn't used, but is required for the iWARP unaligned flow Fixes:7c7973b2ae27 ("qed: LL2 to use packed information for tx") Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_ll2.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c index 49fcfda..864132a 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c +++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c @@ -1621,6 +1621,9 @@ static void qed_ll2_prepare_tx_packet_set(struct qed_hwfn *p_hwfn, SET_FIELD(bd_data, CORE_TX_BD_DATA_START_BD, 0x1); SET_FIELD(bd_data, CORE_TX_BD_DATA_NBDS, pkt->num_of_bds); SET_FIELD(bd_data, CORE_TX_BD_DATA_ROCE_FLAV, roce_flavor); + SET_FIELD(bd_data, CORE_TX_BD_DATA_IP_CSUM, !!(pkt->enable_ip_cksum)); + SET_FIELD(bd_data, CORE_TX_BD_DATA_L4_CSUM, !!(pkt->enable_l4_cksum)); + SET_FIELD(bd_data, CORE_TX_BD_DATA_IP_LEN, !!(pkt->calc_ip_len)); start_bd->bd_data.as_bitfield = cpu_to_le16(bd_data); DMA_REGPAIR_LE(start_bd->addr, pkt->first_frag); start_bd->nbytes = cpu_to_le16(pkt->first_frag_len); From patchwork Mon Oct 2 08:23:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820371 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="lrUpPR2/"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5Fb83Cgfz9t4X for ; Mon, 2 Oct 2017 19:25:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751174AbdJBIZE (ORCPT ); Mon, 2 Oct 2017 04:25:04 -0400 Received: from mail-cys01nam02on0044.outbound.protection.outlook.com ([104.47.37.44]:22848 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751128AbdJBIZC (ORCPT ); Mon, 2 Oct 2017 04:25:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=RnKD5+PY5dhb1+zRM7KqHk5ldpnIi4cqofCjLuUCVx4=; b=lrUpPR2/PYA7r31bWlxAfRUntyi/0/TWDoWm+MuO7LMC4tSyp6+dC89A+esDjCl/Ytl1zL9vjsuoEJLq0t/BXOQO3ExWa4e8mF++XmbEbnv49cStB4sy35lyEQkso6AD/jf7LxpgvFSZF3WZD0+WKkgaRiZcPZdO4Tgw5cLIGm4= Received: from CO2PR07CA0061.namprd07.prod.outlook.com (2603:10b6:100::29) by DM2PR07MB495.namprd07.prod.outlook.com (2a01:111:e400:2446::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:25:00 +0000 Received: from BL2FFO11OLC004.protection.gbl (2a01:111:f400:7c09::183) by CO2PR07CA0061.outlook.office365.com (2603:10b6:100::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:00 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11OLC004.mail.protection.outlook.com (10.173.161.188) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:24:59 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:24:56 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 05/12] qed: Add the source of a packet sent on an iWARP ll2 connection Date: Mon, 2 Oct 2017 11:23:51 +0300 Message-ID: <1506932638-26268-6-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(2980300002)(428002)(199003)(189002)(316002)(69596002)(305945005)(8936002)(16586007)(5660300001)(6916009)(5003940100001)(54906003)(47776003)(101416001)(189998001)(50226002)(2906002)(81166006)(81156014)(6666003)(4326008)(105586002)(86362001)(356003)(104016004)(36756003)(50466002)(106466001)(48376002)(2351001)(107886003)(77096006)(76176999)(50986999)(72206003)(2950100002)(478600001)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR07MB495; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11OLC004; 1:L/G8HHzOtjDIpqLXcRYR+RBQz+F2M8ett3dJHlC6oXK2hbCsdFC5IxIfGxAVJ7UNy9JU9jiKfVstunWWlPvZYBYMsQYw5lKuvNK19/0H89F+8GeiDEyhR3k7JP1zGmSS X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1f622120-924b-4f9b-6e81-08d5096f1285 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:DM2PR07MB495; X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB495; 3:VE2V8htGnQI7ES3STfNfQ+JBDzJ148RZDDtDkd1r5tIxXjJs19d93W3CxjxD9yFLOXZ68bSlfpoAXWcQfbQF0RVHKYxO8QiLzHUjTNic80d1Ls+FP4lhD6jY/oUBguHIyR/8ozlRAk5ehj0cqZU0ozNSpdFKwVBEkbEqVu1phFWBD4eSWt50czIhgm/URsmdiNJrNO+b+iBXE/axQIRedHdBMUP9DF+57aUFHTR0hj+ucyM3Rc1uvw1flmL7ovN1GzoLQh6kjyqbLYcQEgH4CKEmsZh9ZKr0xSYXsOX9xBxLQgxqSlpHKZVxqdguvFuTDQ669CZ4+jHt2upvWFzcpQ==; 25:E2UjhDtDBk5PdNVlUEcc8yXJSThIIQLQgjSxEOX/2Tr/MRdKMSIKvDkLOq2krI9LQrSGge4wTHGN6oMlfliPIzwiHUyDNPU5KDNl0CAtz4h385Gevol5EeIJ0z9s04btcdTZJ/IZwEF1f0v4cZv/T+lL/o+rRQE4ZOrdVjvfKo5J3rCTb61BbICsWs/bdkCXwEy9d8kVuXteVqwhSpTPDxZlw6YCQRyANJwdFnx6hED1JhyKR6pSkb7oPCPm57TT8+F2Okjdt0HPNZlrbOLowY4zLHl8LfKOMNWsq2u0HlZeUi+kFcypLOgQ1mqSXtzpGVTp8+7Xmi5rj4Ic7mfbZg==; 31:bpr/jYSQRE7W0UufUMkX+HWaLsJ9GqvIGcTdnnVRVysQ9Vr74gtJ3Qf6QrvEObFgkTlmVLQ/Gmr+0J3Bc3N+o+JnBbnrtYdRjXH/9gIrAZalxHZQJx8Av36nfkdsQ9nC4R0vTfikYJiY/VWyLT2VA0ZnzF8uWk8k8F9Iwtm+rBT0BeR/ZpxjjMNAYO0Fkfqs+aWRf9ntQ5wEsCHszu1HTjFFvfpPWNDSurh/Pt7qrpQ= X-MS-TrafficTypeDiagnostic: DM2PR07MB495: X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB495; 20:I41/zJz6kyS1jSwnBxFzccI2au5Ld2Baj+1g249TFLi9SkCRoxhcRBzrvo3nA6leTSkV1DeJxe4fPwj9AVpqbw1+fFEUlF7lytYbCEZ0mamAgx7Wv+k/qtsdO1e5cd3vAsDccplTyrnbnc1JbKFqQostu2O3siNKQ4GmITFEHzO3Q1aBSjDnNrjsO2q+zXNz/gSVEcw1+hS9tvfEJSL8LfHtsyW7psVb43I2aB6r6ySATKHjsAkswyl3t/xCCRwZS0xT+Y9XdNK+iXi9oCAM6Ru433P7HsvCixWo9+xUpooowIjWDQwQBt/yICUQcrohI1k/sSPy5dEpOYq+a+4Ceemm2D26YQJtGN6GLHqxIvOWyo5/9YaH/hiDg+eAfYTXXHLNAURcxg0rwXc6UBqqa1dq+76Yt1K/LLm39w9hVKiWlN8B9s/wZNYEBzcrD/1xpzOawGyj0vYzBTDRxkNCTOkoSZ2q606nWbVh2fSlXFtCKWGwdr44Rx4WoTY0JI9j; 4:EkLJkDuUm1A8gdTm4OwNIM7Geyf8R3iVq+xtVMRzuxiWB5rUvdw3b9hGEWenPC7ZbjabD43aLayGwDzECFmx07LzYsYp8FyKt2b0AZOnMVYm2QhPYZsQDvC2kRGSBOL243LckvquC4eOeHkQzSeEe7naBzGH8tT+4qD2pjwdOHPYBh0Uxprdj7YRFTx6Kf21KEmEvpsPp5tM16JXpDgv8ddbEzg6ieGMwBPcu/YgOykkGr4tcrLAEohuKH1GJ7UC+B943RqRf2E1NOklbHjrgl6OZLmyHPBk8rUIrPOrBgk= X-Exchange-Antispam-Report-Test: UriScan:(17755550239193); 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)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3002001)(6041248)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123555025)(20161123560025)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM2PR07MB495; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM2PR07MB495; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB495; 23:SUScg35H0HSpx3FLgDPFNhuISDlOIat0+jj/1c2MzqAeDUp7n+vRtE66QF5KF1OXX/tuMwZOlWVBVt/Nu4BebjMEi+/I0jLpID8AULCtGahV7f/TSioFG3We3drRug/PzRt1ta3MFqg4rovc4TXtXuZHSl9vHZuZnMYh4Qgsz882Pyer96jtR66QjLCguQZLbZBWqY6UoMBM2Nb3Zp3/nRFy8UMad9hyqC0tCIV4EGXHP0/0P5AARh1H5NPTdpDaHTGEuxpF2M04qwqFnLiEY8YZrL0a5bdIkVb371c+0AiEZAA8/aQaqflivOC/9ywlnQTk4ElWLhat2ju+MlX0TV3lcAfbfer1s5e86vgpz1AeO2gzF8rznO/08T40Ze5aHaxG9RBhHJ4DOMSyYAZ5OTF9qPcZvzaZxYO7xvSaDTKnvuVW+rxhAMYS+MFO4dDro+hG0vK/OcLBqxPTuJKuRFjKObo7jyumCgxo+8IWEDLoXQTKDz1GReLkZhPhGFNp0JmDquH6jsH3Jryz9xRSdHQ+3ZHKsELOF2kBfQ99YKFryYmgrkMbrRautysUYi+25tWLsUsOUVTJIMFklRzseuBPTQ5bh2DDTRLQ4xBlLSiwlA+qOLwHW95wmmI4GitKC7xEQXqgqAFKvBGvUChQJH76r+21OVjNoDQLLeQFVM6tQgXBNc/lBWzdO6XJf3jTM5J71szThhejUQYp420/tlsChv88dckLQqC3UBdW2jjCE0//XC+wQsiOn59r5TfpbXlKL1NNaJ5oRe80MR/mUQzX/WKU2U1hmFSVutW+XYHp48Uw9GLTVwAmL4rRwqvlW8IgTHcXKqVcQqrfemJoo6wHCsrGl7ApTG2wKsHP1vGA1fKTo1U0G8orJ2AOk3nHeE9kjLWYVA351w/uyVT68qJvCWbt/iCfCPIGz0alm1kp7ovjkxfdmQaq/IS/8/1YtIoxdYNREyMCtgcQFLXuS2fCP/Y+luYJgYRNBvSebjPRIyFUaAXMykmv/SwRwIl4 X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB495; 6:vnt5zHYQI3J7sTDXQ7JwVp6aia7DJKK4/HMt+b77O7MRSKByGqB7zOi/LzcLF9fGefD5MYpKlRZYrZV0aWj6b3Mg+vc6tUIcE8PSSOTq547Wrhajrl1bdau+xT36h9JGr60jr1YgJyA8qkv12mLQcLhd4Dmnch71Phr59PKUDX6kXbuht+bTuCOf4K4aZnOSusSQq6rcAEnmv4BeWm5nsupzTXgAnu9Zw0J8kd9r+wOC0AvCVJEQZMclKUAqg2HXZTDlSgNUIU2Tz52VT1q4cXKAmV7QQdz8EGzgc0PsDFYNVpf2F7zclX/dTX199gwbJWoeMBr0uG9yliExolrIwA==; 5:sF8F1TF8pSNncg4BeBT7YtVyfN+Pi2RxHND9/m4AnMcnm0SACsKEtTHD1/4go1qNIUb6aB1hLUGo4d1NKE3d6V0baQJjkXYYKJuLdf5uNK9T/894kagljmrwQd+DkUR21zN3PUfs6gjUEt+Emsi+ig==; 24:9kylrUTVr+kX/DdjR27PpeSkwZ3ca0JhQPPTKnE7H8DUrkDGo/SI9aF8N0r7Kp3CUdBrM3n4kdSXiyPK6Vffv9a03lXI+kLLUNGI7FpoG+c=; 7:bFdNLulTUrkBihPH/nnbjG1hnFUH7mWNP3vH1DxqFlJ4/owBDKJvIpTUm+E1ZQ06SbjAsI4B7umF82Bk/KFI3Y9SGSL9XeRDxIY6NgjbseL+fsUZF2pvaxQAtZUwQh0EJCbcyG7hOgKaBmUJgFXgZXOEFLHXbem0mJvKqcTrJJcKkYgsPa2LqFBRFMUJytbbSNopslapA37sMRXWomPmXurdedjHeVXrvTkcEk597Xg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:24:59.6115 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR07MB495 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When a packet is sent back to iWARP FW via the tx ll2 connection the FW needs to know the source of the packet. Whether it is OOO or unaligned MPA related. Since OOO is implemented entirely inside the ll2 code (and shared with iSCSI), packets are marked as IN_ORDER inside the ll2 code. For unaligned mpa the value will be determined in the iWARP code and sent on the pkt->vlan field. Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_ll2.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c index 864132a..dbcbf86 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c +++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c @@ -1613,7 +1613,12 @@ static void qed_ll2_prepare_tx_packet_set(struct qed_hwfn *p_hwfn, } start_bd = (struct core_tx_bd *)qed_chain_produce(p_tx_chain); - start_bd->nw_vlan_or_lb_echo = cpu_to_le16(pkt->vlan); + if (QED_IS_IWARP_PERSONALITY(p_hwfn) && + p_ll2->input.conn_type == QED_LL2_TYPE_OOO) + start_bd->nw_vlan_or_lb_echo = + cpu_to_le16(IWARP_LL2_IN_ORDER_TX_QUEUE); + else + start_bd->nw_vlan_or_lb_echo = cpu_to_le16(pkt->vlan); SET_FIELD(start_bd->bitfield1, CORE_TX_BD_L4_HDR_OFFSET_W, cpu_to_le16(pkt->l4_hdr_offset_w)); SET_FIELD(start_bd->bitfield1, CORE_TX_BD_TX_DST, tx_dest); From patchwork Mon Oct 2 08:23:52 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820372 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="eJ/Bzpae"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5FbH02dcz9t4X for ; Mon, 2 Oct 2017 19:25:15 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751204AbdJBIZM (ORCPT ); Mon, 2 Oct 2017 04:25:12 -0400 Received: from mail-co1nam03on0062.outbound.protection.outlook.com ([104.47.40.62]:41761 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751128AbdJBIZK (ORCPT ); Mon, 2 Oct 2017 04:25:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=81BwDYb+enV4B+yAXz2Y1lIAex073cm4Ucvnx+BvG3Q=; b=eJ/BzpaeBj/7X5clJdprzXxlkEgwhehujHp7Xmao7THiIn/ubvb78HX1yYHeSqVAIu8VIXbGzuMRqecM8WU7UAlQLz5yuvVGINiz7snY6MK55Buya/dHn4lcb8Upq7m3KairRiQnPZAnXTfF7saWwHPWrztGtWcWyAgGAsg85Yc= Received: from SN1PR0701CA0006.namprd07.prod.outlook.com (10.162.96.16) by CY1PR0701MB1130.namprd07.prod.outlook.com (10.160.145.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:25:07 +0000 Received: from BL2FFO11OLC015.protection.gbl (2a01:111:f400:7c09::105) by SN1PR0701CA0006.outlook.office365.com (2a01:111:e400:5173::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.56.8 via Frontend Transport; Mon, 2 Oct 2017 08:25:06 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11OLC015.mail.protection.outlook.com (10.173.160.81) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:06 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:25:03 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 06/12] qed: Add LL2 slowpath handling Date: Mon, 2 Oct 2017 11:23:52 +0300 Message-ID: <1506932638-26268-7-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(2980300002)(428002)(199003)(189002)(81156014)(81166006)(8676002)(2950100002)(6916009)(305945005)(316002)(16586007)(77096006)(6666003)(5660300001)(104016004)(8936002)(86362001)(107886003)(5003940100001)(54906003)(4326008)(189998001)(356003)(105586002)(2906002)(106466001)(69596002)(2351001)(72206003)(50226002)(478600001)(76176999)(50466002)(47776003)(48376002)(36756003)(101416001)(50986999); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1130; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11OLC015; 1:mBk2B5pDADqFEWpeULcza+WECtoXkdgDo6Yx5zLWmCfmm6cnWG902zQAtP2jUapp4SpO3JbPgngiWHQtR1VBhIN0xHWtYTsvWo0GHetgYg5ls4yIiuhf11L/UE3B96Yf X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 31ac1ea2-4154-4abe-3201-08d5096f169d X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:CY1PR0701MB1130; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1130; 3:8UFumq2WkwDMZwAyhVjKOCcuxsg+rnPvNQuQtSK84TXP8GxeJcjosTJ2mpsxaxD5suwLyKPCEGQYCjKSR1aMX3qfiZYQjZ7gAEWqdxRogDHr8t/ca+G57kcuA80a8wp5K0lyppcMh6sBbaPaF9cHZbt1EjtYioiGiIIPZbLInkhQbi4KM+oYwtgzzTxA33BQBfMjxI//Fy5BRN4O7LTyIzgzlQB6xMahpz+7fqEhKf3c9Xe8Kj4No/FmxjM7SoW0eY84+p5iG0O7hozV+MNDryRaE+3MMClDQEp5/ckXXN5PmjXdY/28FkmgxEdlYp4x9wlwwKHd69gIJxN0pbSswQ==; 25:IijOuGL1FjewnIwVk1v21EVzbszRorsQHHB4xXw7rY9PY4ADSW4kzuTH8CcsxDKLmgxKCdX/LSGnVy62xSFPeVufKp7sC42pjlv+b2uhyKwM2EHYk5MCn7RSS3C0DVx1e5rSbi6AxfKzY0DhAQX6nTjLCt66+hOR8nENtQe9/LFvasSGEo5VJ12q6iOT68sE6XA+YhdBDP8fiS3Xq5CWrYdjhzl1aqdbpzuJ2CW7JuEg13syLr2w3/wN/F1Ymmm6glNUuJr5UiPcfn9F5R3SWaP83NiGHMV0RRL9c3CdTufztrTZmo7uTLtGSAOO7Satictr6d5WuyhC3Ilf1nk/Gg==; 31:DY1Mee3m4P9Iq+Ji03nS9LY1ivse+JtighsiOAXVFaevP2B5hrkz0M+RtJolgbg8WyAstecgNoWq5cpOlXTZBP5Acqg0S3kEVM1CXhehTbKJBLyVJ7oFK13xmyetQ0BLhtNfrFv1YNDZMXqFw8u0oaFAUQ8pU0RfkY7vBzXfJKnwnG79uGu9EyjOZPGb0Z3sSz1UtY8K8jOJsV2P+532Zko/jKtIrOQX1QBfFbPcnPs= X-MS-TrafficTypeDiagnostic: CY1PR0701MB1130: X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1130; 20:kQ/9xfPGH6MMJ3pVhdbEhkq4a4QRe3ubK8fF7CRjeEZ5y67M4ms81alL0Zk166PPT32df8IxWpDK0OhdM+W69rR7dRvclRaLtnccXdViY9o9EtG3K3e18VNWH9SBSW2nrqteaOk6b2r0+6N2ZXhRaEwgdfRCrVgdwNFGYC4PespT0OjySB65qItyIXKulHd7rM8ENE5nXDOIqOgsFDfnQJS9n3zSizceV9kkVnKZvTFK/u1DIu9sqegwLhc87SkNUsNQBqswwsaCSJdfBI+DUoPcA28yjKhn09/ZkR16uP+kKU/8NgJhVjctqcm3zztmC7vz7DyF6xBXx77UgmTdGAjAbpqDeVh99uhPuJdYoGMX7tp8fuFIy5u/lZTn+nslYlPCCl5+lPkmsnLnqHZ0fQp0yyA1+dCIvqxXj4LwhMOfXhnuMXPM+saEQ8KtC0M0iF26eACFsV8tA3Jn6sHL1Syn3sUP7p3Xu6wQsApNoEUD5Rje+Yj//1Jez4iKmMFx; 4:9kdhdYhd/Y3j4DsbzQws/Molc8DAw09TMJ08ArTpY65uMlFyOThCG7NkHc3UsilFIj8s8XKUzHbnrVpqfiMGrNYqf5fmuy8ghhJcp9KecGZji062lxkRjvRezyTIU0Bdq3gvhCrNDnVeo3PUqHENEETQlW4oH/AGc4RBEY7P5UsjfyTCzP1V+G9NAiJvq4PN9cF/JUkrmeoS2QQt4abgwjNRqEreEPGeMLyH1ZZlw65t2mzit/WMNFbUl8i6GDcc 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)(100000703101)(100105400095)(3002001)(93006095)(93001095)(6041248)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CY1PR0701MB1130; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CY1PR0701MB1130; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1130; 23:+BdwnVmud3glkuelP62z6ngFm2nBs/V87h85JpOhX6kK6y//2wskGLNBIiVV/n9TS1B5bQO67ENLGBUjNA8ufA0o0MpA2/6VdHgiSkWtP1KeQty+YJ7FzR/bh0Gne6knPeodESSyzrR45M/igNG+k5b8U6JWc9wXsqC+GyuYvC3x30t+u1qc3dHdcGeBVLjhGT31k1eCT/5FKNm+HKz1djULjAtl/wUpTA3hODL9Cj+o7lVymrclEFsCU3eYWL+m0k3oMvH14+TmJaW4OMX7iauIyfqAk9fpxs8zff2NaQqnKJUJ3yw0Y+EOyZkjRo8kous1oYbNc+plu5entjt73FsWt5ryUur9+h3rlrWhrgk3cKUbYVsGCYZf8lYBw7weQw3RZagpnw6SAQVb+JsZw60DzZhTkYUsChqFy6vADNkiE80NatMOmO+oj0rKXDCdrhGQkwuw+klAUSMRCh+QY/QvwlwfBnAe0CVobW+s+GScL0VwDxSr3tp+hPN1Rryk1R5ywmHhtmAWujRsAG0vn9GY/qS44e8HIO950yaMmS/t5Bef7S2wer1RBGwScZTsQVjrDT4U/DdSMAoOBXUWlWqrj5uMcXiEFr06pkKarDAFMnUN84Fh7z7S1LNRrKlr5bKHqVBajJhAR4l208idonOyEz3jVeWsjCcwnHVrT8LaERF1G6rmjAJBmyrswnRo7HNhIcvs8sTqORztv3uZ3XaQ84GbHWWbRmbVChp2vFGbbxwyGJsA3k9g7g7FFGkfQmM8O/koyjcDvvL5OEaZk/FwmkQnhyuw4qxZ1FXB9elh7Wx79w/Uv3hBr3zZG6T+PJ7tuc92fgTbfQ2r9H/n+NqVXyWcAuw24BEP4cB4BawUa0JqMmWd/Sptp9m/z2la3y2N7s8dhTgVLjUSWyARu4tES5UKWmC7HmD/7VQIQAdTo7UaubgfyPgv7vSHeLysyNlWMqNz+27FuemBywxdcwBAp7WfpKYdh3r0X2pIPv8UJ/vXGX7GrhqAe3FKKWPP X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1130; 6:T9oJijWfAibctZ2IQR/kfzDVtGcikBn4RDHPdJO0h+Ff/yR8FF3zK7QORhQU293tvrv9uXay2jSx/EXx0WM42UTrkSMy9j6D3kpdwxxofAcYHD5xeVTzhCQv+0H+rsr4TwfaVnjBQzjjuGy27a/OGTbup4QVrZSxK6oF61rqgFu+XpTC3tLvQYnrM1Ye2uASd2PBFSnd2/606mQJ2wp7MAeYENBsRsD+eHD1GAFFTcZrmjHKucic24ZKbulNV5XmqFFURjNWDG4fp6FIxvf7ma6k4hZY4uYW3+NlQUQ2oLF3lmLYYLqNx1nVUJ/j8stHdJkSCr2JqCbLI32u1N0+MQ==; 5:Z1SE3S0BXuVjkqNY4pai0s8+doIexON6+d7DIAWLdbRDsOX2cfYr0dDAQTyhLCAsd6sFeHV+NUfFBg6YG/qS8f7kipxvO+BwDRG64T5QtfW7QQ1GxLi8TokRHxd9a/h8b23VXwQHcx8TlEiRBbN1Lg==; 24:tlwvo+QzWjVU35TqF0RIA9VPToswgjO/dtyNxBy3jSj/PQ3Sj4HHHMslZiERZqgbrzQ1YcfvlpqTBqQ0yhy1Wak9pzksGKK4aBSPUMHGA08=; 7:bL+LDE+PxsmfKRe3klf0fvcfZ4ojI7Nod34BnaA3NkqEOflBKKYVwkDZRdffmYe57GPqXLfyDMmwxZufwG1CQ4eYckHsr7eCbTNcn6wC/aFBERFFLufNiG9sEuxjluKvOa2jdJi6rC46uPQdz+Yx6vUgm2dvwimhJ5a0B3qn7BpsB3ro9Fcn+2krzmShX16Zkq64bGbr6kMBtUw5zrMGEd8WybEuYkFrcrZ+sXIQ9JI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:25:06.4937 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB1130 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org For iWARP unaligned MPA flow, a slowpath event of flushing an MPA connection that entered an unaligned state is required. The flush ramrod is received on the ll2 queue, and a pre-registered callback function is called to handle the flush event. Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_ll2.c | 40 +++++++++++++++++++++++++++++-- include/linux/qed/qed_ll2_if.h | 5 ++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c index dbcbf86..5fa7a20 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c +++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c @@ -423,6 +423,41 @@ static void qed_ll2_rxq_parse_reg(struct qed_hwfn *p_hwfn, } static int +qed_ll2_handle_slowpath(struct qed_hwfn *p_hwfn, + struct qed_ll2_info *p_ll2_conn, + union core_rx_cqe_union *p_cqe, + unsigned long *p_lock_flags) +{ + struct qed_ll2_rx_queue *p_rx = &p_ll2_conn->rx_queue; + struct core_rx_slow_path_cqe *sp_cqe; + + sp_cqe = &p_cqe->rx_cqe_sp; + if (sp_cqe->ramrod_cmd_id != CORE_RAMROD_RX_QUEUE_FLUSH) { + DP_NOTICE(p_hwfn, + "LL2 - unexpected Rx CQE slowpath ramrod_cmd_id:%d\n", + sp_cqe->ramrod_cmd_id); + return -EINVAL; + } + + if (!p_ll2_conn->cbs.slowpath_cb) { + DP_NOTICE(p_hwfn, + "LL2 - received RX_QUEUE_FLUSH but no callback was provided\n"); + return -EINVAL; + } + + spin_unlock_irqrestore(&p_rx->lock, *p_lock_flags); + + p_ll2_conn->cbs.slowpath_cb(p_ll2_conn->cbs.cookie, + p_ll2_conn->my_id, + le32_to_cpu(sp_cqe->opaque_data.data[0]), + le32_to_cpu(sp_cqe->opaque_data.data[1])); + + spin_lock_irqsave(&p_rx->lock, *p_lock_flags); + + return 0; +} + +static int qed_ll2_rxq_handle_completion(struct qed_hwfn *p_hwfn, struct qed_ll2_info *p_ll2_conn, union core_rx_cqe_union *p_cqe, @@ -495,8 +530,8 @@ static int qed_ll2_rxq_completion(struct qed_hwfn *p_hwfn, void *cookie) switch (cqe->rx_cqe_sp.type) { case CORE_RX_CQE_TYPE_SLOW_PATH: - DP_NOTICE(p_hwfn, "LL2 - unexpected Rx CQE slowpath\n"); - rc = -EINVAL; + rc = qed_ll2_handle_slowpath(p_hwfn, p_ll2_conn, + cqe, &flags); break; case CORE_RX_CQE_TYPE_GSI_OFFLOAD: case CORE_RX_CQE_TYPE_REGULAR: @@ -1214,6 +1249,7 @@ static int qed_ll2_acquire_connection_tx(struct qed_hwfn *p_hwfn, p_ll2_info->cbs.rx_release_cb = cbs->rx_release_cb; p_ll2_info->cbs.tx_comp_cb = cbs->tx_comp_cb; p_ll2_info->cbs.tx_release_cb = cbs->tx_release_cb; + p_ll2_info->cbs.slowpath_cb = cbs->slowpath_cb; p_ll2_info->cbs.cookie = cbs->cookie; return 0; diff --git a/include/linux/qed/qed_ll2_if.h b/include/linux/qed/qed_ll2_if.h index aa7cb3b..4c4d989 100644 --- a/include/linux/qed/qed_ll2_if.h +++ b/include/linux/qed/qed_ll2_if.h @@ -151,11 +151,16 @@ struct qed_ll2_comp_rx_data { dma_addr_t first_frag_addr, bool b_last_fragment, bool b_last_packet); +typedef +void (*qed_ll2_slowpath_cb)(void *cxt, u8 connection_handle, + u32 opaque_data_0, u32 opaque_data_1); + struct qed_ll2_cbs { qed_ll2_complete_rx_packet_cb rx_comp_cb; qed_ll2_release_rx_packet_cb rx_release_cb; qed_ll2_complete_tx_packet_cb tx_comp_cb; qed_ll2_release_tx_packet_cb tx_release_cb; + qed_ll2_slowpath_cb slowpath_cb; void *cookie; }; From patchwork Mon Oct 2 08:23:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820373 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="Iiru1ZKD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5FbN4r1Mz9t4X for ; Mon, 2 Oct 2017 19:25:20 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751250AbdJBIZT (ORCPT ); Mon, 2 Oct 2017 04:25:19 -0400 Received: from mail-sn1nam01on0074.outbound.protection.outlook.com ([104.47.32.74]:39552 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750962AbdJBIZP (ORCPT ); Mon, 2 Oct 2017 04:25:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=fiz98cZ/Xo8UdrEFfbyDhrK68jXvq/8auwEWRqtfi7E=; b=Iiru1ZKD4lhabRYyrc2OWoQXT1V9wNgZauZ5ZvhxOH0b2Dw5+6s8dYjdHEXmlTWmFOTYk3SI66XD9n4p8hXOY3Zi1FuayzaaX0DWK3d8tGc8bBE/mgD+iuwODnz1I/fuaDTTgQE+cLBL/BtQPJXpGWsFhiNvqgLMRhbHq5e1d4k= Received: from SN1PR0701CA0044.namprd07.prod.outlook.com (10.163.126.12) by SN1PR0701MB2095.namprd07.prod.outlook.com (10.163.132.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:25:13 +0000 Received: from BL2FFO11FD045.protection.gbl (2a01:111:f400:7c09::114) by SN1PR0701CA0044.outlook.office365.com (2a01:111:e400:52fd::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.8 via Frontend Transport; Mon, 2 Oct 2017 08:25:13 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11FD045.mail.protection.outlook.com (10.173.161.207) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:12 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:25:09 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 07/12] qed: Add ll2 connection for processing unaligned MPA packets Date: Mon, 2 Oct 2017 11:23:53 +0300 Message-ID: <1506932638-26268-8-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(2980300002)(428002)(189002)(199003)(50466002)(16586007)(316002)(104016004)(50226002)(2351001)(105586002)(106466001)(5660300001)(48376002)(6916009)(2950100002)(81166006)(81156014)(107886003)(77096006)(5003940100001)(6666003)(8676002)(54906003)(8936002)(47776003)(72206003)(4326008)(478600001)(36756003)(189998001)(76176999)(305945005)(356003)(2906002)(86362001)(50986999)(69596002)(101416001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR0701MB2095; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD045; 1:yr5pdF65L6JLgkpA08YJ2fVzb0nMP3ADegOinc+XoQ3VUzyGzTUTUjGi6BmCGIkn9pDBgvfzOczVj2UFdtSu7FqzptkDiBJG7lGtbxqZCRvUcFvPcvqAZkrgy2P3nHD2 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aa462193-9f6b-42a0-9a66-08d5096f1a40 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:SN1PR0701MB2095; X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2095; 3:tSMTYPnUOylglXFoyxxW5lQPZUMAyucLV85ZCVe4ZXTxHfh5MxbtlZUc+PQnrdSPo4ZU+Q1dfbteD244SCdBslB08WSZo+n2b3sjNGKIRJpF+XY5RCleZC0SSvyFbmx6AxB4VZG6wIoZcZTKYHsvDUTnITnGPKsu4SHVbOtbe9umciG53HDQRJ6A0VYAGHlr8aLQ7XMyzpa0UvR48jafE/yfVO5THjUqX6kijGC/eUIKEdeiVjT7aaWQ8NVzY1X+hi4H0f1Wyi2yYjVNt41MvjzHg1WPrbZgOMGp00b/A9ndJ3wEbPBBkQOotfOiP4pdCjA93xkH+9KL1HcPKVmAVg==; 25:lk7NuDXfKm8Hr3pjW4eL4HJsqprIPg9vxmQd7WvhuYNuK8m94X2zxUdrJ+fNYAabHCUyu7YS+6uDc20O3czS49nTYrL8Ps4LCQtdK2YUqX2EZ+FeLOUd8yL4I8CKy0XOIvf/YujNVbm1/vw2S4uIejfmdJiUgp0Dd9I/mQ+6oKNf/hBtyOuInHugIF6RKFJGRLuAScuEFC/KYbL31d3ffmo6kzpJUHUijE8D/3POpU4UTymV++a0Os5MLvbUyymOjHvJ252Ib3sNwpVtvGGkg/8AoKFBoxRb4XR9kFvMl9WfqmRWEXv6y7o6E3pye1xqmPorhJk6s9XtYQ+6NSMpUg==; 31:TpO94JSIpzr8gINnssgduTM3eAAgE6BN+BEb9aAjHhp+HFPuG1BjjG6UAvvhbMtqouuf2ib3IainUoQGdjTtTxape0mm8c0JrqOhLcTFP7x1FkBN51hJP/6GSa2xOLHkqDQEPNFhK9HlMP8Gfe8T4ZsTYucvs9aLW7hJLmvCoIeMHV9XWX/iA0OrHHZUHEtkugkfV7Mt1DfuMcPmuRZKmhaP7NHN2scu12mVJMAAgGc= X-MS-TrafficTypeDiagnostic: SN1PR0701MB2095: X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2095; 20:/bSbDR02SdZ8T+psCkwDOam/CL+pMWMQNVLwX8hT9ZtqlxhZwZ162tLe5c4DS/gNjSeCHVKNZnZUQpepP2zCuFNRlLnh9R1ap//00ZuhdA8bDEVms/bDjDqY5cu5ftdGeP6rzajABK2/U3mchTVJstF/vOo47zoFvGGhkKBfhVuN7KBhk8oW5TuX0bDBDT2aTSq69oSppefdoUQGzPOSsNflGJ3Bq4Sru3lobyt5n+TSmkVu+wacnSmIMYqsVwkLkhvul31qeLC8mJ4nUPGyesq+dftUK+n7k4/cEmJpHCE9qD3IK+eBcA9GobHNbb0x5rOonwe9h3dBmOWo8lKTxOKwgUA7cXci/5c9yncYF5bD2lX1pB/ykKP3jhhv+yfE+smJ0gY6XDoFfPmceuwikFgELEsQ81BNw+7E3dPd0zk3XYVdMq9gpBKcYqj7Y4wNDhpoUiWd0raaugLdHi1rUDa+KbJBeEHCxvlMQnz+S0VpgR/39WE5B4+UZri6XKbP; 4:w/2i3a4L3nW4BqS/G8y7YDf8bSwZrcyMqBCtbpkd73vcbPiFVQF+YW/gh8lRi8D67BYoXMD0Oap5GEtMG6vtOdvnbmi4AdDfmYlNiKGFXM8jWn6vXAyxbNXhN0Vdrs3yPU1XM4WvbfyqvCJuZADkCQdXgsOXvETBJUBb1seA3A1Rdj59eJHLoZP4JEkSne5He2Ys378s00XYEunk6ZgtXzqiiqJlgxyTNdBeLsLoQhON4DYUjfHgGvDnoTS8qZuV 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)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123555025)(20161123558100)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:SN1PR0701MB2095; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:SN1PR0701MB2095; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2095; 23:GpuSnw0phvdJRmuylABcxYZccqepMtKtqT3IOLMIqD87YACL0sfokZfRbQ2+FB2i/jW44bX+Dsr8RLRpdFVb4glJXGhfZjhVyl5nL9a5OgZZVc41ratOShDoLpMJLFOi8xE+GQ96zuS8TMmq++C3zL6izVFHa0ywHw2LpQNg4lnevUdwxaaETwOtdnm8MtxdVH4/TTn9TYPa5tHsPU6f1PXW+DuSSe+xOLdpScYMBn8D4XUQwI83q+pX9GqbpYYW8H1Ft6cgi3USzs8hAfDeMbp7l5IOCd2jb4U8sINhUcvk/s+tlq1SSy3y+dT2JVUiHbl8qRNZlQiVJjKEtaAnPM7hqD6HU+IykY+fOO/5bIBalo3NidpLVXzW2O94lW4dWCqY0GDYIYXbkYSIFqMsQJZhlicsjOEEN7cx1BqLD6eG8ya/5/02dYQLf5t7RT1V2NXKTV0g1QjNEKOIl/ozZifK7oEUGX5+CyQ1g23gsXi4G5iaIS33on37HRIBoVEGu7TCayidEHVWgfEqsdUtRfLjXUfoAXPoOpyMCNH7rrlKyZUeWATc/UaCRmWphwJpgCxNgZsY8gN+mMcWEuVc9VECNqCrfZ8RIDiyAfAbCU0uR0L7oTgeIsglgxRI3ALce/DGmPirjFyUDBV39EIcgM/ILZpuFyIJykjkzzGgg1cN/QTltlixpOMsCxpHbkeE5qLsHGOk0Q8vYBzP4ZKmFZO/ipixPXeXqzNbHJLJHb21NjBsaheCCSi3ZZIBIx8uB6m6EWgKz2Bujnihb59+7oPXBT7IsAtYl1Si1dCaoVv2c0SjxM6UJBOWJ7lcd0hNb0J2RcLEc4MCR5XVXEji8NMR6Eqek/Rbyg2GMO01ihXwoVAnl9lQvboEtCF3ICbvAdCu88nNdaFR3WVpug5+qnoBJgDEavgLWIW2nCgxgBHuw6fCEHqE8oxwJwehDBRmRIqqHzyXKreyytOjZ9MzA37ywoyriuIotPP45MDPjLC+rfXm+mHX94Tfq+kASBeH X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2095; 6:thbb+m/+8wtVd/FI6qdYUNUIYE5rWo5AtEGp1rmYG8sS+z1g6G6aQH32tFtLk0oZ/TkdEhX12wH/Mnzl5sp8rkjS7+zYUDunPDC4DNwLGzUo9kyfbIA8FRLMbkn3KhEa7H8Jq0C2vsVioQ8P1xsQW7BzgPhY4a9dDKoPAI4XyJnkjFdUfhpzhXXh/ngch71Gsjg+oOoaN5eYMjvjW8o3rd6Nr70PWwkCHM2QB7DKDESa5cA7pIaSpPiHJpExYKQCHA4t1LK58f4VczxEuojwpfRkTCsYiCpFKOaqXSKu1uLRLbOmWT2Bzfs4iO12pGbuUsQcg/HvkGWsDfTB3ozYUg==; 5:69nmtmg+7MqvcHBefGTMiyHzunubKBBUzyRCcZYGdph+KCBoenZBdrMRVj3PoXh83gPeg+HqkDFSWxxphyV7i/qjY4i4g47ghXNyNe+XNMtbU5WpeOgjbeZQbxZfWXmCXypta5R4FB2fhf2VDWfGew==; 24:omdzVMYB/7KD2jSXKa/55hCDxTNiFk2/wQsa+oRVtGYStpcqgXVnkAfvol+KSEF+oX3FuoF4Qjan6tvReFJ/fctz4xrBcVgpza2Vs/dsi0k=; 7:wtaHo6n9CyaBCyFYTtqJWXrS2WJNwTWRXzsZPW/IW9w6lBnYNLDx8Gy30T85Hls7l3SkdUBgYkwCE4AKo08QlVOcNLgAtrqplgbmuW+RhvfssPzYcpBL9X3uEp/bnRnocg/bK1kfBi1mQ7YWQBKct7ZwJBZvk+8nIA+L4R81z00q+4JJsEde4ULypKRLnl4hDd2ptWo3XVKe4/PKHyRw9jXRRTEWf48OvUk07ar8/Vw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:25:12.5822 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR0701MB2095 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds only the establishment and termination of the ll2 connection that handles unaligned MPA packets. Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 65 +++++++++++++++++++++++++++++ drivers/net/ethernet/qlogic/qed/qed_iwarp.h | 1 + 2 files changed, 66 insertions(+) diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c index 8fc9c811..f413621 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c @@ -1713,6 +1713,19 @@ int qed_iwarp_reject(void *rdma_cxt, struct qed_iwarp_reject_in *iparams) return 0; } +/* fpdu can be fragmented over maximum 3 bds: header, partial mpa, unaligned */ +#define QED_IWARP_MAX_BDS_PER_FPDU 3 +static void +qed_iwarp_ll2_comp_mpa_pkt(void *cxt, struct qed_ll2_comp_rx_data *data) +{ + struct qed_iwarp_info *iwarp_info; + struct qed_hwfn *p_hwfn = cxt; + + iwarp_info = &p_hwfn->p_rdma_info->iwarp; + qed_iwarp_ll2_post_rx(p_hwfn, data->cookie, + iwarp_info->ll2_mpa_handle); +} + static void qed_iwarp_ll2_comp_syn_pkt(void *cxt, struct qed_ll2_comp_rx_data *data) { @@ -1877,6 +1890,13 @@ static void qed_iwarp_ll2_rel_tx_pkt(void *cxt, u8 connection_handle, kfree(buffer); } +void +qed_iwarp_ll2_slowpath(void *cxt, + u8 connection_handle, + u32 opaque_data_0, u32 opaque_data_1) +{ +} + static int qed_iwarp_ll2_stop(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) { struct qed_iwarp_info *iwarp_info = &p_hwfn->p_rdma_info->iwarp; @@ -1902,6 +1922,16 @@ static int qed_iwarp_ll2_stop(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) iwarp_info->ll2_ooo_handle = QED_IWARP_HANDLE_INVAL; } + if (iwarp_info->ll2_mpa_handle != QED_IWARP_HANDLE_INVAL) { + rc = qed_ll2_terminate_connection(p_hwfn, + iwarp_info->ll2_mpa_handle); + if (rc) + DP_INFO(p_hwfn, "Failed to terminate mpa connection\n"); + + qed_ll2_release_connection(p_hwfn, iwarp_info->ll2_mpa_handle); + iwarp_info->ll2_mpa_handle = QED_IWARP_HANDLE_INVAL; + } + qed_llh_remove_mac_filter(p_hwfn, p_ptt, p_hwfn->p_rdma_info->iwarp.mac_addr); return rc; @@ -1953,12 +1983,14 @@ static int qed_iwarp_ll2_stop(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) struct qed_iwarp_info *iwarp_info; struct qed_ll2_acquire_data data; struct qed_ll2_cbs cbs; + u32 mpa_buff_size; u16 n_ooo_bufs; int rc = 0; iwarp_info = &p_hwfn->p_rdma_info->iwarp; iwarp_info->ll2_syn_handle = QED_IWARP_HANDLE_INVAL; iwarp_info->ll2_ooo_handle = QED_IWARP_HANDLE_INVAL; + iwarp_info->ll2_mpa_handle = QED_IWARP_HANDLE_INVAL; iwarp_info->max_mtu = params->max_mtu; @@ -2029,6 +2061,39 @@ static int qed_iwarp_ll2_stop(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) if (rc) goto err; + /* Start Unaligned MPA connection */ + cbs.rx_comp_cb = qed_iwarp_ll2_comp_mpa_pkt; + cbs.slowpath_cb = qed_iwarp_ll2_slowpath; + + memset(&data, 0, sizeof(data)); + data.input.conn_type = QED_LL2_TYPE_IWARP; + data.input.mtu = params->max_mtu; + /* FW requires that once a packet arrives OOO, it must have at + * least 2 rx buffers available on the unaligned connection + * for handling the case that it is a partial fpdu. + */ + data.input.rx_num_desc = n_ooo_bufs * 2; + data.input.tx_num_desc = data.input.rx_num_desc; + data.input.tx_max_bds_per_packet = QED_IWARP_MAX_BDS_PER_FPDU; + data.p_connection_handle = &iwarp_info->ll2_mpa_handle; + data.input.secondary_queue = true; + data.cbs = &cbs; + + rc = qed_ll2_acquire_connection(p_hwfn, &data); + if (rc) + goto err; + + rc = qed_ll2_establish_connection(p_hwfn, iwarp_info->ll2_mpa_handle); + if (rc) + goto err; + + mpa_buff_size = QED_IWARP_MAX_BUF_SIZE(params->max_mtu); + rc = qed_iwarp_ll2_alloc_buffers(p_hwfn, + data.input.rx_num_desc, + mpa_buff_size, + iwarp_info->ll2_mpa_handle); + if (rc) + goto err; return rc; err: qed_iwarp_ll2_stop(p_hwfn, p_ptt); diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h index 9e2bfde..9d33a1f 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h @@ -73,6 +73,7 @@ struct qed_iwarp_info { u8 tcp_flags; u8 ll2_syn_handle; u8 ll2_ooo_handle; + u8 ll2_mpa_handle; u8 peer2peer; enum mpa_negotiation_mode mpa_rev; enum mpa_rtr_type rtr_type; From patchwork Mon Oct 2 08:23:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820374 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="IyLeJXnZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5FbW3Z7yz9t4X for ; Mon, 2 Oct 2017 19:25:27 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751267AbdJBIZZ (ORCPT ); Mon, 2 Oct 2017 04:25:25 -0400 Received: from mail-sn1nam01on0041.outbound.protection.outlook.com ([104.47.32.41]:23456 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750962AbdJBIZW (ORCPT ); Mon, 2 Oct 2017 04:25:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=+/lh1Mvbemk3hzb84+KY+MtV48/I1nudZgZuYNN6weo=; b=IyLeJXnZAQqyZjf6NMipkiFHp35IqryIgH/0YBsEp4YUo7WqW+rT614WqUUI53xhjk7ggueQQe3el8R/oH7vyMYqC85WJL91nK0xbsE1lSOJFn668P/sG8Gln7ee1XPDvZoTG8Dy9CUp5bAMAzDTbmaCbscLVL6hNV3Az/jltCg= Received: from DM5PR07CA0034.namprd07.prod.outlook.com (10.168.109.20) by CO2PR07MB489.namprd07.prod.outlook.com (10.141.197.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:25:20 +0000 Received: from BL2FFO11OLC006.protection.gbl (2a01:111:f400:7c09::118) by DM5PR07CA0034.outlook.office365.com (2603:10b6:3:16::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:19 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11OLC006.mail.protection.outlook.com (10.173.160.95) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:19 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:25:15 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 08/12] qed: Add mpa buffer descriptors for storing and processing mpa fpdus Date: Mon, 2 Oct 2017 11:23:54 +0300 Message-ID: <1506932638-26268-9-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(2980300002)(428002)(199003)(189002)(43544003)(72206003)(86362001)(54906003)(4326008)(8676002)(2950100002)(107886003)(81156014)(8936002)(81166006)(2351001)(478600001)(36756003)(6916009)(16586007)(69596002)(316002)(189998001)(106466001)(105586002)(101416001)(77096006)(5660300001)(2906002)(356003)(104016004)(5003940100001)(76176999)(305945005)(50986999)(50226002)(47776003)(48376002)(6666003)(50466002); DIR:OUT; SFP:1101; SCL:1; SRVR:CO2PR07MB489; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11OLC006; 1:JggLy3L6pBywT6bKUPR8SzdqGR6RD1o2ilIq2TwhitOlvmbubJPFUzgcIOOnFZq9LX8HLNioUUivo+Mzc6pQbnnbrlWHJ4RIaPfUFHbX93OIk8FyBwza+ljyEUonughC X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d1a3670b-ed92-41fb-0f83-08d5096f1e4a X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:CO2PR07MB489; X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB489; 3:zPGJ/Y1XwR9x8IAb6q2TwzxKjhp3TteW6Vzr83bQYqwNFllFvu36R9CoOIzkE1BS1jcY+P3Cm1UpwUGrRu+et/4EMUCLOJUtjuoV8icJwpcQPyewzs38PzpVQasTdy9P9TjhGvo4mKGd2mHSYcCeNkatelzoMkg0kLFLolOME4sniimLTxtNbHOKkOTT5VRMj5QAVh3qrKNzmOmUB3QqL181c58qLiL8Jpu7FdZrqcQ0Te1YZv/Ru4I93kG96lpVMeAK7EU1G6bn+bYTsq2VlosID21PjCNUbzfWZideQw1vKrazfhhx7bpTlVavNFJc94WX7e09AeZlyyVkhdqu+A==; 25:ux7v4W121M6oguSkv26qXMHTGTEv+Y27EDJ2Ejm0DQeED3C2GnXKwv9n3+aJIwcsd+L/x+maiQeSf+qzT+jeUslVzg4lqPrCAzJyG/ybokCnIJo3Ll4u2FqnzKfehRu6Gy+U4JUfo6S4zcBeJqFS/ehs3gY4awcJkoyVdoEtPgWUMk/9ifQSMsyd69PnfkQB+mzCMTadEv9bOdly7qgvanDd+SgDHnACeGg17uSGv3/JjaYHtZ6Bima/jgVgz0FS5cE9JfQjOA7As3TRfJt7n2b0qHqPqKvvGiW46Bb4KCiWV0iq4AOJvMk/3oUhqNtJdjyhX0vbMGsmpJ19oxRBDw==; 31:2koctrjPEWsUdVG95tgpG++Xj3AzQJdPrPMVtQ3qLElHTIp2Y12Uzi8R3/ZUbSQvaJ7CskLunCHxtIJrYCehE8tGnPgW1dFL9JTraTDt2t/aOOB0CRF+f3UTyN6XauLsj2JIeZqxrfxGAYSMDTZpkpTjmqwjBF4rI3XeS+9yj/V1mH2ypURZ8yhYnSvvTakUxTuAm8aHiZ67sBWOgd9qyjE/OpozK7B80ut5CuATAsY= X-MS-TrafficTypeDiagnostic: CO2PR07MB489: X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB489; 20:z69NarybJM7q0JNU1CRhxieqt43cJjVs46gifA22RGOrH6kYIaLIHPfxVIi/dtVN4Qnr6v95WEFPdA3By7RtkLMS41g40HinyOOPvO+MCjtobW01LzpA4bPhHVv8b4jha00vSZXLYwtN4CvUN7+M42FkAHTlC94AC4yVUJu4beSHmryEiPUu08kzy/GoQwU6y52YGbDs9Ei8FlEXkg5ZswjtVETQXXSY3AZWIMBsLorgJyBuQSf8eFqZ8BuTNFNOoCzMF1eIxZSrmMeYN25go3g4jjX5tvIOCRUp1Ae7K/t79zvI+yviijU8CunXpcbv8TfDyigcfDemQBQN8iN7XL5+/lTiLiq0EFYHmS/mkmZ9OZ599Od5Sx8+siYoE7AyNr8gH3TgA/n1uo6knGa0Sfw02HvMBEciodietkVNet7UPMY9MduwGtebDnaU897QeYg10iIfyjjH3h66GHbsgTP5PtRUShQMeJ6ppxgt7pKBnL2GAdjTYWOIIqzUZZiI; 4:nwaW7wpVw+nwdnvZEET74wt+yD9eFtN8YG10aGeXsWFwrWoX1w7OrnyYUIUJcc6qkh/cf+3UI6Ax4IAT5VKtlQpiFj1GxvUuIqmR+NiDIIobM+Ik/qwCJyv20Bu0uIqomPyMZqY8cr/mg/5hGIB2ruHGoqbtn3b7ohjOzCyMAd7jbmbBjlH9peXU3kgr5jxqSIK8ngprGiVT6GViUUuDCPSzmOaSb8dcMc12UgXNBeKgTdJAROYx1rp24NJG9e0I 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)(3002001)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(6041248)(20161123564025)(20161123555025)(20161123560025)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CO2PR07MB489; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CO2PR07MB489; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB489; 23:lsD2IT4OYE9eoms6+w7gKzRHhtD87N8g2F5Lq2SOjVgYa6eoxQnExlRLK2BCqmvN7NhRm1IWhGmuXbigNDFhpXGXHwA4a/gbA5SnKQeJEXuhoQyDV6VooclH0ym8VnILgVZx0fNp31ds/alc70pu3F4eJnuuthUpLQyEy9RRS6SdDyOu4muxPrdQdj8WiSuYBo0ppKfD06pv/Rz378At20fP2+Akj3k/roeGNbhrfO4OegtnH66MxEmtI65jjwftmimlmMRySC2OXujGr7Mpo7kca0nYW8AohH46PdiUPZguGvOIRoX5LfxFLtQhSMZjnaez9+C3aRecAOd/F6WI02+X7IVvELpB6BsZ5E35RWwJUDe0vWwdBk0jtqE6UbhkI2qyKIyH1gMaEhdCzH2xopNm4BnvacIFP6jIHUptpe7woAaesGA8fCR0sPRcMiT3liKQyt3S5CZH9Nb98ksYB+aBpvitNrjsIu4XO6W5oLn28zTQer62Moyi1uI6C/YDcitL/VZjRIW3m/ZgkJDOoCpJQFv1yUIBIx+KXSX3Ka5lclJZwZuWgfXLJmtlj7zY2rYR5kEOZ4NxWk8UYRUZWxrxJ9b8T8W5iU8JpyhTSCua4KiWJMFax7aR89X5aJEGAidw/D+RJWgEvRHkuS36zigAE9yov7hE9KtKKXuKYKkcj5MdQj+BVs+BT90bv2JJkxE20cmAEi3n6Z92Hsutd8DFP0ZRnNNXhwf3QDjvFp01N4An+LpqMn4BvDMiFoxXB7WilCXMSskdxD9anUTu/WByC0pCrtw1VgGBrNJ74nIh2tGdxtaZ93Mw3uDYMtOIZiduVdzW20YV5WiVNMFJVwbq85mdSIyjCTbEb2hLblOr5E1AR97Y06wxtqH/M3f8YjAgxJs9DLlxdpfnt1DpeQvODzueRyQlW//HDeTPZpZlw2gMdsTN9+en1Au0GTuV82bVeXqEyKpZF97SHVsQxDj8hkwvGSUUX66lK2FbmU7IOplxxdLb7sL4fxOdepuf6oiJ7DvLXD5/riq2n1znig== X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB489; 6:XXcHo6LOeiDnq/F16GTbqDpzWM0pbeLfG1W+0ygZBLFa/WiiUkjcnhIUtQu3/zwzKIQEcKdY9SAHTeIueDQW51XRBrbk+hIdDN+5sUptAh9uoEmCc1AwM3eY6mPDcJiGDuAB1/C9nPz5tc4n8n+Bjr/lTl9vH0eM6/6y4Y/olI2or8w+SrcmcY38UPBR87iLiwyTqDuaw7jEIBCyWTtPCe5wYLtg23g2BJsxyj9fLkpNn9cNzs0tqVs4QO60dHkgscirDFD+FtJKKBB6LKn4uTC6ZACoqB2VCphEdT+V6qJIB2U9vDK2/9fb0NEiEU3NPCaMUWrvQO9VDoMaLhJMoA==; 5:rjwsbPdazN89ALAGRncT8QWF81jzkWE721Hzm2IQLbwe0i8ZIna8h5MKjnptTyWihaqpiMA00fDwBc8MOLsc+xD6K5yu3RfzYth2YQPvkgbFkvJ8spR4VfpdOgPf/Za46NL1QZLRP7T0yWmpTmz0bg==; 24:vQQQF1wMLZqXHMYW2VCenBRN9yfC8nSLvnDiUA5xGud42isuHdU6XctCjjlKB/LUp7N2Ztf+DgGvL8t3aFxBOV3VlUHbUugrtsnVIvHqNJg=; 7:ClKrm8gqkfVxoVRPsEofopkDZWfrtaR5KGPcU6gpzxY0fnr1G5ffs9jGHQtL/zxosGrdrasmJ5WEKd08sGCYX265dXRZzRSHrnRB2a/r/P4I6hRggYHoVgpirsckovVmQmaBOKSNgdLymevzsse8epatk+kSgQezkB/GMiWxPJpzwItFHQv8R/0R4pdkVLHeI5CB+vN7nMfoME90g6VxqqeroVXZWi/QPoL9yx4BOqE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:25:19.3551 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR07MB489 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The mpa buff is a descriptor for iwarp ll2 buffers that contains additional information required for aligining fpdu's. In some cases, an additional packet will arrive which will complete the alignment of a fpdu, but we won't be able to post the fpdu due to insufficient place on the tx ring. In this case we can't loose the data and require storing it for later. Processing is therefore done in two places, during rx completion, where we initialize a mpa buffer descriptor and add it to the pending list, and during tx-completion, since we free up an entry in the tx chain we can process any pending mpa packets. The mpa buff descriptors are pre-allocated since we have to ensure that we won't reach a state where we can't store an incoming unaligned packet. All packets received on the ll2 MUST be processed by the driver at some stage. Since they are preallocated, we hold a free list. Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 116 ++++++++++++++++++++++++++++ drivers/net/ethernet/qlogic/qed/qed_iwarp.h | 11 +++ 2 files changed, 127 insertions(+) diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c index f413621..efd4861 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c @@ -1415,7 +1415,10 @@ int qed_iwarp_alloc(struct qed_hwfn *p_hwfn) void qed_iwarp_resc_free(struct qed_hwfn *p_hwfn) { + struct qed_iwarp_info *iwarp_info = &p_hwfn->p_rdma_info->iwarp; + qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->tcp_cid_map, 1); + kfree(iwarp_info->mpa_bufs); } int qed_iwarp_accept(void *rdma_cxt, struct qed_iwarp_accept_in *iparams) @@ -1716,12 +1719,103 @@ int qed_iwarp_reject(void *rdma_cxt, struct qed_iwarp_reject_in *iparams) /* fpdu can be fragmented over maximum 3 bds: header, partial mpa, unaligned */ #define QED_IWARP_MAX_BDS_PER_FPDU 3 static void +qed_iwarp_mpa_get_data(struct qed_hwfn *p_hwfn, + struct unaligned_opaque_data *curr_pkt, + u32 opaque_data0, u32 opaque_data1) +{ + u64 opaque_data; + + opaque_data = HILO_64(opaque_data1, opaque_data0); + *curr_pkt = *((struct unaligned_opaque_data *)&opaque_data); + + curr_pkt->first_mpa_offset = curr_pkt->tcp_payload_offset + + le16_to_cpu(curr_pkt->first_mpa_offset); + curr_pkt->cid = le32_to_cpu(curr_pkt->cid); +} + +/* This function is called when an unaligned or incomplete MPA packet arrives + * driver needs to align the packet, perhaps using previous data and send + * it down to FW once it is aligned. + */ +static int +qed_iwarp_process_mpa_pkt(struct qed_hwfn *p_hwfn, + struct qed_iwarp_ll2_mpa_buf *mpa_buf) +{ + struct qed_iwarp_ll2_buff *buf = mpa_buf->ll2_buf; + int rc = -EINVAL; + + qed_iwarp_ll2_post_rx(p_hwfn, + buf, + p_hwfn->p_rdma_info->iwarp.ll2_mpa_handle); + return rc; +} + +static void qed_iwarp_process_pending_pkts(struct qed_hwfn *p_hwfn) +{ + struct qed_iwarp_info *iwarp_info = &p_hwfn->p_rdma_info->iwarp; + struct qed_iwarp_ll2_mpa_buf *mpa_buf = NULL; + int rc; + + while (!list_empty(&iwarp_info->mpa_buf_pending_list)) { + mpa_buf = list_first_entry(&iwarp_info->mpa_buf_pending_list, + struct qed_iwarp_ll2_mpa_buf, + list_entry); + + rc = qed_iwarp_process_mpa_pkt(p_hwfn, mpa_buf); + + /* busy means break and continue processing later, don't + * remove the buf from the pending list. + */ + if (rc == -EBUSY) + break; + + list_del(&mpa_buf->list_entry); + list_add_tail(&mpa_buf->list_entry, &iwarp_info->mpa_buf_list); + + if (rc) { /* different error, don't continue */ + DP_NOTICE(p_hwfn, "process pkts failed rc=%d\n", rc); + break; + } + } +} + +static void qed_iwarp_ll2_comp_mpa_pkt(void *cxt, struct qed_ll2_comp_rx_data *data) { + struct qed_iwarp_ll2_mpa_buf *mpa_buf; struct qed_iwarp_info *iwarp_info; struct qed_hwfn *p_hwfn = cxt; iwarp_info = &p_hwfn->p_rdma_info->iwarp; + mpa_buf = list_first_entry(&iwarp_info->mpa_buf_list, + struct qed_iwarp_ll2_mpa_buf, list_entry); + if (!mpa_buf) { + DP_ERR(p_hwfn, "No free mpa buf\n"); + goto err; + } + + list_del(&mpa_buf->list_entry); + qed_iwarp_mpa_get_data(p_hwfn, &mpa_buf->data, + data->opaque_data_0, data->opaque_data_1); + + DP_VERBOSE(p_hwfn, + QED_MSG_RDMA, + "LL2 MPA CompRx payload_len:0x%x\tfirst_mpa_offset:0x%x\ttcp_payload_offset:0x%x\tflags:0x%x\tcid:0x%x\n", + data->length.packet_length, mpa_buf->data.first_mpa_offset, + mpa_buf->data.tcp_payload_offset, mpa_buf->data.flags, + mpa_buf->data.cid); + + mpa_buf->ll2_buf = data->cookie; + mpa_buf->tcp_payload_len = data->length.packet_length - + mpa_buf->data.first_mpa_offset; + mpa_buf->data.first_mpa_offset += data->u.placement_offset; + mpa_buf->placement_offset = data->u.placement_offset; + + list_add_tail(&mpa_buf->list_entry, &iwarp_info->mpa_buf_pending_list); + + qed_iwarp_process_pending_pkts(p_hwfn); + return; +err: qed_iwarp_ll2_post_rx(p_hwfn, data->cookie, iwarp_info->ll2_mpa_handle); } @@ -1872,6 +1966,11 @@ static void qed_iwarp_ll2_comp_tx_pkt(void *cxt, u8 connection_handle, /* this was originally an rx packet, post it back */ qed_iwarp_ll2_post_rx(p_hwfn, buffer, connection_handle); + + if (connection_handle == p_hwfn->p_rdma_info->iwarp.ll2_mpa_handle) + qed_iwarp_process_pending_pkts(p_hwfn); + + return; } static void qed_iwarp_ll2_rel_tx_pkt(void *cxt, u8 connection_handle, @@ -1986,6 +2085,7 @@ static int qed_iwarp_ll2_stop(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) u32 mpa_buff_size; u16 n_ooo_bufs; int rc = 0; + int i; iwarp_info = &p_hwfn->p_rdma_info->iwarp; iwarp_info->ll2_syn_handle = QED_IWARP_HANDLE_INVAL; @@ -2094,6 +2194,22 @@ static int qed_iwarp_ll2_stop(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) iwarp_info->ll2_mpa_handle); if (rc) goto err; + /* The mpa_bufs array serves for pending RX packets received on the + * mpa ll2 that don't have place on the tx ring and require later + * processing. We can't fail on allocation of such a struct therefore + * we allocate enough to take care of all rx packets + */ + iwarp_info->mpa_bufs = kcalloc(data.input.rx_num_desc, + sizeof(*iwarp_info->mpa_bufs), + GFP_KERNEL); + if (!iwarp_info->mpa_bufs) + goto err; + + INIT_LIST_HEAD(&iwarp_info->mpa_buf_pending_list); + INIT_LIST_HEAD(&iwarp_info->mpa_buf_list); + for (i = 0; i < data.input.rx_num_desc; i++) + list_add_tail(&iwarp_info->mpa_bufs[i].list_entry, + &iwarp_info->mpa_buf_list); return rc; err: qed_iwarp_ll2_stop(p_hwfn, p_ptt); diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h index 9d33a1f..2c53fe4 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h @@ -60,10 +60,20 @@ struct qed_iwarp_ll2_buff { u32 buff_size; }; +struct qed_iwarp_ll2_mpa_buf { + struct list_head list_entry; + struct qed_iwarp_ll2_buff *ll2_buf; + struct unaligned_opaque_data data; + u16 tcp_payload_len; + u8 placement_offset; +}; + struct qed_iwarp_info { struct list_head listen_list; /* qed_iwarp_listener */ struct list_head ep_list; /* qed_iwarp_ep */ struct list_head ep_free_list; /* pre-allocated ep's */ + struct list_head mpa_buf_list; /* list of mpa_bufs */ + struct list_head mpa_buf_pending_list; spinlock_t iw_lock; /* for iwarp resources */ spinlock_t qp_lock; /* for teardown races */ u32 rcv_wnd_scale; @@ -77,6 +87,7 @@ struct qed_iwarp_info { u8 peer2peer; enum mpa_negotiation_mode mpa_rev; enum mpa_rtr_type rtr_type; + struct qed_iwarp_ll2_mpa_buf *mpa_bufs; }; enum qed_iwarp_ep_state { From patchwork Mon Oct 2 08:23:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820375 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="OB2n+qgS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5Fbl0pDKz9t4X for ; Mon, 2 Oct 2017 19:25:39 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751291AbdJBIZf (ORCPT ); Mon, 2 Oct 2017 04:25:35 -0400 Received: from mail-by2nam03on0059.outbound.protection.outlook.com ([104.47.42.59]:12181 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750962AbdJBIZb (ORCPT ); Mon, 2 Oct 2017 04:25:31 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=LXy2jNq4+4AlzHv49kTnxbten2Vh/saLn4xWSKyctSw=; b=OB2n+qgS/Z+K6JF/NzKFyokr77PVuBF6MO+hJ/JJrYcJh96+ZL7RoZNx0Hok8YEFqJ5QJOc5uufdQ2rszsHVjPTcrZccwFBvegV55dZp/JERzSJx4b5g1AjKQxLniGLweX/GmqUEQA00DasdGqtd0rL8ll4JDkQjdIf+yKGlBpM= Received: from CY1PR07CA0003.namprd07.prod.outlook.com (10.166.202.13) by BLUPR07MB484.namprd07.prod.outlook.com (10.141.203.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:25:27 +0000 Received: from BL2FFO11FD028.protection.gbl (2a01:111:f400:7c09::113) by CY1PR07CA0003.outlook.office365.com (2a01:111:e400:c60a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.8 via Frontend Transport; Mon, 2 Oct 2017 08:25:27 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11FD028.mail.protection.outlook.com (10.173.161.107) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:26 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:25:22 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 09/12] qed: Add unaligned and packed packet processing Date: Mon, 2 Oct 2017 11:23:55 +0300 Message-ID: <1506932638-26268-10-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(2980300002)(428002)(189002)(45074003)(199003)(2351001)(8936002)(50226002)(69596002)(356003)(5003940100001)(104016004)(478600001)(107886003)(81156014)(305945005)(81166006)(8676002)(6916009)(316002)(72206003)(189998001)(2906002)(2950100002)(54906003)(86362001)(77096006)(6666003)(16586007)(47776003)(48376002)(5660300001)(4326008)(36756003)(50986999)(76176999)(50466002)(106466001)(105586002)(101416001); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR07MB484; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD028; 1:yVJwJvwWbml/OYwIOMlfV8EVqIUmAG9DvLoTBTxhZidA/ZJnDxRU3APCLSiJ/B8j1Ve/wwTBiIIgCS+ACusL7Y69NH+/s0fuplms0gOg1os9z1tO7TyYd0Gb0xBm+3XY X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2087e1b0-7030-4a4c-cae7-08d5096f226e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:BLUPR07MB484; X-Microsoft-Exchange-Diagnostics: 1; BLUPR07MB484; 3:BH/OCkZr+Clfdq5FkRW6buRuK0kkAoCP9/6c1Picxpqu0AOdODeszIZcOQvJmAzQULk/oydOKazbELMq/m2MRYev26PqVZrQySMxXi2y3jPdnbUYs3deIUjAtnqNh8zAPUVK2995FfH88BzPdqM9iE66Xr/stPDHuANSYnTFRuKibULNU8/D2Cb6aB7VO+ALobsPt/f64KLXF8Mn/V9vQWeGi3TG2VQYIcQlKVjqBY2UALrfeDhpcdRZPOQgXcb2hYpQ2XIebZWZGnHzWWwdgu8vh0PADQKcQ+SGqUnzscwgoYE9LZ8QOkuB4FeyySMXjLTYCqOJnno1JGdZZUPCYA==; 25:b0xxQdpBswzqIbhDm9WnytZnYgL8lEnk980PQjA5UtMiUnPYUBfkjfqLJRF+AoKaoxNvsOHQ237+XbnOD3zKfYm3ob/bjdz92T4k3O+0/FUFc6i9rlRd9zxDLn6eTMU6UC+L2N3kdMCY6CrXAmv+JcrR3boPvxV9mxXh4wEoiL8oL64sL1c6kFqMY5TUXLoUuzfKE5nverlwtBtaG+dHjey66Xr+IvjkEOQNLEKhjkgwgIQHmbjsq9uk63YMLOoGkBmOtOIqmAku6SfRiJDUjMWqm8fl2vPwdAJ7DMqxGuZ5iqMiZAv1AaSUuS+5hIqLvGfA5tgCBWIUlD5rGOuz1Q==; 31:j/brgHlDQdn04aq0YxertI/kwVNXi76GEdmjZAPymubgaBWL1EdQg1aZeoIhu8Au2mvqDCnX0s0P5Mw9OaLr9KtRz8J3ydgobOK7FFJc6S42If853iVJZ+x9n5iLH6AESvGC7luaQsrt8IOR2TXf5NuvFjATEFvBLCTL3AORe66lj7/gC3gaCTkV0q9fWpHjL5D8oj4dyp6bhUiIIHPSW6WGJsCTEQ+RGW1b2pMpbP8= X-MS-TrafficTypeDiagnostic: BLUPR07MB484: X-Microsoft-Exchange-Diagnostics: 1; BLUPR07MB484; 20:k3v0yhiWU3cRu88sYwP2gu9CMp59PjII2G691rhRdX95Gfum4o1bVt27ro2JNmiPefx0hl6JEnSFEfinMFWlxhy6rpEau5FJ5ZsLiMEY6JiqMrgf9k0BO1oj/faqcqUtfCABQMOHasSgapIU5z/lbPdDgIRoDg8BUAn12LLlx0pNXsCi9bm1yya57soVP2J28l3sOv37vZlqf1TYMbWGBBuFbuX210M0jTg4XEOENxy/dNzK7OiSGjvfKCLPs1/ZnnooiwkyOBn6q6DbSyL7YCQu9lNPQSUaF2A1ow0TChpPiEsZfPAUAzQWrGsthnfMtvELyMMs9b9agTyUCJn8AIC3RzEBNV80oncD8FXIwrUXv81j9BmDW3FRju48i7heuWKDIS5YcJSZcXSe3xjbV3hLd2U0zvZJIW7CUGCQ03lmLfzbpcL0ZOFJGlpcJjGGgsCrON4sOu5gdfHmggFCdPwxtamX6/ibZSe4LNjH7fU/fdJ7IElrK8UNbrdWyD+R; 4:/Du4FetoIcNAV7cooLFocMckifLeO4puwtHCCkRz4X2dww8hwPwZVoS8/OevLt3qWyy6Iu2q6joLilIvzjpYUQcGte9AGoG5VTKFwpGdgnlIdf0TUUJdsVZZGPYq4SLtfsrj7mq6Zkr0LYCdg62iGtTYNDN5R8pk8cLFZV4drNIpC/LzxZd3T0UbeMYY4YeO36wlVMtlM/24ONy9pRYy2dqEB7Mo3CqJaXxwJsbNwGDY7nURXxm5jhxKORV3pbBt 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)(100000703101)(100105400095)(3002001)(93006095)(93001095)(6041248)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123558100)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BLUPR07MB484; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BLUPR07MB484; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; BLUPR07MB484; 23:JoI5mK71yAByBvUc95MhuGZJqudG1IsnkU1iC/xHgpfKOoGGSvKJ483G9njYMBdE7Z5AoJMjf40LF2bib3nLhGvTEGOBhPQ11RTl2PYoBJ6xbcwf/Nzq2GIrgdy7scpd4InUk1tQFsP9hi/F4FveVHkm9eOIi8PXI52a0sydNvhyvU5pu4DbpBbOpMh04eiPaAxY7145rQmxnuU7aagZ2i9bRFluWwCGOo39GWdoZgifu7DNly9z7upz36K/vPmM226WueC3n08ri9/7VplF8Uul32M3N2V8LqpGCGNTOiiGE3/LIJgDNnfRId8E4q1F1TawmjO0oj0BgRt6pNdO1P6vbXqahx0xnS4UYADonMjnj4UHcVCvWj2BW4EijofBpknK95HUQ3DmJwps7s55atmxIquHDXspKMGh2oqJrG69sEdH9HRshq9c17Dl2d6zT+4dS8uP7clqxXP+gjfMwmTkN5HLBvdtz2TGY5IcvWjDCfkiWDu4xsmisGmY4NWJNnuEdttoPUX6zcqpBKKNeN1bJXNp1c5EPeOMjetoCdgHw9GOa7aDYTcqhvqKYA1Ff4Z/St4jq7Iz7T5hmquB82Bbc0pCulKMR5bCRD9ITpAxZKkbICdRq5TmudDnH0palWW39zYVaJuPGLS2ayroFKl/2XEXNvqbpnX8ps0/uL6PhTvTGr9dbruu19NW7egJRGpExC5QoHWa7OUoBiyThgHQoH208a5Z3SRY/dE+jltxGAeZmiOHBg2Xt35gQ0X9x1HnVmtWCzl64uG6m/6JLxQgjXsqDbght2oi2wIXQDcOXQEIpsdNc61RvnRvpeR3xlnVUuZ3W//kE7aYe7h50CJju46HKJFsE9FjaB9O5MxMotHQxle2vHCzfBZSavtt/BTMuFVxE5wIpGOMzkcUB8j3YExsbuYbaN8DSu01uxnSR2/Nil9/eG8oWxuiyFj5o0S3Hpd6SnclpMJdvg1dxXLADkGcJEiizB8NixWeN7aM/tbYKDeVH4BmH5nuyNqkQN74r+xFpu9ii5FksKe9JQ== X-Microsoft-Exchange-Diagnostics: 1; BLUPR07MB484; 6:sawGnMiOuhbo8m/uWcKkQkpY/e984jR0WCIqRIbzOOPJ6rOwlW15tdrl5FEIDpuAdFgYn/dwQxvViyrLNjtJ9jMq2ye27IDDTYUFF7I7ve4sJPAIwrDUBYA6bF9GXriP/AEcfmmAwQmgRLHJJA9ApKioqIV23S+5mEPQV+CBOW2Uu4dlIHudagHpfVAq76KjwTsY2bA6NdRI39DvY/9dM57oFLZshl+v0YUWEj3jgjl4ePbAp2JjS8Y1XEQQ5X5bhGqz1gIRs7lfXShP8hU0aexAo7K3kN5dNtwH2h4lTUOqtJ7MUYOk0+cpUaU24HPJjyfu+uQJMEVspTcnLRgBjw==; 5:NQKBjMGWW4cH2PrubZO1xlvp3pNC55QgHYWCdi9ObYKYnkUi7Jqz7yeMGxV8248tFdt2XGb+L9U1ls9xBie2YUxXOoWynvAfgIPiL7VLPdGy2tnLEH45dwSdCe3CixREsqDp9c6VzkB/jUx1pl7wLQ==; 24:rv9bUzAra1yTVWP/otpipyM7Oa0YuXZ/DDjxywmGJcH3dAb2xbflk5kXQjLNV0WX9F5CrT2W9BYu0ecTUFAVp5OUDhKKpfWoLKh9je1W1Dg=; 7:eyRFun2JZ+8e/6ny5+NpRcC7v9fru62Ur2W8e0ktXXysnF/xl4xRkOsQ+ek1sqyc1W2avJgNg4T9s0zcaTMF3wvtL2tunV3vJSbzaXGofftuy8B4PEsnrNzT8KZpKrw2o1y1czlXGyTQJQCb9ivENwgUD88UaQdCyFE4BJLZfwb9miYnABbjwFerC5WlS85tVcoEJzBpc9aQ6m5fLwq/SF7kDIYuA4nRCO+Mk9AtdoI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:25:26.2911 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR07MB484 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The fpdu data structure is preallocated per connection. Each connection stores the current status of the connection: either nothing pending, or there is a partial fpdu that is waiting for the rest of the fpdu (incomplete bytes != 0). The same structure is also used for splitting a packet when there are packed fpdus. The structure is initialized with all data required for sending the fpdu back to the FW. A fpdu will always be spanned across a maximum of 3 tx bds. One for the header, one for the partial fdpu received and one for the remainder (unaligned) packet. In case of packed fpdu's, two fragments are used, one for the header and one for the data. Corner cases are not handled in the patch for clarity, and will be added as a separate patch. Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 257 ++++++++++++++++++++++++++++ drivers/net/ethernet/qlogic/qed/qed_iwarp.h | 13 ++ 2 files changed, 270 insertions(+) diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c index efd4861..83b147f 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c @@ -1419,6 +1419,7 @@ void qed_iwarp_resc_free(struct qed_hwfn *p_hwfn) qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->tcp_cid_map, 1); kfree(iwarp_info->mpa_bufs); + kfree(iwarp_info->partial_fpdus); } int qed_iwarp_accept(void *rdma_cxt, struct qed_iwarp_accept_in *iparams) @@ -1716,8 +1717,170 @@ int qed_iwarp_reject(void *rdma_cxt, struct qed_iwarp_reject_in *iparams) return 0; } +static struct qed_iwarp_fpdu *qed_iwarp_get_curr_fpdu(struct qed_hwfn *p_hwfn, + u16 cid) +{ + struct qed_iwarp_info *iwarp_info = &p_hwfn->p_rdma_info->iwarp; + struct qed_iwarp_fpdu *partial_fpdu; + u32 idx; + + idx = cid - qed_cxt_get_proto_cid_start(p_hwfn, PROTOCOLID_IWARP); + if (idx >= iwarp_info->max_num_partial_fpdus) { + DP_ERR(p_hwfn, "Invalid cid %x max_num_partial_fpdus=%x\n", cid, + iwarp_info->max_num_partial_fpdus); + return NULL; + } + + partial_fpdu = &iwarp_info->partial_fpdus[idx]; + + return partial_fpdu; +} + +enum qed_iwarp_mpa_pkt_type { + QED_IWARP_MPA_PKT_PACKED, + QED_IWARP_MPA_PKT_PARTIAL, + QED_IWARP_MPA_PKT_UNALIGNED +}; + +#define QED_IWARP_MPA_FPDU_LENGTH_SIZE (2) +#define QED_IWARP_MPA_CRC32_DIGEST_SIZE (4) + +/* Pad to multiple of 4 */ +#define QED_IWARP_PDU_DATA_LEN_WITH_PAD(data_len) ALIGN(data_len, 4) +#define QED_IWARP_FPDU_LEN_WITH_PAD(_mpa_len) \ + (QED_IWARP_PDU_DATA_LEN_WITH_PAD((_mpa_len) + \ + QED_IWARP_MPA_FPDU_LENGTH_SIZE) + \ + QED_IWARP_MPA_CRC32_DIGEST_SIZE) + /* fpdu can be fragmented over maximum 3 bds: header, partial mpa, unaligned */ #define QED_IWARP_MAX_BDS_PER_FPDU 3 + +char *pkt_type_str[] = { + "QED_IWARP_MPA_PKT_PACKED", + "QED_IWARP_MPA_PKT_PARTIAL", + "QED_IWARP_MPA_PKT_UNALIGNED" +}; + +static enum qed_iwarp_mpa_pkt_type +qed_iwarp_mpa_classify(struct qed_hwfn *p_hwfn, + struct qed_iwarp_fpdu *fpdu, + u16 tcp_payload_len, u8 *mpa_data) +{ + enum qed_iwarp_mpa_pkt_type pkt_type; + u16 mpa_len; + + if (fpdu->incomplete_bytes) { + pkt_type = QED_IWARP_MPA_PKT_UNALIGNED; + goto out; + } + + mpa_len = ntohs(*((u16 *)(mpa_data))); + fpdu->fpdu_length = QED_IWARP_FPDU_LEN_WITH_PAD(mpa_len); + + if (fpdu->fpdu_length <= tcp_payload_len) + pkt_type = QED_IWARP_MPA_PKT_PACKED; + else + pkt_type = QED_IWARP_MPA_PKT_PARTIAL; + +out: + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, + "MPA_ALIGN: %s: fpdu_length=0x%x tcp_payload_len:0x%x\n", + pkt_type_str[pkt_type], fpdu->fpdu_length, tcp_payload_len); + + return pkt_type; +} + +static void +qed_iwarp_init_fpdu(struct qed_iwarp_ll2_buff *buf, + struct qed_iwarp_fpdu *fpdu, + struct unaligned_opaque_data *pkt_data, + u16 tcp_payload_size, u8 placement_offset) +{ + fpdu->mpa_buf = buf; + fpdu->pkt_hdr = buf->data_phys_addr + placement_offset; + fpdu->pkt_hdr_size = pkt_data->tcp_payload_offset; + fpdu->mpa_frag = buf->data_phys_addr + pkt_data->first_mpa_offset; + fpdu->mpa_frag_virt = (u8 *)(buf->data) + pkt_data->first_mpa_offset; + + if (tcp_payload_size < fpdu->fpdu_length) + fpdu->incomplete_bytes = fpdu->fpdu_length - tcp_payload_size; + else + fpdu->incomplete_bytes = 0; /* complete fpdu */ + + fpdu->mpa_frag_len = fpdu->fpdu_length - fpdu->incomplete_bytes; +} + +static int +qed_iwarp_send_fpdu(struct qed_hwfn *p_hwfn, + struct qed_iwarp_fpdu *fpdu, + struct unaligned_opaque_data *curr_pkt, + struct qed_iwarp_ll2_buff *buf, + u16 tcp_payload_size, enum qed_iwarp_mpa_pkt_type pkt_type) +{ + struct qed_ll2_tx_pkt_info tx_pkt; + u8 ll2_handle; + int rc; + + memset(&tx_pkt, 0, sizeof(tx_pkt)); + + /* An unaligned packet means it's split over two tcp segments. So the + * complete packet requires 3 bds, one for the header, one for the + * part of the fpdu of the first tcp segment, and the last fragment + * will point to the remainder of the fpdu. A packed pdu, requires only + * two bds, one for the header and one for the data. + */ + tx_pkt.num_of_bds = (pkt_type == QED_IWARP_MPA_PKT_UNALIGNED) ? 3 : 2; + tx_pkt.tx_dest = QED_LL2_TX_DEST_LB; + tx_pkt.l4_hdr_offset_w = fpdu->pkt_hdr_size >> 2; /* offset in words */ + + /* Send the mpa_buf only with the last fpdu (in case of packed) */ + if (pkt_type == QED_IWARP_MPA_PKT_UNALIGNED || + tcp_payload_size <= fpdu->fpdu_length) + tx_pkt.cookie = fpdu->mpa_buf; + + tx_pkt.first_frag = fpdu->pkt_hdr; + tx_pkt.first_frag_len = fpdu->pkt_hdr_size; + tx_pkt.enable_ip_cksum = true; + tx_pkt.enable_l4_cksum = true; + tx_pkt.calc_ip_len = true; + /* vlan overload with enum iwarp_ll2_tx_queues */ + tx_pkt.vlan = IWARP_LL2_ALIGNED_TX_QUEUE; + + ll2_handle = p_hwfn->p_rdma_info->iwarp.ll2_mpa_handle; + + /* Set first fragment to header */ + rc = qed_ll2_prepare_tx_packet(p_hwfn, ll2_handle, &tx_pkt, true); + if (rc) + goto out; + + /* Set second fragment to first part of packet */ + rc = qed_ll2_set_fragment_of_tx_packet(p_hwfn, ll2_handle, + fpdu->mpa_frag, + fpdu->mpa_frag_len); + if (rc) + goto out; + + if (!fpdu->incomplete_bytes) + goto out; + + /* Set third fragment to second part of the packet */ + rc = qed_ll2_set_fragment_of_tx_packet(p_hwfn, + ll2_handle, + buf->data_phys_addr + + curr_pkt->first_mpa_offset, + fpdu->incomplete_bytes); +out: + DP_VERBOSE(p_hwfn, + QED_MSG_RDMA, + "MPA_ALIGN: Sent FPDU num_bds=%d first_frag_len=%x, mpa_frag_len=0x%x, incomplete_bytes:0x%x rc=%d\n", + tx_pkt.num_of_bds, + tx_pkt.first_frag_len, + fpdu->mpa_frag_len, + fpdu->incomplete_bytes, rc); + + return rc; +} + static void qed_iwarp_mpa_get_data(struct qed_hwfn *p_hwfn, struct unaligned_opaque_data *curr_pkt, @@ -1741,9 +1904,79 @@ int qed_iwarp_reject(void *rdma_cxt, struct qed_iwarp_reject_in *iparams) qed_iwarp_process_mpa_pkt(struct qed_hwfn *p_hwfn, struct qed_iwarp_ll2_mpa_buf *mpa_buf) { + struct unaligned_opaque_data *curr_pkt = &mpa_buf->data; struct qed_iwarp_ll2_buff *buf = mpa_buf->ll2_buf; + enum qed_iwarp_mpa_pkt_type pkt_type; + struct qed_iwarp_fpdu *fpdu; int rc = -EINVAL; + u8 *mpa_data; + + fpdu = qed_iwarp_get_curr_fpdu(p_hwfn, curr_pkt->cid & 0xffff); + if (!fpdu) { /* something corrupt with cid, post rx back */ + DP_ERR(p_hwfn, "Invalid cid, drop and post back to rx cid=%x\n", + curr_pkt->cid); + goto err; + } + do { + mpa_data = ((u8 *)(buf->data) + curr_pkt->first_mpa_offset); + + pkt_type = qed_iwarp_mpa_classify(p_hwfn, fpdu, + mpa_buf->tcp_payload_len, + mpa_data); + + switch (pkt_type) { + case QED_IWARP_MPA_PKT_PARTIAL: + qed_iwarp_init_fpdu(buf, fpdu, + curr_pkt, + mpa_buf->tcp_payload_len, + mpa_buf->placement_offset); + + mpa_buf->tcp_payload_len = 0; + break; + case QED_IWARP_MPA_PKT_PACKED: + qed_iwarp_init_fpdu(buf, fpdu, + curr_pkt, + mpa_buf->tcp_payload_len, + mpa_buf->placement_offset); + + rc = qed_iwarp_send_fpdu(p_hwfn, fpdu, curr_pkt, buf, + mpa_buf->tcp_payload_len, + pkt_type); + if (rc) { + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, + "Can't send FPDU:reset rc=%d\n", rc); + memset(fpdu, 0, sizeof(*fpdu)); + break; + } + + mpa_buf->tcp_payload_len -= fpdu->fpdu_length; + curr_pkt->first_mpa_offset += fpdu->fpdu_length; + break; + case QED_IWARP_MPA_PKT_UNALIGNED: + rc = qed_iwarp_send_fpdu(p_hwfn, fpdu, curr_pkt, buf, + mpa_buf->tcp_payload_len, + pkt_type); + if (rc) { + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, + "Can't send FPDU:delay rc=%d\n", rc); + /* don't reset fpdu -> we need it for next + * classify + */ + break; + } + + mpa_buf->tcp_payload_len -= fpdu->incomplete_bytes; + curr_pkt->first_mpa_offset += fpdu->incomplete_bytes; + /* The framed PDU was sent - no more incomplete bytes */ + fpdu->incomplete_bytes = 0; + break; + } + } while (mpa_buf->tcp_payload_len && !rc); + + return rc; + +err: qed_iwarp_ll2_post_rx(p_hwfn, buf, p_hwfn->p_rdma_info->iwarp.ll2_mpa_handle); @@ -1989,11 +2222,27 @@ static void qed_iwarp_ll2_rel_tx_pkt(void *cxt, u8 connection_handle, kfree(buffer); } +/* The only slowpath for iwarp ll2 is unalign flush. When this completion + * is received, need to reset the FPDU. + */ void qed_iwarp_ll2_slowpath(void *cxt, u8 connection_handle, u32 opaque_data_0, u32 opaque_data_1) { + struct unaligned_opaque_data unalign_data; + struct qed_hwfn *p_hwfn = cxt; + struct qed_iwarp_fpdu *fpdu; + + qed_iwarp_mpa_get_data(p_hwfn, &unalign_data, + opaque_data_0, opaque_data_1); + + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "(0x%x) Flush fpdu\n", + unalign_data.cid); + + fpdu = qed_iwarp_get_curr_fpdu(p_hwfn, (u16)unalign_data.cid); + if (fpdu) + memset(fpdu, 0, sizeof(*fpdu)); } static int qed_iwarp_ll2_stop(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) @@ -2194,6 +2443,14 @@ static int qed_iwarp_ll2_stop(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) iwarp_info->ll2_mpa_handle); if (rc) goto err; + + iwarp_info->partial_fpdus = kcalloc((u16)p_hwfn->p_rdma_info->num_qps, + sizeof(*iwarp_info->partial_fpdus), + GFP_KERNEL); + if (!iwarp_info->partial_fpdus) + goto err; + + iwarp_info->max_num_partial_fpdus = (u16)p_hwfn->p_rdma_info->num_qps; /* The mpa_bufs array serves for pending RX packets received on the * mpa ll2 that don't have place on the tx ring and require later * processing. We can't fail on allocation of such a struct therefore diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h index 2c53fe4..858755c 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h @@ -68,6 +68,17 @@ struct qed_iwarp_ll2_mpa_buf { u8 placement_offset; }; +struct qed_iwarp_fpdu { + struct qed_iwarp_ll2_buff *mpa_buf; + void *mpa_frag_virt; + dma_addr_t mpa_frag; + dma_addr_t pkt_hdr; + u16 mpa_frag_len; + u16 fpdu_length; + u16 incomplete_bytes; + u8 pkt_hdr_size; +}; + struct qed_iwarp_info { struct list_head listen_list; /* qed_iwarp_listener */ struct list_head ep_list; /* qed_iwarp_ep */ @@ -87,7 +98,9 @@ struct qed_iwarp_info { u8 peer2peer; enum mpa_negotiation_mode mpa_rev; enum mpa_rtr_type rtr_type; + struct qed_iwarp_fpdu *partial_fpdus; struct qed_iwarp_ll2_mpa_buf *mpa_bufs; + u16 max_num_partial_fpdus; }; enum qed_iwarp_ep_state { From patchwork Mon Oct 2 08:23:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820376 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="hzfj72xS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5Fbr1TRvz9t4X for ; Mon, 2 Oct 2017 19:25:44 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751312AbdJBIZk (ORCPT ); Mon, 2 Oct 2017 04:25:40 -0400 Received: from mail-sn1nam01on0054.outbound.protection.outlook.com ([104.47.32.54]:53908 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750962AbdJBIZf (ORCPT ); Mon, 2 Oct 2017 04:25:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=S+uJLfRqh4xBDEbeBWqrK+Wzyy4BG1Zk/pzRqlU/8Uw=; b=hzfj72xSCOJPSTeZLdjhgpZ0DYWSYPIbarupUtwPJAkTbngPNkogdGGcpqpl6FNOGMULbXLPp1gl6h5xHgRQingeG2T5bg3kbOBBPUplPd92zWfmm075r6RTVVa+S1j5r1vPjUkg49MQJNPDBfP1WzTm+1hLajYNKGBxYY0nxXk= Received: from CY1PR07CA0034.namprd07.prod.outlook.com (10.166.202.44) by SN1PR0701MB2095.namprd07.prod.outlook.com (10.163.132.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:25:34 +0000 Received: from BL2FFO11FD015.protection.gbl (2a01:111:f400:7c09::100) by CY1PR07CA0034.outlook.office365.com (2a01:111:e400:c60a::44) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:34 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11FD015.mail.protection.outlook.com (10.173.160.223) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:32 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:25:30 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 10/12] qed: Add support for freeing two ll2 buffers for corner cases Date: Mon, 2 Oct 2017 11:23:56 +0300 Message-ID: <1506932638-26268-11-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(2980300002)(428002)(189002)(199003)(50466002)(16586007)(316002)(104016004)(50226002)(2351001)(105586002)(106466001)(5660300001)(48376002)(6916009)(2950100002)(81166006)(81156014)(107886003)(77096006)(5003940100001)(6666003)(8676002)(54906003)(8936002)(47776003)(72206003)(4326008)(478600001)(36756003)(189998001)(76176999)(305945005)(356003)(2906002)(86362001)(50986999)(69596002)(101416001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR0701MB2095; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD015; 1:ArsUwlceVDII2cE6t+mvaSfss16e9vrcnPGw/aTngEtd6f1JceVG/cZtaaTAy2pL6rXM199i9lRCoNxqfZch8V+9yxsPaxyDAYlqHF47VPdgirRM8hDKGf62KwC5syAE X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 579ade20-e518-469b-96a7-08d5096f2656 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:SN1PR0701MB2095; X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2095; 3:YyC7mazEe15FTV7gfNbtqjEYepd6vOgJHiavPj9fSk6Sjxyd7ursXAGJecAZkc7Orm3OT7W2QY8SdnItwTflWtcfLPRN9I/6uw76l0fih+0NGBkgkYMqbndKGxnQl72Yo5Dy2Gweuq+mGDydqKtzO+boyyLCprdLcTg1MRAEfzQVwkR5eneQMKFCkW3QEoQ/GSt82Z9NO7/0eOlys4k26xLKS0zRqFarITPXbmMago1Qfm1FnYW4jOsPhQHinTe9mh8a9x4z4jRB6cvyYbzF7BTXPDnDhsIrBS5OgAmH6DLH8hJ1cRiXZ6NJeqN5kOtaWiXoZZgNQPWo4K6qUAAjRA==; 25:OR6TmojjAhdT9iheGJYAV9sWYZ2tuMeLGsfwPY73PzkTynu9xYN0YOVOUJg3T95Xk95O7fjhWO4WlXT+k9rLSVshyWTw6QqIdgJw/Ou+c9gZMP5lf4m0ITIYG32Y0wJDf8sYjk+UUHhSrhi03phIgrbegj2r2Ok6waZb6vqH9EKx4OCONQZY9W38gZYdxBXc+14IoRzaF3wSfKIpH2L/gAV+bryN1Gctg97wsz64bkS3WZgabosn/5xCBvPs3t+kgupYgf7r8eHSVCB6jXaSGwIEeqg0YfB13ThBtCG94hQAtRJ5hc+gybldohEsLyiu94h2WlLg2ufLpKYMHdOhMg==; 31:/lkI954Djc73VdgIfyK5hPl46TRmYgbBoq2jU0iIPLknragj5piC7MK7yHMeIJbPJCB791p1Ivai7FfVrMGy/1089D7g3FzS7R1pQENZFeUxlgsYujrKyVq6NkkmovlnQo6JEtnxwc8ftxzs7PYunum/kQLD9/mGq+UHhB11XCgyufj87OBgnpP1MsHAUZGlW/Lads8iBDJcc7dgA79gIJux6HyxSDd5rPjBhCRG25M= X-MS-TrafficTypeDiagnostic: SN1PR0701MB2095: X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2095; 20:vDEZGDRB9aPmLxnXp6ZoyR72LWRxNqLBYDot6BDsaealJgwZdw6GvECiOB7Xz8ZkiLWGOhHEkLNodl/78LjwtND1cXb6JvVNs8w57Ob/rkBEIs7uzAEpycEUYgZMw9vrJifoH5dOsFioEvXT4F1AY1zZgyF3eVzHxWWr6cvMAX+M8WtmckOtTNOrSHcB/Q7uh2bgQnax2FwLSovBxGeppYRjTeFJpB7voaumQzFAilM4Re57eJeN/rJ9GVxLs1KWj7IgSXy/GifyZP6q0l04nM6E+I9MjAxbJN8fQOxFtX1pZrNnokb+O+yAtHTTOba98PkyXU2whGVPbnuG3/u0t3PMyzAKFKqPYCFXjbgB5oEa5wFIWbT9uG2FRpKGOfd4WweZhfTqVxkaFxBdWy3LR8VMSFzDwRkK9dvgL4w0/PhZgMXBJrMIKqxefl9lCDZsIUojDiLGQVwKOu7FLtwjAYPAHQngK8KLkiMXETj6GNDCY7YS8K5FoMG1tdhEYUZk; 4:H0JoXzEbFNI6gNUfT2MJ9M6YKPF1OHonTVF2VghuzFwu10pd8sgHEMwVlSR1UVJnwattfzvc0z4yvq4VmyUP7sx/fRFDOYxI0gaWNOYI5Tc13gmSy3EKeIgykHngCarJYN+BDaWW60lo28WE2Br3J76v2UeF1B3FcJtuJkYbS9Dn3WZ1ngy9nH/YzWooYYLQI5aeywAQHIwr6pv4tjzW2tbMqYZlqd3uDkJFmM73fjX8K+Jo9pU6bkCYSO0HS6e9 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)(3002001)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(6041248)(20161123555025)(20161123558100)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:SN1PR0701MB2095; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:SN1PR0701MB2095; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2095; 23:5BG5LGUW/O+KNDqV5Dzk75kKLq0xlodQDqt93EjEHlLpzWDfADUjBnrquz5v2VaecOhIYJs49OwId0clWdm59IsjutQSSkWzQIYhhcP0fq0zZ+wr3SFa5Rcildh+5HkrJOhnNovIocPdoIPYWbCrPqcQ2bvEmulY2vKHI+H0jsaIzQoUsLy65CNCfpMqq/s7Ismx5Nq/jtTTkskDJKuuwi6co+pVYEgplvkZ9q15TwLilWZcseIutJYCjJ+sNvRJTXLMZvlwqJNGr3FWn6nW/lMdXS5Umd0941DqXfVyNWLqHz+5iLP5GoZA8zhQr6aQos6ORE0febvSTWMwk2Ml/LM/QGjCUXZLgB2d5JgteBtd8uHAthqzwPhhzfc3l4EiTXNYJL3TsOCKuCfpwlZPMr5DjjzKjHVC6TqT5V9yAwrUKbPeM3+wAob0HRtUZzuKWAIRAMtoXnGQCe+qWFEFi5WvFrfiFiFl+B3/0vBqIwGHoREKslaVtFj3AppRavdTFnxk7phFtz9aGjHyvbRXBy0N7xLueqvoOd3s3sfFI8eyUuymkTZUtg8dKyg0WE5FIxtYhk3XWm5eH2aMwNQxDA/5b/7QuL+8YOR1X+lKqHQJUyLHrPQrlGuTbVadfKowvN9K9mWDygXzDmTcjB8uUKANwgaMeLmFzM4AA8UihWkxyj2tKMiA6b4opbSBoUtvRg3CALAawUA/nbF6jh2wPcD0at7YAOC2NPAoYYFXEOS/wzZd7Ld1Yf9EJIoeGU26haA7MQLTBicSgda/BcPGPiibpZ0dQWiGtHd/nD7IvQMMCUnDm4Vlrec/2vXBCbxFBh12saNG5D7Z5soR3cSYrn22x5p6cnzT2ZY/MQ7OV+38s1oURVO8ThqL/EdbmI8UYlKtwJ1tymqq1KJxUuXnyfrs7OTcZQRiTl1iC0vYTDgxzZWRJIGQ0oksmIt8Qf5ftqSu5+LKD/PTe72MzjaEt/n+FwTUEqbRRMyqYVtTc/+JBFCB8LJVFmptLC5cZI4t X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2095; 6:p7oskVE7UfeOY+RLTwzrvLtAgv4v+SQUgl7lNwAU8+ZOQh5vutUXOl9OuxtTznVW6pa81I9RCzD18Vqr46IQ4cG/KnLaadmkkyy+XCw8iBCYVe+JRi7cHbjixafHgtr/WYK0O51l5QveUp6O8ajViQNdZTWkDJ6zec4Q2h4lybvsX/bW0vTNG9bm9QcQuUiAx8W7iCILJx4lh2eZCDYUcqRCpjy/tlK1iMvtsNGROflTU8+9Q7fIjcKnOKu++UCjwszx2zTWpR2EZGOEQF3uHsrHGGNaRUoKOPY6mQ/hje+ecOM+J/iyypaUKuiqm+EuW0hmxLd26szBx1CEEQXeyg==; 5:Ibe9ifb5kRVu0EMcla9GaRkm1Uw7XiLr48DJjkqXn0qXlwGQHgPADqwwFwlHuUf8gPndIF3gxWG/YpnaWLjbl6MEd29xAqhcFeCUNvKLzRCHz+dji/4lhY9d4Ar5GumEDYPDI2+5GFqhtqDXCP75LA==; 24:RPfPAtonZP0LbqBoSdVx/4oV/1LaOBRRUXBsajzkX8PULmNcvmQIDL1ff1N7Mp2xSJ4dg+z/VYv4iZrk6u+FBqYEVK7kragJ46KHaTBJLjg=; 7:r+UE98AyrYHbYJY9i23yP72aGEBSGWyscS61f78nL4omdmeXxJLRLcDJW0XPX0cJ5XhDfsiXZ+LMogSf+xHlSB04MOdAahVFpJuc1tUl7GUDbqB4Ooe05GNhsSNzSDJGe2M2ziyFhITB0bbA2AslKhUvKe68uTtii12Mrg+YEJXLeNsgHWhtZH0M4jDqcClbmmfas+mzpbkofsrlRFNOAno7Njn4FPcbeqCHNX1rpPQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:25:32.8745 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR0701MB2095 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When posting a packet on the ll2 tx, we can provide a cookie that will be returned upon tx completion. This cookie is the ll2 iwarp buffer which is then reposted to the rx ring. Part of the unaligned mpa flow is determining when a buffer can be reposted. Each buffer needs to be sent only once as a cookie for on the tx ring. In packed fpdu case, only the last packet will be sent with the buffer, meaning we need to handle the case that a cookie can be NULL on tx complete. In addition, when a fpdu splits over two buffers, but there are no more fpdus on the second buffer, two buffers need to be provided as a cookie. To avoid changing the ll2 interface to provide two cookies, we introduce a piggy buf pointer, relevant for iWARP only, that holds a pointer to a second buffer that needs to be released during tx completion. Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 25 +++++++++++++++++++++++++ drivers/net/ethernet/qlogic/qed/qed_iwarp.h | 1 + 2 files changed, 26 insertions(+) diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c index 83b147f..8b17369 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c @@ -1846,6 +1846,12 @@ enum qed_iwarp_mpa_pkt_type { /* vlan overload with enum iwarp_ll2_tx_queues */ tx_pkt.vlan = IWARP_LL2_ALIGNED_TX_QUEUE; + /* special case of unaligned packet and not packed, need to send + * both buffers as cookie to release. + */ + if (tcp_payload_size == fpdu->incomplete_bytes) + fpdu->mpa_buf->piggy_buf = buf; + ll2_handle = p_hwfn->p_rdma_info->iwarp.ll2_mpa_handle; /* Set first fragment to header */ @@ -2195,9 +2201,19 @@ static void qed_iwarp_ll2_comp_tx_pkt(void *cxt, u8 connection_handle, bool b_last_fragment, bool b_last_packet) { struct qed_iwarp_ll2_buff *buffer = cookie; + struct qed_iwarp_ll2_buff *piggy; struct qed_hwfn *p_hwfn = cxt; + if (!buffer) /* can happen in packed mpa unaligned... */ + return; + /* this was originally an rx packet, post it back */ + piggy = buffer->piggy_buf; + if (piggy) { + buffer->piggy_buf = NULL; + qed_iwarp_ll2_post_rx(p_hwfn, piggy, connection_handle); + } + qed_iwarp_ll2_post_rx(p_hwfn, buffer, connection_handle); if (connection_handle == p_hwfn->p_rdma_info->iwarp.ll2_mpa_handle) @@ -2216,6 +2232,15 @@ static void qed_iwarp_ll2_rel_tx_pkt(void *cxt, u8 connection_handle, if (!buffer) return; + if (buffer->piggy_buf) { + dma_free_coherent(&p_hwfn->cdev->pdev->dev, + buffer->piggy_buf->buff_size, + buffer->piggy_buf->data, + buffer->piggy_buf->data_phys_addr); + + kfree(buffer->piggy_buf); + } + dma_free_coherent(&p_hwfn->cdev->pdev->dev, buffer->buff_size, buffer->data, buffer->data_phys_addr); diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h index 858755c..58db51a 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h @@ -55,6 +55,7 @@ enum qed_iwarp_qp_state { #define QED_IWARP_HANDLE_INVAL (0xff) struct qed_iwarp_ll2_buff { + struct qed_iwarp_ll2_buff *piggy_buf; void *data; dma_addr_t data_phys_addr; u32 buff_size; From patchwork Mon Oct 2 08:23:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820377 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="hYbHFnMf"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5Fby6sPBz9t4X for ; Mon, 2 Oct 2017 19:25:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751336AbdJBIZs (ORCPT ); Mon, 2 Oct 2017 04:25:48 -0400 Received: from mail-co1nam03on0068.outbound.protection.outlook.com ([104.47.40.68]:10800 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750962AbdJBIZo (ORCPT ); Mon, 2 Oct 2017 04:25:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=pKL0TGblK85Xz5dL51RNFqt8nbTT5arbekvip3aXetM=; b=hYbHFnMf7OLgvSdX920IdZdNYlyUGMiVo42DexLw4W5lw/MR6z1vo5p74V7ZRM1heYnQfYnpyaLd/M8k6yOXHuawcrGLKa4d9SLEJpOyYHI9VcbjNecv+WNq8/9AJWJoO7rPPnVnwa3QSlrrwI3JaUrnrVtnkE1hkCE/In+2ue4= Received: from CO2PR07CA0072.namprd07.prod.outlook.com (10.174.192.40) by BLUPR07MB482.namprd07.prod.outlook.com (10.141.203.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:25:41 +0000 Received: from BL2FFO11OLC005.protection.gbl (2a01:111:f400:7c09::160) by CO2PR07CA0072.outlook.office365.com (2603:10b6:100::40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:40 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11OLC005.mail.protection.outlook.com (10.173.160.91) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:39 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:25:36 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 11/12] qed: Add support for MPA header being split over two tcp packets Date: Mon, 2 Oct 2017 11:23:57 +0300 Message-ID: <1506932638-26268-12-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(2980300002)(428002)(199003)(189002)(356003)(106466001)(50226002)(101416001)(4326008)(478600001)(76176999)(50986999)(47776003)(105586002)(189998001)(36756003)(2351001)(5660300001)(305945005)(81156014)(50466002)(8936002)(104016004)(5003940100001)(69596002)(48376002)(81166006)(8676002)(72206003)(54906003)(2906002)(316002)(107886003)(16586007)(77096006)(2950100002)(6916009)(86362001)(6666003); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR07MB482; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11OLC005; 1:Qt6SPR6cWcylNScb43PsPfLIpPU8i+e5dgkLtO8sTFwy54qFyqyRur96znDjNLXBZ+B1znLXkUmP13ASvaEsidYoLbukBqhEccN/p7k+AUQj6bIv3RlF+nmda68hQqzP X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 621c1755-cb20-427f-c3f8-08d5096f2a6c X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:BLUPR07MB482; X-Microsoft-Exchange-Diagnostics: 1; BLUPR07MB482; 3:VBllTKP5vfVf5yNMxjr7FBIKBjCsKT/n+AkntwEZ1/qEch4/UPek/MwYLX/IM6OLLYiydibp98k1pUVMnEK4AYElyd6onesZJTD2GtTYdKGLUAglifv4sf0crWdc6yKRum2K7bLX9kSZYT/jL/65PP6RSCLUdMIK2IXpTKaorQhwVQrrrAlG5ZaZUMsvPLnrSi53hd0ZSNtC/RRTt+5qYi/owefKlAgWGC04erfUb26bmLpRo/qwAxSMN0pElM1vm0nT8fF6wM5zE1cxaLFo/CIuKjwhrVVmb8g6rx6R/VC7JIjckmowjmGh4DivdBQ+mA9AP2tragS6IM2dQpgzDg==; 25:8WmlhjuiY8gFsEboUK2tQBgCNaw2dYa/u6Y1sVm6pjGP3FCCpeWtmlgkY0yWVVE3KBmDxPvsP0EoXSPKrnOS9XprXzOoqsj9rUQeeB75VsHmd6gqGMQrGNTprSVTmqFvd61378MY9T+f40t2GeQ5kB1+KblHclYE4CPSnUR+KvtLiJVEdH/OWsskFE8FTc0BElIfkINUfyqGeJzcmm8yeD5+A8eeRQrT/wGzfQzo3t/fnE4DGs3lM/xWKzqCVHgAbXO2M3OxLFHyK+ZFgl0SDbJguu4AuoICxWcGFjs6NwKIwafPoOQpv0PA76t6cxsRSMDiT0JYL3LxQcOWbE4UJw==; 31:YtVYQq+wPruPNdE4v/o/9LqCaa9TTVe8yR9IfeDUfmaVswU+Gd47IPu/hiK0qn97+L/yseXFGwsJiBFFK06j5cc5bTxrPerxW3iBURmJvTwWdWQxzfm0QuzygOsTMow/eOjIY3uTGbu0voXPe8I7a5pOXO5Z/X/Qcxo3QeNwSlFvQe+hxL4WWBsvc+06hDwKvuV4l1Cd/avYZs5Ql0oObrSsdu7k5AnptJOxAtkuCNo= X-MS-TrafficTypeDiagnostic: BLUPR07MB482: X-Microsoft-Exchange-Diagnostics: 1; BLUPR07MB482; 20:wMCteaZg4v37ttQe4bLA0E3Y+EuMDyvf7BsfTjRm6Cd7WmidOcv9po0x7vE40jk3KEi8CL4tbtaNM/NIIvbXiL9Tmnq7AFL/ur9XitHzeAMG6hvTfNYXE+Cc1ZCyDJ4UCU6SRZy64SdIU9KKsWynHgEWAZO2srzzBpwfOIJ9VqB9lG7/Iyl+eCAViGTrMgqSrfD5maUpB6iRhnVCvrzl8yscoU8p3a/wh7tbNWUcy1vcsrVpMCVHYLMPTwrqqJqZjRxpnNejWXnUpIxRZkqA4IBEfvYgM/xsGnvjdw8G0oi2zDzlnkKrxZzX3i6V7o/NdYie8kGDj3aAZRlfF3zgP2MFqysIHy2/0REv5jH7pUF1XsmyV5JtZE8YFtI8ytFV5/2w5lgLH7gMyo7rxI4SrlHWlXJWmHbS7QGQuyXQNW0fqSUUoTOXyOFNB6kuY2wHiG/Wlp9lJCzAds3WLQlWRhOK6RN3nkoCgvf2r3we/GKcU6S+/NOXF5qVoT1q+NB3; 4:M/n4pbfc0a/uB2werMPERkpkCgciAV3uDmAbZ9EUoFcohWJkvOa7S9ETX8r5yKps0TkSDtK3zozu13tZ55NQt/n14h4XUeiEvCHrHICmK03j/ayxp3qMKXSqCa6CcD4OKWx2mzKqTnaF3OTWk0Xom/U+/oXq47+/P/wEJkBx2l1vfDfEFQjEN9NF4mGKd8mBosTGksh0O4KI0O6d5NVRDnLX/M+QSPMV/14UHjcYPvusSLdkjIX02LXLIOiux9IH 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)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(100000703101)(100105400095)(6041248)(20161123560025)(20161123558100)(20161123555025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BLUPR07MB482; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BLUPR07MB482; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; BLUPR07MB482; 23:Yyv9xs6NeAPwbtjPZ7C/ycnZ++M65LIcDgS5D5Sx0KanzsnUFu8D3q1UAh0UzK3k6q+lVK41I3IVY6HZgcpFzEbhlJPzSYTr+YjZmAIShq4Cr7/NBUaf0x7asHNU6ZKbvGxb7qZQ0omytFZVhffWLUX+WM9EnJvCPk23xjHcMk5oQYRBZ8jGfiQIPUtEGHfRXhKyFvpq3CK9hD4Rq8EFKcigpBwHmRriVZ4walAyZN8GM20e51CEilGyvQ7+0orHsoFTMYavtwJn9y11hr04qxyCJzoHBIarg+h0D4e0FGmN8h5D3/iYWvxJ0I5sipY0vHgMEq+JqxOo2S9Ln+cROZAxi9tSHhC280ZwJdpAICNAqBkUl6ssM+o4Ntd95qIuSbWWwiZztnYeXjoKDVI3uzIL1pca5JPg1ofUWeeuOImvbDdgRHWbrPsi49Py6oNY0k8cmqKMEV7gAs0SqZD6W86YP0Ue/GeqB2kmwy5+UH2j99NATqotSqj3n9+X0V+0AKA1swnFwYkyfVO/5Yw/1w+5poFE+RnyiX2PXDhPH8bBEJcgo9ebvf+OEFB6Hk6VHM7jaZzhlM2CBV8+VjFxPpmbc4pXEvQiGF8L+AjpcwPVtSUDEwwmpiHP8UOqKbKTjm+Q42dp6w3P0XHRHrsXTHvOE7JvO5ooRzqM5K9jsAWb8Vl4AJvZ0EqAHAGHfAtBnOCqnw/QYb4dGNo/RbisnFU9DAGrmDiUh0AjEn6Glsl+7wC7h2wj0nn5eG0trgtx4JbC6Hst6Oj9qWXS+pnorILhurDo/GxLwNMFoSXfE56jatMv+676+zUQTVK9YU/GfW/+YVxtIr9svfD8CcJeipntJnB3+oF54rWmwP7YQbk3VYafW2uCARc5RLFeRxQdMQZmn0E76qEpySYT1PFITm1aZFIpfW6wabtOM8o/JNGQHhfy+f3LXcACM8OMOJ6TCm0E2ccWLYAl3QUQl+eJVOQefM6seWOT5LoRPs/nxUptSgI8MDw9YDe3nKWHi6aw X-Microsoft-Exchange-Diagnostics: 1; BLUPR07MB482; 6:b9ugeSJdILl0fFvg5Q+MVVX4msclaEnsCBWssuZVIj/195mvYH3Ao95rqtZZTHEtH9rkhpuPnfXrFJUCMrQBNsY6KOOuagSE/EXuxWR9dewso1dp9smpQDItJcRBniBHe1CX1idPCAZkdq9+eLLSTG50VCmZEbFXB/3qabZSxoveA38CO1tey2nb6M1aTMuHoMiKw/jtWDh49I7sOoOaX5VtlPkiAiDpLqfDwTNGnC5Lg8lx7yHIx3qTIGYMqomgEluL4buvMTNZCSsS9xHMywKeMZ2FwM5T9DnAOPxvToYhEKJS0ZwsZvBGsFY9ctOcJLUvE0hizl9sAvG87SOtZg==; 5:TC4CFGXG6WfAvKpdY6m9srla706SBO3g2geuBJfbg58apdJWS6TOhP8WR/ZQXjsTRMTvCW96EtRfQmIQ7WEltUCcr94gloE2Eroy/Cm0TIHLRz+XajMZoVwvUR+kP620ZyOxIIHA8fexUFSQEnFfKg==; 24:tV2ierpQYR50PdNliOI6XReyg9DXJ2CayaJSe5A01cjCSSwC2eFTl4+Phj5xOleesqiR4BwB/HGilikzHDxWiXuYX/87HMdXIM/kEXqlz3g=; 7:qi3uA4ikLtS3WBpYIg7J6RsUDwJ8wPgTGW1VQP7dhSauVh534z6pAc2JNj53pQf+YmM6pnHJspetV2aCK4xFRf1k4Ui9jDm65afy2O3uKQpoA5DhUrlo+sQCp/0e8omOH4CMkmuZSh4oy7WbRy9+9gZBUm+Ziv8MdTdihnLxff7bGjKGv//3m+rElMISK5PV/ZYX7m8TfbYpQSrtdfYmjGvDJFUXr3JrxcfemZS26Z0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:25:39.7152 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR07MB482 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org There is a special case where an MPA header is split over to tcp packets, in this case we need to wait for the next packet to get the fpdu length. We use the incomplete_bytes to mark this fpdu as a "special" one which requires updating the length with the next packet Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 36 ++++++++++++++++++++++++++++- drivers/net/ethernet/qlogic/qed/qed_iwarp.h | 6 +++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c index 8b17369..2994942 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c @@ -1742,6 +1742,7 @@ enum qed_iwarp_mpa_pkt_type { QED_IWARP_MPA_PKT_UNALIGNED }; +#define QED_IWARP_INVALID_FPDU_LENGTH 0xffff #define QED_IWARP_MPA_FPDU_LENGTH_SIZE (2) #define QED_IWARP_MPA_CRC32_DIGEST_SIZE (4) @@ -1774,6 +1775,15 @@ enum qed_iwarp_mpa_pkt_type { goto out; } + /* special case of one byte remaining... + * lower byte will be read next packet + */ + if (tcp_payload_len == 1) { + fpdu->fpdu_length = *mpa_data << BITS_PER_BYTE; + pkt_type = QED_IWARP_MPA_PKT_PARTIAL; + goto out; + } + mpa_len = ntohs(*((u16 *)(mpa_data))); fpdu->fpdu_length = QED_IWARP_FPDU_LEN_WITH_PAD(mpa_len); @@ -1802,7 +1812,9 @@ enum qed_iwarp_mpa_pkt_type { fpdu->mpa_frag = buf->data_phys_addr + pkt_data->first_mpa_offset; fpdu->mpa_frag_virt = (u8 *)(buf->data) + pkt_data->first_mpa_offset; - if (tcp_payload_size < fpdu->fpdu_length) + if (tcp_payload_size == 1) + fpdu->incomplete_bytes = QED_IWARP_INVALID_FPDU_LENGTH; + else if (tcp_payload_size < fpdu->fpdu_length) fpdu->incomplete_bytes = fpdu->fpdu_length - tcp_payload_size; else fpdu->incomplete_bytes = 0; /* complete fpdu */ @@ -1810,6 +1822,27 @@ enum qed_iwarp_mpa_pkt_type { fpdu->mpa_frag_len = fpdu->fpdu_length - fpdu->incomplete_bytes; } +static void +qed_iwarp_update_fpdu_length(struct qed_hwfn *p_hwfn, + struct qed_iwarp_fpdu *fpdu, u8 *mpa_data) +{ + u16 mpa_len; + + /* Update incomplete packets if needed */ + if (fpdu->incomplete_bytes == QED_IWARP_INVALID_FPDU_LENGTH) { + /* Missing lower byte is now available */ + mpa_len = fpdu->fpdu_length | *mpa_data; + fpdu->fpdu_length = QED_IWARP_FPDU_LEN_WITH_PAD(mpa_len); + fpdu->mpa_frag_len = fpdu->fpdu_length; + /* one byte of hdr */ + fpdu->incomplete_bytes = fpdu->fpdu_length - 1; + DP_VERBOSE(p_hwfn, + QED_MSG_RDMA, + "MPA_ALIGN: Partial header mpa_len=%x fpdu_length=%x incomplete_bytes=%x\n", + mpa_len, fpdu->fpdu_length, fpdu->incomplete_bytes); + } +} + static int qed_iwarp_send_fpdu(struct qed_hwfn *p_hwfn, struct qed_iwarp_fpdu *fpdu, @@ -1960,6 +1993,7 @@ enum qed_iwarp_mpa_pkt_type { curr_pkt->first_mpa_offset += fpdu->fpdu_length; break; case QED_IWARP_MPA_PKT_UNALIGNED: + qed_iwarp_update_fpdu_length(p_hwfn, fpdu, mpa_data); rc = qed_iwarp_send_fpdu(p_hwfn, fpdu, curr_pkt, buf, mpa_buf->tcp_payload_len, pkt_type); diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h index 58db51a..c58793a 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h @@ -69,6 +69,12 @@ struct qed_iwarp_ll2_mpa_buf { u8 placement_offset; }; +/* In some cases a fpdu will arrive with only one byte of the header, in this + * case the fpdu_length will be partial (contain only higher byte and + * incomplete bytes will contain the invalid value + */ +#define QED_IWARP_INVALID_INCOMPLETE_BYTES 0xffff + struct qed_iwarp_fpdu { struct qed_iwarp_ll2_buff *mpa_buf; void *mpa_frag_virt; From patchwork Mon Oct 2 08:23:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kalderon X-Patchwork-Id: 820378 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="ZNR6dnAZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y5Fc534s9z9t4X for ; Mon, 2 Oct 2017 19:25:57 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751084AbdJBIZz (ORCPT ); Mon, 2 Oct 2017 04:25:55 -0400 Received: from mail-bn3nam01on0040.outbound.protection.outlook.com ([104.47.33.40]:34880 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750788AbdJBIZv (ORCPT ); Mon, 2 Oct 2017 04:25:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=/AaVlR5xqzhy+0caAZE4WEtz7SxaCNXRJXIuz0dARQE=; b=ZNR6dnAZdgyQahJNqgzqrA3JBryEIBG8c4nvyP4TkR8eCDiL1kDcUwG+psaQry5dsjvhmeUTMt8yPCH1FI9+XiufjVq3CwcuvJL0UMB5fBQtebjeTSB2B3wJgofHObFesxNE4Siype6rSi6fnhEASGkfNforME07wdQna1h007A= Received: from BY2PR07CA0016.namprd07.prod.outlook.com (10.166.107.11) by CY1PR0701MB2091.namprd07.prod.outlook.com (10.163.142.153) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Mon, 2 Oct 2017 08:25:47 +0000 Received: from BL2FFO11OLC007.protection.gbl (2a01:111:f400:7c09::159) by BY2PR07CA0016.outlook.office365.com (2a01:111:e400:7bff::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:47 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BL2FFO11OLC007.mail.protection.outlook.com (10.173.160.142) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.56.11 via Frontend Transport; Mon, 2 Oct 2017 08:25:47 +0000 Received: from lb-tlvb-michal.il.qlogic.com.com (10.185.6.89) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 2 Oct 2017 01:25:44 -0700 From: Michal Kalderon To: CC: , , , Michal Kalderon , "Ariel Elior" Subject: [PATCH net-next 12/12] qed: Add iWARP support for fpdu spanned over more than two tcp packets Date: Mon, 2 Oct 2017 11:23:58 +0300 Message-ID: <1506932638-26268-13-git-send-email-Michal.Kalderon@cavium.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> References: <1506932638-26268-1-git-send-email-Michal.Kalderon@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(346002)(376002)(2980300002)(428002)(189002)(199003)(36756003)(478600001)(2906002)(4326008)(76176999)(101416001)(5660300001)(107886003)(48376002)(50466002)(105586002)(6666003)(2950100002)(6916009)(106466001)(8936002)(72206003)(50226002)(2351001)(104016004)(77096006)(81166006)(16586007)(5003940100001)(189998001)(81156014)(8676002)(69596002)(356003)(47776003)(305945005)(316002)(50986999)(86362001)(54906003); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB2091; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11OLC007; 1:eBKY254/BHN+OhHZMQmv8NmHVCaETa/D12ySJoPfWvbyH2nOpZWGiKbrht0puh7rPWDGmATLyZ3F6+ngIVwj2u0XAsHyOcbvtgbN7+RiIM20Oz6UiIyhxTyS2RNpPHe2 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a7474b9a-f582-4d7a-5858-08d5096f2f26 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:CY1PR0701MB2091; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2091; 3:hCqH3hIvMrpOT7XTR5RD8TRkXsJlr/41YmH4m7WmRGHyYitHx8vUWWGxFt2XW74G/4tX6FxLseY+4Hk1JPfTzG1JelzoAalA5Q8ySOjwuOq1rpfSigJc07nQO+Hiyt9bNqUF9cU052FZnmGqruOCpnN6skBi7kvc9ziYn2uPVBPhlmOhMFSUVBAmDyoL4R3a09Jm5C7I4a3S33ls6cAWGETZLVmB9D+kzvPpMIz1/QG8Wupl7SKhB63u1VSTvWIawlBxCBQzIPrkZZZobfAKW37ThDB4K69fr6iT5DwYUOR+1jy+1OS6C3Qakxg41Aq82f7cXufSFFO3EA6zCHRWFw==; 25:ML6IsNJ+b4/MPJQ9Kd0JIel65pKh/j0/NYTrDY+yv1eEMgP5Ot2r+3H7hDcFxd4wsElAf2xOcqGYJTYVzV5Unp5lAb0GJmUHdnW7+bLMOFhBOVwnmXWMxMsn1UeVZdJ+RtUwczivalIgQ3KU1eomYHkCOLbT2uSRzYk5gjp9ezNlKKjdvau43GRtCJCsHI+qQh3XU4tH9UlrLZyT/qgIxSvwox2GjppUarVaGEZy/dTecznu1iIzp/C23ECkICasg7qsUyZF//QrYWWjCaB/z7QBGf0rEQ6AoYnQRQ9qBfd8uLVypRsZiFLy281K9q7mLCsERjb0iJdmOEnoQXvTqw==; 31:jFgzdLHxAbVgFn1/e2642AS9cpxnX4b/FJXSh/CHQccylkzSUwgNRtHYZ1or0yjyAWXF+PdTS754AtoRUL6EPBH4y38EXe3hbaYvEJGJ0FfuSZKfn6MSmMN5zrnbk72DINM5l4l2clbF0dFl1tbGcf3ITHh9UROxIYvKeqPHvlgnmwL+gvHLen+OWOLtrX6osxy6lBjn+op+XCgPUtPcRB1/JRhcshKy1tahNB7RnY0= X-MS-TrafficTypeDiagnostic: CY1PR0701MB2091: X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2091; 20:2boMEGyjs3BeWhFW4umPKAv4MijwbErjuXR+27uhEKD2Q9NehdgponRoKn6XuSL7WkNx2AWySWTQMXS3wRmLcDeQLZTIcNcVEzmvEQAh3snLDtRA7PI0omVuG9R5EsIvGyJKFTo4J9zJvaxMd8gS7tBA5eYuyVG7NAAz8ipeQJvhzaOjU1IbU8IYR1ELxrKRwlxbtJH+ITo8lTzsMVisd9nUHzjbmhiPEQ/5sezONTQ8IawVmA8e6HhKIgKWex60UExctEek2pahARa5oRPq/SFDr2auHHUNqvD6tK3EXvYabvV+Wrd31n8jxQwc201RB/nxBPYVLz3mQ9Cj9pd6dvhy+CldTwrSyjMUuLFjUol2e7f6hvho5arEGL7B5FM1GuYDdDDKyCweOGpBArbRn3QEZXw66lCO3xZNjald3SokFZJi0j5+qKaGPh7k1oowt20oQlqZR1UIDTRJ+3dxO50G7Kf8kDhM4DfajXE5bm9KiQOPzClRfWeQx4KOtlcl; 4:Odx2AwWHBgai7I0dOoy4uUafE9yGGBR9psRCD5P31CBeSRWzL5wCGp6sbV7PgceL/iWsckBljQue7QMlQ6gq5ISR2rSQztJOdpBAOjw56I0RvIS/dRIWurHsZdu0NNc0Nb+/xJw3Uwc0jHvJzj8Urs5VoDprXoKg6mOrf+TDB7ENrEjc/Wn74Uc75dNLygtf/VyrumvQPxgvE51lACdtQHNsKkRSpPnNl6PCFt5UJYHPbMHDKg8HubYlpxxPPEP5 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)(3002001)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(6041248)(20161123562025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123555025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CY1PR0701MB2091; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CY1PR0701MB2091; X-Forefront-PRVS: 0448A97BF2 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2091; 23:Z6bmdzkT63UrwxCPGBmEGOQDty+vvcB24bYux55xYrJ3mWRycJhzakIZJifdEZ7BlxIr9D3qCAS+E2mPtxMN3jamqytnHud4Iyfg38hnNQL3jo0xF3SYJcEA3IBt7g+pH4r7GQVLPDlRP10U24kyZnDp7xMADUjo9fwb7QlxKARgPw2lb+70O5CPJmriF5tZQd/WJhDlvU+/gQhueGk44GMj0OtGyy05BG6T5wMzlXJdxLhAhaQZIhpT5MCXVqfNZQRPkmXpxJaFJxpOFr9nkpe5qYUhoQV70LZUqXm6aOEaEQ1KWzetBkOVeGHskBfMnbO7fYVb+NXBTOCD+IIuVXkt1pv7p4ZjL7Frhv3e4R3a3lpf+hRKtS5MkhF7ZUJ5C7xATYQnajoJIiL4YEv7ge08UdHyqEt/ctZchE9EHN3WcBFtzAUwVD2kZsNp7qHLJ1nKzUqtFSTonVxoBxSHK8Ld/XkO2KA1cEbxeRQfvygD4oSzLX4/pOEAA7cXZco5TdXWSQp2ronVCoS9+4+dltcvRme67oKgHKW8iLoo2oeekHZKkJ+KzrIgY1iXDUH2GFkIEAADV8ib4ZHr1gnF9w0ApVT7uMCOCM/Ovz66VRhjhylAPsZIkCqzJl8Vw9AF8eOEnu0pg++rbeKpgYbksR3a9ifZPohPaoWX65PyzL3ZDHypTs6TlrYiJ5sLUE/fLPWieDaN+EbGPUBe/JZ1i8LRxBOsr7gF5Tqeyg41o0MsdTf+XkXjFYmMG3n4NzSYCdJt6M7y4JBXEfHPq6+WRkQNHEBhAaI7GxCjIHpYRdAT9QfOG2l2nvdVKXoJNaU+vtkwggJFAT+75ZUaUW118bIiy9glr+/g44LvEabGtg6g63cC6JVBq1krhlCgdU0FdO/gkW7UJODmPQarhh+VpF6F3BUMQFrN2Ogx8pAvsVyHE6HHkgr0mU9QwEUP017b7onN6OITMzgB1JKlZwP2FZXIDfEBKOr6lD7G1InKM0MASAyp35CePJXX2ukMCrAA X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2091; 6:gFOv9EUAhlx+xTI10oDm94FNkD0M2jlfMRjaGc7QdCHVewX9/p0YMwO7dTX6ueeeRxxbvNLhiJObGuibtzLdjP0OycwQl+vBAPwVM6ZIiZB2hsuYvQQgcH5AbYeeEbUEpkBW5V36hHq71HQisBD68Zd1q378fr/2+yaYvIRcPYBAvqLF4/r+wqFE70LgmQ3tZID2NjjoKuIB0PWB4IGuPyAOoMbJ99jEFEVy3iQ7dqtBa+IG4nJ272byiIlwfKOyqfoO8h+LGXTWQ0YwKooaqAdwJMNnlrDdR//XtQPEta8R7b2KK9bnFghtDNHsbT8YT1hHfM8h1gfBGrc5N9/wrQ==; 5:qUOMYxBTewA8pmWi9ELUeL0ntmgjX3iLv3hD7Z2fBBuU8huXmSLZt+IBTbee4h8cP+WTi9HRCRX5PKXvUR98EDkJIUdl1ZnyYUsoagojjJ4zllfuyWhEUE3M1Y8Yw6mghCDriUzin4A2Y8pkcCvkvQ==; 24:TnnTejaIMOQeP5KcI61mZrANVuFBGJPyk5i+FCjj7fCnY8DLAY2fT1FCRYx9h/DcEg6Ct9kUPRxWxwyCaM0li8v318Nlrzhefn/JURgK2wo=; 7:R7uVirLPXmUh8agrso4gQGK4zt6y99Iq4tNOnSQktPd90hMF4MywBjCycX0liwkWNBpQVTz37FpZZHJcohjHODTc+lCfJ1AQZuIkTVdlq8mW5hRbd0vmJlNI8Z4AjyGq/UwyjM319Npdf+nfHymP94Bv6ayZFZM2KB7aOVwI+Z0gktpRFox3rUy/u6/xbv9kR0TAKntt2/nxw4IyZzfDaZ59E9jaSQWSvk+9A8Dk/ss= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 08:25:47.6423 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB2091 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org We continue to maintain a maximum of three buffers per fpdu, to ensure that there are enough buffers for additional unaligned mpa packets. To support this, if a fpdu is split over more than two tcp packets, we use an intermediate buffer to copy the data to the previous buffer, then we can release the data. We need an intermediate buffer as the initial buffer partial packet could be located at the end of the packet, not leaving room for additional data. This is a corner case, and will usually not be the case. Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 193 ++++++++++++++++++++++++++++ drivers/net/ethernet/qlogic/qed/qed_iwarp.h | 1 + 2 files changed, 194 insertions(+) diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c index 2994942..b2b1f87 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c @@ -1420,6 +1420,7 @@ void qed_iwarp_resc_free(struct qed_hwfn *p_hwfn) qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->tcp_cid_map, 1); kfree(iwarp_info->mpa_bufs); kfree(iwarp_info->partial_fpdus); + kfree(iwarp_info->mpa_intermediate_buf); } int qed_iwarp_accept(void *rdma_cxt, struct qed_iwarp_accept_in *iparams) @@ -1762,6 +1763,11 @@ enum qed_iwarp_mpa_pkt_type { "QED_IWARP_MPA_PKT_UNALIGNED" }; +static int +qed_iwarp_recycle_pkt(struct qed_hwfn *p_hwfn, + struct qed_iwarp_fpdu *fpdu, + struct qed_iwarp_ll2_buff *buf); + static enum qed_iwarp_mpa_pkt_type qed_iwarp_mpa_classify(struct qed_hwfn *p_hwfn, struct qed_iwarp_fpdu *fpdu, @@ -1822,6 +1828,68 @@ enum qed_iwarp_mpa_pkt_type { fpdu->mpa_frag_len = fpdu->fpdu_length - fpdu->incomplete_bytes; } +static int +qed_iwarp_cp_pkt(struct qed_hwfn *p_hwfn, + struct qed_iwarp_fpdu *fpdu, + struct unaligned_opaque_data *pkt_data, + struct qed_iwarp_ll2_buff *buf, u16 tcp_payload_size) +{ + u8 *tmp_buf = p_hwfn->p_rdma_info->iwarp.mpa_intermediate_buf; + int rc; + + /* need to copy the data from the partial packet stored in fpdu + * to the new buf, for this we also need to move the data currently + * placed on the buf. The assumption is that the buffer is big enough + * since fpdu_length <= mss, we use an intermediate buffer since + * we may need to copy the new data to an overlapping location + */ + if ((fpdu->mpa_frag_len + tcp_payload_size) > (u16)buf->buff_size) { + DP_ERR(p_hwfn, + "MPA ALIGN: Unexpected: buffer is not large enough for split fpdu buff_size = %d mpa_frag_len = %d, tcp_payload_size = %d, incomplete_bytes = %d\n", + buf->buff_size, fpdu->mpa_frag_len, + tcp_payload_size, fpdu->incomplete_bytes); + return -EINVAL; + } + + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, + "MPA ALIGN Copying fpdu: [%p, %d] [%p, %d]\n", + fpdu->mpa_frag_virt, fpdu->mpa_frag_len, + (u8 *)(buf->data) + pkt_data->first_mpa_offset, + tcp_payload_size); + + memcpy(tmp_buf, fpdu->mpa_frag_virt, fpdu->mpa_frag_len); + memcpy(tmp_buf + fpdu->mpa_frag_len, + (u8 *)(buf->data) + pkt_data->first_mpa_offset, + tcp_payload_size); + + rc = qed_iwarp_recycle_pkt(p_hwfn, fpdu, fpdu->mpa_buf); + if (rc) + return rc; + + /* If we managed to post the buffer copy the data to the new buffer + * o/w this will occur in the next round... + */ + memcpy((u8 *)(buf->data), tmp_buf, + fpdu->mpa_frag_len + tcp_payload_size); + + fpdu->mpa_buf = buf; + /* fpdu->pkt_hdr remains as is */ + /* fpdu->mpa_frag is overridden with new buf */ + fpdu->mpa_frag = buf->data_phys_addr; + fpdu->mpa_frag_virt = buf->data; + fpdu->mpa_frag_len += tcp_payload_size; + + fpdu->incomplete_bytes -= tcp_payload_size; + + DP_VERBOSE(p_hwfn, + QED_MSG_RDMA, + "MPA ALIGN: split fpdu buff_size = %d mpa_frag_len = %d, tcp_payload_size = %d, incomplete_bytes = %d\n", + buf->buff_size, fpdu->mpa_frag_len, tcp_payload_size, + fpdu->incomplete_bytes); + + return 0; +} + static void qed_iwarp_update_fpdu_length(struct qed_hwfn *p_hwfn, struct qed_iwarp_fpdu *fpdu, u8 *mpa_data) @@ -1843,6 +1911,90 @@ enum qed_iwarp_mpa_pkt_type { } } +#define QED_IWARP_IS_RIGHT_EDGE(_curr_pkt) \ + (GET_FIELD((_curr_pkt)->flags, \ + UNALIGNED_OPAQUE_DATA_PKT_REACHED_WIN_RIGHT_EDGE)) + +/* This function is used to recycle a buffer using the ll2 drop option. It + * uses the mechanism to ensure that all buffers posted to tx before this one + * were completed. The buffer sent here will be sent as a cookie in the tx + * completion function and can then be reposted to rx chain when done. The flow + * that requires this is the flow where a FPDU splits over more than 3 tcp + * segments. In this case the driver needs to re-post a rx buffer instead of + * the one received, but driver can't simply repost a buffer it copied from + * as there is a case where the buffer was originally a packed FPDU, and is + * partially posted to FW. Driver needs to ensure FW is done with it. + */ +static int +qed_iwarp_recycle_pkt(struct qed_hwfn *p_hwfn, + struct qed_iwarp_fpdu *fpdu, + struct qed_iwarp_ll2_buff *buf) +{ + struct qed_ll2_tx_pkt_info tx_pkt; + u8 ll2_handle; + int rc; + + memset(&tx_pkt, 0, sizeof(tx_pkt)); + tx_pkt.num_of_bds = 1; + tx_pkt.tx_dest = QED_LL2_TX_DEST_DROP; + tx_pkt.l4_hdr_offset_w = fpdu->pkt_hdr_size >> 2; + tx_pkt.first_frag = fpdu->pkt_hdr; + tx_pkt.first_frag_len = fpdu->pkt_hdr_size; + buf->piggy_buf = NULL; + tx_pkt.cookie = buf; + + ll2_handle = p_hwfn->p_rdma_info->iwarp.ll2_mpa_handle; + + rc = qed_ll2_prepare_tx_packet(p_hwfn, ll2_handle, &tx_pkt, true); + if (rc) + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, + "Can't drop packet rc=%d\n", rc); + + DP_VERBOSE(p_hwfn, + QED_MSG_RDMA, + "MPA_ALIGN: send drop tx packet [%lx, 0x%x], buf=%p, rc=%d\n", + (unsigned long int)tx_pkt.first_frag, + tx_pkt.first_frag_len, buf, rc); + + return rc; +} + +static int +qed_iwarp_win_right_edge(struct qed_hwfn *p_hwfn, struct qed_iwarp_fpdu *fpdu) +{ + struct qed_ll2_tx_pkt_info tx_pkt; + u8 ll2_handle; + int rc; + + memset(&tx_pkt, 0, sizeof(tx_pkt)); + tx_pkt.num_of_bds = 1; + tx_pkt.tx_dest = QED_LL2_TX_DEST_LB; + tx_pkt.l4_hdr_offset_w = fpdu->pkt_hdr_size >> 2; + + tx_pkt.first_frag = fpdu->pkt_hdr; + tx_pkt.first_frag_len = fpdu->pkt_hdr_size; + tx_pkt.enable_ip_cksum = true; + tx_pkt.enable_l4_cksum = true; + tx_pkt.calc_ip_len = true; + /* vlan overload with enum iwarp_ll2_tx_queues */ + tx_pkt.vlan = IWARP_LL2_ALIGNED_RIGHT_TRIMMED_TX_QUEUE; + + ll2_handle = p_hwfn->p_rdma_info->iwarp.ll2_mpa_handle; + + rc = qed_ll2_prepare_tx_packet(p_hwfn, ll2_handle, &tx_pkt, true); + if (rc) + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, + "Can't send right edge rc=%d\n", rc); + DP_VERBOSE(p_hwfn, + QED_MSG_RDMA, + "MPA_ALIGN: Sent right edge FPDU num_bds=%d [%lx, 0x%x], rc=%d\n", + tx_pkt.num_of_bds, + (unsigned long int)tx_pkt.first_frag, + tx_pkt.first_frag_len, rc); + + return rc; +} + static int qed_iwarp_send_fpdu(struct qed_hwfn *p_hwfn, struct qed_iwarp_fpdu *fpdu, @@ -1971,6 +2123,20 @@ enum qed_iwarp_mpa_pkt_type { mpa_buf->tcp_payload_len, mpa_buf->placement_offset); + if (!QED_IWARP_IS_RIGHT_EDGE(curr_pkt)) { + mpa_buf->tcp_payload_len = 0; + break; + } + + rc = qed_iwarp_win_right_edge(p_hwfn, fpdu); + + if (rc) { + DP_VERBOSE(p_hwfn, QED_MSG_RDMA, + "Can't send FPDU:reset rc=%d\n", rc); + memset(fpdu, 0, sizeof(*fpdu)); + break; + } + mpa_buf->tcp_payload_len = 0; break; case QED_IWARP_MPA_PKT_PACKED: @@ -1994,6 +2160,28 @@ enum qed_iwarp_mpa_pkt_type { break; case QED_IWARP_MPA_PKT_UNALIGNED: qed_iwarp_update_fpdu_length(p_hwfn, fpdu, mpa_data); + if (mpa_buf->tcp_payload_len < fpdu->incomplete_bytes) { + /* special handling of fpdu split over more + * than 2 segments + */ + if (QED_IWARP_IS_RIGHT_EDGE(curr_pkt)) { + rc = qed_iwarp_win_right_edge(p_hwfn, + fpdu); + /* packet will be re-processed later */ + if (rc) + return rc; + } + + rc = qed_iwarp_cp_pkt(p_hwfn, fpdu, curr_pkt, + buf, + mpa_buf->tcp_payload_len); + if (rc) /* packet will be re-processed later */ + return rc; + + mpa_buf->tcp_payload_len = 0; + break; + } + rc = qed_iwarp_send_fpdu(p_hwfn, fpdu, curr_pkt, buf, mpa_buf->tcp_payload_len, pkt_type); @@ -2510,6 +2698,11 @@ static int qed_iwarp_ll2_stop(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) goto err; iwarp_info->max_num_partial_fpdus = (u16)p_hwfn->p_rdma_info->num_qps; + + iwarp_info->mpa_intermediate_buf = kzalloc(mpa_buff_size, GFP_KERNEL); + if (!iwarp_info->mpa_intermediate_buf) + goto err; + /* The mpa_bufs array serves for pending RX packets received on the * mpa ll2 that don't have place on the tx ring and require later * processing. We can't fail on allocation of such a struct therefore diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h index c58793a..c1ecd74 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.h +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.h @@ -107,6 +107,7 @@ struct qed_iwarp_info { enum mpa_rtr_type rtr_type; struct qed_iwarp_fpdu *partial_fpdus; struct qed_iwarp_ll2_mpa_buf *mpa_bufs; + u8 *mpa_intermediate_buf; u16 max_num_partial_fpdus; };