[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20080506161720.6475e5d4@extreme>
Date: Tue, 6 May 2008 16:17:20 -0700
From: Stephen Hemminger <shemminger@...ux-foundation.org>
To: Ben Hutchings <bhutchings@...arflare.com>
Cc: Jeff Garzik <jgarzik@...ox.com>,
David Miller <davem@...emloft.net>, netdev@...r.kernel.org
Subject: Re: [PATCH 3/4] sky2: Hold RTNL while calling dev_close()
On Tue, 6 May 2008 19:39:58 +0100
Ben Hutchings <bhutchings@...arflare.com> wrote:
> dev_close() must be called holding the RTNL. Compile-tested only.
>
> Signed-off-by: Ben Hutchings <bhutchings@...arflare.com>
> ---
> drivers/net/sky2.c | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
> index f226bca..9b046dd 100644
> --- a/drivers/net/sky2.c
> +++ b/drivers/net/sky2.c
> @@ -2952,7 +2952,9 @@ static void sky2_restart(struct work_struct *work)
> if (err) {
> printk(KERN_INFO PFX "%s: could not restart %d\n",
> dev->name, err);
> + rtnl_lock();
> dev_close(dev);
> + rtnl_unlock();
> }
> }
> }
>
No this is bogus. The rtnl mutex is already held.
Look a little wider
static void sky2_restart(struct work_struct *work)
{
struct sky2_hw *hw = container_of(work, struct sky2_hw, restart_work);
struct net_device *dev;
int i, err;
rtnl_lock();
for (i = 0; i < hw->ports; i++) {
dev = hw->dev[i];
if (netif_running(dev))
sky2_down(dev);
}
napi_disable(&hw->napi);
sky2_write32(hw, B0_IMSK, 0);
sky2_reset(hw);
sky2_write32(hw, B0_IMSK, Y2_IS_BASE);
napi_enable(&hw->napi);
for (i = 0; i < hw->ports; i++) {
dev = hw->dev[i];
if (netif_running(dev)) {
err = sky2_up(dev);
if (err) {
printk(KERN_INFO PFX "%s: could not restart %d\n",
dev->name, err);
dev_close(dev);
}
}
}
rtnl_unlock();
}
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists