From patchwork Sun Sep 2 14:55:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ophir Munk X-Patchwork-Id: 965109 X-Patchwork-Delegate: ian.stokes@intel.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="dLExeI4s"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 423GPv2M6Fz9ryt for ; Mon, 3 Sep 2018 00:56:17 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 021E4C9B; Sun, 2 Sep 2018 14:56:13 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id DD79FC93 for ; Sun, 2 Sep 2018 14:56:11 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70041.outbound.protection.outlook.com [40.107.7.41]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 36867224 for ; Sun, 2 Sep 2018 14:56:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XSTE1hpYMRuVwOylsO14GsglH7hfgGs1uCWydFWF+FI=; b=dLExeI4suAk7+w7vFPkcNQnMdigHod2pOFRtEyaKPSfbu/EwBw+iIWD6dWaf1qj8miyOpYLtXBZFkHhlMUgZ0LmN7aRdQT4ojXir0sqpmQ11sNqzaeFT8VLD+aO9yEEMJuzf+cXrEqxvUCrkujyPajIblgwCgttoDlsf13MTF8E= Received: from mellanox.com (37.142.13.130) by AM6PR0502MB3736.eurprd05.prod.outlook.com (2603:10a6:209:a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1101.18; Sun, 2 Sep 2018 14:56:06 +0000 From: Ophir Munk To: ovs-dev@openvswitch.org Date: Sun, 2 Sep 2018 14:55:52 +0000 Message-Id: <1535900152-24470-1-git-send-email-ophirmu@mellanox.com> X-Mailer: git-send-email 1.8.3.1 MIME-Version: 1.0 X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: AM3PR07CA0115.eurprd07.prod.outlook.com (2603:10a6:207:7::25) To AM6PR0502MB3736.eurprd05.prod.outlook.com (2603:10a6:209:a::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: db96b104-bbf9-4275-532b-08d610e436aa X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM6PR0502MB3736; X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3736; 3:e63EHNihq41WI4e/ppH57oMxi/TW8m67IkxISa5GdX/nqJKsGgH6nsfRc1a9x7CsI4MGlYqKtBVcLAXHa3fvKUqQwYywf7yRdi60m2ruzrFgz6Bhm/xqAF2H4rnf6WFrGkew4FRS1HyxHZpXqVUlO6qZho+9G47Wcy85VqmtFnP+GoO4fzV4uEUPTLZ22KWI2tqR1nEa/7jGU3r+8bBDKb9QCYCg6ghc9D9duiUQQSFfpteACoCRdOTtpLQ5EuhK; 25:LA/NFTzVlQhTzwnP3SgY8ii36kRuhePIRpFITmdkP8Y1YONYvC49iT1Q+We/JTeSjK8Xhf9GKl4Kgb4IjBlX3J9gtR+gNCLHnuq4ri6CU5AnaQha41Zdlc8/jfaycdvpWaOGkCezvqrgFJBuGZk3c2eVSe+A/P/RDrlmF2pMohlOOMBN5XMl4N0tu/W1Ij3IHjByH5JEYAU0VDyDdp+ACqTh0NFBhEEN9MSQjD7Wmdo7qxmkWefGgonRKH98zqbArLPKSSsQ2WpZu1N1QI2IR3bMyeL6Ih/7dHi0kG7//UX5o0VPf96FVohOr26PpSGwkoAb2SPtti6JHm9lNimCtA==; 31:IIRxECPjthpUmngRw9ndj+Xw9NHmowOJ+kHWexfNfh0xJKLMF1rq/hsBgGozQcuxziF8LbMOxj6tfF8kFOsHqpNaB59YVVlQAj8cWY7yEqqPTvFKjTqmP//osxExR7gIA+MmpNUwA71qDb/+oOkL28+bixdKpD6X0M7FpDYezattgBgsXfdVs0I/T9T7dyAeWzvpXdPWCtVluk6GvA7zYGQ630W9xFdcGWADqx+s13c= X-MS-TrafficTypeDiagnostic: AM6PR0502MB3736: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ophirmu@mellanox.com; X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3736; 20:HFcBf+eoRAtN1o2UzLLytDUPDz9Afy3c7IZKNjuhLTDSNmQhYy2NmA+fwdikWeY2+kHumfH158t6mDkhIDs8EfLQ4T8jkmDlhMml3UUgafzFaYpiCJtt2MHkHd4bxBoZqQyPUcHz8hIQsD+vgHOsxXlAmoXAD2MKoQrFR+f9vkqZKMZNCslLV0cA61RCfsnObXMjOmuW/qkRnq0d+1dAkAlyCeNT3xRXp0GsmJhIfYW8JEYmlfMv1n1NvusbXYfPJ8w8F4qGrHenMrD7JaLctvOXtb++QmnaifxQag4nXbT1O8jly3zeah9mwbF0RjVnb6QOcHDHjuzuEqC9Vjf4Ar2P2raNv1Upqij8mJnUdghqmeZ+KbK3CqoZlPVi5qbo1BZoyudXzIv+ZWCNJuI0Ums2aGPsJToCXGPUr+A2hNkXhWV+X5cJjzPdqVX5IUZtvitWapsuOvCXIaYkKmPfrXyKK7io4SRxsuXOx45MpXjWqWeofltfV/MIkVSrZE1I; 4:fLGREe/VgX9udyC0WTwpEjSIS+Ld93hTz5jDMjqDXr3hNb95HuelPttrMv2CUQsVkoG6FJvQVkOcEyGBmZX65YPeTX9Y86awHVjZb1w+T6w9dSco92b6nm0FJ6r/fRotRs4FOqa3uJ78TZBoFUNR/7I7VTVlKOWegKLOA4OaNvQz89sVDK0FnScrLifhQmUrdOOFR6a1yJZnX4s4q3EtBNkgO/0T7r25GUjPas/R/y6sGIo3AYZBHlIeXM/F05zEtIbeIX/mcgaO5Pk+yS4O0ml9Cet9/oXrbjbyMExDlwJvzpZbTyAyH/0nnvoKycGG4KDFjPIlP1QyArSttfr4TA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089)(163750095850); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(823301075)(10201501046)(93006095)(93001095)(3231311)(944501410)(52105095)(3002001)(6055026)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(20161123562045)(201708071742011)(7699016); SRVR:AM6PR0502MB3736; BCL:0; PCL:0; RULEID:; SRVR:AM6PR0502MB3736; X-Forefront-PRVS: 078310077C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(396003)(346002)(39860400002)(376002)(136003)(199004)(189003)(36756003)(105586002)(53936002)(575784001)(86362001)(486006)(7736002)(386003)(305945005)(55016002)(5660300001)(68736007)(8676002)(2616005)(106356001)(476003)(956004)(66066001)(2361001)(21086003)(97736004)(50226002)(478600001)(25786009)(33026002)(2351001)(7696005)(26005)(47776003)(54906003)(16586007)(316002)(8936002)(50466002)(6666003)(16526019)(14444005)(81156014)(51416003)(4326008)(6916009)(48376002)(4720700003)(81166006)(6116002)(69596002)(186003)(3846002)(2906002)(52116002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR0502MB3736; H:mellanox.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM6PR0502MB3736; 23:5vacRkC/afOGhztzyCNEVUQDDxziTp0nGuPo5yC?= l+HKa1FuRVOZB0/R3ebDYtp2FTr63Dh6X/xna+jNIWHW8jP0oxTObom4eVbSrVcuC22GUmcRT43CLPOOtq/n5pKWl3r4zJFKlCU3JJsmoAtz5AGaT7nFdxlO7nZuXGBBCFowvpiZCtzDAYtKuedHVnIy8nLgaT3s4iFZ/qkmclVQxf2Mx5xZrbR1UR4+T4qFgSp5zF4TXeSAcfoISPxYEKfUtomGAZWGnRqZvZVVV2kXK1L/0awX+5hQUwnvgZiYPbeZaN17nE5Sgtyhr0HnPHhu/fXjI8jJ1hrdqX8NtGI2bZFiem4xzFitAhd+OiRXkOCWkPbCsr5zaGZx9AwEBJs6rC2Vx7PyODOhvax0IUiw0veZD/ly5uB97w6brd621r80+tpKklUybiOfffvATImuZ6AZA1HWYMCoSO5o5Zms85P6hFbHBnSY+FN3VaMH4IYGFy4IBYWuh9/CoTVFHVNJ8apaCbPuFMSSIRqpk9BlR1EY+apBU2sSrjKKT1klBh9LZHV6NR8cAI2Geu1iYzUWmFFax6Qn6z1bvpknGNWYvbRfTxR/zV8PZ2O1WZpFGW4uHEagyeotgW6iUl8qccXBAGsEiYCd4su9oX+4x+Q6BGJwu+sz4vPngefYb/O2yxHdAMd+PHhcnJ5bSwsq+eVHkQR/igWMAF0AbR/jAR+JGVzcCuB73fk0hFhf5XSPaZ8cK0xnTdBxWULhMqq6CB2VzeBaTMRv+SSW/a92QU3QzN21dWnTIcLxf6zvjW85+9RYkgpE9bbytbMhvx7NH2qh54CXA4tzF6uTyWRWPMX9yEAEtaqLoWvGBQVIL1ionkoi0YYOeQf4Ph2TTiA1HT5mtolL/Y1KFQgYhVqrLHWYjCEIGbxbXiW+TMUfIayPDpVOF4eI6g3J7cF8Kbo+hCionn7XI+qk/ohYG7iDmV1vWfYlzX3C7U6Q7GZr2EbU/WxRfnurldmPogFnvA4tfCNBLND220KygY/rFW0DUVOsMqyp0fkUCTDbBoCICFh4fQ17MZUF3BQrZe9akT8quTIkc8crljqJGed0XuCMLKsPlORU7DpYr6BSaZvkRhPlI0l/RpYJ2a04eDQjOlkS1DG2xCjZLAf/xsOgg4szkoPta3VENDR07XN3Zfmf565AMdvkDFOvwj+XrIDYeNXywrY5J6AAtlDjilr58o5LMTAp1q6do9OF0xXzalrPiWoRCY3kEYPifIPXKzAjZfTKJOkY9TqsIwLp0TwWOh20do5ZOew== X-Microsoft-Antispam-Message-Info: JzpYYEq69YvDCljdWNtEwaCT5gWc2d2HbhQbjC9qSyKL5L85A5KIZAxYcHNTHZtmuQN442i6Nk9uQoKmlGOwkUxErZ8ob6oYMaXlgQQAncPWUSMpr7kBW39QwXrY2iTxvkDf2BmTWhE0NEM3OShmKkjHLO7Jj1CF4qB9FFDDUEcp2g8rAfhzHBjKa/R3QDStyfDrZNyeAXVHSRgiC6hYs3zNWa1uWTO2sI5m3sxp/N27P6emAh2YOnxxsxMdVco1uv51TWblw3v3QuCtssCNOeYIL58dCnmrdYFmu1MAVpbbV+gx2shS//er7hAwxz6ZeuRjz845AGBOeaz/efYZF93+EkMW4VfQZF2CeZ3I6rM= X-Microsoft-Exchange-Diagnostics: 1; AM6PR0502MB3736; 6:D33SCi21NpgWGYbi3T3T1gnfRWF59ZqHLR6/twTjxsrYGYOn2dn+EBjXt6GQyJTKCX3MbgNywAAmXwIV5k4fdQj10SRlkg+wRRqd3YUV7aWRggdvpCZNCnVgkFANkaImnhe++1mJg3vxFUrVWoTnJ1wjDQ0J2ERnxrYPPYKm4oRphG7JVEmgwKIjS9AP8WI95YG4ZmSA4DSSZ8hX704EXM1+cwvakP22PXV1JFZzdyRgm8Je8JQzuEASYzlVsqaN4wFGJHJjUOkNTIBGiUZ90N1hlnOPXVxJa+Mkr2uw3gAuUd59qTjUUdd9AvBppkP31yLUMgDFsP/3oDPFqJS7Q8jm5dQBBsWUrUruQaLkFxzXHrDmgVGkjW4g3k14uWcB7DcZb8V/ZnZ36D94wmTIpV0Lt/zCSe4AfdIZReKf6iOrJFAGTCbGCFSsyrHs518y0sVTKmPqyvrlO6wn8G8t8w==; 5:7MX1tRcyUQDcaR7yVKnACJ7DWf74yLzLbIjsVaokn3JzZSohdJB0EtSRrmBQCW/IAs3v4W87hSl1rEmhSpPY4RJrKgB25SnMXHoukCC/mEpq8dXbdajNcHbw72hyApdeXiK6tWCF0nOtddr1wVju2nN5mYVeL78aaiIvJJ1hoZ0=; 7:zcoB+MZ3x1yAuAo9jWe+3yzv8niPAzAqg6Qp/pFfE04eg2/58KzFQfEg1BADKlNMHsjzLRIzB7HQkfRpMhhDMLm6hILBuQsAj0VRd4n9YJy4iPfzxBQiK5PQwgGHvlI1KT69R4pqlEAouJ45SxdiaQ4zoHqMGZt0qbYNcU4Ro9luDiERnYn9CUIm1tUrAQsmhWTknVETkzpMB8FMiEp1c9Aon5YCinvJlxJ2AhnJycTdKLcgnQfLH6/X8Xkbc1i/ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2018 14:56:06.2854 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: db96b104-bbf9-4275-532b-08d610e436aa X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR0502MB3736 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Shahaf Shuler , Asaf Penso , Thomas Monjalon Subject: [ovs-dev] [dpdk-latest PATCH v1] netdev-dpdk: Upgrade to dpdk v18.08.0 X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org 1. Enable compilation and linkage with dpdk 18.08.0 The following dpdk commits which were introduced after dpdk 17.11.x require OVS updates to accommodate to the dpdk changes. - ce17eddefc20 ("ethdev: introduce Rx queue offloads API") - ab3ce1e0c193 ("ethdev: remove old offload API") - c06ddf9698e0 ("meter: add configuration profile") - e58638c32411 ("ethdev: fix TPID handling in flow API") - cd8c7c7ce241 ("ethdev: replace bus specific struct with generic dev") - ac8d22de2394 ("ethdev: flatten RSS configuration in flow API") 2. Update references to DPDK version in Documentation 3. Update DPDK version in travis' linux-build script Signed-off-by: Ophir Munk --- .travis/linux-build.sh | 2 +- Documentation/faq/releases.rst | 2 +- lib/netdev-dpdk.c | 135 +++++++++++++++++++++++++++++------------ 3 files changed, 98 insertions(+), 41 deletions(-) diff --git a/.travis/linux-build.sh b/.travis/linux-build.sh index 4b9fc4a..c60ac71 100755 --- a/.travis/linux-build.sh +++ b/.travis/linux-build.sh @@ -83,7 +83,7 @@ fi if [ "$DPDK" ]; then if [ -z "$DPDK_VER" ]; then - DPDK_VER="17.11.3" + DPDK_VER="18.08.0" fi install_dpdk $DPDK_VER if [ "$CC" = "clang" ]; then diff --git a/Documentation/faq/releases.rst b/Documentation/faq/releases.rst index 41d41e3..646ae09 100644 --- a/Documentation/faq/releases.rst +++ b/Documentation/faq/releases.rst @@ -168,7 +168,7 @@ Q: What DPDK version does each Open vSwitch release work with? 2.7.x 16.11.7 2.8.x 17.05.2 2.9.x 17.11.3 - 2.10.x 17.11.3 + 2.10.x 18.08.0 ============ ======= Q: Are all the DPDK releases that OVS versions work with maintained? diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index f91aa27..80d2af9 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -168,11 +168,7 @@ static const struct rte_eth_conf port_conf = { .rxmode = { .mq_mode = ETH_MQ_RX_RSS, .split_hdr_size = 0, - .header_split = 0, /* Header Split disabled */ - .hw_ip_checksum = 0, /* IP checksum offload disabled */ - .hw_vlan_filter = 0, /* VLAN filtering disabled */ - .jumbo_frame = 0, /* Jumbo Frame Support disabled */ - .hw_strip_crc = 0, + .offloads = 0, }, .rx_adv_conf = { .rss_conf = { @@ -364,6 +360,7 @@ struct dpdk_ring { struct ingress_policer { struct rte_meter_srtcm_params app_srtcm_params; struct rte_meter_srtcm in_policer; + struct rte_meter_srtcm_profile in_prof; rte_spinlock_t policer_lock; }; @@ -903,16 +900,17 @@ dpdk_eth_dev_port_config(struct netdev_dpdk *dev, int n_rxq, int n_txq) if (dev->mtu > ETHER_MTU) { rte_eth_dev_info_get(dev->port_id, &info); if (strncmp(info.driver_name, "net_nfp", 7)) { - conf.rxmode.enable_scatter = 1; + conf.rxmode.offloads |= DEV_RX_OFFLOAD_SCATTER; } } conf.intr_conf.lsc = dev->lsc_interrupt_mode; - conf.rxmode.hw_ip_checksum = (dev->hw_ol_features & - NETDEV_RX_CHECKSUM_OFFLOAD) != 0; + conf.rxmode.offloads |= ((dev->hw_ol_features & + NETDEV_RX_CHECKSUM_OFFLOAD) != 0) ? + DEV_RX_OFFLOAD_CHECKSUM : 0; if (dev->hw_ol_features & NETDEV_RX_HW_CRC_STRIP) { - conf.rxmode.hw_strip_crc = 1; + conf.rxmode.offloads |= DEV_RX_OFFLOAD_CRC_STRIP; } /* A device may report more queues than it makes available (this has @@ -1932,16 +1930,18 @@ netdev_dpdk_eth_tx_burst(struct netdev_dpdk *dev, int qid, static inline bool netdev_dpdk_policer_pkt_handle(struct rte_meter_srtcm *meter, + struct rte_meter_srtcm_profile *profile, struct rte_mbuf *pkt, uint64_t time) { uint32_t pkt_len = rte_pktmbuf_pkt_len(pkt) - sizeof(struct ether_hdr); - return rte_meter_srtcm_color_blind_check(meter, time, pkt_len) == + return rte_meter_srtcm_color_blind_check(meter, profile, time, pkt_len) == e_RTE_METER_GREEN; } static int netdev_dpdk_policer_run(struct rte_meter_srtcm *meter, + struct rte_meter_srtcm_profile *profile, struct rte_mbuf **pkts, int pkt_cnt, bool should_steal) { @@ -1953,7 +1953,8 @@ netdev_dpdk_policer_run(struct rte_meter_srtcm *meter, for (i = 0; i < pkt_cnt; i++) { pkt = pkts[i]; /* Handle current packet */ - if (netdev_dpdk_policer_pkt_handle(meter, pkt, current_time)) { + if (netdev_dpdk_policer_pkt_handle(meter, profile, pkt, + current_time)) { if (cnt != i) { pkts[cnt] = pkt; } @@ -1975,8 +1976,8 @@ ingress_policer_run(struct ingress_policer *policer, struct rte_mbuf **pkts, int cnt = 0; rte_spinlock_lock(&policer->policer_lock); - cnt = netdev_dpdk_policer_run(&policer->in_policer, pkts, - pkt_cnt, should_steal); + cnt = netdev_dpdk_policer_run(&policer->in_policer, &policer->in_prof, + pkts, pkt_cnt, should_steal); rte_spinlock_unlock(&policer->policer_lock); return cnt; @@ -2767,8 +2768,15 @@ netdev_dpdk_policer_construct(uint32_t rate, uint32_t burst) policer->app_srtcm_params.cir = rate_bytes; policer->app_srtcm_params.cbs = burst_bytes; policer->app_srtcm_params.ebs = 0; + err = rte_meter_srtcm_profile_config(&policer->in_prof, + &policer->app_srtcm_params); + if (err) { + VLOG_ERR("Could not create rte meter profile for ingress policer"); + free(policer); + return NULL; + } err = rte_meter_srtcm_config(&policer->in_policer, - &policer->app_srtcm_params); + &policer->in_prof); if (err) { VLOG_ERR("Could not create rte meter for ingress policer"); free(policer); @@ -3043,13 +3051,18 @@ netdev_dpdk_get_status(const struct netdev *netdev, struct smap *args) smap_add_format(args, "if_descr", "%s %s", rte_version(), dev_info.driver_name); - if (dev_info.pci_dev) { - smap_add_format(args, "pci-vendor_id", "0x%x", - dev_info.pci_dev->id.vendor_id); - smap_add_format(args, "pci-device_id", "0x%x", - dev_info.pci_dev->id.device_id); + const struct rte_bus *bus; + const struct rte_pci_device *pci_dev; + bus = rte_bus_find_by_device(dev_info.device); + if (bus && !strcmp(bus->name, "pci")) { + pci_dev = RTE_DEV_TO_PCI(dev_info.device); + if (pci_dev) { + smap_add_format(args, "pci-vendor_id", "0x%u", + pci_dev->id.vendor_id); + smap_add_format(args, "pci-device_id", "0x%x", + pci_dev->id.device_id); + } } - return 0; } @@ -3727,6 +3740,7 @@ struct egress_policer { struct qos_conf qos_conf; struct rte_meter_srtcm_params app_srtcm_params; struct rte_meter_srtcm egress_meter; + struct rte_meter_srtcm_profile egress_prof; }; static void @@ -3749,8 +3763,16 @@ egress_policer_qos_construct(const struct smap *details, policer = xmalloc(sizeof *policer); qos_conf_init(&policer->qos_conf, &egress_policer_ops); egress_policer_details_to_param(details, &policer->app_srtcm_params); + err = rte_meter_srtcm_profile_config(&policer->egress_prof, + &policer->app_srtcm_params); + if (err) { + free(policer); + *conf = NULL; + return -err; + } err = rte_meter_srtcm_config(&policer->egress_meter, - &policer->app_srtcm_params); + &policer->egress_prof); + if (!err) { *conf = &policer->qos_conf; } else { @@ -3803,7 +3825,8 @@ egress_policer_run(struct qos_conf *conf, struct rte_mbuf **pkts, int pkt_cnt, struct egress_policer *policer = CONTAINER_OF(conf, struct egress_policer, qos_conf); - cnt = netdev_dpdk_policer_run(&policer->egress_meter, pkts, + cnt = netdev_dpdk_policer_run(&policer->egress_meter, + &policer->egress_prof, pkts, pkt_cnt, should_steal); return cnt; @@ -4103,15 +4126,15 @@ dump_flow_pattern(struct rte_flow_item *item) VLOG_DBG("rte flow vlan pattern:\n"); if (vlan_spec) { - VLOG_DBG(" Spec: tpid=0x%"PRIx16", tci=0x%"PRIx16"\n", - ntohs(vlan_spec->tpid), ntohs(vlan_spec->tci)); + VLOG_DBG(" Spec: inner_type=0x%"PRIx16", tci=0x%"PRIx16"\n", + ntohs(vlan_spec->inner_type), ntohs(vlan_spec->tci)); } else { VLOG_DBG(" Spec = null\n"); } if (vlan_mask) { - VLOG_DBG(" Mask: tpid=0x%"PRIx16", tci=0x%"PRIx16"\n", - vlan_mask->tpid, vlan_mask->tci); + VLOG_DBG(" Mask: inner_type=0x%"PRIx16", tci=0x%"PRIx16"\n", + vlan_mask->inner_type, vlan_mask->tci); } else { VLOG_DBG(" Mask = null\n"); } @@ -4281,27 +4304,56 @@ add_flow_action(struct flow_actions *actions, enum rte_flow_action_type type, actions->cnt++; } +/* + * Storage for struct rte_flow_action_rss + * including storage for key and queue array + */ +#define MAX_RSS_HASH_KEY_LENGTH 128 +#define MAX_ACTION_RSS_QUEUE_NUM 128 +struct action_rss_data { + struct rte_flow_action_rss conf; + uint16_t queue[MAX_ACTION_RSS_QUEUE_NUM]; + uint8_t key[MAX_RSS_HASH_KEY_LENGTH]; +}; + static struct rte_flow_action_rss * add_flow_rss_action(struct flow_actions *actions, struct netdev *netdev) { int i; - struct rte_flow_action_rss *rss; + struct action_rss_data *rss_data; - rss = xmalloc(sizeof(*rss) + sizeof(uint16_t) * netdev->n_rxq); - /* - * Setting it to NULL will let the driver use the default RSS - * configuration we have set: &port_conf.rx_adv_conf.rss_conf. - */ - rss->rss_conf = NULL; - rss->num = netdev->n_rxq; + if (netdev->n_rxq > MAX_ACTION_RSS_QUEUE_NUM) { + VLOG_ERR("Num of rxq (%u) must not be greater " \ + "than max rss num of queues (%u)", + netdev->n_rxq, MAX_ACTION_RSS_QUEUE_NUM); + return NULL; + } - for (i = 0; i < rss->num; i++) { - rss->queue[i] = i; + rss_data = xmalloc(sizeof(struct action_rss_data)); + *rss_data = (struct action_rss_data){ + .conf = (struct rte_flow_action_rss){ + .func = RTE_ETH_HASH_FUNCTION_DEFAULT, + .level = 0, + .types = ETH_RSS_IP, + .key_len = 0, + .queue_num = netdev->n_rxq, + .queue = rss_data->queue, + .key = rss_data->key, + }, + .key = { 0 }, + .queue = { 0 }, + }; + + /* TODO: Override key with default */ + + /* Override queue array with default */ + for (i = 0; i < rss_data->conf.queue_num; i++) { + rss_data->queue[i] = i; } - add_flow_action(actions, RTE_FLOW_ACTION_TYPE_RSS, rss); + add_flow_action(actions, RTE_FLOW_ACTION_TYPE_RSS, &rss_data->conf); - return rss; + return &rss_data->conf; } static int @@ -4365,7 +4417,7 @@ netdev_dpdk_add_rte_flow_offload(struct netdev *netdev, vlan_mask.tci = match->wc.masks.vlans[0].tci & ~htons(VLAN_CFI); /* match any protocols */ - vlan_mask.tpid = 0; + vlan_mask.inner_type = 0; add_flow_pattern(&patterns, RTE_FLOW_ITEM_TYPE_VLAN, &vlan_spec, &vlan_mask); @@ -4516,6 +4568,11 @@ end_proto_check: struct rte_flow_action_rss *rss; rss = add_flow_rss_action(&actions, netdev); + if (!rss) { + VLOG_ERR("add_flow_rss_action error.\n"); + ret = -1; + goto out; + } add_flow_action(&actions, RTE_FLOW_ACTION_TYPE_END, NULL); flow = rte_flow_create(dev->port_id, &flow_attr, patterns.items,