From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0072.outbound.protection.outlook.com [104.47.32.72]) by dpdk.org (Postfix) with ESMTP id C700F5323 for ; Tue, 17 Jan 2017 14:20:53 +0100 (CET) Received: from BLUPR0301CA0014.namprd03.prod.outlook.com (10.162.113.152) by CY1PR0301MB0748.namprd03.prod.outlook.com (10.160.159.154) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12; Tue, 17 Jan 2017 13:20:51 +0000 Received: from BY2FFO11OLC011.protection.gbl (2a01:111:f400:7c0c::189) by BLUPR0301CA0014.outlook.office365.com (2a01:111:e400:5259::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12 via Frontend Transport; Tue, 17 Jan 2017 13:20:51 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com;nxp.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BY2FFO11OLC011.mail.protection.outlook.com (10.1.15.22) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.803.8 via Frontend Transport; Tue, 17 Jan 2017 13:20:50 +0000 Received: from bf-netperf1.idc ([10.232.134.28]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v0HDJ8mb021741; Tue, 17 Jan 2017 06:20:47 -0700 From: Hemant Agrawal To: CC: , , , , , , Hemant Agrawal Date: Wed, 18 Jan 2017 00:22:51 +0530 Message-ID: <1484679174-4174-31-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1484679174-4174-1-git-send-email-hemant.agrawal@nxp.com> References: <1482988612-6638-1-git-send-email-shreyansh.jain@nxp.com> <1484679174-4174-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131291328508540509; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(336005)(39410400002)(39380400002)(39850400002)(39840400002)(39450400003)(39400400002)(39860400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(105606002)(38730400001)(77096006)(5003940100001)(92566002)(50986999)(85426001)(2351001)(356003)(106466001)(76176999)(626004)(54906002)(47776003)(110136003)(33646002)(104016004)(68736007)(305945005)(6916009)(2950100002)(81156014)(8656002)(86362001)(36756003)(50466002)(81166006)(8936002)(8676002)(48376002)(5660300001)(6666003)(4326007)(5890100001)(50226002)(2906002)(189998001)(97736004)(30001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0301MB0748; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11OLC011; 1:KfP0dErwFxjN0MOHwpVzBJcCRMiODxE/CNmXSQm6TyhypOyWUlFspSwjIR7qf4bHG80gBCYnK2iVHbD+EweUr4398E0fxkvXdQxUn2zR5sbbR7jIF/2xu6cSqcbuYbw23O761scT8wOeQrVTGyi21x3HY0MM0HVw7k7JqKUKBa3Ocp5K50PHXmIJTevOzrsZuJcyARA925VB8IFQVQnAM4U0WTmH4gGjmnMqF1b9+7dV3rl2w7clZ8HTW0R65iq3IXNPy4r8IqzF6Cd/OTqEi5jXH50LrrJIuUohB+nadypxvIvngTcgSx0NwNjOAjmUfD5MQnhGW3XlsJU6+8Mr/MOfACqD0R8Ccul0TELLYSt5bdDjErZ0h3Ft6aRX8kiFDiUi7pAajkgsdJVGv4Hu4+IE0GUB4ee9OJMWNfMIZHmshrqkl2nPtziEs//YK7i5acOhZGQAbJ0OiTwu7ndBcetp1B79S6jQhP39HTNpOAsWZ7nPDMz0CFbeN3SyLWngQyIQbycBzsa0FtRjqz3WFQAdOGckp4oLwi7gNUFHsD0AhlO4WsfZdhM1a912wy14qI95dLRRJcxu7jNpBQ8gmn9T7AArGrViMhU6CqzJfUOTuZa9xMcaeAyARsKdxlqQP6U6w+ZhHp3Ld7Yc711e/L899ZxhpAuhaPomsvkdCg50JFW0IYmzPls0NNJPJoDuyzmFDlYDA9AysxRIvBSjiIdCxGrMIizKCdGUT7TewyYsrwoHSRZZmsk6JVjUibLS MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: d00fc61b-65ba-4d6e-365d-08d43edba84e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY1PR0301MB0748; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0748; 3:KoBplaXcgWRPrb5J+kqabaPp5gu4+fVJGRvb+R7SFlPW2AolRQCt3kWhMZFuv87h4tfpWfAmDY12R4yL+Ad54XWlvLUfHEsOCY5ai1BObBmIJMVmXKmu6oGY1MLqXeNfyKbQy7/sedAqW6geo1wX0a+Zl1F4FuOejNRVZmOAnXz1faGJlqleGiotCY1u30NOW9m7TDxvMaz9DQUVF90JUjEWktTdcmx58zbo6vbF6H39q90wlxXcNF1j+OoK5k+MgH84i7mAiNkLXQ0PZ0wxyzH7bJp2cb65hiDktefgs9qK/iVk1S6KFxFxh/gPzVpLIlyrhTTjJ88R5+lSENTDE246uQZ0MgwLwHV09Dhw0rhPEOapnV39pQ9vVLk811xY X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0748; 25:1nz9kZ2Nnx2+ZNIBQPeRtpmVRQWnDcB+OrqtbCVeLqe7YviQAtULAV779gQ1aI5ogvrA8DOYveL+/fZEZZqqvEuBapRZgSiJb5812/QDw6iJZE/O4XA48072a79Q3+5Ogq/M7PLFyJkIlDSJdm3oyzNHUtnf9aO0j3iyfcBp+ZCWCaFL4YGS5AjN9SyfDjqHDp7QVOi2zwQpAd9bCKOvHhqbn+fYnhyyPouqxn9Eo9hlCA/WETKoWbBkOhisEIfIjEZlOW4w4glbUr1SnfL3ofy3HZlKV6V3iRERItjfonAkh4GXtQpb/WMYkAL7Vp8aSQoWDoOxMVE3v4xe0GJ7jIVbZrQoHrr1qdtplNcoJN5nf6iTONFtUiQlDzmNT6+5pD3vnmlICp2Qt7lyQAmgy55NArOfQspIgpHek4mHyuCsAEBHc0C+hSXUMg4qseDSUPR3J/ZVrL80F5FOQ/lcpYO9C57Enof/F9/Iz72njokhnD5cPIg0yft+OhUsPJSYWZWAPuvFoNMYQ6Ft/B8uMsX9PU35mETFMyJ3z6wBBLhX520CiY58LOak42MqLUxTtuSAnvNtpgGEeOZKX07Dq3bJzXUJ3mUTrYWjbecXdUFgFuhLCZLwInUQPBOL5Hxla7o4XhiXuuKlmTLpGL55tpPOa0F8II8yEVfyVFlU3YnDiCJSW9bgGbtiUeb2X4eZ30IDgKRAyE51fCG3Bs6kr3Z3H3boqA1aHgeZShWTDw2zLI2c4X77KoEd6w+aCoZEVoVxp2lqpuMlRmihuNae29PbvVM9oyYoRVxSoZBOtYdgKvrFJqrmwKFXeQ/vhMdd X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0748; 31:jcPKHOrvXOY1aHFah3OV9wop2HzVKw2e3TCTWUmuoogOMUbUNJl692hdFx4OCZd//BF/yGaYIa44octGgXFQoSRPNu00i7bkxCKXI+h0ctxyQvLMh3/eH7wk+wc/JMD6HufBQtIi8sofe3iQ5d02RA2LM/76xXSr5W8DIcVouvVxRGEQTfVdAzHiccJ71arsyw3m1EOKaEZ31xip81v9BKJhyjnizBxEy9nxos2hNsmBACUSmKFEvIpdDm011YsewwZ2Ln1nfQLP8tko0MmgWLexk9yh78DMBLLZXCd8XHw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(8121501046)(5005006)(13024025)(13015025)(13023025)(13018025)(13017025)(10201501046)(3002001)(6055026)(6096035)(20161123561025)(20161123556025)(20161123563025)(20161123559025)(20161123565025); SRVR:CY1PR0301MB0748; BCL:0; PCL:0; RULEID:(400006); SRVR:CY1PR0301MB0748; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0748; 4:Itoiag7EWFskuDjHfJuk9oRlcHBPmCGeH3CmMyYm+DcLc9VCtMmjgSA3zlL8jc0sPMsw3LIWlL4VoNf+3GJXP7RzsC51sax7N0pLYM2d/P67t5D1v8XlAuO3dOx/24tNbwZXbnJU7u8NXYfltr6vd4DeAk1T0fuI/gy0gBXxbtFCCpKYXEMywNgXldb4VGvUCucdTflvvDaAxA0hHmeaG3AFErUdLUP8gfyIFywQ4yrOipcxQVl1J/iPOAI9EBJwUKxXcNWdWXCQ3l/BPfZVTlqFG4L8iYs+dUR+DB4ArjSvKJgBOhNAiQcTgJHHCEIS2R4yJoLNVNYEl811EdV/QTv9euOmieP7v3RPWCE/VehiRmRJIslreybxpOQgW/uv8/s2slAJ6O8ONaoHO3R9dIbfFBGFq4G2iV0Zym3ZVjRu+OM6VwEZSRsl9UO4VdhkzAcP49v7FRdn9XACO5MCH9hh+gBfCYWTRaH78abRFqE1ZNrHYTfvIC0e7ttsViAG3MEBIpT16V48R945mg/1zdwrEMElBUXfV47uQU2IaWVOeefq+ewbuNWZaif0dezai2eXM05t+vK2NRJB0A0G5/o3zZ1lcOQqjVrrHPNpIQfT83f1AaGOR3sWPuh6dwtacc5tDWK5QW/vqTRdx0JztNTFlMaDbLCQNWfUtQbMBI0GxrkdP2nJsVrX6JcVfyFHxY/K5WFs9e/nw0guvtrc6Ypst0Ke6UrauHz11tRYW6escdYoVppHCiRHEjMikMKb X-Forefront-PRVS: 01901B3451 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0301MB0748; 23:ltLoisVh1mhJR3c/M/tu3lwKGrXwJd99O954AXW?= =?us-ascii?Q?sgcja99P6PHGeteowgODhKjkx7m3DdqZwpLCGRjc0hbFYyLcalGUUcTGaDQr?= =?us-ascii?Q?eo9ELxPEum0Y3jtP8dlW33fyp/3zrvTnDPkXMh46+KE2qCNZEZB1AMGKVpp+?= =?us-ascii?Q?joagysCIPmqTjWK1btJUZaEQ8OWpCoCcalLA+WAZbrNwF8P5JYMvoHkbjKFa?= =?us-ascii?Q?ZINpb4F8+6hN1IM/Z3tOSFBVzhSDuyiCTjqwUhM9QFq7n9UBpfH2przFibFf?= =?us-ascii?Q?QdwULScnIXenTz9ss8gzloKTUSNoI8JQjaBosmZlUtQkM2xh/dvhet1wLJmL?= =?us-ascii?Q?UKFdF/Ik95zh/y/lKWPiZHqYYp5zIHasqfpfgMdTLC2R95sqp0Mm+pvgQ/f6?= =?us-ascii?Q?chf7sH8nWChsBxo//znGw+iaWP/xDON34mIui2mjIpe7Y+M9khTmhFvpDweA?= =?us-ascii?Q?kXObRdJc1lXyka0aSV4RQWlatbgMkbRh/dpCHm5AadNo0oDeNXteLEA2+53T?= =?us-ascii?Q?79/EJsNsmooQ4vMtePs8GO4RQ7xkYOe4gDrlRlB2txtj+/2PorjcNso9qNZo?= =?us-ascii?Q?0ZgLx3sERtZ/iFTCadM5Q80Gy8Rq+WvOdP4jy13QOiq6mE1ZJ3j4UwdYdEZK?= =?us-ascii?Q?ji5swfgEg/lw1jH3JqTGuwgqggTTFp39CLJ0itdgOH8DkhivqBXrYWXB0u8h?= =?us-ascii?Q?SFR/mwdpFtz23HT2stgWSDeN4wqnpLLGxED2aQurz0pcqtpkFMWjVjRl3wGh?= =?us-ascii?Q?RcFTwwv366MmbsZkLxh+JMHccOyWFYXda2aCpjZqVV2IXIxMfOHY9Oz7kyZ9?= =?us-ascii?Q?iZqGj7BFrJc2Ytg67XhoyW0hblPen9ya9PO9ZjZkVxcg0Uxky489q2WlQfJY?= =?us-ascii?Q?u5rqs3XV2zUudGwZjUBOpOYROU6EfOb1AeHlTx/rWdeR/BA5ZEIMMi+QjvvS?= =?us-ascii?Q?FWRKxf5UhxNUj2nODgAIhij5HCyloPwlYcmkKIdJcOybyS4+ObAf3X4mVdCZ?= =?us-ascii?Q?bixhOz/TbJz4VEWTCaDsEfaR49bIh0xGECskjnkbQVAPWkIhxFXmV/aAbGfN?= =?us-ascii?Q?mssskaqRyz4fC6Lvs81u/yVucDSZAuuXnu23PKuMrH2hdzhG3mVQQzmTp+QP?= =?us-ascii?Q?C7KmQ4qHDz0Ears1vIlrh5cxnPWRnklBLIr8VbfNYB2MnRcfsoxsBQeiwxwz?= =?us-ascii?Q?CNMt+MUeODpBuHr/sL1dmhKbdHpogt2fXp42IIoH+HmmWr7/4m/ZWz1KBqpj?= =?us-ascii?Q?b56nHmMQ7uizi6ZGJPo+1ylKOpsENGLjulybk1NgmteyFGEskdJx7TggKZHP?= =?us-ascii?Q?bhGbFpVHJMEnYQjfVMNEKB1Fco1VdYCcVlDxmCoIFpxGO?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0748; 6:KZN7mNcXqI2UvXtQi/qGVhOmSkQLjDvQD4780O5o8FeF8FCiFUzZNggLWKvkbOEkjahACqX9+bXO85lhzKA5Ta3KmhqfXV/TuHnLcnUUrH/y1ctZAjVkXzB3xZn0cmfWxFEQYSqMHWLTMnA0baU7m1DHIE5kE3QIj20BJm9wjPikZXdbvYTe4/Et7/216YmCpfLq1mJi2QjNIIdgb1OV7e5BEj6h2PIALVjuJV7hBxpaz2RHfbvvKZBuREJz152OLuoaEln3kiW6MSgNfciPcF2MR8GizR1Vmh8gCwMkOX+biDhgbZMPjf8ejV/S3OfBBg5MNHKodf8NfXFnsg8rrcw2CSCi4XX4SaYVGcSE4cAgaa2CrDknUL8UBC/IqENDhdmIvQoAmFvtKp3RHphmjqAXs30NDFivbno/ChUzP9hsIxpJG8xjnSHbZ3mBQF3r; 5:NEGuLgvrEYBgngNpUKDnIynlm4QkabCPLL7/QgWiAO6QmITmu6uMGJOYNsyi1CcwnC+1dsQN+B+J2FVweh158ddGMZ7n/KfZJhBT78FbmjAojUsYQdQy8frNbzYUbRc/WGxzyv8j5nuFtUfzcmfeOWQfz+mFDz9ohwxtepMFzsUi2SYC908AcTk/qBijf+7z; 24:BEGxm1vWJjrRz4XVFVXFj7DlqsNJgJm7rEmCyNcmHA7JceEZUcn6yZ6IntcWlZHvTXT9cFzm8XfqMN7vUytAhxj68Qe267Qg9cIBaePYHrQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB0748; 7:Qx/Cp9eDrpaFesNPJIOEgcSpiV7lfxGR1L+RtIRjtdSINOxxgUWsSpIc4jjNTnxlJOKsisPuzaTSuPl2wJQrgYNcB/W5afXp/kwKr3uC/EAuinf7b5JAmddltio/NJU0aQ6FUSWvLJj0U1mqvh9OEu9JjBZBO9gNInSbNseONHzMrONsIT+F6RsAMTvq1wGIL/TZzZdeoq/lzf5oB1agauEAymm/IEmiNnPvW72VwnLvRON5hvFHCk0H2WIyeREt8XyNooVRLJ5go4kcxTD2MLY2Mm9FbCV8SQik2qeVf5Vk+7FoQNYiTf1jZRbuoRFOdXQSYJ1uHXnCaUAGrdrdXVQA0sCKSOR1fs5F18DCzz3LS8nzpz5bs2eSeqTN5b+4asqYiOUDzrVvnWggloSdcPSR0Dgl8h8gZnojBVouNufyU+hyF+incAX8yRgkJWd9nKPlMnG+sdgJOGWk8Wl6vw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2017 13:20:50.6668 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB0748 Subject: [dpdk-dev] [PATCHv4 30/33] net/dpaa2: add support for non hw buffer pool packet transmit 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: Tue, 17 Jan 2017 13:20:54 -0000 Signed-off-by: Hemant Agrawal --- drivers/net/dpaa2/dpaa2_rxtx.c | 74 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c index 7d73bde..55068e5 100644 --- a/drivers/net/dpaa2/dpaa2_rxtx.c +++ b/drivers/net/dpaa2/dpaa2_rxtx.c @@ -191,6 +191,54 @@ static void __attribute__ ((noinline)) __attribute__((hot)) DPAA2_GET_FD_BPID(fd), DPAA2_GET_FD_LEN(fd)); } + +static inline int __attribute__((hot)) +eth_copy_mbuf_to_fd(struct rte_mbuf *mbuf, + struct qbman_fd *fd, uint16_t bpid) +{ + struct rte_mbuf *m; + void *mb = NULL; + + if (hw_mbuf_alloc_bulk(bpid_info[bpid].bp_list->buf_pool.mp, &mb, 1)) { + PMD_TX_LOG(WARNING, "Unable to allocated DPAA2 buffer"); + rte_pktmbuf_free(mbuf); + return -1; + } + m = (struct rte_mbuf *)mb; + memcpy((char *)m->buf_addr + mbuf->data_off, + (void *)((char *)mbuf->buf_addr + mbuf->data_off), + mbuf->pkt_len); + + /* Copy required fields */ + m->data_off = mbuf->data_off; + m->ol_flags = mbuf->ol_flags; + m->packet_type = mbuf->packet_type; + m->tx_offload = mbuf->tx_offload; + + /*Resetting the buffer pool id and offset field*/ + fd->simple.bpid_offset = 0; + + DPAA2_SET_FD_ADDR(fd, (m->buf_addr)); + DPAA2_SET_FD_LEN(fd, mbuf->data_len); + DPAA2_SET_FD_BPID(fd, bpid); + DPAA2_SET_FD_OFFSET(fd, mbuf->data_off); + DPAA2_SET_FD_ASAL(fd, DPAA2_ASAL_VAL); + + PMD_TX_LOG(DEBUG, " mbuf %p BMAN buf addr %p", + (void *)mbuf, mbuf->buf_addr); + + PMD_TX_LOG(DEBUG, " fdaddr =%lx bpid =%d meta =%d off =%d, len =%d", + DPAA2_GET_FD_ADDR(fd), + DPAA2_GET_FD_BPID(fd), + bpid_info[DPAA2_GET_FD_BPID(fd)].meta_data_size, + DPAA2_GET_FD_OFFSET(fd), + DPAA2_GET_FD_LEN(fd)); + /*free the original packet */ + rte_pktmbuf_free(mbuf); + + return 0; +} + uint16_t dpaa2_dev_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) { @@ -331,8 +379,29 @@ static void __attribute__ ((noinline)) __attribute__((hot)) DPAA2_RESET_FD_CTRL((&fd_arr[loop])); DPAA2_SET_FD_FLC((&fd_arr[loop]), NULL); mp = (*bufs)->pool; - bpid = mempool_to_bpid(mp); - eth_mbuf_to_fd(*bufs, &fd_arr[loop], bpid); + /* Not a hw_pkt pool allocated frame */ + if (mp && !(mp->flags & MEMPOOL_F_HW_PKT_POOL)) { + PMD_TX_LOG(ERR, "non hw offload bufffer "); + /* alloc should be from the default buffer pool + * attached to this interface + */ + if (priv->bp_list) { + bpid = priv->bp_list->buf_pool.bpid; + } else { + PMD_TX_LOG(ERR, "errr: why no bpool" + " attached"); + num_tx = 0; + goto skip_tx; + } + if (eth_copy_mbuf_to_fd(*bufs, + &fd_arr[loop], bpid)) { + bufs++; + continue; + } + } else { + bpid = mempool_to_bpid(mp); + eth_mbuf_to_fd(*bufs, &fd_arr[loop], bpid); + } bufs++; } loop = 0; @@ -345,5 +414,6 @@ static void __attribute__ ((noinline)) __attribute__((hot)) dpaa2_q->tx_pkts += frames_to_send; nb_pkts -= frames_to_send; } +skip_tx: return num_tx; } -- 1.9.1