diff for duplicates of <49CA39EA.6020208@cosmosbay.com> diff --git a/a/1.txt b/N1/1.txt index c6c9b23..dbe7e90 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,4 +1,4 @@ -Joakim Tjernlund a =E9crit : +Joakim Tjernlund a écrit : >>From 1c2f23b1f37f4818c0fd0217b93eb38ab6564840 Mon Sep 17 00:00:00 2001 > From: Joakim Tjernlund <Joakim.Tjernlund@transmode.se> > Date: Tue, 24 Mar 2009 10:19:27 +0100 @@ -6,48 +6,45 @@ Joakim Tjernlund a =E9crit : > Also increase NAPI weight somewhat. > This will make the system alot more responsive while > ping flooding the ucc_geth ethernet interaface. ->=20 ->=20 +> +> > Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se> > --- > drivers/net/ucc_geth.c | 30 +++++++++++------------------- > drivers/net/ucc_geth.h | 2 +- > 2 files changed, 12 insertions(+), 20 deletions(-) ->=20 +> > diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c > index 097aed8..7d5d110 100644 > --- a/drivers/net/ucc_geth.c > +++ b/drivers/net/ucc_geth.c -> @@ -3214,7 +3214,7 @@ static int ucc_geth_tx(struct net_device *dev, u8= - txQ) +> @@ -3214,7 +3214,7 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ) > dev->stats.tx_packets++; -> =20 +> > /* Free the sk buffer associated with this TxBD */ > - dev_kfree_skb_irq(ugeth-> > + dev_kfree_skb(ugeth-> > tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]]); -> ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]] =3D NULL; -> ugeth->skb_dirtytx[txQ] =3D -> @@ -3248,9 +3248,16 @@ static int ucc_geth_poll(struct napi_struct *nap= -i, int budget) -> for (i =3D 0; i < ug_info->numQueuesRx; i++) -> howmany +=3D ucc_geth_rx(ugeth, i, budget - howmany); -> =20 +> ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]] = NULL; +> ugeth->skb_dirtytx[txQ] = +> @@ -3248,9 +3248,16 @@ static int ucc_geth_poll(struct napi_struct *napi, int budget) +> for (i = 0; i < ug_info->numQueuesRx; i++) +> howmany += ucc_geth_rx(ugeth, i, budget - howmany); +> Cant you test (ucce & UCCE_TX_EVENTS) or something here to avoid taking lock and checking queues if not necessary ? > + /* Tx event processing */ > + spin_lock(&ugeth->lock); -> + for (i =3D 0; i < ug_info->numQueuesTx; i++) { +> + for (i = 0; i < ug_info->numQueuesTx; i++) { > + ucc_geth_tx(ugeth->dev, i); > + } > + spin_unlock(&ugeth->lock); > + Why tx completions dont change "howmany" ? -It seems strange you changed UCC_GETH_DEV_WEIGHT if not taking into accou= -nt tx event above... +It seems strange you changed UCC_GETH_DEV_WEIGHT if not taking into account tx event above... > if (howmany < budget) { @@ -55,42 +52,40 @@ nt tx event above... > - setbits32(ugeth->uccf->p_uccm, UCCE_RX_EVENTS); > + setbits32(ugeth->uccf->p_uccm, UCCE_RX_EVENTS | UCCE_TX_EVENTS); > } -> =20 +> > return howmany; -> @@ -3264,8 +3271,6 @@ static irqreturn_t ucc_geth_irq_handler(int irq, = -void *info) +> @@ -3264,8 +3271,6 @@ static irqreturn_t ucc_geth_irq_handler(int irq, void *info) > struct ucc_geth_info *ug_info; > register u32 ucce; > register u32 uccm; > - register u32 tx_mask; > - u8 i; -> =20 +> > ugeth_vdbg("%s: IN", __func__); -> =20 -> @@ -3279,27 +3284,14 @@ static irqreturn_t ucc_geth_irq_handler(int irq= -, void *info) +> +> @@ -3279,27 +3284,14 @@ static irqreturn_t ucc_geth_irq_handler(int irq, void *info) > out_be32(uccf->p_ucce, ucce); -> =20 +> > /* check for receive events that require processing */ > - if (ucce & UCCE_RX_EVENTS) { > + if (ucce & (UCCE_RX_EVENTS | UCCE_TX_EVENTS)) { > if (netif_rx_schedule_prep(&ugeth->napi)) { -> - uccm &=3D ~UCCE_RX_EVENTS; -> + uccm &=3D ~(UCCE_RX_EVENTS | UCCE_TX_EVENTS); +> - uccm &= ~UCCE_RX_EVENTS; +> + uccm &= ~(UCCE_RX_EVENTS | UCCE_TX_EVENTS); > out_be32(uccf->p_uccm, uccm); > __netif_rx_schedule(&ugeth->napi); > } > } -> =20 +> > - /* Tx event processing */ > - if (ucce & UCCE_TX_EVENTS) { > - spin_lock(&ugeth->lock); -> - tx_mask =3D UCC_GETH_UCCE_TXB0; -> - for (i =3D 0; i < ug_info->numQueuesTx; i++) { +> - tx_mask = UCC_GETH_UCCE_TXB0; +> - for (i = 0; i < ug_info->numQueuesTx; i++) { > - if (ucce & tx_mask) > - ucc_geth_tx(dev, i); -> - ucce &=3D ~tx_mask; -> - tx_mask <<=3D 1; +> - ucce &= ~tx_mask; +> - tx_mask <<= 1; > - } > - spin_unlock(&ugeth->lock); > - } @@ -107,8 +102,7 @@ void *info) > #define TX_BD_RING_LEN 0x10 > #define RX_BD_RING_LEN 0x10 > -#define UCC_GETH_DEV_WEIGHT TX_BD_RING_LEN -> +#define UCC_GETH_DEV_WEIGHT (RX_BD_RING_LEN+TX_BD_= -RING_LEN/2) -> =20 +> +#define UCC_GETH_DEV_WEIGHT (RX_BD_RING_LEN+TX_BD_RING_LEN/2) +> > #define TX_RING_MOD_MASK(size) (size-1) > #define RX_RING_MOD_MASK(size) (size-1) diff --git a/a/content_digest b/N1/content_digest index d9d1282..5014957 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -4,11 +4,12 @@ "Date\0Wed, 25 Mar 2009 15:04:26 +0100\0" "To\0joakim.tjernlund@transmode.se\0" "Cc\0Netdev <netdev@vger.kernel.org>" + avorontsov@ru.mvista.com leoli@freescale.com " 'linuxppc-dev Development' <linuxppc-dev@ozlabs.org>\0" "\00:1\0" "b\0" - "Joakim Tjernlund a =E9crit :\n" + "Joakim Tjernlund a \303\251crit :\n" ">>From 1c2f23b1f37f4818c0fd0217b93eb38ab6564840 Mon Sep 17 00:00:00 2001\n" "> From: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>\n" "> Date: Tue, 24 Mar 2009 10:19:27 +0100\n" @@ -16,48 +17,45 @@ "> Also increase NAPI weight somewhat.\n" "> This will make the system alot more responsive while\n" "> ping flooding the ucc_geth ethernet interaface.\n" - ">=20\n" - ">=20\n" + "> \n" + "> \n" "> Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>\n" "> ---\n" "> drivers/net/ucc_geth.c | 30 +++++++++++-------------------\n" "> drivers/net/ucc_geth.h | 2 +-\n" "> 2 files changed, 12 insertions(+), 20 deletions(-)\n" - ">=20\n" + "> \n" "> diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c\n" "> index 097aed8..7d5d110 100644\n" "> --- a/drivers/net/ucc_geth.c\n" "> +++ b/drivers/net/ucc_geth.c\n" - "> @@ -3214,7 +3214,7 @@ static int ucc_geth_tx(struct net_device *dev, u8=\n" - " txQ)\n" + "> @@ -3214,7 +3214,7 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)\n" "> \t\tdev->stats.tx_packets++;\n" - "> =20\n" + "> \n" "> \t\t/* Free the sk buffer associated with this TxBD */\n" "> -\t\tdev_kfree_skb_irq(ugeth->\n" "> +\t\tdev_kfree_skb(ugeth->\n" "> \t\t\t\t tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]]);\n" - "> \t\tugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]] =3D NULL;\n" - "> \t\tugeth->skb_dirtytx[txQ] =3D\n" - "> @@ -3248,9 +3248,16 @@ static int ucc_geth_poll(struct napi_struct *nap=\n" - "i, int budget)\n" - "> \tfor (i =3D 0; i < ug_info->numQueuesRx; i++)\n" - "> \t\thowmany +=3D ucc_geth_rx(ugeth, i, budget - howmany);\n" - "> =20\n" + "> \t\tugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]] = NULL;\n" + "> \t\tugeth->skb_dirtytx[txQ] =\n" + "> @@ -3248,9 +3248,16 @@ static int ucc_geth_poll(struct napi_struct *napi, int budget)\n" + "> \tfor (i = 0; i < ug_info->numQueuesRx; i++)\n" + "> \t\thowmany += ucc_geth_rx(ugeth, i, budget - howmany);\n" + "> \n" "\n" "Cant you test (ucce & UCCE_TX_EVENTS) or something here to avoid\n" "taking lock and checking queues if not necessary ?\n" "\n" "> +\t/* Tx event processing */\n" "> +\tspin_lock(&ugeth->lock);\n" - "> +\tfor (i =3D 0; i < ug_info->numQueuesTx; i++) {\n" + "> +\tfor (i = 0; i < ug_info->numQueuesTx; i++) {\n" "> +\t\tucc_geth_tx(ugeth->dev, i);\n" "> +\t}\n" "> +\tspin_unlock(&ugeth->lock);\n" "> +\n" "\n" "Why tx completions dont change \"howmany\" ?\n" - "It seems strange you changed UCC_GETH_DEV_WEIGHT if not taking into accou=\n" - "nt tx event above...\n" + "It seems strange you changed UCC_GETH_DEV_WEIGHT if not taking into account tx event above...\n" "\n" "\n" "> \tif (howmany < budget) {\n" @@ -65,42 +63,40 @@ "> -\t\tsetbits32(ugeth->uccf->p_uccm, UCCE_RX_EVENTS);\n" "> +\t\tsetbits32(ugeth->uccf->p_uccm, UCCE_RX_EVENTS | UCCE_TX_EVENTS);\n" "> \t}\n" - "> =20\n" + "> \n" "> \treturn howmany;\n" - "> @@ -3264,8 +3271,6 @@ static irqreturn_t ucc_geth_irq_handler(int irq, =\n" - "void *info)\n" + "> @@ -3264,8 +3271,6 @@ static irqreturn_t ucc_geth_irq_handler(int irq, void *info)\n" "> \tstruct ucc_geth_info *ug_info;\n" "> \tregister u32 ucce;\n" "> \tregister u32 uccm;\n" "> -\tregister u32 tx_mask;\n" "> -\tu8 i;\n" - "> =20\n" + "> \n" "> \tugeth_vdbg(\"%s: IN\", __func__);\n" - "> =20\n" - "> @@ -3279,27 +3284,14 @@ static irqreturn_t ucc_geth_irq_handler(int irq=\n" - ", void *info)\n" + "> \n" + "> @@ -3279,27 +3284,14 @@ static irqreturn_t ucc_geth_irq_handler(int irq, void *info)\n" "> \tout_be32(uccf->p_ucce, ucce);\n" - "> =20\n" + "> \n" "> \t/* check for receive events that require processing */\n" "> -\tif (ucce & UCCE_RX_EVENTS) {\n" "> +\tif (ucce & (UCCE_RX_EVENTS | UCCE_TX_EVENTS)) {\n" "> \t\tif (netif_rx_schedule_prep(&ugeth->napi)) {\n" - "> -\t\t\tuccm &=3D ~UCCE_RX_EVENTS;\n" - "> +\t\t\tuccm &=3D ~(UCCE_RX_EVENTS | UCCE_TX_EVENTS);\n" + "> -\t\t\tuccm &= ~UCCE_RX_EVENTS;\n" + "> +\t\t\tuccm &= ~(UCCE_RX_EVENTS | UCCE_TX_EVENTS);\n" "> \t\t\tout_be32(uccf->p_uccm, uccm);\n" "> \t\t\t__netif_rx_schedule(&ugeth->napi);\n" "> \t\t}\n" "> \t}\n" - "> =20\n" + "> \n" "> -\t/* Tx event processing */\n" "> -\tif (ucce & UCCE_TX_EVENTS) {\n" "> -\t\tspin_lock(&ugeth->lock);\n" - "> -\t\ttx_mask =3D UCC_GETH_UCCE_TXB0;\n" - "> -\t\tfor (i =3D 0; i < ug_info->numQueuesTx; i++) {\n" + "> -\t\ttx_mask = UCC_GETH_UCCE_TXB0;\n" + "> -\t\tfor (i = 0; i < ug_info->numQueuesTx; i++) {\n" "> -\t\t\tif (ucce & tx_mask)\n" "> -\t\t\t\tucc_geth_tx(dev, i);\n" - "> -\t\t\tucce &=3D ~tx_mask;\n" - "> -\t\t\ttx_mask <<=3D 1;\n" + "> -\t\t\tucce &= ~tx_mask;\n" + "> -\t\t\ttx_mask <<= 1;\n" "> -\t\t}\n" "> -\t\tspin_unlock(&ugeth->lock);\n" "> -\t}\n" @@ -117,10 +113,9 @@ "> #define TX_BD_RING_LEN 0x10\n" "> #define RX_BD_RING_LEN 0x10\n" "> -#define UCC_GETH_DEV_WEIGHT TX_BD_RING_LEN\n" - "> +#define UCC_GETH_DEV_WEIGHT (RX_BD_RING_LEN+TX_BD_=\n" - "RING_LEN/2)\n" - "> =20\n" + "> +#define UCC_GETH_DEV_WEIGHT (RX_BD_RING_LEN+TX_BD_RING_LEN/2)\n" + "> \n" "> #define TX_RING_MOD_MASK(size) (size-1)\n" > #define RX_RING_MOD_MASK(size) (size-1) -c7290893d7987c70be4204789d6ba39f670c82f4644a7b20d2339739541e2439 +1c61805a291772a45ae2c4c882b18734fff94c0af514d9675ff34c71224344d8
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.