From patchwork Fri Dec 12 12:59:23 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [28/33] sfc: Use mutex_lock_interruptible() for ethtool EEPROM access Date: Fri, 12 Dec 2008 02:59:23 -0000 From: Ben Hutchings X-Patchwork-Id: 13732 Message-Id: <20081212125922.GB10372@solarflare.com> To: David Miller Cc: netdev@vger.kernel.org, linux-net-drivers@solarflare.com ethtool must contend with the MTD driver for the SPI bus lock, which may carry out long operations such as flash erase. Allow it to be interrupted while waiting. Signed-off-by: Ben Hutchings --- drivers/net/sfc/ethtool.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/net/sfc/ethtool.c b/drivers/net/sfc/ethtool.c index eab3e5c..3aaece6 100644 --- a/drivers/net/sfc/ethtool.c +++ b/drivers/net/sfc/ethtool.c @@ -568,10 +568,13 @@ static int efx_ethtool_get_eeprom(struct net_device *net_dev, size_t len; int rc; - mutex_lock(&efx->spi_lock); + rc = mutex_lock_interruptible(&efx->spi_lock); + if (rc) + return rc; rc = falcon_spi_read(spi, eeprom->offset + EFX_EEPROM_BOOTCONFIG_START, eeprom->len, &len, buf); mutex_unlock(&efx->spi_lock); + eeprom->magic = EFX_ETHTOOL_EEPROM_MAGIC; eeprom->len = len; return rc; @@ -588,10 +591,13 @@ static int efx_ethtool_set_eeprom(struct net_device *net_dev, if (eeprom->magic != EFX_ETHTOOL_EEPROM_MAGIC) return -EINVAL; - mutex_lock(&efx->spi_lock); + rc = mutex_lock_interruptible(&efx->spi_lock); + if (rc) + return rc; rc = falcon_spi_write(spi, eeprom->offset + EFX_EEPROM_BOOTCONFIG_START, eeprom->len, &len, buf); mutex_unlock(&efx->spi_lock); + eeprom->len = len; return rc; }