rpms/kernel/devel kernel.spec, 1.824, 1.825 linux-2.6-wireless.patch, 1.47, 1.48

John W. Linville (linville) fedora-extras-commits at redhat.com
Wed Jul 30 18:56:29 UTC 2008


Author: linville

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv2750

Modified Files:
	kernel.spec linux-2.6-wireless.patch 
Log Message:
Upstream wireless fixes from 2008-07-29


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.824
retrieving revision 1.825
diff -u -r1.824 -r1.825
--- kernel.spec	30 Jul 2008 16:27:51 -0000	1.824
+++ kernel.spec	30 Jul 2008 18:55:59 -0000	1.825
@@ -1091,9 +1091,9 @@
 # wake up links that have been put to sleep by BIOS (#436099)
 ApplyPatch linux-2.6-libata-force-hardreset-in-sleep-mode.patch
 
-# wireless patches headed for 2.6.26
-#ApplyPatch linux-2.6-wireless.patch
 # wireless patches headed for 2.6.27
+ApplyPatch linux-2.6-wireless.patch
+# wireless patches headed for 2.6.28
 #ApplyPatch linux-2.6-wireless-pending.patch
 
 # Add misc wireless bits from upstream wireless tree
@@ -1710,6 +1710,10 @@
 %kernel_variant_files -k vmlinux %{with_kdump} kdump
 
 %changelog
+* Wed Jul 30 2008 John W. Linville <linville at redhat.com>
+- Upstream wireless fixes from 2008-07-29
+  (http://marc.info/?l=linux-wireless&m=121737750023195&w=2)
+
 * Wed Jul 30 2008 Mark McLoughlin <markmc at redhat.com>
 - Replace kernel-xen in DEFAULTKERNEL (#456558)
 

linux-2.6-wireless.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.47 -r 1.48 linux-2.6-wireless.patch
Index: linux-2.6-wireless.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-wireless.patch,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- linux-2.6-wireless.patch	10 Jul 2008 17:28:14 -0000	1.47
+++ linux-2.6-wireless.patch	30 Jul 2008 18:55:59 -0000	1.48
@@ -1,521 +1,3578 @@
-commit 814feefa859a736d29d0700d49debf13904b429f
-Author: Ihar Hrachyshka <ihar.hrachyshka at promwad.com>
-Date:   Wed Jul 9 09:29:58 2008 +0300
+commit 56a6d13dfd49d90d72a1a962246206719dd9d143
+Author: Luis Carlos Cobo <luisca at cozybit.com>
+Date:   Tue Jul 29 19:59:31 2008 +0200
 
-    libertas: fix memory alignment problems on the blackfin
+    mac80211: fix mesh beaconing
     
-    Fixing unaligned memory access on the blackfin architecture.
+    This patch fixes mesh beaconing, which was broken by "mac80211: revamp
+    beacon configuration".
     
-    Signed-off-by: Ihar Hrachyshka <ihar.hrachyshka at promwad.com>
+    Signed-off-by: Luis Carlos Cobo <luisca at cozybit.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 86229f0c7b4e065f51b5572a8a61801e281740a0
-Author: Luis Carlos Cobo <luisca at cozybit.com>
-Date:   Tue Jul 8 16:19:21 2008 +0200
+commit 77bbadd5ea893f364a0d1879723037678a03725c
+Author: Vegard Nossum <vegard.nossum at gmail.com>
+Date:   Tue Jul 29 13:31:47 2008 +0200
+
+    PS3: gelic: use unsigned long for irqflags
+    
+    The semantic patch I used was this:
+    
+    @@
+    expression lock;
+    identifier flags;
+    expression subclass;
+    @@
+    
+    - unsigned int flags;
+    + unsigned long flags;
+    
+    ...
+    
+    <+...
+    
+    (
+     spin_lock_irqsave(lock, flags)
+    |
+     _spin_lock_irqsave(lock)
+    |
+     spin_unlock_irqrestore(lock, flags)
+    |
+     _spin_unlock_irqrestore(lock, flags)
+    |
+     read_lock_irqsave(lock, flags)
+    |
+     _read_lock_irqsave(lock)
+    |
+     read_unlock_irqrestore(lock, flags)
+    |
+     _read_unlock_irqrestore(lock, flags)
+    |
+     write_lock_irqsave(lock, flags)
+    |
+     _write_lock_irqsave(lock)
+    |
+     write_unlock_irqrestore(lock, flags)
+    |
+     _write_unlock_irqrestore(lock, flags)
+    |
+     spin_lock_irqsave_nested(lock, flags, subclass)
+    |
+     _spin_lock_irqsave_nested(lock, subclass)
+    |
+     spin_unlock_irqrestore(lock, flags)
+    |
+     _spin_unlock_irqrestore(lock, flags)
+    |
+     _raw_spin_lock_flags(lock, flags)
+    |
+     __raw_spin_lock_flags(lock, flags)
+    )
+    
+    ...+>
+    
+    This patch was generated using the Coccinelle framework.
+    
+    Cc: Masakazu Mokuno <mokuno at sm.sony.co.jp>
+    Cc: Julia Lawall <julia at diku.dk>
+    Cc: Alexey Dobriyan <adobriyan at gmail.com>
+    Signed-off-by: Vegard Nossum <vegard.nossum at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 14db74bcc3f7a779cf395a47e26b06a28207571a
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Tue Jul 29 13:22:52 2008 +0200
+
+    mac80211: fix cfg80211 hooks for master interface
+    
+    The master interface is a virtual interface that is registered
+    to mac80211, changing that does not seem like a good idea at
+    the moment. However, since it has no sdata, we cannot accept
+    any configuration for it. This patch makes the cfg80211 hooks
+    reject any such attempt.
+    
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit bba95fefb8e31f4799652666d05a4a9aad56e492
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Tue Jul 29 13:22:51 2008 +0200
+
+    nl80211: fix dump callbacks
+    
+    Julius Volz pointed out that the dump callbacks in nl80211 were
+    broken and fixed one of them. This patch fixes the other three
+    and also addresses the TODOs there.
+    
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Cc: Julius Volz <juliusv at google.com>
+    Cc: Thomas Graf <tgraf at suug.ch>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit d0f09804144fd9471a13cf4d80e66842c7fa114f
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Tue Jul 29 11:32:07 2008 +0200
+
+    mac80211: partially fix skb->cb use
+    
+    This patch fixes mac80211 to not use the skb->cb over the queue step
+    from virtual interfaces to the master. The patch also, for now,
+    disables aggregation because that would still require requeuing,
+    will fix that in a separate patch. There are two other places (software
+    requeue and powersaving stations) where requeue can happen, but that is
+    not currently used by any drivers/not possible to use respectively.
+    
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 0ccd58fc03f40529f66190b1a41e92a732d2bda8
+Author: Larry Finger <Larry.Finger at lwfinger.net>
+Date:   Mon Jul 28 22:25:08 2008 -0500
+
+    rtl8187: Improve wireless statistics for RTL8187B
+    
+    Wireless statistics produced by the RTL8187B driver are not particularly
+    informative about the strength of the received signal. From the data sheet
+    provided by Realtek, I discovered that certain parts of the RX header
+    should have the information necessary to calculate signal quality and
+    strength. With testing, it became clear that most of these quantities were
+    very jittery - only the AGC correlated with the signals expected from nearby
+    AP's. As a result, the quality and strength are derived from the agc value.
+    The scaling has been determined so that the numbers are close to those
+    obtained by b43 under the same conditions. The results are qualitatively
+    correct.
+    
+    Statistics derived for the RTL8187 have not been changed.
+    
+    The RX header variables have been renamed to match the quantites described
+    in the Realtek data sheet.
+    
+    Signed-off-by: Larry Finger <Larry.Finger at lwfinger.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 1f690d7b549ef9c7424536475501885dd5b54930
+Author: Larry Finger <Larry.Finger at lwfinger.net>
+Date:   Mon Jul 28 22:08:18 2008 -0500
+
+    rtl8187: Fix for TX sequence number problem
+    
+    "mac80211: fix TX sequence numbers" broke rtl8187. This
+    patch makes the same kind of fix that was done for rt2x00. Note that
+    this code will have to be reworked for proper sequence numbers on beacons.
+    In addition, the sequence number has been placed in the hardware state,
+    not the vif state.
+    
+    Signed-off-by: Larry Finger <Larry.Finger at lwfinger.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 5422399518e8142198df888aab00acdac251f754
+Author: Rami Rosen <ramirose at gmail.com>
+Date:   Thu Jul 24 10:40:37 2008 +0300
+
+    mac80211: append CONFIG_ to MAC80211_VERBOSE_PS_DEBUG in net/mac80211/tx.c.
+    
+    In net/mac80211/tx.c, there are some #ifdef which checks
+    MAC80211_VERBOSE_PS_DEBUG
+    (which in fact is never set) instead of
+    CONFIG_MAC80211_VERBOSE_PS_DEBUG, as should be.
+    
+    This patch replaces MAC80211_VERBOSE_PS_DEBUG with
+    CONFIG_MAC80211_VERBOSE_PS_DEBUG in these #ifdef commands in
+    net/mac80211/tx.c.
+    
[...3621 lines suppressed...]
+@@ -1016,7 +1037,7 @@ static int nl80211_get_station(struct sk
+ 
+ 	mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
+ 
+-	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
++	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
+ 	if (err)
+ 		return err;
+ 
+@@ -1112,7 +1133,7 @@ static int nl80211_set_station(struct sk
+ 		params.plink_action =
+ 		    nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_ACTION]);
+ 
+-	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
++	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
+ 	if (err)
+ 		return err;
+ 
+@@ -1172,7 +1193,7 @@ static int nl80211_new_station(struct sk
+ 				&params.station_flags))
+ 		return -EINVAL;
+ 
+-	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
++	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
+ 	if (err)
+ 		return err;
+ 
+@@ -1207,7 +1228,7 @@ static int nl80211_del_station(struct sk
+ 	if (info->attrs[NL80211_ATTR_MAC])
+ 		mac_addr = nla_data(info->attrs[NL80211_ATTR_MAC]);
+ 
+-	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
++	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
+ 	if (err)
+ 		return err;
+ 
+@@ -1277,68 +1298,78 @@ static int nl80211_send_mpath(struct sk_
+ }
+ 
+ static int nl80211_dump_mpath(struct sk_buff *skb,
+-		struct netlink_callback *cb)
++			      struct netlink_callback *cb)
+ {
+-	int wp_idx = 0;
+-	int if_idx = 0;
+-	int sta_idx = cb->args[2];
+-	int wp_start = cb->args[0];
+-	int if_start = cb->args[1];
+ 	struct mpath_info pinfo;
+ 	struct cfg80211_registered_device *dev;
+-	struct wireless_dev *wdev;
++	struct net_device *netdev;
+ 	u8 dst[ETH_ALEN];
+ 	u8 next_hop[ETH_ALEN];
++	int ifidx = cb->args[0];
++	int path_idx = cb->args[1];
+ 	int err;
+-	int exit = 0;
+ 
+-	/* TODO: filter by device */
+-	mutex_lock(&cfg80211_drv_mutex);
+-	list_for_each_entry(dev, &cfg80211_drv_list, list) {
+-		if (exit)
++	if (!ifidx) {
++		err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize,
++				  nl80211_fam.attrbuf, nl80211_fam.maxattr,
++				  nl80211_policy);
++		if (err)
++			return err;
++
++		if (!nl80211_fam.attrbuf[NL80211_ATTR_IFINDEX])
++			return -EINVAL;
++
++		ifidx = nla_get_u32(nl80211_fam.attrbuf[NL80211_ATTR_IFINDEX]);
++		if (!ifidx)
++			return -EINVAL;
++	}
++
++	netdev = dev_get_by_index(&init_net, ifidx);
++	if (!netdev)
++		return -ENODEV;
++
++	dev = cfg80211_get_dev_from_ifindex(ifidx);
++	if (IS_ERR(dev)) {
++		err = PTR_ERR(dev);
++		goto out_put_netdev;
++	}
++
++	if (!dev->ops->dump_mpath) {
++		err = -ENOSYS;
++		goto out_err;
++	}
++
++	rtnl_lock();
++
++	while (1) {
++		err = dev->ops->dump_mpath(&dev->wiphy, netdev, path_idx,
++					   dst, next_hop, &pinfo);
++		if (err == -ENOENT)
+ 			break;
+-		if (++wp_idx < wp_start)
+-			continue;
+-		if_idx = 0;
++		if (err)
++			goto out_err_rtnl;
+ 
+-		mutex_lock(&dev->devlist_mtx);
+-		list_for_each_entry(wdev, &dev->netdev_list, list) {
+-			if (exit)
+-				break;
+-			if (++if_idx < if_start)
+-				continue;
+-			if (!dev->ops->dump_mpath)
+-				continue;
++		if (nl80211_send_mpath(skb, NETLINK_CB(cb->skb).pid,
++				       cb->nlh->nlmsg_seq, NLM_F_MULTI,
++				       netdev, dst, next_hop,
++				       &pinfo) < 0)
++			goto out;
+ 
+-			for (;; ++sta_idx) {
+-				rtnl_lock();
+-				err = dev->ops->dump_mpath(&dev->wiphy,
+-						wdev->netdev, sta_idx, dst,
+-						next_hop, &pinfo);
+-				rtnl_unlock();
+-				if (err) {
+-					sta_idx = 0;
+-					break;
+-				}
+-				if (nl80211_send_mpath(skb,
+-						NETLINK_CB(cb->skb).pid,
+-						cb->nlh->nlmsg_seq, NLM_F_MULTI,
+-						wdev->netdev, dst, next_hop,
+-						&pinfo) < 0) {
+-					exit = 1;
+-					break;
+-				}
+-			}
+-		}
+-		mutex_unlock(&dev->devlist_mtx);
++		path_idx++;
+ 	}
+-	mutex_unlock(&cfg80211_drv_mutex);
+ 
+-	cb->args[0] = wp_idx;
+-	cb->args[1] = if_idx;
+-	cb->args[2] = sta_idx;
+ 
+-	return skb->len;
++ out:
++	cb->args[1] = path_idx;
++	err = skb->len;
++ out_err_rtnl:
++	rtnl_unlock();
++ out_err:
++	cfg80211_put_dev(dev);
++ out_put_netdev:
++	dev_put(netdev);
++
++	return err;
+ }
+ 
+ static int nl80211_get_mpath(struct sk_buff *skb, struct genl_info *info)
+@@ -1358,7 +1389,7 @@ static int nl80211_get_mpath(struct sk_b
+ 
+ 	dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
+ 
+-	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
++	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
+ 	if (err)
+ 		return err;
+ 
+@@ -1411,7 +1442,7 @@ static int nl80211_set_mpath(struct sk_b
+ 	dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
+ 	next_hop = nla_data(info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]);
+ 
+-	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
++	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
+ 	if (err)
+ 		return err;
+ 
+@@ -1446,7 +1477,7 @@ static int nl80211_new_mpath(struct sk_b
+ 	dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
+ 	next_hop = nla_data(info->attrs[NL80211_ATTR_MPATH_NEXT_HOP]);
+ 
+-	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
++	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
+ 	if (err)
+ 		return err;
+ 
+@@ -1475,7 +1506,7 @@ static int nl80211_del_mpath(struct sk_b
+ 	if (info->attrs[NL80211_ATTR_MAC])
+ 		dst = nla_data(info->attrs[NL80211_ATTR_MAC]);
+ 
+-	err = get_drv_dev_by_info_ifindex(info, &drv, &dev);
++	err = get_drv_dev_by_info_ifindex(info->attrs, &drv, &dev);
+ 	if (err)
+ 		return err;
  




More information about the scm-commits mailing list