#define MEMPOOL_CACHE_SIZE 256
 
-#define CDEV_QUEUE_DESC 2048
 #define CDEV_MAP_ENTRIES 16384
 #define CDEV_MP_CACHE_SZ 64
 #define CDEV_MP_CACHE_MULTIPLIER 1.5 /* from rte_mempool.c */
 static uint16_t nb_rxd = IPSEC_SECGW_RX_DESC_DEFAULT;
 static uint16_t nb_txd = IPSEC_SECGW_TX_DESC_DEFAULT;
 
+/*
+ * Configurable number of descriptors per queue pair
+ */
+static uint32_t qp_desc_nb = 2048;
+
 #define ETHADDR_TO_UINT64(addr) __BYTES_TO_UINT64( \
                (addr)->addr_bytes[0], (addr)->addr_bytes[1], \
                (addr)->addr_bytes[2], (addr)->addr_bytes[3], \
 #define CMD_LINE_OPT_VECTOR_TIMEOUT    "vector-tmo"
 #define CMD_LINE_OPT_VECTOR_POOL_SZ    "vector-pool-sz"
 #define CMD_LINE_OPT_PER_PORT_POOL     "per-port-pool"
+#define CMD_LINE_OPT_QP_DESC_NB                "desc-nb"
 
 #define CMD_LINE_ARG_EVENT     "event"
 #define CMD_LINE_ARG_POLL      "poll"
        CMD_LINE_OPT_VECTOR_TIMEOUT_NUM,
        CMD_LINE_OPT_VECTOR_POOL_SZ_NUM,
        CMD_LINE_OPT_PER_PORT_POOL_NUM,
+       CMD_LINE_OPT_QP_DESC_NB_NUM,
 };
 
 static const struct option lgopts[] = {
        {CMD_LINE_OPT_VECTOR_TIMEOUT, 1, 0, CMD_LINE_OPT_VECTOR_TIMEOUT_NUM},
        {CMD_LINE_OPT_VECTOR_POOL_SZ, 1, 0, CMD_LINE_OPT_VECTOR_POOL_SZ_NUM},
        {CMD_LINE_OPT_PER_PORT_POOL, 0, 0, CMD_LINE_OPT_PER_PORT_POOL_NUM},
+       {CMD_LINE_OPT_QP_DESC_NB, 1, 0, CMD_LINE_OPT_QP_DESC_NB_NUM},
        {NULL, 0, 0, 0}
 };
 
                " [--event-vector]"
                " [--vector-size SIZE]"
                " [--vector-tmo TIMEOUT in ns]"
+               " [--" CMD_LINE_OPT_QP_DESC_NB " NUMBER_OF_DESC]"
                "\n\n"
                "  -p PORTMASK: Hexadecimal bitmask of ports to configure\n"
                "  -P : Enable promiscuous mode\n"
                "  --" CMD_LINE_OPT_PER_PORT_POOL " Enable per port mbuf pool\n"
                "  --" CMD_LINE_OPT_VECTOR_POOL_SZ " Vector pool size\n"
                "                    (default value is based on mbuf count)\n"
+               "  --" CMD_LINE_OPT_QP_DESC_NB " DESC_NB"
+               ": Number of descriptors per queue pair (default value: 2048)\n"
                "\n",
                prgname);
 }
                case CMD_LINE_OPT_PER_PORT_POOL_NUM:
                        per_port_pool = 1;
                        break;
+               case CMD_LINE_OPT_QP_DESC_NB_NUM:
+                       qp_desc_nb = parse_decimal(optarg);
+                       break;
                default:
                        print_usage(prgname);
                        return -1;
                        rte_panic("Failed to initialize cryptodev %u\n",
                                        cdev_id);
 
-               qp_conf.nb_descriptors = CDEV_QUEUE_DESC;
+               qp_conf.nb_descriptors = qp_desc_nb;
                qp_conf.mp_session =
                        socket_ctx[dev_conf.socket_id].session_pool;
                qp_conf.mp_session_private =
                        nb_ports * nb_lcores * MAX_PKT_BURST +
                        nb_ports * nb_txq * nb_txd +
                        nb_lcores * MEMPOOL_CACHE_SIZE +
-                       nb_crypto_qp * CDEV_QUEUE_DESC +
+                       nb_crypto_qp * qp_desc_nb +
                        nb_lcores * frag_tbl_sz *
                        FRAG_TBL_BUCKET_ENTRIES),
                       8192U);