From patchwork Thu Apr 12 15:32: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: 897723 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="PIA3iocf"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.com header.i=@ericsson.com header.b="mUlwI7VS"; 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 40MQ1R5cqxz9s27 for ; Fri, 13 Apr 2018 01:34:03 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 0CCEFD72; Thu, 12 Apr 2018 15:32:52 +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 BB3C1D57 for ; Thu, 12 Apr 2018 15:32:50 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from sessmg22.ericsson.net (sessmg22.ericsson.net [193.180.251.58]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id AFE1E68A for ; Thu, 12 Apr 2018 15:32:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; d=ericsson.com; s=mailgw201801; c=relaxed/simple; q=dns/txt; i=@ericsson.com; t=1523547166; 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=X983RZ7/bigPHlmOxqnhC5J2qTLtSiIooKU+4NNoVbM=; b=PIA3iocf48GGn3MpmgaRV74A3oHxzIbVwoox9EXBOfqZjRL++hXFKIqTM7wvPcQL siB1gonSUiYDmAH8WSOYIpa2Ka9E2OUYGq+rNLrzFZBL/eCsEqTq+pLti8BIAZoD UbDspJoyFKWNinTfnQrPYrzJ/KhTzR/c+kRQdaPy/gw=; X-AuditID: c1b4fb3a-1ff859c000005d56-f5-5acf7c1586d7 Received: from ESESSHC014.ericsson.se (Unknown_Domain [153.88.183.60]) by sessmg22.ericsson.net (Symantec Mail Security) with SMTP id 30.1C.23894.51C7FCA5; Thu, 12 Apr 2018 17:32:37 +0200 (CEST) Received: from ESESSMB501.ericsson.se (153.88.183.162) by ESESSHC014.ericsson.se (153.88.183.60) with Microsoft SMTP Server (TLS) id 14.3.382.0; Thu, 12 Apr 2018 17:32:33 +0200 Received: from ESESBMB502.ericsson.se (153.88.183.169) by ESESSMB501.ericsson.se (153.88.183.162) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1034.26; Thu, 12 Apr 2018 17:32:33 +0200 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (153.88.183.157) by ESESBMB502.ericsson.se (153.88.183.169) 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, 12 Apr 2018 17:32:33 +0200 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=/C0eOrACKanLhJA9NWuy3ci4m0gOJbf52gn0dspfvx8=; b=mUlwI7VSseIOGOJIIDMLCH6tY8oO4wzuTKXE8yf+kmS2yEj/vkob6uf8hBRp/MosB6QtSAYy0vWQDLO17Rnef3gf5dM9DVwFuhyiE1uLJhOejVNbNjE+WRSs3kyT1G3mjB/+AFRwIzE5Z+7BbXVxClojumYYpjg9+upUfnZqmUc= 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.675.4; Thu, 12 Apr 2018 15:32:31 +0000 From: Jan Scheurich To: Date: Thu, 12 Apr 2018 17:32:11 +0200 Message-ID: <1523547133-14055-2-git-send-email-jan.scheurich@ericsson.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1523547133-14055-1-git-send-email-jan.scheurich@ericsson.com> References: <1523547133-14055-1-git-send-email-jan.scheurich@ericsson.com> MIME-Version: 1.0 X-Originating-IP: [129.192.10.2] X-ClientProxiedBy: HE1PR05CA0381.eurprd05.prod.outlook.com (2603:10a6:7:94::40) To DB3PR07MB0650.eurprd07.prod.outlook.com (2a01:111:e400:943d::16) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DB3PR07MB0650; X-Microsoft-Exchange-Diagnostics: 1; DB3PR07MB0650; 3:YAj6ECyodLr+HnNsGFaTwforhQTlQIaenp4nast00V77RsnToB0+Lek7l5Jz9uC3VWLccWw1d+laQxGp9GHdbAHWwJU/LY34C7wt+bDXr7pV2WVA2iFNAuAhJyLWQz4gM9MSyV7uzTEMoA667fWmowZzB4tDJ1hguGbClNj6dbR3rS4N6GyD5NS7CkjWq59LiLZ1DcHparMbl7QA0jO8Z70Sf1A8QM8Sc2RqHFNU/DiipYLa8Vv8RGFAveJZbGy3; 25:iP8fFsXi1tcmHIE61dW9vWYVES8dVOjfjL3WYhm4HSQMSV3CeSczWKkv/XY0TNuFipTi1se+9afOLc2aIBENdZXoyYy4GR1ob6O9ynjrH8zq5TL229j7BGUxzx20fDjPzSgqh1dHTjgLpeSwn4pCQK7katJOgnZZ3Y/33Cr/OEGoWBCbR1nVeuTAQz/Oy4aWgmTQoQhXISeZFEqPoKxQYr2KTgu9Wb3ldHpuUyg6W/74+VDZFyM0zjl88cXkVxx/gUMNV89ulPgjzJG0QPYazFTT3CJWF1fyDy7loNLRV1T0Oul5GgjChaIU6aLG1NAOrf+vMJ/Ql8Pu6mRL8Um4IA==; 31:MaFxFJj5oNS2GSh39PjyvthxgLZygcDnBHpul8DSxANs//i0R1lAU0Fqg2LlxSHnYqTmfEGz3hg2AztXy82Wq+jhYSYmIDl/RYCXs5YgHeI3IWwB14KGFKL55esL4Zubemmw5VjfochaNuoR/bSmvqCFidmaPXQii4aniWCnGEEVgEzCeYnHu8A6so9gWM+mL0NvCQ/XORdWcA2JttRr4iX+6o8Y5RVunAZuF8+A+5U= X-MS-TrafficTypeDiagnostic: DB3PR07MB0650: X-Microsoft-Exchange-Diagnostics: 1; DB3PR07MB0650; 20:sFVrYN1o83ZVn3XlNEfudCe365XQX8oh0FuX9o7Ke0ebg9Q9k7lkWlRxSpb5EqHJYS6R1ffcgkwhhOgBYoyxkcMZYK8F49Er9pm/o/EhOHTPbHhrJpTnkiJny7mROWifwEmCNp6hgwM26UqCuTMb4vC6chsPmCNoyTKk6lea1OuKloUl+laeHPqypqOy2+EPjCbMFioqoArWhPJkjvZit8apwhqjGvwRH+y2JomrSgI2fossEunI/YlfkVAEce1O437S3hXKnqNLh6w4nnZBMUa2FxvwQawYNWJrWVdA4DA03F4XyeD8sajVZ0OPA/PcHQU7AKqAjYDEC6Gwlt4MXM6DKU1FuzMcpNx+8thG9hfDf8Gs4fH8pSv3dqNm3TYZzrZ9PeIve8CVrK0FkVFh6KrIWD6xORub03hHjohUWxdoVMvj0ZlMQpHv6xEowLNpCqgVP49ZDpdDmFRnq41bFrWCibejaj0rfyhd9pN6R8ZuFJWsD+iNTDdtGeSD2bBr; 4:vyhTZHYze2u5CqUOEi+71rQzg8/mQ4vp6Nsp3aWzn6XYLkfdnYje9tPyXdcxz/Xk1+Bfexy8DUZAsqSmidvOCE3WQCk2F8XI6PzDaO3+y/hOgMv+4OMEJf7/ls6d8iDK54TO++7n41Dd0RK8nPLxhh4b7RxZ5oUk6Q1iLWTtdvO+TYOE+sbR+3TVpsdxNWDCqwWCdyurbetTJ1Bo7n7JXtv/DQGDiW6cK5zGo4CZ6Bbd0KmxcxD7rZ3b2sPbG67g2Y/hX6OTekE/UZyPoJRElv+7/ct2oxQNlVQvhQLzjsLCFys27j+dV7QxeM/NQV/RJsC6hnny7OrMMP6vnZmA6zt9s4brb3d34ovtMFh8A1Y= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(37575265505322)(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231221)(944501327)(52105095)(93006095)(93001095)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(20161123558120)(6072148)(201708071742011); SRVR:DB3PR07MB0650; BCL:0; PCL:0; RULEID:; SRVR:DB3PR07MB0650; X-Forefront-PRVS: 06400060E1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(396003)(39860400002)(366004)(346002)(376002)(189003)(199004)(186003)(6486002)(16586007)(11346002)(52116002)(316002)(7736002)(956004)(386003)(305945005)(2361001)(47776003)(50466002)(59450400001)(6506007)(76176011)(2351001)(2616005)(476003)(16526019)(26005)(8936002)(44832011)(48376002)(105586002)(86362001)(6916009)(36756003)(50226002)(8676002)(478600001)(51416003)(3846002)(53936002)(4326008)(446003)(6512007)(6116002)(81156014)(486006)(81166006)(66066001)(6666003)(5660300001)(97736004)(68736007)(106356001)(2906002)(25786009)(107886003); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR07MB0650; H:ubuntu.eed.ericsson.se; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB3PR07MB0650; 23:80hD5JrRmSAbFHV2YT31T0PxP6TMwjOKt/rH2K2Ri?= HVVXo5aiGFkzpfSP5+u/4hJE1NuU41pIyY1g4zzr6leIPAudtlEzWX2sYTnobMxE55P/SCwJvmahZn3UQjFFGstzNjmcNj0sYqCn/R0d6747XYZy+f3cm8dNtYt185Q9WJFMOKKFEE4cPKCS0TxZoocP/rckFwyno+HhgW0Z39GgLmj/aso3Tf52YmqsWPa92Yzc37KyEwpM5zBot3fqthKMYFh9fNR0Rw38AuEaIbR5ivDjgOPV3BmZspFEJJKB+FusikUH28n8D7Opmxl4E3YW63b76+IP3kFQRvZLiUPIL+Fs4hB+3+rdZvdI8JalgghIoO6dMcgc5ATSGMeryc9nczwpiKRszJbhSD+Fq0CdR58pYIYPROL8kSSjJ4ULC5/iLMTG1ouPWykNe4pSzXDffdIWeewD+4Zbte2JO0RnguPuYec3KybUW8WKKVlsIysm3/X+rSGvdDnxXClRxEdmZNMWNDeLz5vjzk66qf81B96jGOZTgVt38ETJq+jfFV6kijuNyFlMpKQhj/c0Nq9FgpIWmcQHXa0uOp33b1cW+T35+LkhddPX5QMcDL6UAmhr8tzarQjKGZNdRaGdJMXYHEeZ2IunZNSr+ZlK/sRVbvLdygVMiK147+DZ+we6eqQ53/kURjzOcssiRhoB5XQZ96ZxdCKdl/foNTBQ/2EOy8mnhIbvfg1p3C4SVZSk/HpQT1T+9UCVhMedtv9Oz7HO6sD/I17/ue5oDGeBmIDJ2MybEr4w4Nu4g9CCe+xw82o1XrbeSQDhpBjomFki/pjCcaIq4DAwhQqUKC3LnbE4iojsI2hSeOEWOiLtXGe3zeoF0IfVYGhwreMOATE3cK6QMMgMFtkb2Bb0BuSHQIRBGG0/qNBCG4hJLe1LBvwtT3WttvVXD9eou0WiuFNcUrHVWMutjFT+UFlEyhIOB0qespJud3kb0BJIt/+ofCV3NZL66q/r+cyTaJopEwBrD19PbaqMq7haNC5bCigJCr1egsWzu8sPaUcQDoyQwRZBNPhmrQMjQ6MIX1j1Pmu5p6vloHdHfJL7iDZkigXSTBefSB5Eb7ytAVl3B0Su0E6E9MH1vs5cy7mVTqO/SN8eaSYhKmLBbykzRz/VDMnfbL0jQ2/a5a9pUWxRn6oRDYWujlSRkcTh6z3ugqhQIt4hzEYQzvu/FxR+FBuXyl7KEw0WTr3D3LKCgY9lge3hrfQppAg+CQ7wozoEihldVplvwEqTeJV7ZbeoI+MZ1AHtn8Zwg== X-Microsoft-Antispam-Message-Info: 18Z9/eZyZ/ES1PbYwfXVmKPZTz/dD4PEY6m+4fXhS/HRSzRlhgN8I0X5+kUy/aWMtbE9lY3PAUyVbB3QlugKwpQ1XRZ1btq6WzNRuDoGoejDfkXghI2/Q5neILNp1w+Oi80QWxT7A2ceCv9/WWFVOuAAqYkhPOkJ4K7bL4oMBxs7lgWTB2kimnuqzwM46uZB X-Microsoft-Exchange-Diagnostics: 1; DB3PR07MB0650; 6:XuGIn1//OD3WOE9E1XHGmF8IbAX8Ib9hl9Qy7CHu/KUcDB5Mo/njF/RD4R81qqu+IsZIMyf75bwidkbIFkIQQSDDJe/UFkF50yt0+G62m0+cpXGmVDDaZhyBLPNBmGpmkIHha9o9uP1VzGFYxHniLHyhLBOE98F96LTdgILqqW7FaeMUAsLT+AO06+MnzHCEXhaHgTG7iSsZT8sievNV2eCByMLzyaFD7GGEOb83RniYkvGJvzMULUJDvx3TR09XsqmjDUwsu7Ef1bz672WmwIDTkeFbv2np04YUrxDJ3+myiehdaQbyMdBSfzEmpE4paKFdLkV1CUdjWK5W7zpQhX7QY6+MQCfmJWC+qCC7G8yEqz5MYNE/8FFgqZTXh/mY/7R40iPDeW9Ri5Ekpag1Md8mCJFZNmGCXZsAtlCSEqffcqGBVAUAIkXfOCbFkCgMydTEnKZ3M2yTfR6y3aOW4Q==; 5:UO10ZfcSFrlM6I3BfEdpCKEw/6an6XKyeXtZo+0J0/iBQ9vS78DPCUCQRnHpMQdlTrL8kSEWGsKeWWWnav/Ci1XP7q7kYP7XY2jCtgqVWHT8V+uS3pVgkJ3T5H+f03mg32ngiz2J2PYL/1fJ23ycYbh3X9rgtOKDiIzJhnHjp58=; 24:2xOsMS4IzcqvCwol0slXSHTQC+6WOnoyfO7oEI3qDSP/EP8kpZ+NwcypDKzQktO8jti/Hhg7dtvuzbpwg2NxsArUN7bcuA96/gbQ22FCJ7s= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB3PR07MB0650; 7:+AU4bqiuR8+s7j9idN+1ENJYm0IEWNJXYgQ6hWqJXyBWwt1Ye8j2l0mZ5YMOF36zXiPzygajBLcijuVgGNE/VXNLKItW2gmaGyD3psoTeBTzSKsgMEX3wXOYAfurZU+86TnMJXYd2Desha1COKKbAdOWyAFiaecwGPaYKB9VZmHnyNWIU2QJMpR3iLKx/UMy7el6TYK565NWtR8p0pMdSzDzohbRPPuytNuNhnhJq4jjQXQLk7SaCw5gp6YPiWUx X-MS-Office365-Filtering-Correlation-Id: a20dc255-0b14-45fb-c544-08d5a08a9b90 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Apr 2018 15:32:31.1336 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a20dc255-0b14-45fb-c544-08d5a08a9b90 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: H4sIAAAAAAAAA+NgFupileLIzCtJLcpLzFFi42KZGbHdRleu5nyUwdNXlhY71i5ltDh6eg+z xZX2n+wWGx+eZbVYe+gDuwOrx+I9L5k8nt38z+jxft9VNo++LasYA1iiuGxSUnMyy1KL9O0S uDLmfXnIUnDOp+LD80lsDYyrrboYOTkkBEwk5q3aw97FyMUhJHCEUWLr2wYmCGcLo8TBG++h nO+MEncn9UOVLWWSuLHpDyuIwyLwiUnixIaljCDDGAViJVq2ToVq6WKSmNO5FKiKg4NNwEBi 9m4HkBoRAUmJf4u3sIHUMAtMZZRofv6NCSQhLBAk8W9NDyuIzSKgKnF6/QqwOK+Al8TGE8eZ IK6Vkzh5bDJYDaeAt8TnzY3MIPOFgGrmr1GCKBeUODnzCQuIzSwgIXHwxQtmiFYFiY1bZrKA 7JUQmM4ocfz5KbCZQgLqEn8PfWWBKJKVOHp2DlTRNkaJ7mv72CGcBnaJg+f+sENUaUlcnngP KrGEXWJTy0WoHdkSO1+vYYSwvSWafu+AspcySzy9VwZhy0icnrIRqvkiq8TDez+YJzDqzUJy +ywkty9gZFrFKFqcWlycm25kpJdalJlcXJyfp5eXWrKJEZhCDm75bbWD8eBzx0OMAhyMSjy8 b3LPRwmxJpYVV+YeYpTgYFYS4Z1jBxTiTUmsrEotyo8vKs1JLT7EKM3BoiTO65RmESUkkJ5Y kpqdmlqQWgSTZeLglGpg7Bay/+EokPm1ddf/W6uqv/d9Z6ifVO72+UFn1JzW29wflDTLZaMz d7a8zJgbFFWuxdtyVd/sCeM59pkKE+e/y8lfEOa0UCJgoeWl5FlFD+ZOLLu/INWK+7HrMlHj cOEF2a5nHy5wuyvGLqpTsSI+doPWgg6X55Lm9ztbfL07fl0vWTddjfOWEktxRqKhFnNRcSIA 3mVVYB0DAAA= 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 v11 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 Acked-by: Billy O'Mahony --- lib/dpif-netdev.c | 2 +- lib/netdev-bsd.c | 8 +++++++- lib/netdev-dpdk.c | 41 ++++++++++++++++++++++++++++++++++++----- 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, 68 insertions(+), 13 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index be31fd0..7ce3943 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -3277,7 +3277,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 ee39cbe..a4fc382 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -1812,13 +1812,13 @@ 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); uint16_t nb_rx = 0; uint16_t dropped = 0; - int qid = rxq->queue_id; + int qid = rxq->queue_id * VIRTIO_QNUM + VIRTIO_TXQ; int vid = netdev_dpdk_get_vid(dev); if (OVS_UNLIKELY(vid < 0 || !dev->vhost_reconfigured @@ -1826,14 +1826,23 @@ netdev_dpdk_vhost_rxq_recv(struct netdev_rxq *rxq, return EAGAIN; } - nb_rx = rte_vhost_dequeue_burst(vid, qid * VIRTIO_QNUM + VIRTIO_TXQ, - dev->mp, + nb_rx = rte_vhost_dequeue_burst(vid, qid, dev->mp, (struct rte_mbuf **) batch->packets, NETDEV_MAX_BURST); if (!nb_rx) { return EAGAIN; } + 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(vid, qid) & UINT16_MAX; + } else { + *qfill = 0; + } + } + if (policer) { dropped = nb_rx; nb_rx = ingress_policer_run(policer, @@ -1854,7 +1863,8 @@ netdev_dpdk_vhost_rxq_recv(struct netdev_rxq *rxq, } 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); @@ -1891,6 +1901,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; } @@ -3172,6 +3190,19 @@ vring_state_changed(int vid, uint16_t queue_id, int enable) return 0; } +/* + * Retrieve the DPDK virtio device ID (vid) associated with a vhostuser + * or vhostuserclient netdev. + * + * Returns a value greater or equal to zero for a valid vid or '-1' if + * there is no valid vid associated. A vid of '-1' must not be used in + * rte_vhost_ APi calls. + * + * Once obtained and validated, a vid can be used by a PMD for multiple + * subsequent rte_vhost API calls until the PMD quiesces. A PMD should + * not fetch the vid again for each of a series of API calls. + */ + int netdev_dpdk_get_vid(const struct netdev_dpdk *dev) { 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 afa4de0..d19bd86 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -1196,7 +1196,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; @@ -1225,6 +1226,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..46c6a6e 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 + * should return 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 *);