This patch was created on 8.09.2 but it also applies to Backfire
I found that I couldn't unload the broadcom wl driver, wlcompat didn't correctly release/decrement the device pointer,
This patch cleans that up
I wanted to be able to remove/install the wl driver so that I could get out of monitor mode without rebooting
Signed-off-by: Chris Martin <chris@martin.cc>
git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@25671
3c298f89-4303-0410-b956-
a3cf2f4a3e73
#
-# Copyright (C) 2006-2010 OpenWrt.org
+# Copyright (C) 2006-2011 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=broadcom-wl
PKG_VERSION:=4.150.10.5.3
-PKG_RELEASE:=7
+PKG_RELEASE:=8
WLC_VERSION:=0.2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
#include <wlioctl.h>
char buf[WLC_IOCTL_MAXLEN];
-static struct net_device *dev;
+static struct net_device *dev = NULL;
#ifndef DEBUG
static int random = 1;
#endif
int found = 0, i;
char devname[4] = "wl0";
+ /* calling dev_get_by_name() will inc the open_counter in dev
+ * we must put it back with dev_put() when we are finished to dec the counter */
while (!found && (dev = dev_get_by_name(devname))) {
if ((wl_ioctl(dev, WLC_GET_MAGIC, &i, sizeof(i)) == 0) && (i == WLC_IOCTL_MAGIC))
found = 1;
- devname[2]++;
+ else {
+ dev_put(dev);
+ devname[2]++;
+ }
}
dev->wireless_handlers = NULL;
#endif
dev->do_ioctl = old_ioctl;
+
+ dev_put(dev);
+
return;
}