From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20076.outbound.protection.outlook.com [40.107.2.76]) by dpdk.org (Postfix) with ESMTP id 845C12B92 for ; Fri, 27 Jul 2018 04:11:21 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WwbxnjkcFEzDg0lI0IAE7wuWvK7ic6Zgu/+Ncz/zi4A=; b=WESWQT+r8x5CIPHlLI5QtYarYnh2KhNIE2rNejjJdhfJEtzX9H6zxghZJX9FuVW5l8IS5Bv4jEeQqtpe1BLL+6mb64/fOSjXSJs6Qzpolri5BplWGPJcaIaY/ok5MnU4pcmb4pQZrZBACbsGTCbkD9k8NQYWBUV/wdLvw1fcKAA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; Received: from mellanox.com (209.116.155.178) by HE1PR0501MB2041.eurprd05.prod.outlook.com (2603:10a6:3:35::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.973.21; Fri, 27 Jul 2018 02:11:18 +0000 From: Yongseok Koh To: Ido Goshen Cc: Ferruh Yigit , dpdk stable Date: Thu, 26 Jul 2018 19:09:20 -0700 Message-Id: <20180727021019.37388-24-yskoh@mellanox.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180727021019.37388-1-yskoh@mellanox.com> References: <20180727021019.37388-1-yskoh@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [209.116.155.178] X-ClientProxiedBy: DM6PR08CA0022.namprd08.prod.outlook.com (2603:10b6:5:80::35) To HE1PR0501MB2041.eurprd05.prod.outlook.com (2603:10a6:3:35::19) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a0d3a95a-bee9-4120-e1a8-08d5f3663e2c X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:HE1PR0501MB2041; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2041; 3:p83xc6HKRxafGEhWK61Db9egLGSv13bgOw+KLv+C+kOR3ZfYalzQEjdw1vO6t56clxRzh6VYyscUjBVImLcCosinaPpenwkQ9CC/p27p1y8YB24rDZvWLsEtEpRx/9Ka0Ux1Bzsq8B3FoCq4ncadp/gdF3aYKk+g8JfsAawqLh1qSmiHHHM6N76ewaBh7h3hG2DLY89KglGpWdO6jD1mLgjKAc9oEMCij41EaiuntSKm2YwrsWcwwOT12BBeI+Io; 25:ypE88R2mVg8E/0Oz4nHWEfyTw48BW8xy+W2Jgiua6WNbeIQLTATTd/CBmZdazD/qMJIm6Yzek/ekl1IyvFQSiCgJQEjbndfVoWgx2Hs75xyOcqzUbEblqgt4sOtfTfsaBP722W3PT2kapZ9oYs0eEPK8nbWWeDe8hjmv3S1hlB6Ltc5UMEojozHsu9CCbGSgoS6iu1tyyQvlrqsS61X3X3LkldeN6HF9aTXxxQsc8mIGAmyV+eL5sZekc0j87VmJsnnWfPyNcjWgjmHqqDVONtbpn5pQ2yEfOW6CKaCJIfUBlwqgV4bI3gV5fkRgn3wrsmXdOS7YqFyQ5Pl9/mFUEQ==; 31:n3L/fEiNMsVT5Vh9KYmRaih0GaEOAL87wmIBSWAgIPfsDj7bnvwMRRHMpaAZpwMeRYVDHh2J8S/MOblWJ7fDByPkCXPb26OGoP8fuhmrpqdFxiCT1LCOTN+KCQ7UDbv9Fe06RPAVSFGy9pkpLmQyVk3r39KsX+kCgLjpnHNqi1KHcPmRXsmFDnh1kueMUP9TZjEKtVTyvsPUxPeCl/6RgejNtVUwf7lM5e/+tBUGEy8= X-MS-TrafficTypeDiagnostic: HE1PR0501MB2041: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2041; 20:zo+5uSlGssCiUBQjr+F8oAi6HSSJTeGPInJFhQzI8VLogmDmD1wZA1b/Abey+lhmlQ6WVTIplVCMwTc73Zt9of+KGKFVtt6gb8cdt/Rm5eqgiprzJLVrGkXHW5reQbnrhWlcYIeYQNl5B1o2nZXuXtPv5Ss1MSHVwGmPCK2vYCXmmH4C1UVS1tkZBhtMwZW5cVbAAUfR1T1lpBZyitTJwIzUDs8HSWFyteX2kBpmZroD+37WbbCbsUVV7YJsYagcBOPjmE6v+9o73FiGUPI892U7cLEnQgeiyBjQJkDYwqP0a8/ByWmSUIzWDP356ogiEwWEdXAsJWZNp+qfoUAmSnwb3QHOTpDKB8KBij8RXCM7XDY1jIufdQpdcaAXfzrgzasw4bDKVz5bp3GZSUcSl2ehVoEeO6ZQ+DJ+I45jqRFi1WOaKhyd2LEtFuNmt8f0XS2XOEgNhpYEYNnII8oJCC2VzqNYRoUcSMcFmIXsqw1+2OZGlEBkh2Rm3wo6PgAl; 4:S1lZlBZ0t1oV/Rrqmhyn2iYL7hmh6PSWAtvBhYP4gdyxtkF7OceIo+YP1XHyVeFhwawgmJkvGxphB/M7KDTzY8zfVRTbWwnf/nEtfGoEnlwjJ5phXaifHvQkOZHNwuPjR4lG4sKFVSHVYHuhnzXjUUzAvfjTXoFDqpPtdZ5OiKUSCs4SESF51GMIlrILyRVoyITgAuvZ1XvzPRDPJxn0I55nYX+Pbn8TgCbCdtJieJlrZHB0N0GTL1uE0iFhUOOaImXTB7nkWNZH5AT1AwoaRoHFtFqmFR45fAL7byagfdC014hK+ktOa1Q463B8JrV6 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(228905959029699); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231311)(944501410)(52105095)(93006095)(93001095)(3002001)(10201501046)(6055026)(149027)(150027)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123558120)(6072148)(201708071742011)(7699016); SRVR:HE1PR0501MB2041; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0501MB2041; X-Forefront-PRVS: 07467C4D33 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39860400002)(136003)(376002)(396003)(346002)(69234005)(28163001)(189003)(199004)(6306002)(55016002)(53376002)(36756003)(4326008)(76176011)(2906002)(105586002)(26005)(2616005)(25786009)(956004)(486006)(21086003)(386003)(966005)(106356001)(51416003)(7736002)(86362001)(53546011)(575784001)(50466002)(16526019)(48376002)(1076002)(52116002)(8936002)(54906003)(5660300001)(11346002)(3846002)(16586007)(446003)(66066001)(81166006)(68736007)(316002)(69596002)(7696005)(6116002)(97736004)(53936002)(476003)(81156014)(50226002)(6666003)(47776003)(6916009)(186003)(1720100001)(8676002)(305945005)(478600001); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0501MB2041; H:mellanox.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0501MB2041; 23:nvtw7WB0vI6FSrSia2r2MsP5TwPbV4ouQxpaVIF?= =?us-ascii?Q?NtPEcUjJUHn+jexAH/9RGXIId0nTg50wbhzuIadk9HUrEyxqK+l4KtRWNGT4?= =?us-ascii?Q?fSc0UXEAFuXgX/1WTgKZbmovBqvVKjgXTslt/xWCmCnhC9sysz384ZAoXeBr?= =?us-ascii?Q?clVV6VtaJRsUwmxl+zvlNW1obdmB50oetBUhiYzSUPQmz10YVCg9/514oOTi?= =?us-ascii?Q?GIv1iBVNbFrAGLzXPyI9UvmSc97CqliohdEQVCoWKX4a2yHIlcVHEDkCUqP0?= =?us-ascii?Q?/mdAEnXAYq4BAvQiBveQrBeU+27Ls97D3vNUV5MVxCrV72AKnBOfIYLxVbAP?= =?us-ascii?Q?8FQ0I63At9e+Wiuz5iyA+KH75E9bzXde2fbzEpUzig7+Lrow4Al9A4Ullv8o?= =?us-ascii?Q?ip1zIRNqW1qI+gR0xa8XuKC8VUDw1GtaFGAFQZhX4d0Rnp4MT2gD8rtgCDDk?= =?us-ascii?Q?2GOWjHT6nqA2+bpHY1V9wR5CqtBmBpKdDVGpTjIrcyeywnztDWUR19/N0zVG?= =?us-ascii?Q?xLDS5fZmvyXo6Ju+7CC26/JUS/Pt87AgcnZ0yO29jflGGzICGZe2JPmdFUUP?= =?us-ascii?Q?vR8lvQ/GVHH1s5d5QrBVL4oFp/QGS7rUgXfGX8nxOCNER11zmYbIocAkgNZs?= =?us-ascii?Q?LlOKy//yAlrcAUpFI9ppThbG9unx0HtRdzsqhhkMJ/llowGd7jzZYe6OO/1/?= =?us-ascii?Q?F0qwdcVYjAkG1hC2hA5tBnm61wDlof5S1Q3M7Fu4//6TrROm/BFujNxMGr2B?= =?us-ascii?Q?ihnAptu+Qyi5WJ7/761ym4da1gS5rTOz6/yYZAk9J4OseV8L9N4ifoLPb/2f?= =?us-ascii?Q?pxcOCHxjd+ZmMNOqEKCgJ7qGuSkk8CiYs6lVLO6pSHYYYHT4OtBvb6IJrpuH?= =?us-ascii?Q?5CCrYMH73Fabi9LsuSiq4l/V4sthuicCkMs6SKAcbIrvh1LzFUe5ror2Yhr3?= =?us-ascii?Q?LnIPgMkPmPo920no5u5+2ecASDILUUz4stDuGvDyfNGvPaAqxaJV5V/NI+9D?= =?us-ascii?Q?A5NR0Rodb+Zu4rZ95o8NVqlaRWqI05Vw3j/WPJDXaToZrPJFtzWUyXiDM1rE?= =?us-ascii?Q?uh3hEFqQNzrYKR7y1/+GTQ29QsJglNge0/6RczdrllaBgZaoSRhV8rR6KXGr?= =?us-ascii?Q?37dF+BNvinnWCO2IYmL0I8cwAb1Y4GwSSARMKEwoWu9Qjit+vJz83rNfkVud?= =?us-ascii?Q?v3EzZ/CRGYXaOXCaofeq801YpazlNSGIs5iCnm1BuIxiB8e64cysLZwZP8MY?= =?us-ascii?Q?YUyV9JMtw81g7S029bw86dyX5VlZwBlfmtgavY2E3ljXsBQl9xlJhbWxYCqS?= =?us-ascii?Q?0ik5Vb4h3D4dR7Wz8Zl6O+rherHHhvA9CvDO91PlqJRZU2e+t2ToWoRaksVT?= =?us-ascii?Q?cCQVa0HhtNVdTTFIpQlKSOmOEqu4Xvan2P65hCAfYBd8l+RdB?= X-Microsoft-Antispam-Message-Info: MHMTJnfU/uJXOL2oMBqyxcchubIMvBYRtJI98eY1YEdr6rl7OAu3Z6tqfW0zuW5wH/ePyPremGGivsKvgblRGfldBTptEWxVMj+0xIAt7FNAHk7Kx3+QU4aN1IrbIl8Rb+8cdxtjsKxWLmYVyUWHFX4OBhyhrQPuIQdFZlnE+gv/QRXqHBKF43WNwfncm6QWRe6SjspU397yUjJE1CLgSLaRfyNL21SRmlF7tM7n9e9EtUWm90EwpyJR4LsMNRUqBxczT4Ucb2wPQcXWU1HB4gxTDCRGNKT9p9En2ilWgeKLKta0NU29wyUniIoz47bd8xzfK6+w+pdOXThoUy3JmIBW1sIjtUCZi9Azp4+RoYk= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2041; 6:Xmvck+WyBYIw+SHucP04cmC7quLXa3tiWbPfG5RCK6I0aaVXNNnUBM6q7VXGrhTn61vzqCGjv9HsZgE2WNAAydJJ688bzhf4zj6WimmRyTLkqKP3vh5mql0T56UuazsNkH4r1ms/khTtBQ2zWX2HJewlwkWSW/apBPGQMvYS3MkzTZ5oMYo3um74rVFWZd9xAKekc+cVJ5HuqajvgiWCjLe6ux0hziNtGSIX+/x+/bzDpad/qmK/0c95V+1nFlelpDRgoKNh9qJu94llr3AVSE7VE63Qqk4478+p1W7Uze4DH2TBVMfD3OdWGm29agJpGbxKlieD3H3T9cKvZ9GcmQmBOLMizVlbozUzbPPtGrH3TmdH4frxtqgmxVOyUaOT3BZA7OvX5nIXAL2N1PZeKZseoZp0Jo+FTLlzXZU6WiSQ00fOGYUALfaq4CprnjcI13QMS9CeO7zSWUMiti1B3Q==; 5:/OfeGgHndek/rs87T/qYqkBGUmsCnFcDni+MTKVDa2gw+XcmjQMnBVsDSL/DziJlszuYdneOmQogBx1FRl5ChPNoiIRWTfRwLTEllhf77oPbhaZgP8HrT0d8NWGzKNZxxYGhI8GayxhlLTy/u//P7i5M5ddU48mKhGz4UII8dhk=; 7:otBQiwb3iEQELLU6LGOK8/uACcZvYHhhToC8Q8bWku7Sud3EQgKt2WNRpDOfbjNp30lKWMh2rOe0Vyj0r3PHighKCEkGK0b0xg7bii0GhKy5gMKq0LK22dnVBM4CmZNUxZPUDsuYHqPBSLc6sMnxcWqvIsaJERAt6hL9N4FmQ7+okloW+84vo70NJ5AH/QTZeVwThKAq13Frxg72NK2Pu9GkPEJAZnpExAhImCEBdPhUasGzVx3UVGR/y15Vtwx6 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jul 2018 02:11:18.6885 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a0d3a95a-bee9-4120-e1a8-08d5f3663e2c X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0501MB2041 Subject: [dpdk-stable] patch 'net/pcap: fix multiple queues' has been queued to LTS release 17.11.4 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Jul 2018 02:11:21 -0000 Hi, FYI, your patch has been queued to LTS release 17.11.4 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 07/28/18. So please shout if anyone has objections. Thanks. Yongseok --- >>From abfc2bace9e58f72dd7ca63a7a3133876b0307f4 Mon Sep 17 00:00:00 2001 From: Ido Goshen Date: Tue, 19 Jun 2018 17:37:25 +0300 Subject: [PATCH] net/pcap: fix multiple queues [ upstream commit 8ffda7673fa71e6a666963fc0ea4969d65dd09da ] Change open_rx/tx_pcap/iface functions to open only a single pcap/dumper and not loop num_of_queue times The num_of_queue loop is already achieved by the caller rte_kvargs_process Fixing: 1. Opens N requested pcaps/dumpers instead of N^2 2. Leak of pcap/dumper's which are being overwritten by the sequential calls to open_rx/tx_pcap/iface functions 3. Use the filename/iface args per queue and not just the last one that overwrites the previous names Fixes: 4c173302c307 ("pcap: add new driver") Signed-off-by: Ido Goshen Acked-by: Ferruh Yigit --- drivers/net/pcap/rte_eth_pcap.c | 86 +++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 50 deletions(-) diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index 39947105b..f71ba001e 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -687,19 +687,19 @@ static const struct eth_dev_ops ops = { static int open_rx_pcap(const char *key, const char *value, void *extra_args) { - unsigned int i; const char *pcap_filename = value; struct pmd_devargs *rx = extra_args; pcap_t *pcap = NULL; - for (i = 0; i < rx->num_of_queue; i++) { - if (open_single_rx_pcap(pcap_filename, &pcap) < 0) - return -1; + if (rx->num_of_queue >= RTE_PMD_PCAP_MAX_QUEUES) + return -1; + if (open_single_rx_pcap(pcap_filename, &pcap) < 0) + return -1; - rx->queue[i].pcap = pcap; - rx->queue[i].name = pcap_filename; - rx->queue[i].type = key; - } + rx->queue[rx->num_of_queue].pcap = pcap; + rx->queue[rx->num_of_queue].name = pcap_filename; + rx->queue[rx->num_of_queue].type = key; + rx->num_of_queue++; return 0; } @@ -711,19 +711,19 @@ open_rx_pcap(const char *key, const char *value, void *extra_args) static int open_tx_pcap(const char *key, const char *value, void *extra_args) { - unsigned int i; const char *pcap_filename = value; struct pmd_devargs *dumpers = extra_args; pcap_dumper_t *dumper; - for (i = 0; i < dumpers->num_of_queue; i++) { - if (open_single_tx_pcap(pcap_filename, &dumper) < 0) - return -1; + if (dumpers->num_of_queue >= RTE_PMD_PCAP_MAX_QUEUES) + return -1; + if (open_single_tx_pcap(pcap_filename, &dumper) < 0) + return -1; - dumpers->queue[i].dumper = dumper; - dumpers->queue[i].name = pcap_filename; - dumpers->queue[i].type = key; - } + dumpers->queue[dumpers->num_of_queue].dumper = dumper; + dumpers->queue[dumpers->num_of_queue].name = pcap_filename; + dumpers->queue[dumpers->num_of_queue].type = key; + dumpers->num_of_queue++; return 0; } @@ -754,18 +754,18 @@ open_rx_tx_iface(const char *key, const char *value, void *extra_args) static inline int open_rx_iface(const char *key, const char *value, void *extra_args) { - unsigned int i; const char *iface = value; struct pmd_devargs *rx = extra_args; pcap_t *pcap = NULL; - for (i = 0; i < rx->num_of_queue; i++) { - if (open_single_iface(iface, &pcap) < 0) - return -1; - rx->queue[i].pcap = pcap; - rx->queue[i].name = iface; - rx->queue[i].type = key; - } + if (rx->num_of_queue >= RTE_PMD_PCAP_MAX_QUEUES) + return -1; + if (open_single_iface(iface, &pcap) < 0) + return -1; + rx->queue[rx->num_of_queue].pcap = pcap; + rx->queue[rx->num_of_queue].name = iface; + rx->queue[rx->num_of_queue].type = key; + rx->num_of_queue++; return 0; } @@ -776,18 +776,18 @@ open_rx_iface(const char *key, const char *value, void *extra_args) static int open_tx_iface(const char *key, const char *value, void *extra_args) { - unsigned int i; const char *iface = value; struct pmd_devargs *tx = extra_args; pcap_t *pcap; - for (i = 0; i < tx->num_of_queue; i++) { - if (open_single_iface(iface, &pcap) < 0) - return -1; - tx->queue[i].pcap = pcap; - tx->queue[i].name = iface; - tx->queue[i].type = key; - } + if (tx->num_of_queue >= RTE_PMD_PCAP_MAX_QUEUES) + return -1; + if (open_single_iface(iface, &pcap) < 0) + return -1; + tx->queue[tx->num_of_queue].pcap = pcap; + tx->queue[tx->num_of_queue].name = iface; + tx->queue[tx->num_of_queue].type = key; + tx->num_of_queue++; return 0; } @@ -977,15 +977,8 @@ pmd_pcap_probe(struct rte_vdev_device *dev) * We check whether we want to open a RX stream from a real NIC or a * pcap file */ - pcaps.num_of_queue = rte_kvargs_count(kvlist, ETH_PCAP_RX_PCAP_ARG); - if (pcaps.num_of_queue) - is_rx_pcap = 1; - else - pcaps.num_of_queue = rte_kvargs_count(kvlist, - ETH_PCAP_RX_IFACE_ARG); - - if (pcaps.num_of_queue > RTE_PMD_PCAP_MAX_QUEUES) - pcaps.num_of_queue = RTE_PMD_PCAP_MAX_QUEUES; + is_rx_pcap = rte_kvargs_count(kvlist, ETH_PCAP_RX_PCAP_ARG) ? 1 : 0; + pcaps.num_of_queue = 0; if (is_rx_pcap) ret = rte_kvargs_process(kvlist, ETH_PCAP_RX_PCAP_ARG, @@ -1001,15 +994,8 @@ pmd_pcap_probe(struct rte_vdev_device *dev) * We check whether we want to open a TX stream to a real NIC or a * pcap file */ - dumpers.num_of_queue = rte_kvargs_count(kvlist, ETH_PCAP_TX_PCAP_ARG); - if (dumpers.num_of_queue) - is_tx_pcap = 1; - else - dumpers.num_of_queue = rte_kvargs_count(kvlist, - ETH_PCAP_TX_IFACE_ARG); - - if (dumpers.num_of_queue > RTE_PMD_PCAP_MAX_QUEUES) - dumpers.num_of_queue = RTE_PMD_PCAP_MAX_QUEUES; + is_tx_pcap = rte_kvargs_count(kvlist, ETH_PCAP_TX_PCAP_ARG) ? 1 : 0; + dumpers.num_of_queue = 0; if (is_tx_pcap) ret = rte_kvargs_process(kvlist, ETH_PCAP_TX_PCAP_ARG, -- 2.11.0