diff options
author | Cristian Sovaiala <cristian.sovaiala@freescale.com> | 2013-04-03 15:32:27 (GMT) |
---|---|---|
committer | Fleming Andrew-AFLEMING <AFLEMING@freescale.com> | 2013-04-18 21:43:10 (GMT) |
commit | 2f6901b2a27d6f49b0ab1ac337f6fa23ca75c948 (patch) | |
tree | cc8ff2d54cfb0d929b37bfb3dac6ba40c8f1d024 | |
parent | c17cf55c878fb8a9ae63ef149b80c2dcf76c2c81 (diff) | |
download | linux-fsl-qoriq-2f6901b2a27d6f49b0ab1ac337f6fa23ca75c948.tar.xz |
dpaa-eth: Alloc NR_CPUS TX frame queues
No matter the number of TX frame queues specified in the device
tree we allocate one frame queue for each CPU.
For a number of frame queues smaller than the number of CPUs,
certain queues will be allocated to more than one CPU.
For a larger number of frame queues than available CPUs, a
number of NR_CPUS frame queues will be used only.
Signed-off-by: Cristian Sovaiala <cristian.sovaiala@freescale.com>
Signed-off-by: Madalin Bucur <madalin.bucur@freescale.com>
Change-Id: Ie00aae47d03ffed7d3e0b5e449557ab4c01e3288
Reviewed-on: http://git.am.freescale.net:8181/1535
Reviewed-by: Hamciuc Bogdan-BHAMCIU1 <bogdan.hamciuc@freescale.com>
Reviewed-by: Sovaiala Cristian-Constantin-B39531 <Cristian.Sovaiala@freescale.com>
Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
Tested-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
-rw-r--r-- | drivers/net/ethernet/freescale/dpa/dpaa_eth.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth.c index 268fc09..a4469d3 100644 --- a/drivers/net/ethernet/freescale/dpa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth.c @@ -3708,18 +3708,17 @@ static void dpa_setup_egress(struct dpa_priv_s *priv, struct fm_port *port) { struct list_head *ptr = &fq->list; + struct dpa_fq *iter; int i = 0; while (true) { - struct dpa_fq *iter = list_entry(ptr, struct dpa_fq, list); + iter = list_entry(ptr, struct dpa_fq, list); if (priv->shared) iter->fq_base = shared_egress_fq; else iter->fq_base = private_egress_fq; iter->net_dev = priv->net_dev; - priv->egress_fqs[i++] = &iter->fq_base; - if (port) { iter->flags = QMAN_FQ_FLAG_TO_DCPORTAL; iter->channel = fm_get_tx_port_channel(port); @@ -3731,6 +3730,17 @@ static void dpa_setup_egress(struct dpa_priv_s *priv, ptr = ptr->next; } + + /* Allocate frame queues to all available CPUs no matter the number of + * queues specified in device tree. + */ + for (i = 0; i < DPAA_ETH_TX_QUEUES; i++) { + iter = list_entry(ptr, struct dpa_fq, list); + priv->egress_fqs[i] = &iter->fq_base; + + if (list_is_last(ptr, head)) + ptr = &fq->list; + } } #ifdef CONFIG_DPA_TX_RECYCLE |