From patchwork Thu Mar 15 16:03:11 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Scheurich X-Patchwork-Id: 886318 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=ericsson.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.com header.i=@ericsson.com header.b="CIMwYvwN"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.com header.i=@ericsson.com header.b="MwsT+FJD"; 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 402D2v37YZz9sVK for ; Fri, 16 Mar 2018 03:05:43 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 285C4113C; Thu, 15 Mar 2018 16:05:20 +0000 (UTC) X-Original-To: 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 902B310F6 for ; Thu, 15 Mar 2018 16:05:18 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from sessmg23.ericsson.net (sessmg23.ericsson.net [193.180.251.45]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id A1B735CD for ; Thu, 15 Mar 2018 16:05:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; d=ericsson.com; s=mailgw201801; c=relaxed/simple; q=dns/txt; i=@ericsson.com; t=1521129914; h=From:Sender:Reply-To:Subject:Date:Message-ID:To:CC:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=MlrEFT7NoPKtqTvh9Ru2RxhgOKCNnsuXDcB2TnfGOU8=; b=CIMwYvwN1xWBAF5frWUFdFZS3QrRnafNM8Z4taQJpXqQHsbUHiA5vCjmQJyuNlsH 7sKVQPGJs7/NU8gOF7ycioc87OjFhAcalZudNGG7+cLcTWiIkWGu7fAKAT39F0Jm r3eqnF+uWFcmkvTpY9kl+pp6KB3ZKgWTWs1QNwEWWSw=; X-AuditID: c1b4fb2d-499ff70000005540-b8-5aaa99ba7560 Received: from ESESSHC016.ericsson.se (Unknown_Domain [153.88.183.66]) by sessmg23.ericsson.net (Symantec Mail Security) with SMTP id 70.FB.21824.AB99AAA5; Thu, 15 Mar 2018 17:05:14 +0100 (CET) Received: from ESESBMB505.ericsson.se (153.88.183.172) by ESESSHC016.ericsson.se (153.88.183.66) with Microsoft SMTP Server (TLS) id 14.3.382.0; Thu, 15 Mar 2018 17:05:14 +0100 Received: from ESESBMB505.ericsson.se (153.88.183.172) by ESESBMB505.ericsson.se (153.88.183.172) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1034.26; Thu, 15 Mar 2018 17:05:14 +0100 Received: from EUR03-VE1-obe.outbound.protection.outlook.com (153.88.183.157) by ESESBMB505.ericsson.se (153.88.183.172) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1034.26 via Frontend Transport; Thu, 15 Mar 2018 17:05:14 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=nm63caFZTGuWT5lUYCHYbJCUv3RvOKBLre8209UzT2w=; b=MwsT+FJDtEgNZRF4JOytpOEO3MrkqDPev4BpwP9OYRzZyM0Qj2BEuhfe/yGfM4EQngeCNzSvOD6krF9PAEPZRjLh8FE2eDob+qpU3VWngv5rKMlcgxsFbzG5SoAv+Hn+FPm9fsgn2hknwskFOmavX+PSlh/pshY+6Td0GX8QyDs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jan.scheurich@ericsson.com; Received: from ubuntu.eed.ericsson.se (129.192.10.2) by DB3PR07MB0650.eurprd07.prod.outlook.com (2a01:111:e400:943d::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.588.7; Thu, 15 Mar 2018 16:05:00 +0000 From: Jan Scheurich To: Date: Thu, 15 Mar 2018 17:03:11 +0100 Message-ID: <1521129793-27851-2-git-send-email-jan.scheurich@ericsson.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1521129793-27851-1-git-send-email-jan.scheurich@ericsson.com> References: <1521129793-27851-1-git-send-email-jan.scheurich@ericsson.com> MIME-Version: 1.0 X-Originating-IP: [129.192.10.2] X-ClientProxiedBy: HE1PR07CA0009.eurprd07.prod.outlook.com (2603:10a6:7:67::19) To DB3PR07MB0650.eurprd07.prod.outlook.com (2a01:111:e400:943d::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cfe1eba6-92a8-4c23-0b0d-08d58a8e81e8 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DB3PR07MB0650; X-Microsoft-Exchange-Diagnostics: 1; DB3PR07MB0650; 3:LjEX6lmrpHgQ08LDyX2GuSTZCLdADY6lx6wWpTedvMlJHKh0DYb9fR3z/Ig/yRxsp56ehyV9+E6X7uytj1LN6ZEJ/MDPLDFlkoXToaF8e9mnuE5FtVyMWZ3lw84VY9eXsObtY32k3sosuiZe1HTPneR0UA/cvfnR7+gVd47+e7Wd8GVVbfj9wl8BFCoPU+q+aQLtdV+46Avx9KDk8Js1C0gVVcXi181ATheY2qj3+8PltgNGNMZx+vzssuJTiH5V; 25:w95upCLueHCMX312SUC7KqXMuvhWujSzEY9Bzg76jARLmbnWqTGTrS7KGJPZXy5HPnANYdT+AbXQbtRk/NbdNmDJH6wXMsA/h8/QciVnvVADsNMxf/tDvPqjQUSKZCevE4uuNvsWc2xYmIS8m5wN+qDXysTcOTaHNg1RQ3p2BoG1i/sEyCwj6K1glxtAF2lhjNgL5euSmNHiX0MEiu0shfB4TJEoiNEiwX+WlZNSGTWK6G5EpLyR86QIVO2hdiEHO0g991H4wBrV1nqa+ovYLZ0Ul5aMh9NWRjCzqyut3jh/6r4Km2HjW1PhKunt7jR1iO0vn6mvBQ97pl6qSYph/g==; 31:tW1YrLorMA4Lwc5OboB5MEBdafBWBqtrbLPQbgvFzOwuX+XWpd6FRxA3t3TTOiVj3tl30vRBNDo0hwrAYDNEop7+Wph0KLR0TtevP6avRd9cCUIYo4hCGCs+NNKygcSXwrFJ62v57/3YNZFijoMR7P/nCuTZA4iNnEsRvSzftIOZe6IJi+lKLhbx1oPbtv+dyaNif0eEfVTNwexRa4i/IMGa/sacVyKyXGkcv1VIoiY= X-MS-TrafficTypeDiagnostic: DB3PR07MB0650: X-Microsoft-Exchange-Diagnostics: 1; DB3PR07MB0650; 20:mnjyPwb4lLSmxiDCK7diwptEe+pXxs5AdBbVz64sATc789BGUlNIoqs5m9TUOyL+nIXqQzLIvZVBCqeARiWkQ97y7CsNuqiVYAcIG3mUkyaFqJd4AROLLwDCrOPAgmSbIV9kjqSFwvpLXip1eZGilmpo6hpDOKqaDw4tr7DClgQA+AP3UwTUtKKOT3LQuj8GpmCayW+sLM2H0AS4ulpuJvVovanWXkZAKgdE9Sc+/MPaSLCdJjX4OneVU7h7IxwommfVCoetFH3+nbMtXDS78YtW9+nHuNMEw0YTJ5L0iv8fI5makfgZILnVyDoAscLIc6bXaH4nAh6+9zge6WHVbOeLExAIDAdSdebmGLKqjAYE0oHgO4BP12U0SmLyiK6SPcnCUFSGO8ztDfpCrsrltbbIsogjGuMM7bLt3lsLbFzaZrMK5xwmPmJ0T7xSkKSn1gV0UMj60uyNSUtZKZElFJv/5aKsVyGn7QdYeW5PmBECPOsQzkzG0il/c3LsmQaX; 4:25cp+ZL/bXJiUohGkMz2Cf15xCoMedFOPZROTSvKOY7DVFmXBKmqgUr4fQkNGsUxA7/u92sH3kMSkuJInvL9o082IfLXQ9u4SMeIwrZ/fwh8nSuNMhlgK184ldg7q8hgIer21toGgKJiXIthY4PUArqhQ0koJxFH67UlkB0mjtS/qX6kJ+3w88HuHfjD3d4C+mWdlNweXEp7l0cpCkcda+lj4LFYykfBzBXipjaHVW4LIlaX5IQ9e7JTgwSCnfgg/E9DyScgBwHa+vHgNwAkN7bjuaAigOVG6K4++HQx4iJVT9poYOoxbnzh73nCIb19 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(37575265505322); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231221)(944501244)(52105095)(3002001)(93006095)(93001095)(10201501046)(6041310)(20161123560045)(20161123564045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:DB3PR07MB0650; BCL:0; PCL:0; RULEID:; SRVR:DB3PR07MB0650; X-Forefront-PRVS: 0612E553B4 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(376002)(396003)(366004)(39860400002)(39380400002)(346002)(189003)(199004)(6116002)(316002)(16586007)(59450400001)(16526019)(478600001)(6512007)(6666003)(106356001)(50226002)(4326008)(305945005)(186003)(3846002)(86362001)(2351001)(66066001)(8936002)(105586002)(2950100002)(50466002)(48376002)(6916009)(76176011)(52116002)(7736002)(97736004)(36756003)(81156014)(51416003)(6506007)(386003)(81166006)(8676002)(5660300001)(6486002)(25786009)(2361001)(68736007)(47776003)(53936002)(2906002)(107886003)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR07MB0650; H:ubuntu.eed.ericsson.se; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB3PR07MB0650; 23:8t28txK/fCFRNNc+9Qq5/Rglh04pUq7cYOjk91K3X?= /1Q2doXPuvSOYmKYDtrWnAdOEASmkI7wMLD7snuVChqIIO7g0z4iQQkppcEALyYiLF4R1Zbgq0a6NXDpqF0bgANVUwej84zdsbCAqfcZj563YFMrkJVuTqr6+RhAC6EtrW4PR/UEXOOjlpb0GXrj+IDy++SxQr57FthmTK69TkXQJWJGAebBgQTgB5PZiJ2MJRuP/2U5A4lD+YoP4wXx6bqc0aWHrk4RARHR3oKEmOTQGBjpe4iUmhPI3zLjLEjZ7OeXFMcQGA/N0uXkPPpDOKelN087Vfim/rfj/TPVkEGVHP1VggftbRwXHh6rSyHPLOII7kAqrFRS4aJ9etnQxKzU6vM8xC4ddHe/RDr3AlCQzZr/9JywRXwSj9+TioZ/Z1ZuJ18t2+x83DKY6dInL79MwhijX+fiB6tovuPZNrM3uv3vSJJZbj01RaYxfZiWOPP84XX3HtNegPzsE7kRfA55xquNg3JaBEXMylTnh3jFE2ISOr9zuLotTdB+Wr8E2x8RtP5MbASfojBViAR1ZSQLNwPgVXCRvH/bKbDVj7Py39v8MftYmv6f2jLeGBrfToFHZQKL8JGDR7KiLEf4plE4nQ3JxM6qWq6W/SRpZOWZaRXdHzuu2dP8Ss9te+M605lbcS+AIAC3E9MdPVybsF4cqJty84B8XxdSsU+fMtVmj8xY7xW49MxxBdEUEPH7wjY7o3BIKv68gMjoSrdMeeYefHMIkyIMeQ3HtiP1hRZ9LqX8ezIrJFo0rt8GmAZ8ewTLU3Jdo4ObK8jEqHOIQdUTd/JrN9gHawJMBrHe3jCQYQMoVVCKZMNNrOVdMkJcMRhWyrUzvmUhZ4Ic++pg765V64Hmc+9fNxOp4a9L82FPMnb2ktSATjX8Zh5aZSKXJgdGxKJnlSYgMpc3bIwJz0gK7C1c+0gzbBe8U4j/3uj+oNWgD29ahgg0/SfwclOPLGvEzZLiOcu+UnpGX8d7q/axkhifofmIs366UmKAg+XuuOlxss+r9R3Klqd8LNx8mHjVQuX3MDz+tqAtn7rm6H9FjtoC2dgukXQAiE04h8va8akt/6slzObSEI0KPYfi/ApCMqGNvbgscMV7HhV2lL+jGrja2dAsmnpK0W/7A76KpzMeADlViUxorEZ2G4g2AM= X-Microsoft-Antispam-Message-Info: qQtjDeCqVww1dVd4zfuZzzzpoVTVUttMb2gzVrnbUN6/VrEwMFVRrRJ3nurDQb/j26uOn8MXsEk8G4Tcoh8TbM1pjo3kk7hqSHh51mZY6HjKsByLB3WPyFGPpgb7suW+GghdD20s2zVBx/yR6uKbjERTeOQnP5djPYRAlBOkhBaHyFgSBEa80rzlBdDIMzgn X-Microsoft-Exchange-Diagnostics: 1; DB3PR07MB0650; 6:DJEbAzDTP5tT6Z1kQxO9wkA7irM+a9XuJ1MmerNPRzj/offC+EFs34YmmtMgNcK1U4ff4BZY9jXWMTtFvqC9J8daoEA+0VHcDhjuMTbqzSuesqCB4qYc9/9gTNLJse7BreeBTYwRO4bABDyZA4LXuedsZx78QZBPB0rlKrhX4vEDhs3pCK0KPKtm0w7q+vWUH/p+UPyFuW3iEnaig0qCwoDJZA8NmmeOlE2Lcf1ujVBZFgy8V99+zAS4wKA++E4rdkpylx4YbUeoDHeer0hwH00kg27o50r7CEfnRHNpFjXE6pdFRMaqDjGl+ZmZz02q8ikxjK+g6Y3/J6FwOM2tE8hS1phnKLJZxHJu4NbOSWU=; 5:WNfswAc4F6yQZ3ragEdSBXhjBFfSou6BRkJL38BsvgaEbpPtirYqarDPMDbienmX05+nmwqHxsUhE7HsL0/beqERY1+StYn8QgBIO6lqzDvdr82i8B7TKgx6zzovbfkT95ceYyCJu+SbtmWlbLiu8EUy406ejds4K26PQpyNQHg=; 24:7hOHIKg7ovS9hNrOb5qrRC5aow4VLRamU8X7n5ZWHTCZpdCHW929B73tmYc4nOJGutMyxgU36OHQtuqoSzfAXuQNxsP5DSXzkz1XwT3yuSo=; 7:7kMSr65zdYUEXGWGXzjemlHc1dvURNONtl8tFZVX3NBCnQHoHfgIglC0Vh2PxlgHq59UTLh0Zxs5rZg2Q2Ge+9q6/ceVpT7aRMfG6ryKWB9QUySZ7pHXd7oXvyTEFns7fgYEyv8/06h8X+MPI9Rho4+npF/8JwcNmKCD2Kz9y/7Qy+YskV2+WGoyrf54d/JwG35M8Pj+77vJA6/m93QDGw53Y58dBUGs/F1fYx+eTHYvQtwfiWca9JunfbsHftln SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Mar 2018 16:05:00.4594 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cfe1eba6-92a8-4c23-0b0d-08d58a8e81e8 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR07MB0650 X-OriginatorOrg: ericsson.com X-Brightmail-Tracker: H4sIAAAAAAAAA02SfUhTYRTGe++92+6Gi7dleLQWMpDA0NT6Y0mYGsFKhD4IY1S68qLLT3ZN nERZLYZLLIk1NkMtk2g1ajY/yFE6caUmKGmgoSAtM4X8Kqepmdtd4H/POc/vOTwvvDQpKeeF 0er8IkaTr8qV8UWU+WxLctQbs1UZ82Q5Xt5qa0Dyrl4nKR/ULwvk9vE+ntzmmhUk8hT1zh+E YmJ4HSlm3g7xFZUOKzpBKUWHMplcdTGj2ZeQIcqeKhugCnXJJTO1LWQZ+hBnQEIa8AH4NTOM DEhES3AngrrPboobHAhGy2sDjhfBsKeZzw0NBHj7b/sdCs8TMPeymfAdQ/g86JqMBEcZCFis fiYwIJrm4xiobkv0McE4FP7WO/yXSGxEcOv7oj+8HZ8E3ZSb9GkKR4CtapDn02J8HCbmPHyu 7W7odt/n+W4KcQrMzu31rSUbiG5MT3H4Nug2e/yaxAAdk5MkFw0Hu8PsfxtgE4KRBRPiwntg zfWb4iApdPU9DOhUsP+8SXKBdwjer/YE0mUCMD91B6hI+FQ1JuCMJT60Nb/y1wOcA6s9qRwT D9N/vIhjGkgYNRkRZ+yCRo+Ddw9FWTZVt2yqXocIK9rBMiyblxW3P5rRqC+xbEF+dD5T1Ig2 PkiHYyWqFT2fTnIhTCNZkNhYYVVKeKpiVpvnQkCTsmDx4J2NlThTpS1lNAXpmiu5DOtCO2lK FiLuPiZWSnCWqojJYZhCRvPfJWhhWBnSGxNeB1/NK9RHh8vF6rpv/ckL8lPtIV+GPt7dkma7 HMRWZ6OC9LWS3sJr9prRCsuZtIyk0Asu+3ynu3yraUkvvC6tJDJinI+ajAlLRePKI9OH1wpW StuT6heYlHOW0YPrX1NehF98fOOBPVZb0yv1Oo2nnYMjA5NSbTzvaIRORrHZqthIUsOq/gE2 F+mMHAMAAA== X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: i.maximets@samsung.com Subject: [ovs-dev] [PATCH v9 1/3] netdev: Add optional qfill output parameter to rxq_recv() 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 If the caller provides a non-NULL qfill pointer and the netdev implemementation supports reading the rx queue fill level, the rxq_recv() function returns the remaining number of packets in the rx queue after reception of the packet burst to the caller. If the implementation does not support this, it returns -ENOTSUP instead. Reading the remaining queue fill level should not substantilly slow down the recv() operation. A first implementation is provided for ethernet and vhostuser DPDK ports in netdev-dpdk.c. This output parameter will be used in the upcoming commit for PMD performance metrics to supervise the rx queue fill level for DPDK vhostuser ports. Signed-off-by: Jan Scheurich --- lib/dpif-netdev.c | 2 +- lib/netdev-bsd.c | 8 +++++++- lib/netdev-dpdk.c | 25 +++++++++++++++++++++++-- lib/netdev-dummy.c | 8 +++++++- lib/netdev-linux.c | 7 ++++++- lib/netdev-provider.h | 7 ++++++- lib/netdev.c | 5 +++-- lib/netdev.h | 3 ++- 8 files changed, 55 insertions(+), 10 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index b07fc6b..86d8739 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -3276,7 +3276,7 @@ dp_netdev_process_rxq_port(struct dp_netdev_pmd_thread *pmd, pmd->ctx.last_rxq = rxq; dp_packet_batch_init(&batch); - error = netdev_rxq_recv(rxq->rx, &batch); + error = netdev_rxq_recv(rxq->rx, &batch, NULL); if (!error) { /* At least one packet received. */ *recirc_depth_get() = 0; diff --git a/lib/netdev-bsd.c b/lib/netdev-bsd.c index 05974c1..b70f327 100644 --- a/lib/netdev-bsd.c +++ b/lib/netdev-bsd.c @@ -618,7 +618,8 @@ netdev_rxq_bsd_recv_tap(struct netdev_rxq_bsd *rxq, struct dp_packet *buffer) } static int -netdev_bsd_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch) +netdev_bsd_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch, + int *qfill) { struct netdev_rxq_bsd *rxq = netdev_rxq_bsd_cast(rxq_); struct netdev *netdev = rxq->up.netdev; @@ -643,6 +644,11 @@ netdev_bsd_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch) batch->packets[0] = packet; batch->count = 1; } + + if (qfill) { + *qfill = -ENOTSUP; + } + return retval; } diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index af9843a..66f2439 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -1808,7 +1808,7 @@ netdev_dpdk_vhost_update_rx_counters(struct netdev_stats *stats, */ static int netdev_dpdk_vhost_rxq_recv(struct netdev_rxq *rxq, - struct dp_packet_batch *batch) + struct dp_packet_batch *batch, int *qfill) { struct netdev_dpdk *dev = netdev_dpdk_cast(rxq->netdev); struct ingress_policer *policer = netdev_dpdk_get_ingress_policer(dev); @@ -1846,11 +1846,24 @@ netdev_dpdk_vhost_rxq_recv(struct netdev_rxq *rxq, batch->count = nb_rx; dp_packet_batch_init_packet_fields(batch); + if (qfill) { + if (nb_rx == NETDEV_MAX_BURST) { + /* The DPDK API returns a uint32_t which often has invalid bits in + * the upper 16-bits. Need to restrict the value to uint16_t. */ + *qfill = rte_vhost_rx_queue_count(netdev_dpdk_get_vid(dev), + qid * VIRTIO_QNUM + VIRTIO_TXQ) + & UINT16_MAX; + } else { + *qfill = 0; + } + } + return 0; } static int -netdev_dpdk_rxq_recv(struct netdev_rxq *rxq, struct dp_packet_batch *batch) +netdev_dpdk_rxq_recv(struct netdev_rxq *rxq, struct dp_packet_batch *batch, + int *qfill) { struct netdev_rxq_dpdk *rx = netdev_rxq_dpdk_cast(rxq); struct netdev_dpdk *dev = netdev_dpdk_cast(rxq->netdev); @@ -1887,6 +1900,14 @@ netdev_dpdk_rxq_recv(struct netdev_rxq *rxq, struct dp_packet_batch *batch) batch->count = nb_rx; dp_packet_batch_init_packet_fields(batch); + if (qfill) { + if (nb_rx == NETDEV_MAX_BURST) { + *qfill = rte_eth_rx_queue_count(rx->port_id, rxq->queue_id); + } else { + *qfill = 0; + } + } + return 0; } diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index 8af9e1a..13bc580 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -992,7 +992,8 @@ netdev_dummy_rxq_dealloc(struct netdev_rxq *rxq_) } static int -netdev_dummy_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch) +netdev_dummy_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch, + int *qfill) { struct netdev_rxq_dummy *rx = netdev_rxq_dummy_cast(rxq_); struct netdev_dummy *netdev = netdev_dummy_cast(rx->up.netdev); @@ -1037,6 +1038,11 @@ netdev_dummy_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch) batch->packets[0] = packet; batch->count = 1; + + if (qfill) { + *qfill = -ENOTSUP; + } + return 0; } diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 7ea40a8..c179ce2 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -1132,7 +1132,8 @@ netdev_linux_rxq_recv_tap(int fd, struct dp_packet *buffer) } static int -netdev_linux_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch) +netdev_linux_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch, + int *qfill) { struct netdev_rxq_linux *rx = netdev_rxq_linux_cast(rxq_); struct netdev *netdev = rx->up.netdev; @@ -1161,6 +1162,10 @@ netdev_linux_rxq_recv(struct netdev_rxq *rxq_, struct dp_packet_batch *batch) dp_packet_batch_init_packet(batch, buffer); } + if (qfill) { + *qfill = -ENOTSUP; + } + return retval; } diff --git a/lib/netdev-provider.h b/lib/netdev-provider.h index 25bd671..37add95 100644 --- a/lib/netdev-provider.h +++ b/lib/netdev-provider.h @@ -786,12 +786,17 @@ struct netdev_class { * pointers and metadata itself, if desired, e.g. with pkt_metadata_init() * and miniflow_extract(). * + * If the caller provides a non-NULL qfill pointer, the implementation + * returns the remaining rx queue fill level (zero or more) after the + * reception of packets, if it supports that, or -ENOTSUP otherwise. + * * Implementations should allocate buffers with DP_NETDEV_HEADROOM bytes of * headroom. * * Returns EAGAIN immediately if no packet is ready to be received or * another positive errno value if an error was encountered. */ - int (*rxq_recv)(struct netdev_rxq *rx, struct dp_packet_batch *batch); + int (*rxq_recv)(struct netdev_rxq *rx, struct dp_packet_batch *batch, + int *qfill); /* Registers with the poll loop to wake up from the next call to * poll_block() when a packet is ready to be received with diff --git a/lib/netdev.c b/lib/netdev.c index b303a7d..fe646cc 100644 --- a/lib/netdev.c +++ b/lib/netdev.c @@ -695,11 +695,12 @@ netdev_rxq_close(struct netdev_rxq *rx) * Returns EAGAIN immediately if no packet is ready to be received or another * positive errno value if an error was encountered. */ int -netdev_rxq_recv(struct netdev_rxq *rx, struct dp_packet_batch *batch) +netdev_rxq_recv(struct netdev_rxq *rx, struct dp_packet_batch *batch, + int *qfill) { int retval; - retval = rx->netdev->netdev_class->rxq_recv(rx, batch); + retval = rx->netdev->netdev_class->rxq_recv(rx, batch, qfill); if (!retval) { COVERAGE_INC(netdev_received); } else { diff --git a/lib/netdev.h b/lib/netdev.h index ff1b604..3f51634 100644 --- a/lib/netdev.h +++ b/lib/netdev.h @@ -175,7 +175,8 @@ void netdev_rxq_close(struct netdev_rxq *); const char *netdev_rxq_get_name(const struct netdev_rxq *); int netdev_rxq_get_queue_id(const struct netdev_rxq *); -int netdev_rxq_recv(struct netdev_rxq *rx, struct dp_packet_batch *); +int netdev_rxq_recv(struct netdev_rxq *rx, struct dp_packet_batch *, + int *qfill); void netdev_rxq_wait(struct netdev_rxq *); int netdev_rxq_drain(struct netdev_rxq *);