From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30062.outbound.protection.outlook.com [40.107.3.62]) by dpdk.org (Postfix) with ESMTP id A8C0C7D05 for ; Wed, 17 Oct 2018 10:56:16 +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=Nz4BAr9NpATAwLROgiBwQBkupjahe25eJe9IsAX5BiF3Rd4iZaIoEiLcnisUfrAnAI71WkUNGVbI3XS/XkQl4OTkZFNngcQQ5o108D7gNH1T9of5GiFOOQKj4xNUOH4cLqLEDeWc6/tThR/gOdOKhv88e0qG0vMPxLezQtm4BiA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=rasland@mellanox.com; Received: from mellanox.com (37.142.13.130) by AM3PR05MB1251.eurprd05.prod.outlook.com (2a01:111:e400:586f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1228.24; Wed, 17 Oct 2018 08:56:14 +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: Wed, 17 Oct 2018 11:56:03 +0300 Message-Id: <1539766564-9433-2-git-send-email-rasland@mellanox.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1539766564-9433-1-git-send-email-rasland@mellanox.com> References: <1539182356-15496-2-git-send-email-rasland@mellanox.com> <1539766564-9433-1-git-send-email-rasland@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: CWXP265CA0022.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:2e::34) To AM3PR05MB1251.eurprd05.prod.outlook.com (2a01:111:e400:586f::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 417e195a-5b12-4536-8349-08d6340e652d X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM3PR05MB1251; X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1251; 3:cQothKUKaK679IZQUw/BdbIxtsEVrSlTgrGAs4TeRh6drxpB2O8OLB4wOF4xCfwAQjYDQsRkJcQVASlaR8NHM2MIWhu/mdjj3wkZ3lwfjklO7nxFlMhZRGDQXL4gvzGEwSxtOPLjHpC+xc5t/ldp3H3qflI5SBIVMQrDf/VQIC7rqEvg2K1rhCOGXyTenvzKe1C9u7n4zIKeANsw/cFtHSE7F6m2TCePMalR+DZqIZLRAz9qLoKyoFBsB8046pSH; 25:6kEJHGheBHs1g6J4cM61pu7eQGODvoE+g6M2ZjqgxOQw+tdbZDRJZMULhYHxLhEidl8mBudTiFhGfuRLhZJ0DaUXsgulksUXJAtK0OKWVRsfMfactwo8KHeeRKY7QK/ERQSx/dkHSzQ/BOZKi0GsFgzfyqhezAlo3e4FvWhjeK4jN5c8l8/u2vwwX1T1+0GJLK4824hbFJyJFNsj3qL1AVPMu57rvQJm6lG4imErZw4TKkhYmfiIGJzIDv2j3vdLX3BPWHi1tqivMyx2Mcd0aIYpjeMIoDKEutqITDIJCZXVDNUdJFc/uUR5uSTjL2A3ckworMQhdLtB5WGG77BkMw==; 31:F7ijWg1A+rk/4wuqHBGnTvyQn1z9gLW7UQVV2dFcDOjEofMsl6T4YRL+B5Y7PEmjEjRe//RhxonppHY+TZ+hiwSlF02uj2+TWaddkdOj6jLlGYhIfqwO6Fw+ZI6daWTuF/GKDGJ6i6gknTFiOZDYnW2fvs1ElgGi6B4m8b/C9EdHo8CnNTc2DNYJfvW5q6nki/MK3++IQfP9stPyMO7qXKZ1XoeO1FjEmAK6/aaNH0Y= X-MS-TrafficTypeDiagnostic: AM3PR05MB1251: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1251; 20:3GDj4KjKLxaY7f4u4iBtzwfHH2tnaDZ6E8eEP4SasSDukb78Y5Q8OrydsUq/iVM0HYBbnz76FF7SUOR3Ic/mqb8vt356Yp/1kR+4awpwEVWNcNw9c/28VI5k17VVuF3tXboKeaaiOoaEgK8aZOvgKb6kjmMCZGccxrZAfTolop1z+RtyUMKv+lsjhK/PkeLqZSDNPRL7fdoebBULDkihvXx5aEAnGudaiMBmEC52cc4DbmovkbTIDpoQu/p40F+HRSm23CfU79GlByzruqkEVgdx/jOLI6fzsPPIS8ZxMxZsXKxf8YaH1CPcuIuk9UZXt81L9pg6nbxcwiqXCGt8HFE6621ABMQqi+7hp7BQ93UpNsIBY1+yIQ22lzkvP0CfIwf3jSB9QJmZaXQv6WpVKe/y9rZoRYunucCiU3ZTJ6TVIUsQmaPHnBPsou2RW/fbXjwYfCLe25jyLPitXdQyXj7kK8xMxueQH960aQowqNgfCRtchRjUUnVdIr3hWQ9m; 4:u8MRapuuj+IfSgGjFjjdzQFdenw2LG4AS5LlMaiy3+t3VKP2nserrtx2cksQ5Vy13sFMv09sfl+PiB6sPwiQNOyJCM7CF9yRt0Akt5/dDY3RCuSsFFhIbNncF9nSKE7tR+cvLdYg8vlGSpR60kcJvvumARv7wgygWPla6+ztcOtRs72tabSqNM1POKU0aIPfD2/ufBEyqujtnVwA8lNs+UfLNOx5wTQItgXsaxDQbQHs6FCA0JECDe6kPk44WrymYzbDjfu8GSwe8Sk0hqAb0w== 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)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3231355)(944501410)(4982022)(52105095)(3002001)(6055026)(149066)(150057)(6041310)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:AM3PR05MB1251; BCL:0; PCL:0; RULEID:; SRVR:AM3PR05MB1251; X-Forefront-PRVS: 08286A0BE2 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(396003)(376002)(136003)(346002)(39860400002)(189003)(199004)(53936002)(55016002)(6306002)(4744004)(69596002)(33026002)(36756003)(305945005)(6916009)(7736002)(97736004)(5660300001)(50226002)(478600001)(966005)(81156014)(81166006)(4326008)(8936002)(8676002)(3846002)(2361001)(68736007)(6116002)(106356001)(105586002)(47776003)(2351001)(8886007)(25786009)(2906002)(186003)(16526019)(66066001)(7696005)(21086003)(52116002)(51416003)(76176011)(86362001)(14444005)(386003)(16586007)(316002)(26005)(956004)(11346002)(2616005)(446003)(48376002)(476003)(486006)(6666004)(50466002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR05MB1251; 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; AM3PR05MB1251; 23:+S528vulaiOHiIxIJXWTG5NhZONCbICnubzzP7/iT?= =?us-ascii?Q?W5tM8O8grlHJWISCes4y/6QlEsUiS86xLGpy9FVD5Bu6q2MycivkDcdbdbbT?= =?us-ascii?Q?fQFXtrlgJdDn/YKuZqdg91ogKRHt1Qut13iIImO9/VpM0eexQyvy6LGa8zXx?= =?us-ascii?Q?KIx8HgzYB8sA254MdVWuu7tf6KLg3jT/2Rjx9jrBKWQ7/6ridV5HEyZqEQc/?= =?us-ascii?Q?YXl0+Au7byxYAwvTphXkARs9e9BKaW7TB6HPqi+tH8gFjWIjSpO9Q5cnmSBV?= =?us-ascii?Q?96Rj7ILGeOUl5h+PbErLqU/FkBVzliLWdVobva6GuUifiSwbQaa0gj3wo6Dv?= =?us-ascii?Q?36OW4jsVEDQOuDCCsLuiNblYfZVPNK1oV0tia3Dyib/vFTV6Sk+JLI1lzoh0?= =?us-ascii?Q?/EWw6N4XeHJOCC4lW7Cgwaa5Iq5O2jKAKzl1fs03oj/aXOGtT1SolcV7mT1n?= =?us-ascii?Q?LN0A97nVtKY4CHwqHZ0tXc73aJ3L+vuIKbAv+RdDITKHXv9eNrpdK/3i0fU3?= =?us-ascii?Q?JrzvoG0a4vWHMEdr4RwfsV3rKUraxDctu6GHxugFojM1be1S7wSVOIUyNQGc?= =?us-ascii?Q?QJqmvQr900+qD+q7chb+WJ9Bbvz0mkxpS37qqKRzHPDv3fYb/yfn/FcEm6iZ?= =?us-ascii?Q?zKAQt0pUTPx48iXxsNOz5/aCy/zDLqeNSJWKTj8SN2o1lI6oFXON0sffBg8A?= =?us-ascii?Q?aR22itB9s9JorH3kKj6p++8pHy8r2XSvcdyyrj/aP1otQL/rIEvUvAvb0qtx?= =?us-ascii?Q?yNHXurBj8hv1foOheXzNQ7Y8nTCA7L0jNMFekcNH9SF9pZ8/wDIx9VcNQKEL?= =?us-ascii?Q?UKc4gJVarmTMrtDbJaiI369CVAZEBbjqsnPjPQw26SZR0B4xts5UnTZcD+T5?= =?us-ascii?Q?NW28smA+WYDVCxaXHnFPHM949k1MQUprs9OevMpUB2pOyOU868ByFbVcliLr?= =?us-ascii?Q?eIUkR7Yz+lpI7L7SLdHVP6UAqMfIfL8lI10i/msVHHDqDAgneNqLQ53Nn36g?= =?us-ascii?Q?OdBjsnRaYmK6LgPzrXXP+XJ6dZAsq5jBv5RFeskXUvKkPfpps4NZ8HRk8Ql1?= =?us-ascii?Q?hU/Du0mCwapu5gh+exZU6wDd3PYF/pwpXqu2iE93BMJKTBxF095cNgbdQGZ+?= =?us-ascii?Q?VbzCzkYIDxm8EcfDrtbPRe2vwaJR9QKRNhTzxU9HGObJqjqSFiWwMCE7cldP?= =?us-ascii?Q?7+t+rpqp+tBkdI5k3lLNQ8FKjbwhCq+3XcwBOv5RKISJj6nYXW0II/ouDzZl?= =?us-ascii?Q?7wiqF4tMeMWxGgSUpCheyQLaAzZjf5ivTInum8rEXlCYtpj5/dsBY9L2dg+f?= =?us-ascii?Q?F+WEFRc8+SAvd4JAimE8ZrAbGTdptv56P2VUzg2sj0j?= X-Microsoft-Antispam-Message-Info: dYtyMR/99KRvLSGCqTXsILi7rbfUHOZ5pj7wqOq3ewUudXZ8aes+yru1hiSL/2iylryuNS4KWMbXHjCIgBhqKUUxJHnesabSgr+GIlhn2QwtHGHcMxMpx9x8oqRlsjc5WPnKFGPM0VFR5zqCS16Gay8jL0wbLX5rrO47FobzjWU8hapqcVIiZeHnnW+DNOvF7tOackq3V/3jgxjKaUfX/4hq2lEM+EEd4y2G7AjWPJrmn7oRb3IF2ZVg0juqwUYYQ+ngvsMbFOh3Bzk1dCvoUGlaNR8dlevQhNAy2eX8nzOQRVfWEwr3YaMMjQGEJHJq9ZfQSr8k5bma0HaUioN51GkAdkd/0aKTicNS7gUdgkw= X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1251; 6:3+B1oVXiuRqlzB6pi7HTsA6jj4cRf8dZzy4zxGDxIL/VW8o2j6bF/HN8+R67uRBAWGmkhHnA7i5nr/Q5DNLFoQICj/kICtjbL34JPvdsKi5spyGs8ZBrxFoSA4rihA5haMXAIouLeE09UJiYrUsemGR2d0F8MY50QZ3zEg2m0TrHkGWug5G+QovCClY3KU3Lw6oL5Z3MlUy3kt6RC2HzllWFVTrBsQnxRZ/2j9XGVicuK4YN00Ame2jFj/7aQpCAPoFmuq5WGJLTP9bMbu51GIoklAagdRYhaPXxHejfKZaCDuNp1LYIF0BWAjBXttoAxne+MFXHz8ufUhD/gvZJEHl3NjMP1WexqGhYcuVT7bW/hPWrLjd3DD24TKwIr0zxhJtmKsG8NEWZ/6IUH3JXo4jxx5BX7arUeqw2w8qI3CSM7n+qgWe2xF2l1xhOzm46NHKTB2UR2fNuJiMtLfl16w==; 5:YU+PfICWz589AkI8CzY3kUB0k5igW5K9NsNxMx/GcuLcLgccFRI8OXGZgrKYAgBas2aN3Tk+lypCuqDVsfiRjqYXz1vzNe3UkYk8GBDDRDOnH6suhSRVlLa+FdDNQdET5lQfFtOSRnGSpQA8BGBuVdji+h3RDdQonsREtkFWQ5Y=; 7:+9GcI5WAVFSvvlpZI0EO/IVyTJ1wwP8GUDOYZ/sYVMBicm7hoXWYsQwHpCZsAPtKqVDRbgolQ4K6B0mHXnFemdg+Jw3XhmLESkpuW9LeHeUrV934tM18gFFMD2J9pH/iABaZOv5+RCFIV3zonHbzQfBk83n3ts8wxI3FLIab3Iy2F73cG0o4hyr1Ta5JNyk46Z5IYS3m+2hyKWCiHKnj3J8CBAd0Dj3NfiJb6VLDC+BtF6k8i3s8PZRKAqrsvOSb SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2018 08:56:14.3866 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 417e195a-5b12-4536-8349-08d6340e652d X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR05MB1251 Subject: [dpdk-dev] [PATCH v7 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: Wed, 17 Oct 2018 08:56:16 -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