drivers: net: xgene: fix ununiform latency across queues
This patch addresses ununiform latency across queues by adding more queues to match with, upto number of CPU cores. Also, number of interrupts are increased and the channel numbers are reordered. Signed-off-by: Iyappan Subramanian <isubramanian@apm.com> Tested-by: Toan Le <toanle@apm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
46a22d29a5
commit
1b090a4839
2 changed files with 27 additions and 11 deletions
|
@ -1234,6 +1234,13 @@ static int xgene_enet_get_irqs(struct xgene_enet_pdata *pdata)
|
|||
for (i = 0; i < max_irqs; i++) {
|
||||
ret = platform_get_irq(pdev, i);
|
||||
if (ret <= 0) {
|
||||
if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) {
|
||||
max_irqs = i;
|
||||
pdata->rxq_cnt = max_irqs / 2;
|
||||
pdata->txq_cnt = max_irqs / 2;
|
||||
pdata->cq_cnt = max_irqs / 2;
|
||||
break;
|
||||
}
|
||||
dev_err(dev, "Unable to get ENET IRQ\n");
|
||||
ret = ret ? : -ENXIO;
|
||||
return ret;
|
||||
|
@ -1437,19 +1444,28 @@ static void xgene_enet_setup_ops(struct xgene_enet_pdata *pdata)
|
|||
pdata->port_ops = &xgene_xgport_ops;
|
||||
pdata->cle_ops = &xgene_cle3in_ops;
|
||||
pdata->rm = RM0;
|
||||
pdata->rxq_cnt = XGENE_NUM_RX_RING;
|
||||
pdata->txq_cnt = XGENE_NUM_TX_RING;
|
||||
pdata->cq_cnt = XGENE_NUM_TXC_RING;
|
||||
if (!pdata->rxq_cnt) {
|
||||
pdata->rxq_cnt = XGENE_NUM_RX_RING;
|
||||
pdata->txq_cnt = XGENE_NUM_TX_RING;
|
||||
pdata->cq_cnt = XGENE_NUM_TXC_RING;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (pdata->enet_id == XGENE_ENET1) {
|
||||
switch (pdata->port_id) {
|
||||
case 0:
|
||||
pdata->cpu_bufnum = START_CPU_BUFNUM_0;
|
||||
pdata->eth_bufnum = START_ETH_BUFNUM_0;
|
||||
pdata->bp_bufnum = START_BP_BUFNUM_0;
|
||||
pdata->ring_num = START_RING_NUM_0;
|
||||
if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) {
|
||||
pdata->cpu_bufnum = X2_START_CPU_BUFNUM_0;
|
||||
pdata->eth_bufnum = X2_START_ETH_BUFNUM_0;
|
||||
pdata->bp_bufnum = X2_START_BP_BUFNUM_0;
|
||||
pdata->ring_num = START_RING_NUM_0;
|
||||
} else {
|
||||
pdata->cpu_bufnum = START_CPU_BUFNUM_0;
|
||||
pdata->eth_bufnum = START_ETH_BUFNUM_0;
|
||||
pdata->bp_bufnum = START_BP_BUFNUM_0;
|
||||
pdata->ring_num = START_RING_NUM_0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) {
|
||||
|
|
|
@ -49,10 +49,10 @@
|
|||
#define XGENE_ENET_MSS 1448
|
||||
#define XGENE_MIN_ENET_FRAME_SIZE 60
|
||||
|
||||
#define XGENE_MAX_ENET_IRQ 8
|
||||
#define XGENE_NUM_RX_RING 4
|
||||
#define XGENE_NUM_TX_RING 4
|
||||
#define XGENE_NUM_TXC_RING 4
|
||||
#define XGENE_MAX_ENET_IRQ 16
|
||||
#define XGENE_NUM_RX_RING 8
|
||||
#define XGENE_NUM_TX_RING 8
|
||||
#define XGENE_NUM_TXC_RING 8
|
||||
|
||||
#define START_CPU_BUFNUM_0 0
|
||||
#define START_ETH_BUFNUM_0 2
|
||||
|
|
Loading…
Reference in a new issue