From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10068.outbound.protection.outlook.com [40.107.1.68]) by dpdk.org (Postfix) with ESMTP id 36CFA4C99 for ; Thu, 18 Oct 2018 12:17:50 +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=ef1IfKFMTXEQQo08lT+eoqc9pchV6xlA0LG6MudgLgg=; b=PDmpllEPwBx1r8b8OGLjmLydKgyLgqqiXSf0O4Nrcv4BWJEugrK2GaTGBC4ZxykOALRB0PiODD3Sclki+Uj/NfqzAzDm8TzrmHyCXJZioJp6lLXtZTCz3y5mjtMSU1mqcbVtleKuPahGJok7b6rtcxxS6oDrqJuniIPIjkHKM3g= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=rasland@mellanox.com; Received: from mellanox.com (37.142.13.130) by AM3PR05MB1249.eurprd05.prod.outlook.com (2a01:111:e400:586e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1228.24; Thu, 18 Oct 2018 10:17:43 +0000 From: Raslan Darawsheh To: keith.wiles@intel.com Cc: thomas@monjalon.net, dev@dpdk.org, shahafs@mellanox.com, rasland@mellanox.com, orika@mellanox.com, ferruh.yigit@intel.com Date: Thu, 18 Oct 2018 13:17:28 +0300 Message-Id: <1539857849-11596-2-git-send-email-rasland@mellanox.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1539857849-11596-1-git-send-email-rasland@mellanox.com> References: <1539182356-15496-2-git-send-email-rasland@mellanox.com> <1539857849-11596-1-git-send-email-rasland@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: LO2P265CA0101.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:c::17) To AM3PR05MB1249.eurprd05.prod.outlook.com (2a01:111:e400:586e::14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 279a1408-1a46-426d-476c-08d634e2f16f X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:AM3PR05MB1249; X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1249; 3:vgj3fsIZCJv6Wc/ZL9BhE2MRm0Oe4NbMnzfM0B/SRzq3DU5jxNQzSfPFrUm/VfrWg02DqoIeW7fwAzIO7Udn1/3ClmvVXjueks9MUfXzfbZU4KYsD5WDyjzEtL7BnEWB1rDBAfIIJS5rLJzihDyq09UdnyaM4JX/7wTKbDj5EXpgbdzycLad9XAyAUXOnu/O9xoQDd38zKmKhssBPx/Agh9LKqZJOAnPqnpmHHA9Y0PbDt3LKy5GKYWWng3UR0V5; 25:dN5lmwIVN9ijpLlbWn6LwT19WmrPbQ5+59uS+b5yUVlrlTy6ktEMKri4iUR5SSkUhCLpkNi6IvRZLLGszyB1FN22TBpkIqjwamIkfgwjqOCOdscVnpOOwszk9Q+vA3aMCJTKDercP56lxYvKDus06hKm2DmUOPfxXeBRo/hRK0Tfr0ISdxmNS9I65aAMEkr+Pdu/YZ3elmCbjsLEXPAyilPtwqw0sfMVVj2s1CPTLUDCJyA+9xeBovpXwtI8WUtNt5Tkv8JDqkHdokFErMhUeRiCn9krAPUz+a8ljACyhlNVOU0yuTjk9Ex8+o8mtsyM6/DdSGVjnP+D8Z5O8SKOy9lGfxe9cmp3IsLMMH+/Mgw=; 31:JfB61y75KHpuya5uBdEnPf135HB+RM0Wgr1g4au0Vagw6C7G7Qgbgt6Dgpwf57P2I8vqXmRFrQcaLS+8SiAeQ3JJ2nAnMrMlS78+qS85fIOBSt0UyFfHFSRwpmvScxx7U9e1lUy51vZAK/rUYJ0LbzLRoBtqTBTtGU0hdjLWccKRwAy1cX680gR+j15dBhqhrPMPt4m6S/jfWs9XgRFIAY4WISn/0lNe9r5f+rpzgDU= X-MS-TrafficTypeDiagnostic: AM3PR05MB1249: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1249; 20:aipFKmL10NVfjXKAOzMEPnik/B5wFz+AGSoDu8BtNHMnzqovy8bWFeyA8bioZ9N6g/O1CloBYYcqSfzhBIrvKUB2FNwmHaLv9Dz4fbrLAWZa26V911/Av2kZgJFvOq7SA1mtwwHz0/3XyN+vVPEgNPsexvEUJ4vLKA9N01yrowYlUxjy9u3HyL5DppVnj1N9+8mGNE+eb8W5UrIcMS3v81kSwzxV9RJPU3g4Z1mu9D7pWAK2yMrZ43HcAz2XCBH+RkaaC+Ds70hs3DTc/1ZI0ViMsoqtrk9kr7/Mi2yZv1HY1Gb4bfE4BLpfXnscNOUO2RF+OvKcK2D88O67b5iGCIeDxbMJ2v8vAHulqi9hXz7UzvKG+8uTXw/oatbK3AQudsZuEw+lw0OITVMqKM7orOEcpMAU8FFfqx3aBICmYJl2D0EBlmCVuZzaNUW0kAQmFwUXwJoV52yCYI2bXfFOh1NMvW4H9pGNdSC61mw0iuuJ1rDLyoIX58Mr0o9O3HCs; 4:Yimb/yyVuBr2Gt+bG1FhBqSfpX7WnhPwoMc3mp4XZPG5Px0XofLPXdn9q+Iy+X5gKwn86iNvsSLMmkmHfKdl0aUdsWPP6M8gM0kmbeTxZY0kNRVmnweCeIhhMd2pgmLs1W4GW2BsjVVUnAPJ7pOdNV/VrRyb9T7zRlD4JmeZg+iRYryiI/ynMfwphfTp+ojvYnU0iEThUP3pLzyGCf+JsrVSP9tJd2WXBxVuEKU1yKBUCCfCE5IgTLdoOwL2rPrPCriz0qsreYKrTXFzFLSkTA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(3231355)(944501410)(4982022)(52105095)(10201501046)(93006095)(93001095)(6055026)(149066)(150057)(6041310)(20161123560045)(20161123558120)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095); SRVR:AM3PR05MB1249; BCL:0; PCL:0; RULEID:; SRVR:AM3PR05MB1249; X-Forefront-PRVS: 08296C9B35 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(136003)(366004)(39860400002)(396003)(376002)(346002)(199004)(189003)(446003)(476003)(2616005)(956004)(106356001)(11346002)(26005)(16526019)(186003)(2351001)(33026002)(7696005)(52116002)(51416003)(16586007)(478600001)(76176011)(486006)(105586002)(25786009)(86362001)(50226002)(68736007)(81166006)(2361001)(8676002)(81156014)(4326008)(8936002)(50466002)(97736004)(6666004)(5660300001)(7736002)(6116002)(3846002)(48376002)(53936002)(6306002)(55016002)(21086003)(14444005)(966005)(66066001)(47776003)(386003)(316002)(2906002)(36756003)(6916009)(69596002)(8886007)(4744004)(305945005); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR05MB1249; 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; AM3PR05MB1249; 23:Qx2a8dDq1ivss+AIZ/d4aG81NXUW1X42p1cPEO5ZN?= =?us-ascii?Q?2hODluxk57rK9AGyvSrX6wiYr+akMp0GehthPFSSTqebY7eWyiSYENNtET9w?= =?us-ascii?Q?WtUeaQ7ivxWoX3mqx1+4JU/1MdmInMMPw2iSslhR+fJktPaVOu1x92j42CYW?= =?us-ascii?Q?RG/IKWHhSCk8qJuabiWttc8oqlkaVdeFfg0P8nmAd+NlTAadSsO6h1Iw8xLK?= =?us-ascii?Q?yx3ouFZ4S4rNMCpbyVwIUAzeujYN/FQ7xJIUZ1DkhyCaooTtSDart9woOdCR?= =?us-ascii?Q?2cVq7915Gzx/OM5hzyNhfCZfkBGzKTwQUXjy7p6PPhPDBAA2S9sYdXHw4ueW?= =?us-ascii?Q?k4RG/0ynqogmzTItJ823zFoGsA9xE02V2IF1c4ChDV00E2zA5Y+zIdnCtLa9?= =?us-ascii?Q?8SgOjdVkZIXn9WQ+o3bBP6wHK6Zd6cE57O31BvHOIu5jj0ooscb6IuhbvB0Y?= =?us-ascii?Q?l//GXGCoVE/DR9DcbgiYCy0k66s0A7jUd9yDw4dbGu7pE56mSMp8zfTZGdMM?= =?us-ascii?Q?otYICwqB/oLg65R66zdkTAPHJ7TBta028od072QIf/kqLYgwOGPy56r02J1U?= =?us-ascii?Q?UwmvwTDB9rW6mgU7Glc2V6vYpMrIbAk55WTX0X8n95QaPj/1gqvzF+/KFrkU?= =?us-ascii?Q?3CvI2IoEkHsQC26vyo3QTaXmyhVdUJR8Vd0oyrKE77Cl4Bmsv/Dnj7b5Em5P?= =?us-ascii?Q?TNgh3b+TL9KrlrIreVSNFfUmbPa2Qf4GcGNrNYG1p30P8yNc/5k/3GHGAwFk?= =?us-ascii?Q?KxMqNJIEPo4LWdbowIGPsAlNyCGbTNB8lEu3eusv6reCLzammNdXfN2NZFxs?= =?us-ascii?Q?9fzN6WUDnqRDf8w2QTDBPBuNEzv0x6hX3IQ/bLkb1vj+KN5PDLuDsUyFk1sq?= =?us-ascii?Q?fcwl+p4+IIh3qH4JnKRUgP5WLOzoLu1YWsmDsfnI4h/DMfe0tCpVPby+cIO7?= =?us-ascii?Q?p8i4klqucC1pZ0f/DXK8NATUN+/yGsGb2Y0BSy0usCxDFhfaL7HREQG1e9zV?= =?us-ascii?Q?bxmN5aiNg54Ms+9bRW8bqWmCo8gd2z634rfk9aFnkIhn1I3IR3jE0qXjnm1l?= =?us-ascii?Q?V6SNmuPXOWV01aUJqkSjmOWLr5s0hXi1l9hfcH9f48fOBOfghRJ5Pw0So1pX?= =?us-ascii?Q?nf+vq0FFIIYYvCAbBLftr+MHhLf4s/Ap2G/Ty9hVHPa6KXIvEO3emxmtn5Bk?= =?us-ascii?Q?1bWT/wzJRFAV/4IM66NaG9pOTVgNwPyEAJqeKIjZn4FYIleVXaEcKAOv5+xG?= =?us-ascii?Q?Yt49R0M9eYuhor8YoJ2hIUyJTLtizXclyU784o/vI6Y4AW7zHHeiNklOvjnC?= =?us-ascii?Q?Uo2+bhGtgYtUjG1u/fJ9guHlviJVIYAorYweVcAml5y?= X-Microsoft-Antispam-Message-Info: 57/gC4GuNR4Wqr2T7i2uJ7bIXNulw5ieYltURrSuS8IQOl1ccmjAUXXJDDW5Y45173EUGJaNsNsqdlg2bp1vkbvkJV55CpgFmiy3MjZxKFHPubMwPeEbHvsWvbXqH+qySk2zihA0FqovAiEREOg3w4gr3XF2Ipg0WJ3ZBvx0TsE3ADaJ7oQKU29yMgO7eB7as91/9h7YqVHb4clb0aIbXKCLRnlxuZ7Ca6UYARK32pOdiWNcuX3y+lTud/1E4yYDRLhJB0Bug1cNCtsV9dnjKZJT8S6BlMuvqIMUTFYsmhvrAOS1CiNVm2p4hAHBZlLanZvJBdspzKCfKG3XItMOe+pXIn1yPs/wr70afDBj7Pc= X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1249; 6:h/6kuxzU+vWY1mjBxrWyeh+lSPUJBD9I/El0Rr5d0WAsfRCjw6PMN7z5kb1LD55SZDmuKaXiUhTRbsQiOCoqy51jyJCxlIhZ9EXyHCYXjALCF6n9zm+NN5DZVrbLHGj84VWn1Hr3uD+G2g3nNfPGk2FnGAzzvQKuaR5ltI0sNVrDMa8+7Mf5ma/3llc85QV/u+W4oGaLqPh6fOObeXm71Q8mwLPEvQ+ZoX5KmpbSnZVZEeRDjR/EV2tELNSR5S1/cOX7hkWLOOBnRQyH3B1E1csRFEAqGxYFNUj6Sw4p69SW/OM9uBOOzjCiZCq+0rhBsZl1br70KVDDCPQic9uMyJ54rS0dVAgGuwTbthIEyshmd6O1cZdCBUlj9+CCA5ziVvedN4p9EV3rpzSajo4BfTkG0ZZJlhnLcUeGOSPi10ufRYakhIkmpQJXK8kHRB0P/ReT/DsFALiUWJZLujqq/w==; 5:ug1DhZ5cKbZwa8AMY2JRnKIx8pve5YL6jkOO2ADSvvMtg2I0qP96hbP/aVq935QFNUxtjcNlNgQxtJMU6SEaageYsRtipTEu7nXUpf1s6HlbL/Wi+9WYh2m8iBkfzWNNz6nt2uB2KcSuBrOhkGNzDQH7i7Z+a8U8mL29Bp0J5RM=; 7:axWorHP3OyUrF+cUn7EMPPMzTNOV2HezQkmKrC7lKBYE65jCNASLIGFWYCxLo2ametWCDzSbpLqBtohgrNZpIcP7UibFaZvPk+TqHyVHMSKnmNk0hBk2VZaMbXQ2pOpSTIyCgiyQmEs7h8T2CqoavtUsYKG+37LPAoYAjL8lhyoDIgpK/3NUIFuw/6CqLcT60Yil7vtBS3rjLxYIyZVfTcOKlEBhIHxS5kiGHhv3rXh1xWWSpln1k5itmQ1k3azB SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2018 10:17:43.0639 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 279a1408-1a46-426d-476c-08d634e2f16f X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR05MB1249 Subject: [dpdk-dev] [PATCH v10 2/3] net/tap: move fds of Rx/Tx queues to be in process private X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Oct 2018 10:17:50 -0000 fd's cannot be shared between processes, and each process need to have it's own fd's pointer. Signed-off-by: Raslan Darawsheh --- This patch has dependancy on the following patch http://patches.dpdk.org/patch/46185/ --- --- drivers/net/tap/rte_eth_tap.c | 93 +++++++++++++++++++++++++++++-------------- drivers/net/tap/rte_eth_tap.h | 7 +++- drivers/net/tap/tap_flow.c | 3 +- drivers/net/tap/tap_intr.c | 5 ++- 4 files changed, 73 insertions(+), 35 deletions(-) diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index edfb7da..3372d54 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -315,6 +315,7 @@ static uint16_t pmd_rx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) { struct rx_queue *rxq = queue; + struct pmd_process_private *process_private; uint16_t num_rx; unsigned long num_rx_bytes = 0; uint32_t trigger = tap_trigger; @@ -323,6 +324,7 @@ pmd_rx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) return 0; if (trigger) rxq->trigger_seen = trigger; + process_private = rte_eth_devices[rxq->in_port].process_private; rte_compiler_barrier(); for (num_rx = 0; num_rx < nb_pkts; ) { struct rte_mbuf *mbuf = rxq->pool; @@ -331,9 +333,9 @@ pmd_rx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) uint16_t data_off = rte_pktmbuf_headroom(mbuf); int len; - len = readv(rxq->fd, *rxq->iovecs, - 1 + - (rxq->rxmode->offloads & DEV_RX_OFFLOAD_SCATTER ? + len = readv(process_private->rxq_fds[rxq->queue_id], + *rxq->iovecs, + 1 + (rxq->rxmode->offloads & DEV_RX_OFFLOAD_SCATTER ? rxq->nb_rx_desc : 1)); if (len < (int)sizeof(struct tun_pi)) break; @@ -494,6 +496,9 @@ tap_write_mbufs(struct tx_queue *txq, uint16_t num_mbufs, { int i; uint16_t l234_hlen; + struct pmd_process_private *process_private; + + process_private = rte_eth_devices[txq->out_port].process_private; for (i = 0; i < num_mbufs; i++) { struct rte_mbuf *mbuf = pmbufs[i]; @@ -595,7 +600,7 @@ tap_write_mbufs(struct tx_queue *txq, uint16_t num_mbufs, tap_tx_l4_cksum(l4_cksum, l4_phdr_cksum, l4_raw_cksum); /* copy the tx frame data */ - n = writev(txq->fd, iovecs, j); + n = writev(process_private->txq_fds[txq->queue_id], iovecs, j); if (n <= 0) break; (*num_packets)++; @@ -970,19 +975,20 @@ tap_dev_close(struct rte_eth_dev *dev) { int i; struct pmd_internals *internals = dev->data->dev_private; + struct pmd_process_private *process_private = dev->process_private; tap_link_set_down(dev); tap_flow_flush(dev, NULL); tap_flow_implicit_flush(internals, NULL); for (i = 0; i < RTE_PMD_TAP_MAX_QUEUES; i++) { - if (internals->rxq[i].fd != -1) { - close(internals->rxq[i].fd); - internals->rxq[i].fd = -1; + if (process_private->rxq_fds[i] != -1) { + close(process_private->rxq_fds[i]); + process_private->rxq_fds[i] = -1; } - if (internals->txq[i].fd != -1) { - close(internals->txq[i].fd); - internals->txq[i].fd = -1; + if (process_private->txq_fds[i] != -1) { + close(process_private->txq_fds[i]); + process_private->txq_fds[i] = -1; } } @@ -1006,10 +1012,14 @@ static void tap_rx_queue_release(void *queue) { struct rx_queue *rxq = queue; + struct pmd_process_private *process_private; - if (rxq && (rxq->fd > 0)) { - close(rxq->fd); - rxq->fd = -1; + if (!rxq) + return; + process_private = rte_eth_devices[rxq->in_port].process_private; + if (process_private->rxq_fds[rxq->queue_id] > 0) { + close(process_private->rxq_fds[rxq->queue_id]); + process_private->rxq_fds[rxq->queue_id] = -1; rte_pktmbuf_free(rxq->pool); rte_free(rxq->iovecs); rxq->pool = NULL; @@ -1021,10 +1031,15 @@ static void tap_tx_queue_release(void *queue) { struct tx_queue *txq = queue; + struct pmd_process_private *process_private; + + if (!txq) + return; + process_private = rte_eth_devices[txq->out_port].process_private; - if (txq && (txq->fd > 0)) { - close(txq->fd); - txq->fd = -1; + if (process_private->txq_fds[txq->queue_id] > 0) { + close(process_private->txq_fds[txq->queue_id]); + process_private->txq_fds[txq->queue_id] = -1; } } @@ -1209,18 +1224,19 @@ tap_setup_queue(struct rte_eth_dev *dev, int *other_fd; const char *dir; struct pmd_internals *pmd = dev->data->dev_private; + struct pmd_process_private *process_private = dev->process_private; struct rx_queue *rx = &internals->rxq[qid]; struct tx_queue *tx = &internals->txq[qid]; struct rte_gso_ctx *gso_ctx; if (is_rx) { - fd = &rx->fd; - other_fd = &tx->fd; + fd = &process_private->rxq_fds[qid]; + other_fd = &process_private->txq_fds[qid]; dir = "rx"; gso_ctx = NULL; } else { - fd = &tx->fd; - other_fd = &rx->fd; + fd = &process_private->txq_fds[qid]; + other_fd = &process_private->rxq_fds[qid]; dir = "tx"; gso_ctx = &tx->gso_ctx; } @@ -1273,6 +1289,7 @@ tap_rx_queue_setup(struct rte_eth_dev *dev, struct rte_mempool *mp) { struct pmd_internals *internals = dev->data->dev_private; + struct pmd_process_private *process_private = dev->process_private; struct rx_queue *rxq = &internals->rxq[rx_queue_id]; struct rte_mbuf **tmp = &rxq->pool; long iov_max = sysconf(_SC_IOV_MAX); @@ -1332,7 +1349,8 @@ tap_rx_queue_setup(struct rte_eth_dev *dev, } TAP_LOG(DEBUG, " RX TUNTAP device name %s, qid %d on fd %d", - internals->name, rx_queue_id, internals->rxq[rx_queue_id].fd); + internals->name, rx_queue_id, + process_private->rxq_fds[rx_queue_id]); return 0; @@ -1352,6 +1370,7 @@ tap_tx_queue_setup(struct rte_eth_dev *dev, const struct rte_eth_txconf *tx_conf) { struct pmd_internals *internals = dev->data->dev_private; + struct pmd_process_private *process_private = dev->process_private; struct tx_queue *txq; int ret; uint64_t offloads; @@ -1374,7 +1393,8 @@ tap_tx_queue_setup(struct rte_eth_dev *dev, return -1; TAP_LOG(DEBUG, " TX TUNTAP device name %s, qid %d on fd %d csum %s", - internals->name, tx_queue_id, internals->txq[tx_queue_id].fd, + internals->name, tx_queue_id, + process_private->txq_fds[tx_queue_id], txq->csum ? "on" : "off"); return 0; @@ -1622,6 +1642,7 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name, int numa_node = rte_socket_id(); struct rte_eth_dev *dev; struct pmd_internals *pmd; + struct pmd_process_private *process_private; struct rte_eth_dev_data *data; struct ifreq ifr; int i; @@ -1636,7 +1657,16 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name, goto error_exit_nodev; } + process_private = (struct pmd_process_private *) + rte_zmalloc_socket(tap_name, sizeof(struct pmd_process_private), + RTE_CACHE_LINE_SIZE, dev->device->numa_node); + + if (process_private == NULL) { + TAP_LOG(ERR, "Failed to alloc memory for process private"); + return -1; + } pmd = dev->data->dev_private; + dev->process_private = process_private; pmd->dev = dev; snprintf(pmd->name, sizeof(pmd->name), "%s", tap_name); pmd->type = type; @@ -1672,8 +1702,8 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, char *tap_name, /* Presetup the fds to -1 as being not valid */ pmd->ka_fd = -1; for (i = 0; i < RTE_PMD_TAP_MAX_QUEUES; i++) { - pmd->rxq[i].fd = -1; - pmd->txq[i].fd = -1; + process_private->rxq_fds[i] = -1; + process_private->txq_fds[i] = -1; } if (pmd->type == ETH_TUNTAP_TYPE_TAP) { @@ -2073,6 +2103,7 @@ rte_pmd_tap_remove(struct rte_vdev_device *dev) { struct rte_eth_dev *eth_dev = NULL; struct pmd_internals *internals; + struct pmd_process_private *process_private; int i; /* find the ethdev entry */ @@ -2081,6 +2112,7 @@ rte_pmd_tap_remove(struct rte_vdev_device *dev) return 0; internals = eth_dev->data->dev_private; + process_private = eth_dev->process_private; TAP_LOG(DEBUG, "Closing %s Ethernet device on numa %u", (internals->type == ETH_TUNTAP_TYPE_TAP) ? "TAP" : "TUN", @@ -2092,18 +2124,19 @@ rte_pmd_tap_remove(struct rte_vdev_device *dev) tap_nl_final(internals->nlsk_fd); } for (i = 0; i < RTE_PMD_TAP_MAX_QUEUES; i++) { - if (internals->rxq[i].fd != -1) { - close(internals->rxq[i].fd); - internals->rxq[i].fd = -1; + if (process_private->rxq_fds[i] != -1) { + close(process_private->rxq_fds[i]); + process_private->rxq_fds[i] = -1; } - if (internals->txq[i].fd != -1) { - close(internals->txq[i].fd); - internals->txq[i].fd = -1; + if (process_private->txq_fds[i] != -1) { + close(process_private->txq_fds[i]); + process_private->txq_fds[i] = -1; } } close(internals->ioctl_sock); rte_free(eth_dev->data->dev_private); + rte_free(eth_dev->process_private); rte_eth_dev_release_port(eth_dev); if (internals->ka_fd != -1) { diff --git a/drivers/net/tap/rte_eth_tap.h b/drivers/net/tap/rte_eth_tap.h index 4502e24..dc3579a 100644 --- a/drivers/net/tap/rte_eth_tap.h +++ b/drivers/net/tap/rte_eth_tap.h @@ -47,7 +47,6 @@ struct rx_queue { uint32_t trigger_seen; /* Last seen Rx trigger value */ uint16_t in_port; /* Port ID */ uint16_t queue_id; /* queue ID*/ - int fd; struct pkt_stats stats; /* Stats for this RX queue */ uint16_t nb_rx_desc; /* max number of mbufs available */ struct rte_eth_rxmode *rxmode; /* RX features */ @@ -57,7 +56,6 @@ struct rx_queue { }; struct tx_queue { - int fd; int type; /* Type field - TUN|TAP */ uint16_t *mtu; /* Pointer to MTU from dev_data */ uint16_t csum:1; /* Enable checksum offloading */ @@ -95,6 +93,11 @@ struct pmd_internals { int ka_fd; /* keep-alive file descriptor */ }; +struct pmd_process_private { + int rxq_fds[RTE_PMD_TAP_MAX_QUEUES]; + int txq_fds[RTE_PMD_TAP_MAX_QUEUES]; +}; + /* tap_intr.c */ int tap_rx_intr_vec_set(struct rte_eth_dev *dev, int set); diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c index 0e01af6..3ba6945 100644 --- a/drivers/net/tap/tap_flow.c +++ b/drivers/net/tap/tap_flow.c @@ -1567,6 +1567,7 @@ tap_flow_isolate(struct rte_eth_dev *dev, struct rte_flow_error *error __rte_unused) { struct pmd_internals *pmd = dev->data->dev_private; + struct pmd_process_private *process_private = dev->process_private; /* normalize 'set' variable to contain 0 or 1 values */ if (set) @@ -1580,7 +1581,7 @@ tap_flow_isolate(struct rte_eth_dev *dev, * If netdevice is there, setup appropriate flow rules immediately. * Otherwise it will be set when bringing up the netdevice (tun_alloc). */ - if (!pmd->rxq[0].fd) + if (!process_private->rxq_fds[0]) return 0; if (set) { struct rte_flow *remote_flow; diff --git a/drivers/net/tap/tap_intr.c b/drivers/net/tap/tap_intr.c index fc59018..7af0010 100644 --- a/drivers/net/tap/tap_intr.c +++ b/drivers/net/tap/tap_intr.c @@ -51,6 +51,7 @@ static int tap_rx_intr_vec_install(struct rte_eth_dev *dev) { struct pmd_internals *pmd = dev->data->dev_private; + struct pmd_process_private *process_private = dev->process_private; unsigned int rxqs_n = pmd->dev->data->nb_rx_queues; struct rte_intr_handle *intr_handle = &pmd->intr_handle; unsigned int n = RTE_MIN(rxqs_n, (uint32_t)RTE_MAX_RXTX_INTR_VEC_ID); @@ -71,7 +72,7 @@ tap_rx_intr_vec_install(struct rte_eth_dev *dev) struct rx_queue *rxq = pmd->dev->data->rx_queues[i]; /* Skip queues that cannot request interrupts. */ - if (!rxq || rxq->fd <= 0) { + if (!rxq || process_private->rxq_fds[i] <= 0) { /* Use invalid intr_vec[] index to disable entry. */ intr_handle->intr_vec[i] = RTE_INTR_VEC_RXTX_OFFSET + @@ -79,7 +80,7 @@ tap_rx_intr_vec_install(struct rte_eth_dev *dev) continue; } intr_handle->intr_vec[i] = RTE_INTR_VEC_RXTX_OFFSET + count; - intr_handle->efds[count] = rxq->fd; + intr_handle->efds[count] = process_private->rxq_fds[i]; count++; } if (!count) -- 2.7.4