[PATCH 2/2] netdev/fec: fix performance impact from mdio poll operation
Eric Miao
eric.miao at canonical.com
Tue Apr 13 22:58:46 UTC 2010
On Wed, Apr 14, 2010 at 6:57 AM, Eric Miao <eric.miao at canonical.com> wrote:
> On Wed, Apr 14, 2010 at 5:37 AM, Bryan Wu <bryan.wu at canonical.com> wrote:
>> On 04/13/2010 12:09 PM, Andy Whitcroft wrote:
>>> On Thu, Apr 08, 2010 at 02:44:59PM +0800, Bryan Wu wrote:
>>>> BugLink: http://bugs.launchpad.net/bugs/546649
>>>> BugLink: http://bugs.launchpad.net/bugs/457878
>>>>
>>>> After introducing phylib supporting, users experienced performace drop. That is
>>>> because of the mdio polling operation of phylib. Use msleep to replace the busy
>>>> waiting cpu_relax() and remove the warning message.
>>>>
>>>> Signed-off-by: Bryan Wu<bryan.wu at canonical.com>
>>>> ---
>>>> drivers/net/fec.c | 45 +++++++++++++++++++++------------------------
>>>> 1 files changed, 21 insertions(+), 24 deletions(-)
>>>>
>>>> diff --git a/drivers/net/fec.c b/drivers/net/fec.c
>>>> index 53240d3..2280373 100644
>>>> --- a/drivers/net/fec.c
>>>> +++ b/drivers/net/fec.c
>>>> @@ -216,7 +216,7 @@ static void fec_stop(struct net_device *dev);
>>>> #define FEC_MMFR_TA (2<< 16)
>>>> #define FEC_MMFR_DATA(v) (v& 0xffff)
>>>>
>>>> -#define FEC_MII_TIMEOUT 10000
>>>> +#define FEC_MII_TIMEOUT 10
>>>>
>>>> /* Transmitter timeout */
>>>> #define TX_TIMEOUT (2 * HZ)
>>>> @@ -624,13 +624,29 @@ spin_unlock:
>>>> /*
>>>> * NOTE: a MII transaction is during around 25 us, so polling it...
>>>> */
>>>> -static int fec_enet_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
>>>> +static int fec_enet_mdio_poll(struct fec_enet_private *fep)
>>>> {
>>>> - struct fec_enet_private *fep = bus->priv;
>>>> int timeout = FEC_MII_TIMEOUT;
>>>>
>>>> fep->mii_timeout = 0;
>>>>
>>>> + /* wait for end of transfer */
>>>> + while (!(readl(fep->hwp + FEC_IEVENT)& FEC_ENET_MII)) {
>>>> + msleep(1);
>>>> + if (timeout--< 0) {
>>>> + fep->mii_timeout = 1;
>>>> + break;
>>>> + }
>>>> + }
>>>> +
>
> This is ugly, I'd suggest wait_event_timeout(), though the response
> time will be worse instead.
>
> msleep(1) is almost equivalent on a system with HZ == 100.
>
Typo, sorry. I mean:
msleep(1) is almost equivalent to msleep(10) on a system with HZ == 100. Won't
be too much response improvement.
More information about the kernel-team
mailing list