[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20170622033505.GA4813@lunn.ch>
Date: Thu, 22 Jun 2017 05:35:05 +0200
From: Andrew Lunn <andrew@...n.ch>
To: l00371289 <linyunsheng@...wei.com>
Cc: Florian Fainelli <f.fainelli@...il.com>, davem@...emloft.net,
huangdaode@...ilicon.com, xuwei5@...ilicon.com,
liguozhu@...ilicon.com, Yisen.Zhuang@...wei.com,
gabriele.paoloni@...wei.com, john.garry@...wei.com,
linuxarm@...wei.com, salil.mehta@...wei.com, lipeng321@...wei.com,
yankejian@...wei.com, tremyfr@...il.com, xieqianqian@...wei.com,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH NET] net/hns:bugfix of ethtool -t phy self_test
> I don't think returning to user space is an option, because it mean
> ethtool phy self test would fail because if availability of some software
> resoure, which is not some application would expect. here is what I can
> think of:
>
> driver/net/ethernet/hisilicon/hns/hns_ethtool.c
> int phy_loopback_selftest(struct phy_device *dev)
> {
> int err;
>
> mutex_lock(dev->mutex);
>
> if (dev->drv->loopback)
> err = dev->drv->loopback(dev, 1);
>
> if (err)
> goto out;
>
> /* mac driver do the test*/
> .................
>
>
> if (dev->drv->loopback)
> err = dev->drv->loopback(dev, 0);
>
> if (err)
> goto out;
>
> out:
> mutex_unlock(dev->mutex);
> return err;
> }
I don't think you need a mutex here. dev_ioctl.c:
case SIOCETHTOOL:
dev_load(net, ifr.ifr_name);
rtnl_lock();
ret = dev_ethtool(net, &ifr);
rtnl_unlock();
So all ethtool operations are protected by the rtnl. You cannot have
two tests running at once.
> One question I can think of is that, how do we ensure mac driver enable and
> disable phy loopback in pair, enable loopback after dev->mutex is taken,
> disable loopback before dev->mutex is released?
> I hope I am not missing something obvious, any suggestion and idea?
You cannot ensure this. But it would be a pretty obvious bug.
Andrew
Powered by blists - more mailing lists