From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40060.outbound.protection.outlook.com [40.107.4.60]) by dpdk.org (Postfix) with ESMTP id 4CE225F72 for ; Thu, 18 Oct 2018 10:15:24 +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=I0pfgdUmzheT69+udRSy79ADGo71PXBpsusCEASZB0UoYoXK3tfSosxY6x9g1NPQvCYlJ4nzt7bC8qj9UJFQiikknOP5S3l9zVRZBrBM1/AkyvXy98Jw9a/sRO762gbWk3fdqxXap2/0nuA1rrb1ms1mAC9uRj/trwrV4gUMPyI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=rasland@mellanox.com; Received: from mellanox.com (37.142.13.130) by AM3PR05MB1250.eurprd05.prod.outlook.com (2a01:111:e400:586f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1228.26; Thu, 18 Oct 2018 08:15:21 +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 11:15:08 +0300 Message-Id: <1539850509-9332-2-git-send-email-rasland@mellanox.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1539850509-9332-1-git-send-email-rasland@mellanox.com> References: <1539182356-15496-2-git-send-email-rasland@mellanox.com> <1539850509-9332-1-git-send-email-rasland@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: CWLP265CA0376.GBRP265.PROD.OUTLOOK.COM (2603:10a6:401:5e::28) To AM3PR05MB1250.eurprd05.prod.outlook.com (2a01:111:e400:586f::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 07d89356-0294-4802-3e58-08d634d1d9c9 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:AM3PR05MB1250; X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1250; 3:Rn90fE5Aca2zltmOeFnSeVYPR1v209mRF5qY4V8vNakeU+5pYw20v6bURYBzoqXP5RLoyCB5S54caBIyj+9gqLHPGoF0zJoQ3SafZdRVrBCSWD0QOBp4dPZdrei38C61PoT28JC36sVKJlPe9iqMUarkzdRjIScSag8KEn3NtNhfbEkTDF6DwUGCwYnGrDX1aen+rbI30UlD1C928XruOnPhMx5+EbTl2gJvMeuOmi9vr6PolyslMgoXi0FWaVWc; 25:cVIIE5boDUXagk88gn8eiv6DUGgkoW8MBcBGelvJYBCsJBnFX2/XQVhwbVvxlJJbgBvxfLptc5bLhcuvQK1Z0Yi1WdOEtVmL3+6xQy6kiHIhG5Uaz6pry7O6bAkeh5rr8Vl7LCypRlgNOgfK8wtML+fI3NU2W4UZYmNVjnbI1Qp+IlQzBrAXf0cbFtS3f+aV3REdnX1FbELt67FHT/nSL+xrc4tM45Q/6xgzt9Rk6gpESaTeJv3IZ6F01mfOq1bIpwyZjbtA9CH5lZHy3DlbfibCN8zjJGcBtEihpUEukCbpmqQVbD05GVNEFI5NxWhg+bHnShi4wTcf2CnONkuUmg==; 31:Wg2ZKir3V7awHXaQ5IYL67CFOp4VrNEvlu5h0OhT/KLVLFXXc+O4XIQu444oQbpfzUtPlj3kDOSxA5anIH+7uFUxjQdK1ZlxmLEnZtfK2SJpyTTCtgCQG3P5CwBeQygAZBoF5ZdB7SM+gp/3oT8nMYPEB8XY05VecDUOM7H+yZJiOoQ4FgMct9hdFG7V6bgPUq39XfznzVgz7MDJj32QFRDZcfkl9VKSpNy206kNPF8= X-MS-TrafficTypeDiagnostic: AM3PR05MB1250: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1250; 20:m2oUVyT84X9zKHVsY0x04/XRKAUugNX/NuLzI5mkdk8ewNYkIqS7OZTQrKylHvfS+eQEe+VF4AGJschEFzh7PenvovuZaV2vm0JdjQJxZkLT4J27WoN5Ym2IoVv5wXcmIfvIV1a2vOlm/Hk1wvWfIhopC35UTxYWr4l7eN9yyGxNzBhqQVor99d2EDRtwpghSks0PopPjXxTObJvrVXUnDtrnmm/t1cgUB8x6kzvB9iY2c7o5Cw1rhghtdM721XWZyVhrVOHO93d9/BJgLdTmsEdC8Px43nHwJ6CvfArvyj2ILj+L9x7gclLK2FDc6FBuNtcO5Z74V3DdolVseXEKSq1rRtGDsHxDCWaVVIh0iJbK7zjczvHlU0nqQmEzd0L8Z1HmjoqjHYbzqc41+0ybQOM2STCSXgsWSbvyUrpgaijFH2kyumVJlzW0LqRAY27TnMdVivLdMUgDbjZjOLF9KqOm0INjkGMXcd/zVeRxffcmL1CDhN1bOXNIs9YJd2x; 4:qw/MwLFi26PAPNMefY4nVVgC28x8dxPwwqutE48eWSrk9D3O9EzJ8YQoYzm7lyYdTc2fz+UB6si/G0qeXwZDKyh8cl3Gq0LiBPfXRHZEksL7adFOs4LJsmdZFld0BLJCZeIRwiWVOh6QpP0xMKV1oS9KqvOS8fx0M+zBulrAgxr3aKilPdWfSNOs7ZZ2Z3THrEfze4RDj/itOrCdD6qiiljA+dbXqmHIL67wwNyw87kO78OOhWYgMRm0qMNeHOgr0h5CZROfsUuD26q33I6lLQ== 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)(3002001)(3231355)(944501410)(4982022)(52105095)(6055026)(149066)(150057)(6041310)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:AM3PR05MB1250; BCL:0; PCL:0; RULEID:; SRVR:AM3PR05MB1250; X-Forefront-PRVS: 08296C9B35 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(376002)(396003)(136003)(346002)(39860400002)(366004)(199004)(189003)(7736002)(16586007)(966005)(2361001)(6306002)(26005)(8886007)(305945005)(4326008)(6916009)(186003)(68736007)(55016002)(5660300001)(53936002)(2616005)(16526019)(478600001)(25786009)(14444005)(2351001)(50466002)(105586002)(106356001)(69596002)(956004)(2906002)(33026002)(316002)(47776003)(476003)(76176011)(21086003)(48376002)(8936002)(11346002)(81156014)(50226002)(446003)(52116002)(66066001)(4744004)(36756003)(7696005)(6666004)(8676002)(6116002)(486006)(3846002)(51416003)(97736004)(86362001)(81166006)(386003); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR05MB1250; 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; AM3PR05MB1250; 23:Vk8CZGLscesmpPQDkQwnEkRyIcOQPG0SCkT8BLvBN?= =?us-ascii?Q?ZOS6jtBMEVvzd9BZCv0gWFXpW+BX0aro2PxB1Cr7CF3C634iKsSnfJ5IUnka?= =?us-ascii?Q?G4jYmXY9GiB7Ew66PEARaQVOkoG26ZElZfx/6i5dZNDyNom17qTEnPZeLNuc?= =?us-ascii?Q?cL0p42zMp2OGqhS4s6L0nrwguv5hCFm/h8yJN5vKEuuMZRjHqXbsMyr5wgex?= =?us-ascii?Q?FycHbAFAl3tFWqgHntgru4dT9MiD0LIq1ksaPC6fjFB6U2IReQErTI+rjTmh?= =?us-ascii?Q?nmHHZowUTVm0OTRn514P9SP+v6IfB6KRk5TebOs1wqkMXq/HKMMf7+LsxiZl?= =?us-ascii?Q?+ouNOxHwCUPOP1cUThTGwTjkx3oq6HqB1vQ8UM6yf5ende1HdSPxPwkdFUVO?= =?us-ascii?Q?XZ8hBTtcacVHt0schnH4h7EEjCgKccFI6LeriYc4wGul+XEWKtBiC8o9vvhB?= =?us-ascii?Q?H5OdCCRO80dNIIeA2gPC1jUg6OXg4zYd9CmRaRaWoUblDt4yledvihDislGf?= =?us-ascii?Q?mbmv3svw8o0N2YEZjIOk+yucgYlHHQn7vlYOS8mJ+wPnBVZwsdLmqyqzYlh8?= =?us-ascii?Q?SZu+nQUEIt36Uqov9cD+Mo6E+HJGgdrBCUOYpcjdRdtVBgswS216YsgDWMx0?= =?us-ascii?Q?oDpgrMB0xUy+Tcuc4nPCbqKu/gmql2ij5rd/4a151y7bw/eV1yG4/fNFiLhc?= =?us-ascii?Q?AJzPq0nIP4tDaBgZEuAa8f87ha2Xl/dBAQJ0PbgvEv1vFeFA8EWgjaBHgtKK?= =?us-ascii?Q?CATt5NCYLZTkyMENzqqekk9VMry81XMLJ0H5J9c+Df5f2sT1Nyw2cKPLSl2b?= =?us-ascii?Q?yFnDALaVEAdFdTHBmZjQpLNvDKpmks0ryB5hDveUujxJxwo2dTdly9LF32LS?= =?us-ascii?Q?bbPkRJYTIKMMnt0u9eN0UcK98g//urcNzlV6UEft9Wp4YJ/3ITs973xHhciP?= =?us-ascii?Q?kHqApmZGt8uB2Pfb0v+d9XT2J9qqaGP49y/TLe/b/XI1isXMEPKAia58pSn3?= =?us-ascii?Q?IZJVkM9DVM/0rMfEiM51rkzvcY/ElNpSkqCmo7aHtUPbY64e5AgjUGrwOMsB?= =?us-ascii?Q?5v876OIBY9pwS1am16z5MvyKhJyQg8Pkd1YR5M2ZWpOCAJYIy7I8z7Txxt83?= =?us-ascii?Q?5dCtDcJyZJ+2Ggzkq+U4X2Lj8YBLrCOt2NAvcLMjKfRQnRh5jgDFhIr9bOgZ?= =?us-ascii?Q?5TzzYMOy9vDHpAnw0/82Mgyq5/rshdNAbK5qzQ2sIC31z0uK/wcfGFphRwb+?= =?us-ascii?Q?yOagKe+RXzI2qCUUMxtBi5tbg9LiQijHyiJW8HqBdhGfmwdvG1RX9LyEziJM?= =?us-ascii?Q?oKi7UeojsYoMsWWMctK6qC5Mh0Wl8ZR77CQm5iMHpNa?= X-Microsoft-Antispam-Message-Info: edfaioTlUcwr2uqfii6TkyHaViIADL1vf+9ywyAtbCse4gq5K5HUZ/0W7fldj2tSqDwWcguJ5W3r/9Sr/omSHMyTq++dW8Zx+bAlyEFneFEUnKIX2fk5ouDywqEPz9sXFEfFLCqHlWOB4Hy3KSedi4NFK8/f7N+BzPlQF151zGhahDdQux9FM0wHKWe+WO4K5Fp4FStoBgvf1Qhhs1YJekH+UDkrc+SXDHe85LNhk9xoDBqjz3mm6XV+9R91cMYZ/qPf2EiiISIK5FUo8jw6rtzOCj1+sgxgiHULkpu/H36IEZjY6pYet0r7GUu1efZ85cFnqZr6sqj0NnM5WXrRvW9PYtzLWyFuU+IrTYPa7K4= X-Microsoft-Exchange-Diagnostics: 1; AM3PR05MB1250; 6:iuCpH2eMUYM5GCCXwEtcdScQUHJXfTDjN12PYFFb4L3/EuShsB8Yvi/w6xntcDDeEKccXzBxcJ+XXerxqtbdfB+EuH62mVjPDb/HWL8+BfwTGZJ3UznOdIJRqD2Kn700s6yJWf3H6hKtVIBdRAOweaHM3rarw2AfVxoVLzb/VpolfGUFVSO8sPGUdTt2fogQYs59uLIQu1px15W3z+lxRmGdKvX2Vrc9hn7tLnGBVej/QUHIkYmjEIe5/Lxdral7PVlqwWLd1RS1ApbAQB+XSFLOpH5NB6CK/yVoRS246oPkZ60f24y0a2SrWeJ5iZU9+3cxboWRf6GwUdJD2NalefxkOvdQhHzj+o9XNclvRONPsiYRZfqkCnNkuRsNi11qhgI8MjtwvWqChlmIkq6Yn8gcF8P946tPjp4cblig2vobLaQWQybyCmjYSq+RaKiL5Ubb4vq/KuR3/TjZFZCkBA==; 5:mExP35BqCguPD1YcnLFsVVf7zK4rOEv03k+wVGfZflM6SNObcrCeQDvuWltL/BmfDYZt80RQcREJI2CauoM/lBdjpxP6PTFMqCkGeAIyCuDVBUjBoL+wZmB/HesBhGA2Ei3IjqsagbP+TT6/gRwDpqQeKomj7HRw+t4FnINvfIw=; 7:a7+rVQjAT5i2KTlOaJGCPdNrrvw/8NwJG3LNRgnVzTqkt/eOe+rry0TM+ux6P1qK7Xoe1VmiXSKL2nCuSADarQoacrPjnYLAiJQkdbiFs7JTYr3++iH4FYmT3UsZXZSCOP5SbSx19CdFTXMqNf8NSDku8zkSm9R4nAh00t14roSbNQ/ly4g1U5I/+qbE/ZCf8UUQ9VfcE5IB15tjOaSHO+OzEQCYuvVnyQedmkWGvsjBpD81h6BxONl6lEEka31Z SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2018 08:15:21.8561 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 07d89356-0294-4802-3e58-08d634d1d9c9 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR05MB1250 Subject: [dpdk-dev] [PATCH v9 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 08:15:24 -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