net/mvpp2: add fill buffs to configuration file
authorDana Vardi <danat@marvell.com>
Wed, 27 Jan 2021 16:09:48 +0000 (18:09 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 29 Jan 2021 17:16:11 +0000 (18:16 +0100)
Extend config file with 'fill_bpool_buffs'
which control the amount of refill buffers

Signed-off-by: Dana Vardi <danat@marvell.com>
Reviewed-by: Liron Himi <lironh@marvell.com>
doc/guides/nics/mvpp2.rst
drivers/net/mvpp2/mrvl_ethdev.c
drivers/net/mvpp2/mrvl_ethdev.h
drivers/net/mvpp2/mrvl_qos.c
drivers/net/mvpp2/mrvl_qos.h

index 5cdd8f4..e40fed7 100644 (file)
@@ -218,6 +218,7 @@ Configuration syntax
    [port <portnum> default]
    start_hdr = <start_hdr>
    forward_bad_frames = <forward_bad_frames>
+   fill_bpool_buffs = <fill_bpool_buffs>
    default_tc = <default_tc>
    mapping_priority = <mapping_priority>
 
@@ -266,6 +267,8 @@ Where:
 
 - ``<forward_bad_frames>``: Indicate whether to forward or drop l2 bad packets (0 or 1).
 
+- ``<fill_bpool_buffs>``: Control the amount of refill buffers (default is 64).
+
 - ``<default_tc>``: Default traffic class (e.g. 0)
 
 - ``<mapping_priority>``: QoS priority for mapping (`ip`, `vlan`, `ip/vlan` or `vlan/ip`).
index 911cb29..e119952 100644 (file)
@@ -52,8 +52,6 @@
 #define MRVL_IFACE_NAME_ARG "iface"
 #define MRVL_CFG_ARG "cfg"
 
-#define MRVL_BURST_SIZE 64
-
 #define MRVL_ARP_LENGTH 28
 
 #define MRVL_COOKIE_ADDR_INVALID ~0ULL
@@ -814,12 +812,15 @@ mrvl_dev_start(struct rte_eth_dev *dev)
        priv->ppio_params.match = match;
        priv->ppio_params.eth_start_hdr = PP2_PPIO_HDR_ETH;
        priv->forward_bad_frames = 0;
+       priv->fill_bpool_buffs = MRVL_BURST_SIZE;
 
        if (mrvl_cfg) {
                priv->ppio_params.eth_start_hdr =
                        mrvl_cfg->port[dev->data->port_id].eth_start_hdr;
                priv->forward_bad_frames =
                        mrvl_cfg->port[dev->data->port_id].forward_bad_frames;
+               priv->fill_bpool_buffs =
+                       mrvl_cfg->port[dev->data->port_id].fill_bpool_buffs;
        }
 
        /*
@@ -2666,7 +2667,7 @@ mrvl_rx_pkt_burst(void *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
 
                if (unlikely(num <= q->priv->bpool_min_size ||
                             (!rx_done && num < q->priv->bpool_init_size))) {
-                       mrvl_fill_bpool(q, MRVL_BURST_SIZE);
+                       mrvl_fill_bpool(q, q->priv->fill_bpool_buffs);
                } else if (unlikely(num > q->priv->bpool_max_size)) {
                        int i;
                        int pkt_to_remove = num - q->priv->bpool_init_size;
index 8d5469c..fda239a 100644 (file)
@@ -82,6 +82,8 @@
 /** Maximum length of a match string */
 #define MRVL_MATCH_LEN 16
 
+#define MRVL_BURST_SIZE 64
+
 /** PMD-specific definition of a flow rule handle. */
 struct mrvl_mtr;
 struct rte_flow {
@@ -183,6 +185,7 @@ struct mrvl_priv {
        uint64_t rate_max;
 
        uint8_t forward_bad_frames;
+       uint32_t fill_bpool_buffs;
 };
 
 /** Flow operations forward declaration. */
index a415584..dbfc3b5 100644 (file)
@@ -79,6 +79,9 @@
 /* parser forward bad frames tokens */
 #define MRVL_TOK_FWD_BAD_FRAMES "forward_bad_frames"
 
+/* parse fill bpool buffers tokens */
+#define MRVL_TOK_FILL_BPOOL_BUFFS "fill_bpool_buffs"
+
 /** Number of tokens in range a-b = 2. */
 #define MAX_RNG_TOKENS 2
 
@@ -720,6 +723,11 @@ mrvl_get_cfg(const char *key __rte_unused, const char *path, void *extra_args)
                /* Use global defaults, unless an override occurs */
                (*cfg)->port[n].use_qos_global_defaults = 1;
 
+               /* Set non-zero defaults before the decision to continue to next
+                * port or to parse the port section in config file
+                */
+               (*cfg)->port[n].fill_bpool_buffs = MRVL_BURST_SIZE;
+
                /* Skip ports non-existing in configuration. */
                if (rte_cfgfile_num_sections(file, sec_name,
                                strlen(sec_name)) <= 0) {
@@ -889,6 +897,19 @@ mrvl_get_cfg(const char *key __rte_unused, const char *path, void *extra_args)
                } else {
                        (*cfg)->port[n].forward_bad_frames = 0;
                }
+
+               /* Parse fill bpool buffs option */
+               entry = rte_cfgfile_get_entry(file, sec_name,
+                               MRVL_TOK_FILL_BPOOL_BUFFS);
+               if (entry) {
+                       if (get_val_securely(entry, &val) < 0) {
+                               MRVL_LOG(ERR,
+                                       "Error in parsing %s value (%s)!\n",
+                                       MRVL_TOK_FILL_BPOOL_BUFFS, entry);
+                               return -1;
+                       }
+                       (*cfg)->port[n].fill_bpool_buffs = val;
+               }
        }
 
        return 0;
index 763130b..38ea309 100644 (file)
@@ -49,6 +49,7 @@ struct mrvl_cfg {
                struct pp2_cls_plcr_params policer_params;
                uint8_t setup_policer;
                uint8_t forward_bad_frames;
+               uint32_t fill_bpool_buffs;
        } port[RTE_MAX_ETHPORTS];
 };