From 0631793701ed5806adf1ed9d6c0afe9c41cdfc0b Mon Sep 17 00:00:00 2001 From: Greg Goldman Date: Tue, 29 Jun 2010 13:29:49 -0700 Subject: [PATCH] network: wireless: bcm4329: Fix BUS DOWN in IOCTL Signed-off-by: Dmitry Shmidt --- drivers/net/wireless/bcm4329/dhd_cdc.c | 5 ++--- drivers/net/wireless/bcm4329/dhd_linux.c | 6 ++++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/bcm4329/dhd_cdc.c b/drivers/net/wireless/bcm4329/dhd_cdc.c index 464aaf5033dd..c95ca9b3471f 100644 --- a/drivers/net/wireless/bcm4329/dhd_cdc.c +++ b/drivers/net/wireless/bcm4329/dhd_cdc.c @@ -525,7 +525,8 @@ dhd_prot_init(dhd_pub_t *dhd) strcpy(buf, "cur_etheraddr"); ret = dhdcdc_query_ioctl(dhd, 0, WLC_GET_VAR, buf, sizeof(buf)); if (ret < 0) { - goto fail; + dhd_os_proto_unblock(dhd); + return ret; } memcpy(dhd->mac.octet, buf, ETHER_ADDR_LEN); @@ -538,8 +539,6 @@ dhd_prot_init(dhd_pub_t *dhd) /* Always assumes wl for now */ dhd->iswl = TRUE; -fail: - return ret; } diff --git a/drivers/net/wireless/bcm4329/dhd_linux.c b/drivers/net/wireless/bcm4329/dhd_linux.c index da2cb640228d..27b1f55de3d1 100644 --- a/drivers/net/wireless/bcm4329/dhd_linux.c +++ b/drivers/net/wireless/bcm4329/dhd_linux.c @@ -1764,11 +1764,13 @@ dhd_ioctl_entry(struct net_device *net, struct ifreq *ifr, int cmd) bcmerror = dhd_prot_ioctl(&dhd->pub, ifidx, (wl_ioctl_t *)&ioc, buf, buflen); - if (bcmerror == -ETIMEDOUT) { +done: + if ((bcmerror == -ETIMEDOUT) || ((dhd->pub.busstate == DHD_BUS_DOWN) && + (!dhd->pub.dongle_reset))) { DHD_ERROR(("%s: Event HANG send up\n", __FUNCTION__)); wl_iw_send_priv_event(net, "HANG"); } -done: + if (!bcmerror && buf && ioc.buf) { if (copy_to_user(ioc.buf, buf, buflen)) bcmerror = -EFAULT; -- 2.34.1