All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Hutchings <bhutchings@solarflare.com>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org, linux-net-drivers@solarflare.com
Subject: [PATCH 32/33] sfc: Fix synchronisation of efx_mtd_{probe,rename,remove}
Date: Fri, 12 Dec 2008 13:00:51 +0000	[thread overview]
Message-ID: <20081212130050.GF10372@solarflare.com> (raw)
In-Reply-To: <cover.1229085672.git.bhutchings@solarflare.com>

Currently efx_mtd_rename() can race with the probe() and remove()
functions.

Move probe() before device registration and remove() after
unregistration.  Move initialisation/update of all names based on the
netdev name into a new function and call it under the RTNL immediately
after registration.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
---
 drivers/net/sfc/efx.c |   33 ++++++++++++++++++---------------
 1 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/drivers/net/sfc/efx.c b/drivers/net/sfc/efx.c
index 0d57c6d..8d9d0b4 100644
--- a/drivers/net/sfc/efx.c
+++ b/drivers/net/sfc/efx.c
@@ -1517,18 +1517,21 @@ static const struct net_device_ops efx_netdev_ops = {
 #endif
 };
 
+static void efx_update_name(struct efx_nic *efx)
+{
+	strcpy(efx->name, efx->net_dev->name);
+	efx_mtd_rename(efx);
+	efx_set_channel_names(efx);
+}
+
 static int efx_netdev_event(struct notifier_block *this,
 			    unsigned long event, void *ptr)
 {
 	struct net_device *net_dev = ptr;
 
-	if (net_dev->netdev_ops == &efx_netdev_ops && event == NETDEV_CHANGENAME) {
-		struct efx_nic *efx = netdev_priv(net_dev);
-
-		strcpy(efx->name, net_dev->name);
-		efx_mtd_rename(efx);
-		efx_set_channel_names(efx);
-	}
+	if (net_dev->netdev_ops == &efx_netdev_ops &&
+	    event == NETDEV_CHANGENAME)
+		efx_update_name(netdev_priv(net_dev));
 
 	return NOTIFY_DONE;
 }
@@ -1568,8 +1571,10 @@ static int efx_register_netdev(struct efx_nic *efx)
 		EFX_ERR(efx, "could not register net dev\n");
 		return rc;
 	}
-	strcpy(efx->name, net_dev->name);
-	efx_set_channel_names(efx);
+
+	rtnl_lock();
+	efx_update_name(efx);
+	rtnl_unlock();
 
 	rc = device_create_file(&efx->pci_dev->dev, &dev_attr_phy_type);
 	if (rc) {
@@ -1981,8 +1986,6 @@ static void efx_pci_remove(struct pci_dev *pci_dev)
 	if (!efx)
 		return;
 
-	efx_mtd_remove(efx);
-
 	/* Mark the NIC as fini, then stop the interface */
 	rtnl_lock();
 	efx->state = STATE_FINI;
@@ -1996,6 +1999,8 @@ static void efx_pci_remove(struct pci_dev *pci_dev)
 
 	efx_unregister_netdev(efx);
 
+	efx_mtd_remove(efx);
+
 	/* Wait for any scheduled resets to complete. No more will be
 	 * scheduled from this point because efx_stop_all() has been
 	 * called, we are no longer registered with driverlink, and
@@ -2149,17 +2154,15 @@ static int __devinit efx_pci_probe(struct pci_dev *pci_dev,
 	/* Switch to the running state before we expose the device to
 	 * the OS.  This is to ensure that the initial gathering of
 	 * MAC stats succeeds. */
-	rtnl_lock();
 	efx->state = STATE_RUNNING;
-	rtnl_unlock();
+
+	efx_mtd_probe(efx); /* allowed to fail */
 
 	rc = efx_register_netdev(efx);
 	if (rc)
 		goto fail5;
 
 	EFX_LOG(efx, "initialisation successful\n");
-
-	efx_mtd_probe(efx); /* allowed to fail */
 	return 0;
 
  fail5:
-- 
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.

  parent reply	other threads:[~2008-12-12 13:00 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <cover.1229085672.git.bhutchings@solarflare.com>
2008-12-12 12:46 ` [PATCH 00/33] sfc version 2.3 Ben Hutchings
2008-12-12 12:48   ` [PATCH 01/33] sfc: Board support fixes Ben Hutchings
2008-12-13  5:29     ` David Miller
2008-12-12 12:48   ` [PATCH 02/33] sfc: Change SPI lengths to type size_t Ben Hutchings
2008-12-13  5:30     ` David Miller
2008-12-13  5:53     ` David Miller
2008-12-13  6:30       ` Ben Hutchings
2008-12-12 12:49   ` [PATCH 03/33] sfc: Do not use pci_disable_device() to disable bus mastering Ben Hutchings
2008-12-13  5:31     ` David Miller
2008-12-13  6:27       ` Ben Hutchings
2008-12-12 12:49   ` [PATCH 04/33] sfc: Remove unneeded register write Ben Hutchings
2008-12-13  5:31     ` David Miller
2008-12-12 12:49   ` [PATCH 05/33] sfc: Correct interpretation of second param to ethtool phys_id() Ben Hutchings
2008-12-13  5:32     ` David Miller
2008-12-12 12:50   ` [PATCH 06/33] sfc: Make reset_workqueue driver-global rather than per-NIC Ben Hutchings
2008-12-13  5:33     ` David Miller
2008-12-12 12:51   ` [PATCH 07/33] sfc: Clean up waits for flash/EEPROM operations Ben Hutchings
2008-12-13  5:33     ` David Miller
2008-12-12 12:51   ` [PATCH 08/33] sfc: Work around unreliable strap pins Ben Hutchings
2008-12-13  5:34     ` David Miller
2008-12-12 12:51   ` [PATCH 09/33] sfc: Restore phy_flash_cfg module parameter Ben Hutchings
2008-12-13  5:35     ` David Miller
2008-12-12 12:53   ` [PATCH 13/33] sfc: Don't count RX checksum errors during loopback self-test Ben Hutchings
2008-12-13  5:42     ` David Miller
2008-12-12 12:53   ` [PATCH 14/33] sfc: Remove MII extension cruft Ben Hutchings
2008-12-13  5:43     ` David Miller
2008-12-12 12:53   ` [PATCH 15/33] sfc: Add support for MMDs numbered >15 Ben Hutchings
2008-12-13  5:44     ` David Miller
2008-12-12 12:54   ` [PATCH 16/33] sfc: Add phy_type device attribute Ben Hutchings
2008-12-13  5:47     ` David Miller
2008-12-12 12:54   ` [PATCH 17/33] sfc: Clean up board identification Ben Hutchings
2008-12-13  5:48     ` David Miller
2008-12-12 12:54   ` [PATCH 18/33] sfc: Clean up MDIO flag setting Ben Hutchings
2008-12-13  5:49     ` David Miller
2008-12-12 12:54   ` [PATCH 19/33] sfc: Add support for sub-10G speeds Ben Hutchings
2008-12-13  5:50     ` David Miller
2008-12-12 12:55   ` [PATCH 20/33] sfc: Implement auto-negotiation Ben Hutchings
2008-12-13  5:50     ` David Miller
2008-12-12 12:55   ` [PATCH 21/33] sfc: Rework MAC, PHY and board event handling Ben Hutchings
2008-12-13  5:59     ` David Miller
2008-12-12 12:56   ` [PATCH 22/33] sfc: Add support for Solarflare 10Xpress SFT9001 Ben Hutchings
2008-12-13  6:00     ` David Miller
2008-12-12 12:56   ` [PATCH 23/33] sfc: Add support for SFN4111T Ben Hutchings
2008-12-13  6:01     ` David Miller
2008-12-12 12:56   ` [PATCH 25/33] sfc: Generate unique names for per-NIC workqueues Ben Hutchings
2008-12-13  6:04     ` David Miller
2008-12-13  6:23       ` Ben Hutchings
2008-12-13  6:29         ` David Miller
2008-12-13 14:01           ` Ben Hutchings
2008-12-12 12:57   ` [PATCH 26/33] sfc: Remove leading spaces Ben Hutchings
2008-12-13  6:05     ` David Miller
2008-12-12 12:57   ` [PATCH 27/33] sfc: Specify a meaningful component for loopback RX-side and PHY tests Ben Hutchings
2008-12-13  6:05     ` David Miller
2008-12-12 12:59   ` [PATCH 28/33] sfc: Use mutex_lock_interruptible() for ethtool EEPROM access Ben Hutchings
2008-12-13  6:06     ` David Miller
2008-12-12 12:59   ` [PATCH 29/33] sfc: Use model numbers for PHY type names Ben Hutchings
2008-12-13  6:07     ` David Miller
2008-12-12 13:00   ` [PATCH 30/33] sfc: Treat probe as unsuccessful if it scheduled a reset Ben Hutchings
2008-12-13  6:08     ` David Miller
2008-12-12 13:00   ` [PATCH 31/33] sfc: Use kzalloc() to ensure struct efx_spi_device is fully initialised Ben Hutchings
2008-12-13  6:09     ` David Miller
2008-12-12 12:52 ` [PATCH 10/33] sfc: Add option to use a separate channel for TX completions Ben Hutchings
2008-12-13  5:36   ` David Miller
2008-12-12 12:52 ` [PATCH 11/33] sfc: Provide hints to irqbalance daemon Ben Hutchings
2008-12-13  5:37   ` David Miller
2008-12-12 12:52 ` [PATCH 12/33] sfc: Abbreviate self-test names so they are not truncated Ben Hutchings
2008-12-13  5:42   ` David Miller
2008-12-12 12:56 ` [PATCH 24/33] sfc: Fix format arguments for warning about MSI-X allocation Ben Hutchings
2008-12-12 20:34   ` Ben Hutchings
2008-12-13  5:25     ` David Miller
2008-12-12 13:00 ` Ben Hutchings [this message]
2008-12-13  6:09   ` [PATCH 32/33] sfc: Fix synchronisation of efx_mtd_{probe,rename,remove} David Miller
2008-12-12 13:01 ` [PATCH 33/33] sfc: Version 2.3 Ben Hutchings
2008-12-13  6:10   ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20081212130050.GF10372@solarflare.com \
    --to=bhutchings@solarflare.com \
    --cc=davem@davemloft.net \
    --cc=linux-net-drivers@solarflare.com \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.