Search Linux Wireless

debug patches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



27 and 31 could be applied, but look at the other patches for how crap
the master device really is

johannes
---
 net/mac80211/ieee80211.c   |    1 +
 net/mac80211/ieee80211_i.h |   23 +++++++++++++++++++----
 2 files changed, 20 insertions(+), 4 deletions(-)

--- wireless-dev.orig/net/mac80211/ieee80211_i.h	2007-07-19 14:59:13.892204414 +0200
+++ wireless-dev/net/mac80211/ieee80211_i.h	2007-07-19 15:36:09.473857384 +0200
@@ -444,7 +444,25 @@ struct ieee80211_sub_if_data {
 #endif
 };
 
-#define IEEE80211_DEV_TO_SUB_IF(dev) netdev_priv(dev)
+/* for wiphy privid */
+extern void *mac80211_wiphy_privid;
+
+#define IEEE80211_DEV_TO_SUB_IF_NW(dev) netdev_priv(dev)
+
+#define IEEE80211_DEV_TO_SUB_IF(dev) ({					\
+	struct ieee80211_sub_if_data *__sdata;				\
+									\
+	__sdata = netdev_priv(dev);					\
+									\
+	if (dev->ieee80211_ptr && dev->ieee80211_ptr->wiphy &&		\
+	    dev->ieee80211_ptr->wiphy->privid == mac80211_wiphy_privid&&\
+	    __sdata->local->mdev == dev) {				\
+		printk(KERN_DEBUG "IEEE80211_DEV_TO_SUB_IF(mdev) usage\n");\
+		dump_stack();						\
+	}								\
+									\
+	__sdata;							\
+	})
 
 enum {
 	IEEE80211_RX_MSG	= 1,
@@ -916,7 +934,4 @@ void ieee80211_if_del_mgmt(struct ieee80
 void ieee80211_regdomain_init(void);
 void ieee80211_set_default_regdomain(struct ieee80211_hw_mode *mode);
 
-/* for wiphy privid */
-extern void *mac80211_wiphy_privid;
-
 #endif /* IEEE80211_I_H */
--- wireless-dev.orig/net/mac80211/ieee80211.c	2007-07-19 15:21:14.642204414 +0200
+++ wireless-dev/net/mac80211/ieee80211.c	2007-07-19 15:35:50.593857384 +0200
@@ -42,6 +42,7 @@
 
 /* privid for wiphys to determine whether they belong to us or not */
 void *mac80211_wiphy_privid = &mac80211_wiphy_privid;
+EXPORT_SYMBOL_GPL(mac80211_wiphy_privid);
 
 /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */
 /* Ethernet-II snap header (RFC1042 for most EtherTypes) */
---
 net/mac80211/ieee80211.c       |    2 +-
 net/mac80211/ieee80211_cfg.c   |    2 +-
 net/mac80211/ieee80211_i.h     |    2 +-
 net/mac80211/ieee80211_iface.c |    7 +------
 net/mac80211/ieee80211_ioctl.c |   11 +++++------
 5 files changed, 9 insertions(+), 15 deletions(-)

--- wireless-dev.orig/net/mac80211/ieee80211.c	2007-07-19 15:35:50.593857384 +0200
+++ wireless-dev/net/mac80211/ieee80211.c	2007-07-19 15:36:12.863857384 +0200
@@ -5183,7 +5183,7 @@ int ieee80211_register_hw(struct ieee802
 	ieee80211_install_qdisc(local->mdev);
 
 	/* add one default STA interface */
-	result = ieee80211_if_add(local->mdev, "wlan%d", NULL,
+	result = ieee80211_if_add(local, "wlan%d", NULL,
 				  IEEE80211_IF_TYPE_STA);
 	if (result)
 		printk(KERN_WARNING "%s: Failed to add default virtual iface\n",
--- wireless-dev.orig/net/mac80211/ieee80211_cfg.c	2007-07-19 15:35:50.653857384 +0200
+++ wireless-dev/net/mac80211/ieee80211_cfg.c	2007-07-19 15:36:12.863857384 +0200
@@ -44,7 +44,7 @@ static int ieee80211_add_iface(struct wi
 		return -EINVAL;
 	}
 
-	return ieee80211_if_add(local->mdev, name, NULL, itype);
+	return ieee80211_if_add(local, name, NULL, itype);
 }
 
 static int ieee80211_del_iface(struct wiphy *wiphy, int ifindex)
--- wireless-dev.orig/net/mac80211/ieee80211_i.h	2007-07-19 15:36:09.473857384 +0200
+++ wireless-dev/net/mac80211/ieee80211_i.h	2007-07-19 15:36:12.863857384 +0200
@@ -918,7 +918,7 @@ void dls_info_stop(struct ieee80211_if_s
 int dls_link_status(struct ieee80211_local *local, u8 *addr);
 
 /* ieee80211_iface.c */
-int ieee80211_if_add(struct net_device *dev, const char *name,
+int ieee80211_if_add(struct ieee80211_local *local, const char *name,
 		     struct net_device **new_dev, int type);
 void ieee80211_if_set_type(struct net_device *dev, int type);
 void ieee80211_if_reinit(struct net_device *dev);
--- wireless-dev.orig/net/mac80211/ieee80211_iface.c	2007-07-19 15:35:50.513857384 +0200
+++ wireless-dev/net/mac80211/ieee80211_iface.c	2007-07-19 15:36:12.863857384 +0200
@@ -37,11 +37,10 @@ static void ieee80211_if_sdata_deinit(st
 }
 
 /* Must be called with rtnl lock held. */
-int ieee80211_if_add(struct net_device *dev, const char *name,
+int ieee80211_if_add(struct ieee80211_local *local, const char *name,
 		     struct net_device **new_dev, int type)
 {
 	struct net_device *ndev;
-	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
 	struct ieee80211_sub_if_data *sdata = NULL;
 	int ret;
 
@@ -56,10 +55,6 @@ int ieee80211_if_add(struct net_device *
 		goto fail;
 
 	memcpy(ndev->dev_addr, local->hw.wiphy->perm_addr, ETH_ALEN);
-	ndev->base_addr = dev->base_addr;
-	ndev->irq = dev->irq;
-	ndev->mem_start = dev->mem_start;
-	ndev->mem_end = dev->mem_end;
 	SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy));
 
 	sdata = IEEE80211_DEV_TO_SUB_IF(ndev);
--- wireless-dev.orig/net/mac80211/ieee80211_ioctl.c	2007-07-19 15:35:50.713857384 +0200
+++ wireless-dev/net/mac80211/ieee80211_ioctl.c	2007-07-19 15:36:12.873857384 +0200
@@ -912,6 +912,7 @@ static int ieee80211_ioctl_add_if(struct
 	int res;
 	struct hostapd_if_wds *wds;
 	struct hostapd_if_bss *bss;
+	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
 
 	printk(KERN_WARNING "PRISM2_HOSTAPD_ADD_IF ioctl is deprecated!");
 	switch (param->u.if_info.type) {
@@ -921,14 +922,12 @@ static int ieee80211_ioctl_add_if(struct
 		if (left < sizeof(struct hostapd_if_wds))
 			return -EPROTO;
 
-		res = ieee80211_if_add(dev, param->u.if_info.name, &new_dev,
+		res = ieee80211_if_add(local, param->u.if_info.name, &new_dev,
 				       IEEE80211_IF_TYPE_WDS);
 		if (res)
 			return res;
 		res = ieee80211_if_update_wds(new_dev, wds->remote_addr);
 		if (unlikely(res)) {
-			struct ieee80211_local *local =
-				wdev_priv(dev->ieee80211_ptr);
 			struct ieee80211_sub_if_data *sdata =
 				IEEE80211_DEV_TO_SUB_IF(new_dev);
 			write_lock_bh(&local->sub_if_lock);
@@ -941,7 +940,7 @@ static int ieee80211_ioctl_add_if(struct
 		if (left < sizeof(struct hostapd_if_vlan))
 			return -EPROTO;
 
-		res = ieee80211_if_add(dev, param->u.if_info.name, NULL,
+		res = ieee80211_if_add(local, param->u.if_info.name, NULL,
 				       IEEE80211_IF_TYPE_VLAN);
 		return res;
 	case HOSTAP_IF_BSS:
@@ -950,7 +949,7 @@ static int ieee80211_ioctl_add_if(struct
 		if (left < sizeof(struct hostapd_if_bss))
 			return -EPROTO;
 
-		res = ieee80211_if_add(dev, param->u.if_info.name, &new_dev,
+		res = ieee80211_if_add(local, param->u.if_info.name, &new_dev,
 				       IEEE80211_IF_TYPE_AP);
 		if (res)
 			return res;
@@ -960,7 +959,7 @@ static int ieee80211_ioctl_add_if(struct
 		if (left < sizeof(struct hostapd_if_sta))
 			return -EPROTO;
 
-		res = ieee80211_if_add(dev, param->u.if_info.name, NULL,
+		res = ieee80211_if_add(local, param->u.if_info.name, NULL,
 				       IEEE80211_IF_TYPE_STA);
 		return res;
 	default:
---
 net/mac80211/wme.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

--- wireless-dev.orig/net/mac80211/wme.c	2007-07-19 15:36:15.513857384 +0200
+++ wireless-dev/net/mac80211/wme.c	2007-07-19 15:58:18.113857384 +0200
@@ -166,7 +166,7 @@ static inline int wme_downgrade_ac(struc
 static inline int classify80211(struct sk_buff *skb, struct Qdisc *qd)
 {
 	struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
-	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(qd->dev);
+	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF_NW(qd->dev);
 	struct ieee80211_if_sta *ifsta = &sdata->u.sta;
 	struct ieee80211_tx_packet_data *pkt_data =
 		(struct ieee80211_tx_packet_data *) skb->cb;
@@ -175,6 +175,13 @@ static inline int classify80211(struct s
 	int qos, tsid, dir;
 	const int ieee802_1d_to_ac[8] = { 2, 3, 3, 2, 1, 1, 0, 0 };
 
+	printk(KERN_DEBUG "classify80211(%s)\n", qd->dev->name);
+	if (qd->dev != sdata->local->mdev)
+		printk(KERN_DEBUG "Congrats. you managed to invoke classify80211 with"
+		       " a non master device.\n"
+		       "Good thing it contains special code even if that doesn't"
+		       " really make sense.\n");
+
 	/* see if frame is data or non data frame */
 	if (unlikely((fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_DATA)) {
 		/* management frames go on AC_VO queue, but are sent
---
 net/mac80211/ieee80211_sta.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

--- wireless-dev.orig/net/mac80211/ieee80211_sta.c	2007-07-19 15:55:13.103857384 +0200
+++ wireless-dev/net/mac80211/ieee80211_sta.c	2007-07-19 16:02:04.003857384 +0200
@@ -2135,7 +2135,7 @@ static void ieee80211_rx_bss_info(struct
 	int channel, invalid = 0, clen;
 	struct ieee80211_sta_bss *bss;
 	struct sta_info *sta;
-	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF_NW(dev);
 	u64 timestamp;
 
 	if (!beacon && memcmp(mgmt->da, dev->dev_addr, ETH_ALEN))
@@ -2371,6 +2371,9 @@ static void ieee80211_rx_bss_info(struct
 		 * channels, so map the channel into frequency. */
 		bss->freq = freq_list[channel - 1];
 	}
+	printk(KERN_DEBUG "bss " MAC_FMT " updated from %s\n", MAC_ARG(mgmt->bssid), dev->name);
+	if (local->mdev == dev)
+		printk(KERN_DEBUG "remind me, why can this code be invoked for the master device?\n");
 	bss->timestamp = timestamp;
 	bss->last_update = jiffies;
 	bss->rssi = rx_status->ssi;
@@ -2403,7 +2406,7 @@ static void ieee80211_rx_mgmt_beacon(str
 
 	ieee80211_rx_bss_info(dev, mgmt, len, rx_status, 1);
 
-	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+	sdata = IEEE80211_DEV_TO_SUB_IF_NW(dev);
 	if (sdata->type != IEEE80211_IF_TYPE_STA)
 		return;
 	ifsta = &sdata->u.sta;
---
 net/mac80211/debugfs_netdev.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- wireless-dev.orig/net/mac80211/debugfs_netdev.c	2007-07-19 15:46:13.713857384 +0200
+++ wireless-dev/net/mac80211/debugfs_netdev.c	2007-07-19 15:46:25.573857384 +0200
@@ -735,7 +735,7 @@ static int netdev_notify(struct notifier
 {
 	struct net_device *dev = ndev;
 	struct dentry *dir;
-	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF_NW(dev);
 	char buf[10+IFNAMSIZ];
 
 	if (state != NETDEV_CHANGENAME)
---
 net/mac80211/ieee80211.c |    3 ---
 1 file changed, 3 deletions(-)

--- wireless-dev.orig/net/mac80211/ieee80211.c	2007-07-19 15:47:28.553857384 +0200
+++ wireless-dev/net/mac80211/ieee80211.c	2007-07-19 15:47:52.323857384 +0200
@@ -5163,8 +5163,6 @@ int ieee80211_register_hw(struct ieee802
 	if (result < 0)
 		goto fail_dev;
 
-	ieee80211_debugfs_add_netdev(IEEE80211_DEV_TO_SUB_IF(local->mdev));
-
 	result = ieee80211_init_rate_ctrl_alg(local, NULL);
 	if (result < 0) {
 		printk(KERN_DEBUG "%s: Failed to initialize rate control "
@@ -5199,7 +5197,6 @@ int ieee80211_register_hw(struct ieee802
 fail_wep:
 	rate_control_deinitialize(local);
 fail_rate:
-	ieee80211_debugfs_remove_netdev(IEEE80211_DEV_TO_SUB_IF(local->mdev));
 	unregister_netdevice(local->mdev);
 fail_dev:
 	rtnl_unlock();

Attachment: signature.asc
Description: This is a digitally signed message part


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux