From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0043.outbound.protection.outlook.com [104.47.42.43]) by dpdk.org (Postfix) with ESMTP id 807CAFA60 for ; Thu, 2 Mar 2017 12:39:15 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=MpzzDVjH0wLYgXaC/u3VJM3UKNGr4dkcIBBn4mPcxNI=; b=kys4PZQJ1qtvDtQlFfXtAtsiZxxlqPJUst/BzLJ08ePisZg/eZfuZL/RtSWyktRxcKiAmDf/XjS3dPR9ItZgdQcNO9+q21mBluC9b7JwKGNDO5PZrPpsgaKb75F1GsTrtwV7fCOZLJWG4nqsabQtG0m9xYwdZp867Af326Dwnzc= Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=caviumnetworks.com; Received: from lio357.in.caveonetworks.com (14.140.2.178) by CY1PR07MB2277.namprd07.prod.outlook.com (10.164.112.155) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.947.12; Thu, 2 Mar 2017 11:39:11 +0000 From: Shijith Thotton To: ferruh.yigit@intel.com Cc: dev@dpdk.org, Jerin Jacob , Derek Chickles , Venkat Koppula , Srisivasubramanian S , Mallesham Jatharakonda Date: Thu, 2 Mar 2017 17:02:30 +0530 Message-Id: <1488454371-3342-26-git-send-email-shijith.thotton@caviumnetworks.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1488454371-3342-1-git-send-email-shijith.thotton@caviumnetworks.com> References: <1487669225-30091-1-git-send-email-shijith.thotton@caviumnetworks.com> <1488454371-3342-1-git-send-email-shijith.thotton@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: BM1PR01CA0021.INDPRD01.PROD.OUTLOOK.COM (10.163.198.156) To CY1PR07MB2277.namprd07.prod.outlook.com (10.164.112.155) X-MS-Office365-Filtering-Correlation-Id: e9bf4c38-be39-45af-adf0-08d46160c0b4 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:CY1PR07MB2277; X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2277; 3:43/mBnMLGn1XaLFznl7uqbWqbjgvO0BSqmjO2HKQuGwHMw74dPzkzYQ3AkZZzqtcImqrgFJZ+/Qy+BANMFhT/iWx533n1WYFq0e277V58aqmVeEB1GdWEdDWi9aflwEemDA0t7kbJqEWeEIUT8CoFcRLi1I3Ewb2+ClyIvIJDMPqrMTsSSDjQHnu9MsnoSja4qhDpUx6ZksWmXrqzsgOuUPgESv1yoaji0SQXF6CKrDXnDQ5UYq2rqGgBy8luIKLEhXeC/kPK2S3T5tTutSMDQ==; 25:HV4uYNpHQ13ayDxZo7Fr73CAyzN+VX+Va1LeolWwpHf7oF77V4gWEoLxycb8ItLhSzRKWFMxWgFAdgwkJt2Kgz1vgZSzC8EV4yKIfNJWytgPnt13mVwb2vJRQusnIBjUWHRbizt/VXx3n34GwF1ZBZCcgK/EvUtQsHKpBZWkbHlPTadgVYpCvFS2gsWWP4UoPElkUbphKCbHKyGkyO6X/6efIMRymmYigIDgUF4B8SZY1esDkMeb/u1cZu0/DASjeZmOZS1RmIPk6m9sjmUYABGErLRzZhdRJDFPEbVDYGh2Yyf1mwe+i1RQtxil5vvV14W8xTX95f5byT8tJFXDv2lQ8VtqGaXiKWFmElj9Mcd0PA+AEf8W8QuX0jj/MzAI/kybQHp56BF0nkt5F4MhEqhOGvDGjq2giREECL9LSDcWcwc5LTgT4vFo3iTKTpMwuxzi+FeNxlNNNownZdsFmw== X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2277; 31:6zngCp/1J4Cs1rAcUYnGq0I/K3JOpuZY3vf84RDAMXTOBdInWkwg68CLu1Lslq6nIKf9xSmq82ieJkqIFuP2zDG4XKXASyKC7AKmU2+zdOCVEGN0MY0PmtoWBrr6pQxVYh3UqNepU2b+2Nfhzr3/e5xiog/JDGobVP2zaEByGwEtNle6XiLt8sI2KjvlxM9HhYIXLXfbnDa5gHE2eir/pM3clNSgEqbC3fklHy4azJS1Q2NEKn0SlKTR6c50sI/w; 20:rzMhcWr3sRkXcbBYpvMt1qswGjxoqmw4sQXvC9A0oM0iK7Jf+JkUFIft7PFqINsJl0kRuuvkZWPlR0VhXoXPHgR4TRkAsWGxVXjyIqTmwsw0Of0hjJlOT2/fD23va+SI3hUinJvfRmL12jf0CM2L6SSN8VXtd9Lq1Rr4zuTvBqDaoQuudg7Ox6EigvFJcRvGB6IHo3cdxJzi6zUSlIGHv9ac3wTRLVPTxihtBz3ZvtIP83pPuHyTJJWNJDTXl50mcDRQVPBg8iRc+2SnnjIicsFxo3lGrbAtNOVP+7HpSZPB/EsSZtSKPLLNHeoi0ALXlb9Se2T7JIYSGPDomy+wkTzUD7MGiFK69MpMnXEugmD6BGW+WgHQ/2rNNStUqmiikFjAULymiSZPdszAyJkqTJclr0h7aBT/TogtQhQp7qjVPieghEEncQsnLJaWcHadEmO/rtawQ5RY611WiLh4wCB/aMjbR0lFLs3GiyUNn6NPr66yblFte6PXwG+AfW6Qwt6+8mmlaTyplYD0Ht9IDJb3Mj6m1U8lDQj6djXS3BjQe3V647QudUuqDSfEgWab1R62/PDR0tHGwz8Z6jhjiSuTHk8FL/VeCHg6YbJapvo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041248)(20161123558025)(20161123555025)(20161123560025)(20161123564025)(20161123562025)(6072148); SRVR:CY1PR07MB2277; BCL:0; PCL:0; RULEID:; SRVR:CY1PR07MB2277; X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2277; 4:5ZLNSpfFNMLXOYB+xngVPx7fSZ1HCQ6T5RdaCj2VjZG+UyArzggxrVmWJAAkcj0VaRdF2ANUeVcPpMgRj/3CEtxgfl7jFjIVQ8dJOky1Px6Xa/dMNWJevzWTzkkEF1NaXAzszoZCVUiefgBugRwp5SsAOdag5IHJTFFbk7B3ETmvwt8wacxyloejz0eAszQrhHthGeUsFfHXxQzlnBwMJhVOWVHbkfYr9hYYaCFzBI1nHtD3pWXC4WW915V8jDEjBuNfMsnzG4dPXVWRwK1SSFO60fnwn8Z09wJ0tcCQEosyVnStTiNYIVqAArFSKjBzOTnx+lZCZfjXi4frs87EumrphXBuqHjJS9aCMWXQhgbuzyToBm47igoFd8++1h6xoUV8+mmd7brdCPw3xvEuW0BvQSeCHCiZeUAo0wJei8bcjN+J4E0q7ObFD2cr0F90kdXE+w1XoZ/2FvVbYecRRuzW/5j0u+CP3WpuiyPqnj0RUL+wmOiKpU8tIO9WIdWXCDvQGT0nIfrywhByg3MjytgkdqTOksaGOufqOxFvQWv9znj/fjwuN6kUvJ9wKo5X5ZfOgVgOBpXjXY/7KY8x6IfXXDjIQ9xTKafWxxASN2o= X-Forefront-PRVS: 023495660C X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(39450400003)(31430400001)(2950100002)(6916009)(42882006)(575784001)(5660300001)(92566002)(4720700003)(33646002)(48376002)(50226002)(6666003)(2906002)(5003940100001)(36756003)(8676002)(50466002)(81166006)(110136004)(38730400002)(4326008)(305945005)(2361001)(53936002)(2351001)(25786008)(6512007)(189998001)(54906002)(47776003)(6506006)(6486002)(66066001)(6116002)(3846002)(50986999)(76176999)(5009440100003)(42186005)(7736002)(7099028)(110426004); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR07MB2277; H:lio357.in.caveonetworks.com; FPR:; SPF:None; MLV:nov; PTR:InfoNoRecords; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR07MB2277; 23:TKIRSfnp45PLxFpM6f+Po4GeWcJVqRLbRNwpLTiOI?= =?us-ascii?Q?FcWPx55KR9VoitUIU6ZLv0oppVptIzxoUTdghpJvNex8TG+MP+qdVN1zTsrU?= =?us-ascii?Q?S8aXgTaSDoRN/ODPss0ivuq3iDS89wlk6o82w46BWnV37V7gcE/Brf6lDX54?= =?us-ascii?Q?+OuY/MeALY0xmAPJ/fxa/Z72K5MP8jUladrmSJ4vtZ0VG+vUphPM4xFiO6GX?= =?us-ascii?Q?boMKpyvfQB4PHvAGtGfSz5cWcpi0V9VGB0Hz14RtOvbxHkCMriE2y7hzm2rL?= =?us-ascii?Q?7pHEGR9urI4ARlOtRjCS277EeokICz6GYlOQlL/BSEFlzGEd5S5KymEQcMwS?= =?us-ascii?Q?Zy/s+bn6soRyPl1rUgjj1eLDjuOdJZygUP2u7clMXehIIvrQ6z6hjeYYo2PW?= =?us-ascii?Q?HyR9N6g1LSZtD5klzP53IXHLmcfxBIhj9ldXGcEPNCRkn02LhwEEauXjGFKl?= =?us-ascii?Q?+ULOmBZujy3Olh0K26NGKwrjOErBak8OO6BCBSp76fNkRusxiZKMQ5r3rGX1?= =?us-ascii?Q?t1m+EDHmVqn1W5XqfhD67mJnbKXaCvcn0iakHvKM9l5iA1FVKrJ6CY9EhXd/?= =?us-ascii?Q?eKtzNDIemmqVKAW7KR91g9zaV0JaLB3gQ8fNoavKwBjU/+Pcexkhf7iJ+C3e?= =?us-ascii?Q?+U3aRMQvWivL3+oZALRUGUcpOncgTF0s6qANNNMa8ZUzBWolD1iUlGN1WKNp?= =?us-ascii?Q?/tAI8/4gRYN6qZCemlvAgJ30wD+PvtDBxZnOo4Ysrjq5pDUZ92gzXPqMpVFm?= =?us-ascii?Q?e+EGoAvIbwx+iUAQQiPyMw2r+qSC5mAbk5h5h6yY49WbQRGODgtGkzs2X2mc?= =?us-ascii?Q?8MeLfDQQpBH4By4Y8774yWLC9MmVNRrN57264siFrUTaR2dzeo5N+uEpnHlj?= =?us-ascii?Q?wtQ0GotdPl9d/b9JySAJVJP1iUs5uD7S/9grr+yFGEujGzfGKL57J3IqyWnn?= =?us-ascii?Q?7RQAWaY7G62Hmzu92iWouNwaHs4/2+YgH1PYZEVMvSQ6Y6AzKmc/SmEn8A6E?= =?us-ascii?Q?qaXhXmj21yauYR+Bzu5zima2l9BE+DxG3bjQYcts5urdqrs1PjxWLCP8yIKi?= =?us-ascii?Q?bhPY0EJ77AMihQUfwQxcoAcwx5oJVfrzf/KStNoo0RWNd6GhYDEbBfoerFSB?= =?us-ascii?Q?BWszC8B7w7Ew+e38fA80nMp8fJaGReF?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2277; 6:7EN/xrFtWyEPZO7/BAh+xd2foVMNq84WfW3eJhQLJxqHUV1ywy05uWozHZuG4py9nWV26XHvhQUoMoQv/jubZum3VpJCTlvtlT3J0AqWrSy0LYMtz1XFL2LeAEU3DYm+jA0yLUiqyiS3qJDRnEdyDs1YgI04P3Ud74Wn4FpzLDnu+72aDF4wk6tN8WFfUhW5Jr6wsjOL2apEWKUacP4mj/frmjh3WSvxkWZl6PRRrNGoDXxJGgLYYOqZjEWHTToUS3TdGtmxT8CRQdasXxRbcXlQ7owlXH5TJ/yAEWjUGTBGvNiXrhy2F5XhGsM4zFu8sivxcubugFp6edR6x7JcDJCxZt7kB+pIcpPUZJXHYm3kdIVDlXrl7jnSYH2NEngAxxDkU5RdIZZnXjLsYLt2KA==; 5:SCqBy3yILQFUjhwkCCw0/3yuUTMmjfjEx0nwmOQ5ApAiDpE+M65v4wgg/OlR7Y4qH0QXva7cSelS6fedNH6nRKSA3sOlHwhZViMdVbraDVQq8hjSji79dAfspr0QlSjy7svVOnnj+82u8ZAOXDBfBQ==; 24:bI8icK4xKc/bELu9R5ZbEme9GUp7DXSeN7JTZERj/cv48AQWZ0KX+Et5E5sI+b3J6K6IpXMueVBmK+2aLfckHtuAEZrIu/toiDgCJnEbiMI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR07MB2277; 7:43nV4oM/NN+VECQr5nHnkNA8pH8UYL3ff/YDaf0iuRISkCvLAIhBtB3xDIm3Sr5rXftwzXCTEn6Vrys+B7vXgkn8yMRgAxxwYO6mpP3ikIVN8VvKxSWtcjH+oIXncW+YGFbD78xQ1i6WL3R37txsO/qRRSwBsJJ/KfMGKh/yOC5oBmOvcOlk2Wz9yyHoOZOXibyYZndXeeiu1h46IY1icRUWn07QNkIwpTmBkDLt/YvplU9kbIvic1rKtyFVzNRXWC2tvY0GabSHr4UMf0AYdFPsm8l7aj+ZnYSb+ozlc0J7umzFlPh1UZOq64Szkp57WmNo1kThYe7aAUEOZIHnQQ== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2017 11:39:11.5152 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR07MB2277 Subject: [dpdk-dev] [PATCH v2 25/46] net/liquidio: add APIs for SG list 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, 02 Mar 2017 11:39:16 -0000 Add APIs to setup and free Scatter-Gather list. SG list is used while sending packets with multiple segments. Signed-off-by: Shijith Thotton Signed-off-by: Jerin Jacob Signed-off-by: Derek Chickles Signed-off-by: Venkat Koppula Signed-off-by: Srisivasubramanian S Signed-off-by: Mallesham Jatharakonda --- drivers/net/liquidio/lio_ethdev.c | 23 ++++++++ drivers/net/liquidio/lio_rxtx.c | 107 ++++++++++++++++++++++++++++++++++++++ drivers/net/liquidio/lio_rxtx.h | 7 +++ drivers/net/liquidio/lio_struct.h | 40 ++++++++++++++ 4 files changed, 177 insertions(+) diff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c index 9e2d3f8..77106f6 100644 --- a/drivers/net/liquidio/lio_ethdev.c +++ b/drivers/net/liquidio/lio_ethdev.c @@ -202,6 +202,15 @@ return retval; } + retval = lio_setup_sglists(lio_dev, q_no, fw_mapped_iq, + lio_dev->instr_queue[fw_mapped_iq]->max_count, + socket_id); + + if (retval) { + lio_delete_instruction_queue(lio_dev, fw_mapped_iq); + return retval; + } + eth_dev->data->tx_queues[q_no] = lio_dev->instr_queue[fw_mapped_iq]; return 0; @@ -334,6 +343,20 @@ static int lio_dev_configure(struct rte_eth_dev *eth_dev) /* Copy the permanent MAC address */ ether_addr_copy((struct ether_addr *)mac, ð_dev->data->mac_addrs[0]); + lio_dev->glist_lock = + rte_zmalloc(NULL, sizeof(*lio_dev->glist_lock) * num_iqueues, 0); + if (lio_dev->glist_lock == NULL) + return -ENOMEM; + + lio_dev->glist_head = + rte_zmalloc(NULL, sizeof(*lio_dev->glist_head) * num_iqueues, + 0); + if (lio_dev->glist_head == NULL) { + rte_free(lio_dev->glist_lock); + lio_dev->glist_lock = NULL; + return -ENOMEM; + } + lio_dev->port_configured = 1; lio_free_soft_command(sc); diff --git a/drivers/net/liquidio/lio_rxtx.c b/drivers/net/liquidio/lio_rxtx.c index b0dfc9b..50deaba 100644 --- a/drivers/net/liquidio/lio_rxtx.c +++ b/drivers/net/liquidio/lio_rxtx.c @@ -40,6 +40,8 @@ #include "lio_ethdev.h" #include "lio_rxtx.h" +#define LIO_MAX_SG 12 + static void lio_droq_compute_max_packet_bufs(struct lio_droq *droq) { @@ -1272,3 +1274,108 @@ struct lio_soft_command * return 0; } + +static inline struct lio_stailq_node * +list_delete_first_node(struct lio_stailq_head *head) +{ + struct lio_stailq_node *node; + + if (STAILQ_EMPTY(head)) + node = NULL; + else + node = STAILQ_FIRST(head); + + if (node) + STAILQ_REMOVE(head, node, lio_stailq_node, entries); + + return node; +} + +static void +lio_delete_sglist(struct lio_instr_queue *txq) +{ + struct lio_device *lio_dev = txq->lio_dev; + int iq_no = txq->q_index; + struct lio_gather *g; + + if (lio_dev->glist_head == NULL) + return; + + do { + g = (struct lio_gather *)list_delete_first_node( + &lio_dev->glist_head[iq_no]); + if (g) { + if (g->sg) + rte_free( + (void *)((unsigned long)g->sg - g->adjust)); + rte_free(g); + } + } while (g); +} + +/** + * \brief Setup gather lists + * @param lio per-network private data + */ +int +lio_setup_sglists(struct lio_device *lio_dev, int iq_no, + int fw_mapped_iq, int num_descs, unsigned int socket_id) +{ + struct lio_gather *g; + int i; + + rte_spinlock_init(&lio_dev->glist_lock[iq_no]); + + STAILQ_INIT(&lio_dev->glist_head[iq_no]); + + for (i = 0; i < num_descs; i++) { + g = rte_zmalloc_socket(NULL, sizeof(*g), RTE_CACHE_LINE_SIZE, + socket_id); + if (g == NULL) { + lio_dev_err(lio_dev, + "lio_gather memory allocation failed for qno %d\n", + iq_no); + break; + } + + g->sg_size = + ((ROUNDUP4(LIO_MAX_SG) >> 2) * LIO_SG_ENTRY_SIZE); + + g->sg = rte_zmalloc_socket(NULL, g->sg_size + 8, + RTE_CACHE_LINE_SIZE, socket_id); + if (g->sg == NULL) { + lio_dev_err(lio_dev, + "sg list memory allocation failed for qno %d\n", + iq_no); + rte_free(g); + break; + } + + /* The gather component should be aligned on 64-bit boundary */ + if (((unsigned long)g->sg) & 7) { + g->adjust = 8 - (((unsigned long)g->sg) & 7); + g->sg = + (struct lio_sg_entry *)((unsigned long)g->sg + + g->adjust); + } + + STAILQ_INSERT_TAIL(&lio_dev->glist_head[iq_no], &g->list, + entries); + } + + if (i != num_descs) { + lio_delete_sglist(lio_dev->instr_queue[fw_mapped_iq]); + return -ENOMEM; + } + + return 0; +} + +void +lio_delete_instruction_queue(struct lio_device *lio_dev, int iq_no) +{ + lio_delete_instr_queue(lio_dev, iq_no); + rte_free(lio_dev->instr_queue[iq_no]); + lio_dev->instr_queue[iq_no] = NULL; + lio_dev->num_iqs--; +} diff --git a/drivers/net/liquidio/lio_rxtx.h b/drivers/net/liquidio/lio_rxtx.h index 86d5864..10bca4c 100644 --- a/drivers/net/liquidio/lio_rxtx.h +++ b/drivers/net/liquidio/lio_rxtx.h @@ -42,6 +42,10 @@ #include "lio_struct.h" +#ifndef ROUNDUP4 +#define ROUNDUP4(val) (((val) + 3) & 0xfffffffc) +#endif + #define LIO_STQUEUE_FIRST_ENTRY(ptr, type, elem) \ (type *)((char *)((ptr)->stqh_first) - offsetof(type, elem)) @@ -548,9 +552,12 @@ uint16_t lio_dev_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t budget); void lio_delete_droq_queue(struct lio_device *lio_dev, int oq_no); +int lio_setup_sglists(struct lio_device *lio_dev, int iq_no, + int fw_mapped_iq, int num_descs, unsigned int socket_id); int lio_setup_iq(struct lio_device *lio_dev, int q_index, union octeon_txpciq iq_no, uint32_t num_descs, void *app_ctx, unsigned int socket_id); +void lio_delete_instruction_queue(struct lio_device *lio_dev, int iq_no); /** Setup instruction queue zero for the device * @param lio_dev which lio device to setup * diff --git a/drivers/net/liquidio/lio_struct.h b/drivers/net/liquidio/lio_struct.h index 7a7a4a6..4d67eb6 100644 --- a/drivers/net/liquidio/lio_struct.h +++ b/drivers/net/liquidio/lio_struct.h @@ -298,6 +298,41 @@ struct lio_instr_queue { const struct rte_memzone *iq_mz; }; +/* The Scatter-Gather List Entry. The scatter or gather component used with + * input instruction has this format. + */ +struct lio_sg_entry { + /** The first 64 bit gives the size of data in each dptr. */ + union { + uint16_t size[4]; + uint64_t size64; + } u; + + /** The 4 dptr pointers for this entry. */ + uint64_t ptr[4]; +}; + +#define LIO_SG_ENTRY_SIZE (sizeof(struct lio_sg_entry)) + +/** Structure of a node in list of gather components maintained by + * driver for each network device. + */ +struct lio_gather { + /** List manipulation. Next and prev pointers. */ + struct lio_stailq_node list; + + /** Size of the gather component at sg in bytes. */ + int sg_size; + + /** Number of bytes that sg was adjusted to make it 8B-aligned. */ + int adjust; + + /** Gather component that can accommodate max sized fragment list + * received from the IP layer. + */ + struct lio_sg_entry *sg; +}; + struct lio_io_enable { uint64_t iq; uint64_t oq; @@ -516,6 +551,11 @@ struct lio_device { uint32_t num_iqs; + /** Guards each glist */ + rte_spinlock_t *glist_lock; + /** Array of gather component linked lists */ + struct lio_stailq_head *glist_head; + /* The pool containing pre allocated buffers used for soft commands */ struct rte_mempool *sc_buf_pool; -- 1.8.3.1