summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCristian Sovaiala <cristian.sovaiala@freescale.com>2013-04-03 15:32:27 (GMT)
committerFleming Andrew-AFLEMING <AFLEMING@freescale.com>2013-04-18 21:43:10 (GMT)
commit2f6901b2a27d6f49b0ab1ac337f6fa23ca75c948 (patch)
treecc8ff2d54cfb0d929b37bfb3dac6ba40c8f1d024
parentc17cf55c878fb8a9ae63ef149b80c2dcf76c2c81 (diff)
downloadlinux-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.c16
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