sched: update queue stats read for config flexibility
authorJasvinder Singh <jasvinder.singh@intel.com>
Fri, 25 Oct 2019 10:51:19 +0000 (11:51 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 25 Oct 2019 15:51:26 +0000 (17:51 +0200)
Modify pipe queue stats read function to allow different subports
of the same port to have different configuration in terms of number
of pipes, pipe queue sizes, etc.

Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
Signed-off-by: Lukasz Krakowiak <lukaszx.krakowiak@intel.com>
lib/librte_sched/rte_sched.c

index 28df344..1faa580 100644 (file)
@@ -310,7 +310,12 @@ struct rte_sched_subport *subport, uint32_t qindex)
 static inline uint32_t
 rte_sched_port_queues_per_port(struct rte_sched_port *port)
 {
-       return RTE_SCHED_QUEUES_PER_PIPE * port->n_pipes_per_subport * port->n_subports_per_port;
+       uint32_t n_queues = 0, i;
+
+       for (i = 0; i < port->n_subports_per_port; i++)
+               n_queues += rte_sched_subport_pipe_queues(port->subports[i]);
+
+       return n_queues;
 }
 
 static inline uint16_t
@@ -1464,8 +1469,10 @@ rte_sched_queue_read_stats(struct rte_sched_port *port,
        struct rte_sched_queue_stats *stats,
        uint16_t *qlen)
 {
+       struct rte_sched_subport *s;
        struct rte_sched_queue *q;
        struct rte_sched_queue_extra *qe;
+       uint32_t subport_id, subport_qmask, subport_qindex;
 
        /* Check user parameters */
        if (port == NULL) {
@@ -1491,8 +1498,13 @@ rte_sched_queue_read_stats(struct rte_sched_port *port,
                        "%s: Incorrect value for parameter qlen\n", __func__);
                return -EINVAL;
        }
-       q = port->queue + queue_id;
-       qe = port->queue_extra + queue_id;
+       subport_qmask = port->n_pipes_per_subport_log2 + 4;
+       subport_id = (queue_id >> subport_qmask) & (port->n_subports_per_port - 1);
+
+       s = port->subports[subport_id];
+       subport_qindex = ((1 << subport_qmask) - 1) & queue_id;
+       q = s->queue + subport_qindex;
+       qe = s->queue_extra + subport_qindex;
 
        /* Copy queue stats and clear */
        memcpy(stats, &qe->stats, sizeof(struct rte_sched_queue_stats));