public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch 00/45] 2.6.29.1 -stable review
@ 2009-03-31 23:10 Chris Wright
  2009-03-31 23:10 ` [patch 01/45] netfilter: nf_conntrack_tcp: fix unaligned memory access in tcp_sack Chris Wright
                   ` (49 more replies)
  0 siblings, 50 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan

This is the start of the stable review cycle for the 2.6.29.1 release.
There are 45 patches in this series, all will be posted as a response
to this one.  If anyone has any issues with these being applied, please
let us know.  If anyone is a maintainer of the proper subsystem, and
wants to add a Signed-off-by: line to the patch, please respond with it.

These patches are sent out with a number of different people on the
Cc: line.  If you wish to be a reviewer, please email stable@kernel.org
to add your name to the list.  If you want to be off the reviewer list,
also email us.

Responses should be made by Thursday, April 2, 23:00 UTC.
Anything received after that time might be too late.

The whole patch series can be found in one patch at:
	kernel.org/pub/linux/kernel/v2.6/stable-review/patch-2.6.29.1-rc1.gz
and the diffstat can be found below.

thanks,
-chris

 Makefile                                 |    2 
 arch/arm/include/asm/elf.h               |    1 
 arch/arm/kernel/module.c                 |    9 
 arch/arm/mach-iop13xx/pci.c              |    5 
 arch/arm/mach-omap2/mmc-twl4030.c        |    1 
 arch/arm/mm/mmu.c                        |    2 
 arch/x86/kernel/check.c                  |    6 
 arch/x86/kernel/cpu/mtrr/generic.c       |   51 +--
 arch/x86/kernel/ptrace.c                 |    3 
 arch/x86/kernel/tlb_uv.c                 |    3 
 arch/x86/kvm/paging_tmpl.h               |    2 
 arch/x86/kvm/svm.c                       |   41 +-
 arch/x86/kvm/vmx.c                       |    2 
 arch/x86/lguest/boot.c                   |   10 
 arch/x86/mm/pat.c                        |    5 
 arch/x86/pci/i386.c                      |    3 
 drivers/char/raw.c                       |    1 
 drivers/lguest/page_tables.c             |    4 
 drivers/media/dvb/firewire/firedtv-avc.c |    6 
 drivers/net/dnet.c                       |    1 
 drivers/net/wireless/ath5k/base.c        |   22 +
 drivers/net/wireless/ath5k/base.h        |    2 
 drivers/net/wireless/ath9k/recv.c        |    7 
 drivers/net/wireless/ath9k/xmit.c        |    2 
 drivers/net/wireless/b43/xmit.c          |    2 
 drivers/scsi/arm/cumana_2.c              |    2 
 drivers/scsi/sg.c                        |  466 ++++++++++++++-----------------
 drivers/usb/core/message.c               |    3 
 drivers/usb/core/quirks.c                |    4 
 drivers/usb/core/sysfs.c                 |    4 
 drivers/usb/gadget/f_rndis.c             |    2 
 drivers/usb/host/ehci-q.c                |   32 ++
 drivers/usb/host/ehci.h                  |    3 
 drivers/usb/storage/cypress_atacb.c      |   15 
 drivers/usb/storage/scsiglue.c           |    6 
 drivers/video/pxafb.c                    |   14 
 fs/cifs/CHANGES                          |    3 
 fs/cifs/cifssmb.c                        |    6 
 fs/cifs/connect.c                        |    2 
 fs/fuse/file.c                           |    3 
 include/linux/mm.h                       |   15 
 include/linux/usb/quirks.h               |    3 
 mm/memory.c                              |    6 
 net/bridge/br_if.c                       |    1 
 net/core/dev.c                           |    9 
 net/ipv4/udp.c                           |    6 
 net/ipv6/ip6_input.c                     |    4 
 net/netfilter/nf_conntrack_proto_tcp.c   |    3 
 net/wireless/reg.c                       |   23 +
 net/xfrm/xfrm_state.c                    |    2 
 50 files changed, 490 insertions(+), 340 deletions(-)

^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 01/45] netfilter: nf_conntrack_tcp: fix unaligned memory access in tcp_sack
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 02/45] udp: Wrong locking code in udp seq_file infrastructure Chris Wright
                   ` (48 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Mark H. Weaver, David S Miller, Patrick McHardy

[-- Attachment #1: netfilter-nf_conntrack_tcp-fix-unaligned-memory-access-in-tcp_sack.patch --]
[-- Type: text/plain, Size: 1340 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Mark H. Weaver <mhw@netris.org>

[ Upstream commit 534f81a5068799799e264fd162e9488a129f98d4 ]

This patch fixes an unaligned memory access in tcp_sack while reading
sequence numbers from TCP selective acknowledgement options.  Prior to
applying this patch, upstream linux-2.6.27.20 was occasionally
generating messages like this on my sparc64 system:

  [54678.532071] Kernel unaligned access at TPC[6b17d4] tcp_packet+0xcd4/0xd00

Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 net/netfilter/nf_conntrack_proto_tcp.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/net/netfilter/nf_conntrack_proto_tcp.c
+++ b/net/netfilter/nf_conntrack_proto_tcp.c
@@ -15,6 +15,7 @@
 #include <linux/skbuff.h>
 #include <linux/ipv6.h>
 #include <net/ip6_checksum.h>
+#include <asm/unaligned.h>
 
 #include <net/tcp.h>
 
@@ -466,7 +467,7 @@ static void tcp_sack(const struct sk_buf
 				for (i = 0;
 				     i < (opsize - TCPOLEN_SACK_BASE);
 				     i += TCPOLEN_SACK_PERBLOCK) {
-					tmp = ntohl(*((__be32 *)(ptr+i)+1));
+					tmp = get_unaligned_be32((__be32 *)(ptr+i)+1);
 
 					if (after(tmp, *sack))
 						*sack = tmp;


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 02/45] udp: Wrong locking code in udp seq_file infrastructure
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
  2009-03-31 23:10 ` [patch 01/45] netfilter: nf_conntrack_tcp: fix unaligned memory access in tcp_sack Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 03/45] dnet: drivers/net/dnet.c needs <linux/io.h> Chris Wright
                   ` (47 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Vitaly Mayatskikh

[-- Attachment #1: udp-wrong-locking-code-in-udp-seq_file-infrastructure.patch --]
[-- Type: text/plain, Size: 3971 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Vitaly Mayatskikh <v.mayatskih@gmail.com>

[ Upstream commit 30842f2989aacfaba3ccb39829b3417be9313dbe ]

Reading zero bytes from /proc/net/udp or other similar files which use
the same seq_file udp infrastructure panics kernel in that way:

=====================================
[ BUG: bad unlock balance detected! ]
-------------------------------------
read/1985 is trying to release lock (&table->hash[i].lock) at:
[<ffffffff81321d83>] udp_seq_stop+0x27/0x29
but there are no more locks to release!

other info that might help us debug this:
1 lock held by read/1985:
 #0:  (&p->lock){--..}, at: [<ffffffff810eefb6>] seq_read+0x38/0x348

stack backtrace:
Pid: 1985, comm: read Not tainted 2.6.29-rc8 #9
Call Trace:
 [<ffffffff81321d83>] ? udp_seq_stop+0x27/0x29
 [<ffffffff8106dab9>] print_unlock_inbalance_bug+0xd6/0xe1
 [<ffffffff8106db62>] lock_release_non_nested+0x9e/0x1c6
 [<ffffffff810ef030>] ? seq_read+0xb2/0x348
 [<ffffffff8106bdba>] ? mark_held_locks+0x68/0x86
 [<ffffffff81321d83>] ? udp_seq_stop+0x27/0x29
 [<ffffffff8106dde7>] lock_release+0x15d/0x189
 [<ffffffff8137163c>] _spin_unlock_bh+0x1e/0x34
 [<ffffffff81321d83>] udp_seq_stop+0x27/0x29
 [<ffffffff810ef239>] seq_read+0x2bb/0x348
 [<ffffffff810eef7e>] ? seq_read+0x0/0x348
 [<ffffffff8111aedd>] proc_reg_read+0x90/0xaf
 [<ffffffff810d878f>] vfs_read+0xa6/0x103
 [<ffffffff8106bfac>] ? trace_hardirqs_on_caller+0x12f/0x153
 [<ffffffff810d88a2>] sys_read+0x45/0x69
 [<ffffffff8101123a>] system_call_fastpath+0x16/0x1b
BUG: scheduling while atomic: read/1985/0xffffff00
INFO: lockdep is turned off.
Modules linked in: cpufreq_ondemand acpi_cpufreq freq_table dm_multipath kvm ppdev snd_hda_codec_analog snd_hda_intel snd_hda_codec snd_hwdep snd_seq_dummy snd_seq_oss snd_seq_midi_event arc4 snd_s
eq ecb thinkpad_acpi snd_seq_device iwl3945 hwmon sdhci_pci snd_pcm_oss sdhci rfkill mmc_core snd_mixer_oss i2c_i801 mac80211 yenta_socket ricoh_mmc i2c_core iTCO_wdt snd_pcm iTCO_vendor_support rs
rc_nonstatic snd_timer snd lib80211 cfg80211 soundcore snd_page_alloc video parport_pc output parport e1000e [last unloaded: scsi_wait_scan]
Pid: 1985, comm: read Not tainted 2.6.29-rc8 #9
Call Trace:
 [<ffffffff8106b456>] ? __debug_show_held_locks+0x1b/0x24
 [<ffffffff81043660>] __schedule_bug+0x7e/0x83
 [<ffffffff8136ede9>] schedule+0xce/0x838
 [<ffffffff810d7972>] ? fsnotify_access+0x5f/0x67
 [<ffffffff810112d0>] ? sysret_careful+0xb/0x37
 [<ffffffff8106be9c>] ? trace_hardirqs_on_caller+0x1f/0x153
 [<ffffffff8137127b>] ? trace_hardirqs_on_thunk+0x3a/0x3f
 [<ffffffff810112f6>] sysret_careful+0x31/0x37
read[1985]: segfault at 7fffc479bfe8 ip 0000003e7420a180 sp 00007fffc479bfa0 error 6
Kernel panic - not syncing: Aiee, killing interrupt handler!

udp_seq_stop() tries to unlock not yet locked spinlock. The lock was lost
during splitting global udp_hash_lock to subsequent spinlocks.

Signed-off by: Vitaly Mayatskikh <v.mayatskih@gmail.com>
Acked-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 net/ipv4/udp.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -1614,7 +1614,8 @@ static struct sock *udp_get_next(struct 
 	} while (sk && (!net_eq(sock_net(sk), net) || sk->sk_family != state->family));
 
 	if (!sk) {
-		spin_unlock_bh(&state->udp_table->hash[state->bucket].lock);
+		if (state->bucket < UDP_HTABLE_SIZE)
+			spin_unlock_bh(&state->udp_table->hash[state->bucket].lock);
 		return udp_get_first(seq, state->bucket + 1);
 	}
 	return sk;
@@ -1632,6 +1633,9 @@ static struct sock *udp_get_idx(struct s
 
 static void *udp_seq_start(struct seq_file *seq, loff_t *pos)
 {
+	struct udp_iter_state *state = seq->private;
+	state->bucket = UDP_HTABLE_SIZE;
+
 	return *pos ? udp_get_idx(seq, *pos-1) : SEQ_START_TOKEN;
 }
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 03/45] dnet: drivers/net/dnet.c needs <linux/io.h>
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
  2009-03-31 23:10 ` [patch 01/45] netfilter: nf_conntrack_tcp: fix unaligned memory access in tcp_sack Chris Wright
  2009-03-31 23:10 ` [patch 02/45] udp: Wrong locking code in udp seq_file infrastructure Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 04/45] bridge: bad error handling when adding invalid ether address Chris Wright
                   ` (46 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Geert Uytterhoeven, David S Miller

[-- Attachment #1: dnet-drivers-net-dnet.c-needs-linux-io.h.patch --]
[-- Type: text/plain, Size: 1186 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Geert Uytterhoeven <geert@linux-m68k.org>

[ Upstream commit 142071b83426674ef2dab98cf2a6627328d0988e ]

On m68k:
| drivers/net/dnet.c: In function 'dnet_readw_mac':
| drivers/net/dnet.c:36: error: implicit declaration of function 'writel'
| drivers/net/dnet.c:43: error: implicit declaration of function 'readl'
| drivers/net/dnet.c: In function 'dnet_probe':
| drivers/net/dnet.c:873: error: implicit declaration of function 'ioremap'
| drivers/net/dnet.c:873: warning: assignment makes pointer from integer without a cast
| drivers/net/dnet.c:939: error: implicit declaration of function 'iounmap'

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/net/dnet.c |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/net/dnet.c
+++ b/drivers/net/dnet.c
@@ -9,6 +9,7 @@
  * published by the Free Software Foundation.
  */
 #include <linux/version.h>
+#include <linux/io.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/kernel.h>


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 04/45] bridge: bad error handling when adding invalid ether address
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (2 preceding siblings ...)
  2009-03-31 23:10 ` [patch 03/45] dnet: drivers/net/dnet.c needs <linux/io.h> Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 05/45] GRO: Disable GRO on legacy netif_rx path Chris Wright
                   ` (45 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Stephen Hemminger, David S Miller

[-- Attachment #1: bridge-bad-error-handling-when-adding-invalid-ether-address.patch --]
[-- Type: text/plain, Size: 1031 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Stephen Hemminger <shemminger@vyatta.com>

[ Upstream commit cda6d377ec6b2ee2e58d563d0bd7eb313e0165df ]

This fixes an crash when empty bond device is added to a bridge.
If an interface with invalid ethernet address (all zero) is added
to a bridge, then bridge code detects it when setting up the forward
databas entry. But the error unwind is broken, the bridge port object
can get freed twice: once when ref count went to zeo, and once by kfree.
Since object is never really accessible, just free it.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 net/bridge/br_if.c |    1 -
 1 file changed, 1 deletion(-)

--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -426,7 +426,6 @@ err2:
 err1:
 	kobject_del(&p->kobj);
 err0:
-	kobject_put(&p->kobj);
 	dev_set_promiscuity(dev, -1);
 put_back:
 	dev_put(dev);


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 05/45] GRO: Disable GRO on legacy netif_rx path
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (3 preceding siblings ...)
  2009-03-31 23:10 ` [patch 04/45] bridge: bad error handling when adding invalid ether address Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 06/45] ipv6: Plug sk_buff leak in ipv6_rcv (net/ipv6/ip6_input.c) Chris Wright
                   ` (44 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Herbert Xu, David S Miller

[-- Attachment #1: gro-disable-gro-on-legacy-netif_rx-path.patch --]
[-- Type: text/plain, Size: 1497 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Herbert Xu <herbert@gondor.apana.org.au>

[ Upstream commit 8f1ead2d1a626ed0c85b3d2c2046a49081d5933f ]

When I fixed the GRO crash in the legacy receive path I used
napi_complete to replace __napi_complete.  Unfortunately they're
not the same when NETPOLL is enabled, which may result in us
not calling __napi_complete at all.

What's more, we really do need to keep the __napi_complete call
within the IRQ-off section since in theory an IRQ can occur in
between and fill up the backlog to the maximum, causing us to
lock up.

Since we can't seem to find a fix that works properly right now,
this patch reverts all the GRO support from the netif_rx path.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 net/core/dev.c |    9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2588,18 +2588,15 @@ static int process_backlog(struct napi_s
 		local_irq_disable();
 		skb = __skb_dequeue(&queue->input_pkt_queue);
 		if (!skb) {
+			__napi_complete(napi);
 			local_irq_enable();
-			napi_complete(napi);
-			goto out;
+			break;
 		}
 		local_irq_enable();
 
-		napi_gro_receive(napi, skb);
+		netif_receive_skb(skb);
 	} while (++work < quota && jiffies == start_time);
 
-	napi_gro_flush(napi);
-
-out:
 	return work;
 }
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 06/45] ipv6: Plug sk_buff leak in ipv6_rcv (net/ipv6/ip6_input.c)
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (4 preceding siblings ...)
  2009-03-31 23:10 ` [patch 05/45] GRO: Disable GRO on legacy netif_rx path Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 07/45] xfrm: spin_lock() should be spin_unlock() in xfrm_state.c Chris Wright
                   ` (43 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Jesper Nilsson, David S Miller

[-- Attachment #1: ipv6-plug-sk_buff-leak-in-ipv6_rcv.patch --]
[-- Type: text/plain, Size: 1672 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Jesper Nilsson <jesper.nilsson@axis.com>

[ Upstream commit 71f6f6dfdf7c7a67462386d9ea05c1095a89c555 ]

Commit 778d80be52699596bf70e0eb0761cf5e1e46088d
(ipv6: Add disable_ipv6 sysctl to disable IPv6 operaion on specific interface)
seems to have introduced a leak of sk_buff's for ipv6 traffic,
at least in some configurations where idev is NULL, or when ipv6
is disabled via sysctl.

The problem is that if the first condition of the if-statement
returns non-NULL, it returns an skb with only one reference,
and when the other conditions apply, execution jumps to the "out"
label, which does not call kfree_skb for it.

To plug this leak, change to use the "drop" label instead.
(this relies on it being ok to call kfree_skb on NULL)
This also allows us to avoid calling rcu_read_unlock here,
and removes the only user of the "out" label.

Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 net/ipv6/ip6_input.c |    4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

--- a/net/ipv6/ip6_input.c
+++ b/net/ipv6/ip6_input.c
@@ -75,8 +75,7 @@ int ipv6_rcv(struct sk_buff *skb, struct
 	if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL ||
 	    !idev || unlikely(idev->cnf.disable_ipv6)) {
 		IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_INDISCARDS);
-		rcu_read_unlock();
-		goto out;
+		goto drop;
 	}
 
 	memset(IP6CB(skb), 0, sizeof(struct inet6_skb_parm));
@@ -147,7 +146,6 @@ err:
 drop:
 	rcu_read_unlock();
 	kfree_skb(skb);
-out:
 	return 0;
 }
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 07/45] xfrm: spin_lock() should be spin_unlock() in xfrm_state.c
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (5 preceding siblings ...)
  2009-03-31 23:10 ` [patch 06/45] ipv6: Plug sk_buff leak in ipv6_rcv (net/ipv6/ip6_input.c) Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 08/45] USB: EHCI: add software retry for transaction errors Chris Wright
                   ` (42 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, David S Miller

[-- Attachment #1: xfrm-spin_lock-should-be-spin_unlock-in-xfrm_state.c.patch --]
[-- Type: text/plain, Size: 939 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Chuck Ebbert <cebbert@redhat.com>

[ Upstream commit 7d0b591c655ca0d72ebcbd242cf659a20a8995c5 ]

spin_lock() should be spin_unlock() in xfrm_state_walk_done().

caused by:
commit 12a169e7d8f4b1c95252d8b04ed0f1033ed7cfe2
"ipsec: Put dumpers on the dump list"

Reported-by: Marc Milgram <mmilgram@redhat.com>
Signed-off-by: Chuck Ebbert <cebbert@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 net/xfrm/xfrm_state.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -1615,7 +1615,7 @@ void xfrm_state_walk_done(struct xfrm_st
 
 	spin_lock_bh(&xfrm_state_lock);
 	list_del(&walk->all);
-	spin_lock_bh(&xfrm_state_lock);
+	spin_unlock_bh(&xfrm_state_lock);
 }
 EXPORT_SYMBOL(xfrm_state_walk_done);
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 08/45] USB: EHCI: add software retry for transaction errors
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (6 preceding siblings ...)
  2009-03-31 23:10 ` [patch 07/45] xfrm: spin_lock() should be spin_unlock() in xfrm_state.c Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 09/45] USB: fix USB_STORAGE_CYPRESS_ATACB Chris Wright
                   ` (41 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Alan Stern, David Brownell, Greg Kroah-Hartman

[-- Attachment #1: usb-ehci-add-software-retry-for-transaction-errors.patch --]
[-- Type: text/plain, Size: 3344 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Alan Stern <stern@rowland.harvard.edu>

upstream commit: a2c2706e1043c17139c2dafd171c4a5cf008ef7e

This patch (as1204) adds a software retry mechanism to ehci-hcd.  It
gets invoked when the driver encounters transaction errors on an
asynchronous endpoint.  On many systems, hardware deficiencies cause
such errors to occur if one device is unplugged while the host is
communicating with another device.  With the patch, the failed
transactions are retried and generally succeed the second or third
time through.

This is based on code originally written by Koichiro Saito.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Tested by: Koichiro Saito <Saito.Koichiro@adniss.jp>
CC: David Brownell <david-b@pacbell.net>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/usb/host/ehci-q.c |   32 ++++++++++++++++++++++++++++++++
 drivers/usb/host/ehci.h   |    3 +++
 2 files changed, 35 insertions(+)

--- a/drivers/usb/host/ehci-q.c
+++ b/drivers/usb/host/ehci-q.c
@@ -333,12 +333,40 @@ qh_completions (struct ehci_hcd *ehci, s
 		token = hc32_to_cpu(ehci, qtd->hw_token);
 
 		/* always clean up qtds the hc de-activated */
+ retry_xacterr:
 		if ((token & QTD_STS_ACTIVE) == 0) {
 
 			/* on STALL, error, and short reads this urb must
 			 * complete and all its qtds must be recycled.
 			 */
 			if ((token & QTD_STS_HALT) != 0) {
+
+				/* retry transaction errors until we
+				 * reach the software xacterr limit
+				 */
+				if ((token & QTD_STS_XACT) &&
+						QTD_CERR(token) == 0 &&
+						--qh->xacterrs > 0 &&
+						!urb->unlinked) {
+					ehci_dbg(ehci,
+	"detected XactErr len %d/%d retry %d\n",
+	qtd->length - QTD_LENGTH(token), qtd->length,
+	QH_XACTERR_MAX - qh->xacterrs);
+
+					/* reset the token in the qtd and the
+					 * qh overlay (which still contains
+					 * the qtd) so that we pick up from
+					 * where we left off
+					 */
+					token &= ~QTD_STS_HALT;
+					token |= QTD_STS_ACTIVE |
+							(EHCI_TUNE_CERR << 10);
+					qtd->hw_token = cpu_to_hc32(ehci,
+							token);
+					wmb();
+					qh->hw_token = cpu_to_hc32(ehci, token);
+					goto retry_xacterr;
+				}
 				stopped = 1;
 
 			/* magic dummy for some short reads; qh won't advance.
@@ -421,6 +449,9 @@ halt:
 		/* remove qtd; it's recycled after possible urb completion */
 		list_del (&qtd->qtd_list);
 		last = qtd;
+
+		/* reinit the xacterr counter for the next qtd */
+		qh->xacterrs = QH_XACTERR_MAX;
 	}
 
 	/* last urb's completion might still need calling */
@@ -862,6 +893,7 @@ static void qh_link_async (struct ehci_h
 	head->qh_next.qh = qh;
 	head->hw_next = dma;
 
+	qh->xacterrs = QH_XACTERR_MAX;
 	qh->qh_state = QH_STATE_LINKED;
 	/* qtd completions reported later by interrupt */
 }
--- a/drivers/usb/host/ehci.h
+++ b/drivers/usb/host/ehci.h
@@ -376,6 +376,9 @@ struct ehci_qh {
 #define	QH_STATE_UNLINK_WAIT	4		/* LINKED and on reclaim q */
 #define	QH_STATE_COMPLETING	5		/* don't touch token.HALT */
 
+	u8			xacterrs;	/* XactErr retry counter */
+#define	QH_XACTERR_MAX		32		/* XactErr retry limit */
+
 	/* periodic schedule info */
 	u8			usecs;		/* intr bandwidth */
 	u8			gap_uf;		/* uframes split/csplit gap */


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 09/45] USB: fix USB_STORAGE_CYPRESS_ATACB
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (7 preceding siblings ...)
  2009-03-31 23:10 ` [patch 08/45] USB: EHCI: add software retry for transaction errors Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 10/45] USB: usb-storage: increase max_sectors for tape drives Chris Wright
                   ` (40 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Boaz Harrosh, Matthieu CASTET, James Bottomley,
	Matthew Dharm, Greg Kroah-Hartman

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: usb-fix-usb_storage_cypress_atacb.patch --]
[-- Type: text/plain, Size: 2839 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Boaz Harrosh <bharrosh@panasas.com>

upstream commit: 1f4159c1620f74377e26d8a569d10ca5907ef475

commit 64a87b24: [SCSI] Let scsi_cmnd->cmnd use request->cmd buffer
changed the scsi_eh_prep_cmnd logic by making it clear
the ->cmnd buffer. But the sat to cypress atacb translation supposed
the ->cmnd buffer wasn't modified.

This patch makes it set the ->cmnd buffer after scsi_eh_prep_cmnd call.
The problem and a fix was reported by Matthieu CASTET <castet.matthieu@free.fr>

It also removes all the hackery fiddling of scsi_cmnd and scsi_eh_save by
requesting from scsi_eh_prep_cmnd to prepare a read into ->sense_buffer,
which is much more suitable a buffer for HW transfers, then after the command
execution the regs read is copied into regs buffer before actual preparation
of sense_buffer.

Also fix an alien comment character to my utf-8 editor.

Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>
Cc: stable <stable@kernel.org>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Matthew Dharm <mdharm-kernel@one-eyed-alien.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/usb/storage/cypress_atacb.c |   15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

--- a/drivers/usb/storage/cypress_atacb.c
+++ b/drivers/usb/storage/cypress_atacb.c
@@ -133,19 +133,18 @@ void cypress_atacb_passthrough(struct sc
 
 		/* build the command for
 		 * reading the ATA registers */
-		scsi_eh_prep_cmnd(srb, &ses, NULL, 0, 0);
-		srb->sdb.length = sizeof(regs);
-		sg_init_one(&ses.sense_sgl, regs, srb->sdb.length);
-		srb->sdb.table.sgl = &ses.sense_sgl;
-		srb->sc_data_direction = DMA_FROM_DEVICE;
-		srb->sdb.table.nents = 1;
+		scsi_eh_prep_cmnd(srb, &ses, NULL, 0, sizeof(regs));
+
 		/* we use the same command as before, but we set
 		 * the read taskfile bit, for not executing atacb command,
 		 * but reading register selected in srb->cmnd[4]
 		 */
+		srb->cmd_len = 16;
+		srb->cmnd = ses.cmnd;
 		srb->cmnd[2] = 1;
 
 		usb_stor_transparent_scsi_command(srb, us);
+		memcpy(regs, srb->sense_buffer, sizeof(regs));
 		tmp_result = srb->result;
 		scsi_eh_restore_cmnd(srb, &ses);
 		/* we fail to get registers, report invalid command */
@@ -162,8 +161,8 @@ void cypress_atacb_passthrough(struct sc
 
 		/* XXX we should generate sk, asc, ascq from status and error
 		 * regs
-		 * (see 11.1 Error translation ­ ATA device error to SCSI error map)
-		 * and ata_to_sense_error from libata.
+		 * (see 11.1 Error translation ATA device error to SCSI error
+		 *  map, and ata_to_sense_error from libata.)
 		 */
 
 		/* Sense data is current and format is descriptor. */


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 10/45] USB: usb-storage: increase max_sectors for tape drives
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (8 preceding siblings ...)
  2009-03-31 23:10 ` [patch 09/45] USB: fix USB_STORAGE_CYPRESS_ATACB Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 11/45] USB: gadget: fix rndis regression Chris Wright
                   ` (39 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Alan Stern, Greg Kroah-Hartman

[-- Attachment #1: usb-usb-storage-increase-max_sectors-for-tape-drives.patch --]
[-- Type: text/plain, Size: 1516 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Alan Stern <stern@rowland.harvard.edu>

upstream commit: 5c16034d73da2c1b663aa25dedadbc533b3d811c

This patch (as1203) increases the max_sector limit for USB tape
drives.  By default usb-storage sets max_sectors to 240 (i.e., 120 KB)
for all devices.  But tape drives need a higher limit, since tapes can
and do have very large block sizes.  Without the ability to transfer
an entire large block in a single command, such tapes can't be used.

This fixes Bugzilla #12207.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Reported-and-tested-by: Phil Mitchell <philipm@sybase.com>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/usb/storage/scsiglue.c |    6 ++++++
 1 file changed, 6 insertions(+)

--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -135,6 +135,12 @@ static int slave_configure(struct scsi_d
 		if (sdev->request_queue->max_sectors > max_sectors)
 			blk_queue_max_sectors(sdev->request_queue,
 					      max_sectors);
+	} else if (sdev->type == TYPE_TAPE) {
+		/* Tapes need much higher max_sector limits, so just
+		 * raise it to the maximum possible (4 GB / 512) and
+		 * let the queue segment size sort out the real limit.
+		 */
+		blk_queue_max_sectors(sdev->request_queue, 0x7FFFFF);
 	}
 
 	/* Some USB host controllers can't do DMA; they have to use PIO.


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 11/45] USB: gadget: fix rndis regression
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (9 preceding siblings ...)
  2009-03-31 23:10 ` [patch 10/45] USB: usb-storage: increase max_sectors for tape drives Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 12/45] USB: add quirk to avoid config and interface strings Chris Wright
                   ` (38 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, David Brownell, Greg Kroah-Hartman

[-- Attachment #1: usb-gadget-fix-rndis-regression.patch --]
[-- Type: text/plain, Size: 1478 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: David Brownell <dbrownell@users.sourceforge.net>

upstream commit: 090b90118207e786d2990310d063fda5d52cce6e

Restore some code that was wrongly dropped from the RNDIS
driver, and caused interop problems observed with OpenMoko.

The issue is with hardware which needs help conforming to part
of the USB 2.0 spec (section 8.5.3.2); some can automagically
send a ZLP in response to an unexpected IN, but not all chips
will do that.  We don't need to check the packet length ourselves
the way earlier code did, since the UDC must already check it.
But we do need to tell the UDC when it must force a short packet
termination of the data stage.

(Based on a patch from Aric D. Blumer <aric at sdgsystems.com>)

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/usb/gadget/f_rndis.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/usb/gadget/f_rndis.c
+++ b/drivers/usb/gadget/f_rndis.c
@@ -437,7 +437,7 @@ invalid:
 		DBG(cdev, "rndis req%02x.%02x v%04x i%04x l%d\n",
 			ctrl->bRequestType, ctrl->bRequest,
 			w_value, w_index, w_length);
-		req->zero = 0;
+		req->zero = (value < w_length);
 		req->length = value;
 		value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
 		if (value < 0)


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 12/45] USB: add quirk to avoid config and interface strings
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (10 preceding siblings ...)
  2009-03-31 23:10 ` [patch 11/45] USB: gadget: fix rndis regression Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 13/45] KVM: VMX: Dont allow uninhibited access to EFER on i386 Chris Wright
                   ` (37 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Alan Stern, Greg Kroah-Hartman

[-- Attachment #1: usb-add-quirk-to-avoid-config-and-interface-strings.patch --]
[-- Type: text/plain, Size: 2932 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Alan Stern <stern@rowland.harvard.edu>

upstream commit: 1662e3a7f076e51e3073faf9ce77157b529c475b

Apparently the Configuration and Interface strings aren't used as
often as the Vendor, Product, and Serial strings.  In at least one
device (a Saitek Cyborg Gold 3D joystick), attempts to read the
Configuration string cause the device to stop responding to Control
requests.

This patch (as1226) adds a quirks flag, telling the kernel not to
read a device's Configuration or Interface strings, together with a
new quirk for the offending joystick.

Reported-by: Melchior FRANZ <melchior.franz@gmail.com>
Tested-by: Melchior FRANZ <melchior.franz@gmail.com>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/usb/core/message.c |    3 ++-
 drivers/usb/core/quirks.c  |    4 ++++
 drivers/usb/core/sysfs.c   |    4 +++-
 include/linux/usb/quirks.h |    3 +++
 4 files changed, 12 insertions(+), 2 deletions(-)

--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -1719,7 +1719,8 @@ free_interfaces:
 	}
 	kfree(new_interfaces);
 
-	if (cp->string == NULL)
+	if (cp->string == NULL &&
+			!(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
 		cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
 
 	/* Now that all the interfaces are set up, register them
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -54,6 +54,10 @@ static const struct usb_device_id usb_qu
 	{ USB_DEVICE(0x0638, 0x0a13), .driver_info =
 	  USB_QUIRK_STRING_FETCH_255 },
 
+	/* Saitek Cyborg Gold Joystick */
+	{ USB_DEVICE(0x06a3, 0x0006), .driver_info =
+			USB_QUIRK_CONFIG_INTF_STRINGS },
+
 	/* M-Systems Flash Disk Pioneers */
 	{ USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
 
--- a/drivers/usb/core/sysfs.c
+++ b/drivers/usb/core/sysfs.c
@@ -13,6 +13,7 @@
 #include <linux/kernel.h>
 #include <linux/string.h>
 #include <linux/usb.h>
+#include <linux/usb/quirks.h>
 #include "usb.h"
 
 /* Active configuration fields */
@@ -813,7 +814,8 @@ int usb_create_sysfs_intf_files(struct u
 	if (intf->sysfs_files_created || intf->unregistering)
 		return 0;
 
-	if (alt->string == NULL)
+	if (alt->string == NULL &&
+			!(udev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
 		alt->string = usb_cache_string(udev, alt->desc.iInterface);
 	if (alt->string)
 		retval = device_create_file(&intf->dev, &dev_attr_interface);
--- a/include/linux/usb/quirks.h
+++ b/include/linux/usb/quirks.h
@@ -16,4 +16,7 @@
 /* device can't handle Set-Interface requests */
 #define USB_QUIRK_NO_SET_INTF		0x00000004
 
+/* device can't handle its Configuration or Interface strings */
+#define USB_QUIRK_CONFIG_INTF_STRINGS	0x00000008
+
 #endif /* __LINUX_USB_QUIRKS_H */


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 13/45] KVM: VMX: Dont allow uninhibited access to EFER on i386
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (11 preceding siblings ...)
  2009-03-31 23:10 ` [patch 12/45] USB: add quirk to avoid config and interface strings Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:10 ` [patch 14/45] KVM: SVM: set accessed bit for VMCB segment selectors Chris Wright
                   ` (36 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Avi Kivity

[-- Attachment #1: kvm-vmx-don-t-allow-uninhibited-access-to-efer-on-i386.patch --]
[-- Type: text/plain, Size: 1094 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Avi Kivity <avi@redhat.com>

upstream commit: 16175a796d061833aacfbd9672235f2d2725df65

vmx_set_msr() does not allow i386 guests to touch EFER, but they can still
do so through the default: label in the switch.  If they set EFER_LME, they
can oops the host.

Fix by having EFER access through the normal channel (which will check for
EFER_LME) even on i386.

Reported-and-tested-by: Benjamin Gilbert <bgilbert@cs.cmu.edu>
Cc: stable@kernel.org
Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/x86/kvm/vmx.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -928,11 +928,11 @@ static int vmx_set_msr(struct kvm_vcpu *
 	int ret = 0;
 
 	switch (msr_index) {
-#ifdef CONFIG_X86_64
 	case MSR_EFER:
 		vmx_load_host_state(vmx);
 		ret = kvm_set_msr_common(vcpu, msr_index, data);
 		break;
+#ifdef CONFIG_X86_64
 	case MSR_FS_BASE:
 		vmcs_writel(GUEST_FS_BASE, data);
 		break;


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 14/45] KVM: SVM: set accessed bit for VMCB segment selectors
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (12 preceding siblings ...)
  2009-03-31 23:10 ` [patch 13/45] KVM: VMX: Dont allow uninhibited access to EFER on i386 Chris Wright
@ 2009-03-31 23:10 ` Chris Wright
  2009-03-31 23:11 ` [patch 15/45] ath9k: downgrade xmit queue full message to xmit debug Chris Wright
                   ` (35 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:10 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Andre Przywara, Amit Shah, Avi Kivity

[-- Attachment #1: kvm-svm-set-accessed-bit-for-vmcb-segment-selectors.patch --]
[-- Type: text/plain, Size: 2204 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Andre Przywara <andre.przywara@amd.com>

upstream commit: 1fbdc7a58512a6283e10fd27108197679db95ffa

In the segment descriptor _cache_ the accessed bit is always set
(although it can be cleared in the descriptor itself). Since Intel
checks for this condition on a VMENTRY, set this bit in the AMD path
to enable cross vendor migration.

Cc: stable@kernel.org
Signed-off-by: Andre Przywara <andre.przywara@amd.com>
Acked-By: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/x86/kvm/svm.c |   41 +++++++++++++++++++++++++++++------------
 1 file changed, 29 insertions(+), 12 deletions(-)

--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -760,20 +760,37 @@ static void svm_get_segment(struct kvm_v
 	var->db = (s->attrib >> SVM_SELECTOR_DB_SHIFT) & 1;
 	var->g = (s->attrib >> SVM_SELECTOR_G_SHIFT) & 1;
 
-	/*
-	 * SVM always stores 0 for the 'G' bit in the CS selector in
-	 * the VMCB on a VMEXIT. This hurts cross-vendor migration:
-	 * Intel's VMENTRY has a check on the 'G' bit.
-	 */
-	if (seg == VCPU_SREG_CS)
+	switch (seg) {
+	case VCPU_SREG_CS:
+		/*
+		 * SVM always stores 0 for the 'G' bit in the CS selector in
+		 * the VMCB on a VMEXIT. This hurts cross-vendor migration:
+		 * Intel's VMENTRY has a check on the 'G' bit.
+		 */
 		var->g = s->limit > 0xfffff;
-
-	/*
-	 * Work around a bug where the busy flag in the tr selector
-	 * isn't exposed
-	 */
-	if (seg == VCPU_SREG_TR)
+		break;
+	case VCPU_SREG_TR:
+		/*
+		 * Work around a bug where the busy flag in the tr selector
+		 * isn't exposed
+		 */
 		var->type |= 0x2;
+		break;
+	case VCPU_SREG_DS:
+	case VCPU_SREG_ES:
+	case VCPU_SREG_FS:
+	case VCPU_SREG_GS:
+		/*
+		 * The accessed bit must always be set in the segment
+		 * descriptor cache, although it can be cleared in the
+		 * descriptor, the cached bit always remains at 1. Since
+		 * Intel has a check on this, set it here to support
+		 * cross-vendor migration.
+		 */
+		if (!var->unusable)
+			var->type |= 0x1;
+		break;
+	}
 
 	var->unusable = !var->present;
 }


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 15/45] ath9k: downgrade xmit queue full message to xmit debug
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (13 preceding siblings ...)
  2009-03-31 23:10 ` [patch 14/45] KVM: SVM: set accessed bit for VMCB segment selectors Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 16/45] cifs: fix buffer format byte on NT Rename/hardlink Chris Wright
                   ` (34 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Luis R. Rodriguez, John W Linville

[-- Attachment #1: ath9k-downgrade-xmit-queue-full-message-to-xmit-debug.patch --]
[-- Type: text/plain, Size: 1267 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Luis R. Rodriguez <lrodriguez@atheros.com>

upstream commit: c117fa0bf5f5b3d362b590ed6e80499defe14505

This is not a fatal message, hitting it simply means we're
going to tell the upper layers to slow their horses down but
as we make more descriptors available we let the show continue
by waking up the queues in ath_wake_mac80211_queue().

We downgrade this as otherwise we fill up your kernel log with
messages which can be common under heavy traffic.

Cc: stable@kernel.org
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/net/wireless/ath9k/xmit.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/net/wireless/ath9k/xmit.c
+++ b/drivers/net/wireless/ath9k/xmit.c
@@ -2035,7 +2035,7 @@ struct ath_txq *ath_test_get_txq(struct 
 
 	/* Try to avoid running out of descriptors */
 	if (txq->axq_depth >= (ATH_TXBUF - 20)) {
-		DPRINTF(sc, ATH_DBG_FATAL,
+		DPRINTF(sc, ATH_DBG_XMIT,
 			"TX queue: %d is full, depth: %d\n",
 			qnum, txq->axq_depth);
 		ieee80211_stop_queue(sc->hw, skb_get_queue_mapping(skb));


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 16/45] cifs: fix buffer format byte on NT Rename/hardlink
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (14 preceding siblings ...)
  2009-03-31 23:11 ` [patch 15/45] ath9k: downgrade xmit queue full message to xmit debug Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 17/45] ath5k: use spin_lock_irqsave for beacon lock Chris Wright
                   ` (33 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Jeff Layton, Jeff Layton, Steve French

[-- Attachment #1: cifs-fix-buffer-format-byte-on-nt-rename-hardlink.patch --]
[-- Type: text/plain, Size: 1307 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Jeff Layton <jlayton@tupile.poochiereds.net>

upstream commit: fcc7c09d94be7b75c9ea2beb22d0fae191c6b4b9

Discovered at Connnectathon 2009...

The buffer format byte and the pad are transposed in NT_RENAME calls
(which are used to set hardlinks). Most servers seem to ignore this
fact, but NetApp filers throw back an error due to this problem. This
patch fixes it.

CC: Stable <stable@kernel.org>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 fs/cifs/cifssmb.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

--- a/fs/cifs/cifssmb.c
+++ b/fs/cifs/cifssmb.c
@@ -2356,8 +2356,10 @@ winCreateHardLinkRetry:
 				     PATH_MAX, nls_codepage, remap);
 		name_len++;	/* trailing null */
 		name_len *= 2;
-		pSMB->OldFileName[name_len] = 0;	/* pad */
-		pSMB->OldFileName[name_len + 1] = 0x04;
+
+		/* protocol specifies ASCII buffer format (0x04) for unicode */
+		pSMB->OldFileName[name_len] = 0x04;
+		pSMB->OldFileName[name_len + 1] = 0x00; /* pad */
 		name_len2 =
 		    cifsConvertToUCS((__le16 *)&pSMB->OldFileName[name_len + 2],
 				     toName, PATH_MAX, nls_codepage, remap);


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 17/45] ath5k: use spin_lock_irqsave for beacon lock
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (15 preceding siblings ...)
  2009-03-31 23:11 ` [patch 16/45] cifs: fix buffer format byte on NT Rename/hardlink Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 18/45] ath9k: fix dma mapping leak of rx buffer upon rmmod Chris Wright
                   ` (32 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Bob Copeland, John W Linville

[-- Attachment #1: ath5k-use-spin_lock_irqsave-for-beacon-lock.patch --]
[-- Type: text/plain, Size: 1546 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Bob Copeland <me@bobcopeland.com>

upstream commit: b5f03956c56d72ad336e5c2c42a025f25d952c30

ath5k_reset can be called from process context, which in turn can
call ath5k_beacon_config which takes the sc->block spinlock.  Since
it can also be taken in hard irq context, use spin_lock_irqsave
everywhere.  This fixes a potential deadlock in adhoc mode.

Changes-licensed-under: 3-Clause-BSD

Cc: stable@kernel.org
Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/net/wireless/ath5k/base.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/drivers/net/wireless/ath5k/base.c
+++ b/drivers/net/wireless/ath5k/base.c
@@ -1668,7 +1668,6 @@ ath5k_check_ibss_tsf(struct ath5k_softc 
 	}
 }
 
-
 static void
 ath5k_tasklet_rx(unsigned long data)
 {
@@ -2188,6 +2187,7 @@ static void
 ath5k_beacon_config(struct ath5k_softc *sc)
 {
 	struct ath5k_hw *ah = sc->ah;
+	unsigned long flags;
 
 	ath5k_hw_set_imr(ah, 0);
 	sc->bmisscount = 0;
@@ -2211,9 +2211,9 @@ ath5k_beacon_config(struct ath5k_softc *
 
 		if (sc->opmode == NL80211_IFTYPE_ADHOC) {
 			if (ath5k_hw_hasveol(ah)) {
-				spin_lock(&sc->block);
+				spin_lock_irqsave(&sc->block, flags);
 				ath5k_beacon_send(sc);
-				spin_unlock(&sc->block);
+				spin_unlock_irqrestore(&sc->block, flags);
 			}
 		} else
 			ath5k_beacon_update_timers(sc, -1);


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 18/45] ath9k: fix dma mapping leak of rx buffer upon rmmod
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (16 preceding siblings ...)
  2009-03-31 23:11 ` [patch 17/45] ath5k: use spin_lock_irqsave for beacon lock Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 19/45] b43: fix b43_plcp_get_bitrate_idx_ofdm return type Chris Wright
                   ` (31 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Luis R. Rodriguez, FUJITA Tomonori, John W Linville

[-- Attachment #1: ath9k-fix-dma-mapping-leak-of-rx-buffer-upon-rmmod.patch --]
[-- Type: text/plain, Size: 1092 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Luis R. Rodriguez <lrodriguez@atheros.com>

upstream commit: 051b919188650fe4c93ca8701183ae88439388f6

We were claiming DMA buffers on the RX tasklet but never
upon a simple module removal.

Cc: stable@kernel.org
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
[chrisw: backport to 2.6.29]
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/net/wireless/ath9k/recv.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

--- a/drivers/net/wireless/ath9k/recv.c
+++ b/drivers/net/wireless/ath9k/recv.c
@@ -322,8 +322,13 @@ void ath_rx_cleanup(struct ath_softc *sc
 
 	list_for_each_entry(bf, &sc->rx.rxbuf, list) {
 		skb = bf->bf_mpdu;
-		if (skb)
+		if (skb) {
+			pci_unmap_single(sc->pdev,
+					 bf->bf_buf_addr,
+					 sc->rx.bufsize,
+					 DMA_FROM_DEVICE);
 			dev_kfree_skb(skb);
+		}
 	}
 
 	if (sc->rx.rxdma.dd_desc_len != 0)


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 19/45] b43: fix b43_plcp_get_bitrate_idx_ofdm return type
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (17 preceding siblings ...)
  2009-03-31 23:11 ` [patch 18/45] ath9k: fix dma mapping leak of rx buffer upon rmmod Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 20/45] ath5k: disable MIB interrupts Chris Wright
                   ` (30 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Lorenzo Nava, Michael Buesch, John W Linville

[-- Attachment #1: b43-fix-b43_plcp_get_bitrate_idx_ofdm-return-type.patch --]
[-- Type: text/plain, Size: 1175 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Lorenzo Nava <navalorenx@gmail.com>

upstream commit: a3c0b87c4f21911fb7185902dd13f0e3cd7f33f7

This patch fixes the return type of b43_plcp_get_bitrate_idx_ofdm. If
the plcp contains an error, the function return value is 255 instead
of -1, and the packet was not dropped. This causes a warning in
__ieee80211_rx function because rate idx is out of range.

Cc: stable@kernel.org
Signed-off-by: Lorenzo Nava <navalorenx@gmail.com>
Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/net/wireless/b43/xmit.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/net/wireless/b43/xmit.c
+++ b/drivers/net/wireless/b43/xmit.c
@@ -50,7 +50,7 @@ static int b43_plcp_get_bitrate_idx_cck(
 }
 
 /* Extract the bitrate index out of an OFDM PLCP header. */
-static u8 b43_plcp_get_bitrate_idx_ofdm(struct b43_plcp_hdr6 *plcp, bool aphy)
+static int b43_plcp_get_bitrate_idx_ofdm(struct b43_plcp_hdr6 *plcp, bool aphy)
 {
 	int base = aphy ? 0 : 4;
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 20/45] ath5k: disable MIB interrupts
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (18 preceding siblings ...)
  2009-03-31 23:11 ` [patch 19/45] b43: fix b43_plcp_get_bitrate_idx_ofdm return type Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 21/45] ath5k: warn and correct rate for unknown hw rate indexes Chris Wright
                   ` (29 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Bob Copeland, John W Linville

[-- Attachment #1: ath5k-disable-mib-interrupts.patch --]
[-- Type: text/plain, Size: 1323 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Bob Copeland <me@bobcopeland.com>

upstream commit: 9ca9fb8aa8422595956af9681518cdb8b167055e

The MIB interrupt fires whenever counters overflow; however without
support for automatic noise immunity, we can sometimes get an interrupt
storm.  The get_stats() callback reads the counters anyway so we can
disable the interrupt for now until ANI is implemented.  This fixes
the issue reported in http://bugzilla.kernel.org/show_bug.cgi?id=12647.

Changes-licensed-under: 3-Clause-BSD

Cc: stable@kernel.org
Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/net/wireless/ath5k/base.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/net/wireless/ath5k/base.c
+++ b/drivers/net/wireless/ath5k/base.c
@@ -2259,7 +2259,7 @@ ath5k_init(struct ath5k_softc *sc, bool 
 	sc->curband = &sc->sbands[sc->curchan->band];
 	sc->imask = AR5K_INT_RXOK | AR5K_INT_RXERR | AR5K_INT_RXEOL |
 		AR5K_INT_RXORN | AR5K_INT_TXDESC | AR5K_INT_TXEOL |
-		AR5K_INT_FATAL | AR5K_INT_GLOBAL | AR5K_INT_MIB;
+		AR5K_INT_FATAL | AR5K_INT_GLOBAL;
 	ret = ath5k_reset(sc, false, false);
 	if (ret)
 		goto done;


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 21/45] ath5k: warn and correct rate for unknown hw rate indexes
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (19 preceding siblings ...)
  2009-03-31 23:11 ` [patch 20/45] ath5k: disable MIB interrupts Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 22/45] CIFS: Fix memory overwrite when saving nativeFileSystem field during mount Chris Wright
                   ` (28 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Bob Copeland, John W Linville

[-- Attachment #1: ath5k-warn-and-correct-rate-for-unknown-hw-rate-indexes.patch --]
[-- Type: text/plain, Size: 2220 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Bob Copeland <me@bobcopeland.com>

upstream commit: b726604706ad88d8b28bc487e45e710f58cc19ee

ath5k sets up a mapping table from the hardware rate index to
the rate index used by mac80211; however, we have seen some
received frames with incorrect rate indexes.  Such frames
normally get dropped with a warning in __ieee80211_rx(),
but it doesn't include enough information to track down the
error.

This patch adds a warning to hw_to_driver_rix for any lookups
that result in a rate index of -1, then returns a valid rate so
the frame can be processed.

Changes-licensed-under: 3-Clause-BSD

Signed-off-by: Bob Copeland <me@bobcopeland.com>
Cc: stable@kernel.org
Signed-off-by: John W. Linville <linville@tuxdriver.com>
[chrisw: add db5b4f7ae3901fdc48c5b988fc2a5e0cb4ec1870 to backport]
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/net/wireless/ath5k/base.c |   14 ++++++++++++--
 drivers/net/wireless/ath5k/base.h |    2 +-
 2 files changed, 13 insertions(+), 3 deletions(-)

--- a/drivers/net/wireless/ath5k/base.c
+++ b/drivers/net/wireless/ath5k/base.c
@@ -1090,8 +1090,18 @@ ath5k_mode_setup(struct ath5k_softc *sc)
 static inline int
 ath5k_hw_to_driver_rix(struct ath5k_softc *sc, int hw_rix)
 {
-	WARN_ON(hw_rix < 0 || hw_rix > AR5K_MAX_RATES);
-	return sc->rate_idx[sc->curband->band][hw_rix];
+	int rix;
+
+	/* return base rate on errors */
+	if (WARN(hw_rix < 0 || hw_rix >= AR5K_MAX_RATES,
+			"hw_rix out of bounds: %x\n", hw_rix))
+		return 0;
+
+	rix = sc->rate_idx[sc->curband->band][hw_rix];
+	if (WARN(rix < 0, "invalid hw_rix: %x\n", hw_rix))
+		rix = 0;
+
+	return rix;
 }
 
 /***************\
--- a/drivers/net/wireless/ath5k/base.h
+++ b/drivers/net/wireless/ath5k/base.h
@@ -112,7 +112,7 @@ struct ath5k_softc {
 	struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
 	struct ieee80211_channel channels[ATH_CHAN_MAX];
 	struct ieee80211_rate	rates[IEEE80211_NUM_BANDS][AR5K_MAX_RATES];
-	u8			rate_idx[IEEE80211_NUM_BANDS][AR5K_MAX_RATES];
+	s8			rate_idx[IEEE80211_NUM_BANDS][AR5K_MAX_RATES];
 	enum nl80211_iftype	opmode;
 	struct ath5k_hw		*ah;		/* Atheros HW */
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 22/45] CIFS: Fix memory overwrite when saving nativeFileSystem field during mount
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (20 preceding siblings ...)
  2009-03-31 23:11 ` [patch 21/45] ath5k: warn and correct rate for unknown hw rate indexes Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 23/45] cfg80211: force last_request to be set for OLD_REG if regdom is EU Chris Wright
                   ` (27 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Steve French, Sridhar Vinay, Shirish Pargaonkar

[-- Attachment #1: cifs-fix-memory-overwrite-when-saving-nativefilesystem-field-during-mount.patch --]
[-- Type: text/plain, Size: 1643 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Steve French <sfrench@us.ibm.com>

upstream commit: b363b3304bcf68c4541683b2eff70b29f0446a5b

CIFS can allocate a few bytes to little for the nativeFileSystem field
during tree connect response processing during mount.  This can result
in a "Redzone overwritten" message to be logged.

Signed-off-by: Sridhar Vinay <vinaysridhar@in.ibm.com>
Acked-by: Shirish Pargaonkar <shirishp@us.ibm.com>
CC: Stable <stable@kernel.org>
Signed-off-by: Steve French <sfrench@us.ibm.com>
[chrisw: minor backport to CHANGES file]
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 fs/cifs/CHANGES   |    3 +++
 fs/cifs/connect.c |    2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

--- a/fs/cifs/CHANGES
+++ b/fs/cifs/CHANGES
@@ -7,6 +7,9 @@ are authenticated as guest, as reconnect
 user's smb session.  This fix allows cifs to mount multiple times to the
 same server with different userids without risking invalidating earlier
 established security contexts.
+Fix "redzone overwritten" bug in cifs_put_tcon (CIFSTcon may allocate too
+little memory for the "nativeFileSystem" field returned by the server
+during mount). 
 
 Version 1.56
 ------------
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -3667,7 +3667,7 @@ CIFSTCon(unsigned int xid, struct cifsSe
 			    BCC(smb_buffer_response)) {
 				kfree(tcon->nativeFileSystem);
 				tcon->nativeFileSystem =
-				    kzalloc(length + 2, GFP_KERNEL);
+				    kzalloc(2*(length + 1), GFP_KERNEL);
 				if (tcon->nativeFileSystem)
 					cifs_strfromUCS_le(
 						tcon->nativeFileSystem,


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 23/45] cfg80211: force last_request to be set for OLD_REG if regdom is EU
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (21 preceding siblings ...)
  2009-03-31 23:11 ` [patch 22/45] CIFS: Fix memory overwrite when saving nativeFileSystem field during mount Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 24/45] DVB: firedtv: FireDTV S2 problems with tuning solved Chris Wright
                   ` (26 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Luis R. Rodriguez, John W Linville

[-- Attachment #1: cfg80211-force-last_request-to-be-set-for-old_reg-if-regdom-is-eu.patch --]
[-- Type: text/plain, Size: 1939 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Luis R. Rodriguez <lrodriguez@atheros.com>

upstream commit: 2e097dc65673ed421bbc2e49f52c125aa43a8ee6

Although EU is a bogus alpha2 we need to process the send request
as our code depends on last_request being set.

Cc: stable@kernel.org
Reported-by: Quentin Armitage <Quentin@armitage.org.uk>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
[chrisw: backport to 2.6.29]
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
Port-acked-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---

 net/wireless/reg.c |   17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1469,13 +1469,20 @@ int regulatory_init(void)
 
 	printk(KERN_INFO "cfg80211: Using static regulatory domain info\n");
 	print_regdomain_info(cfg80211_regdomain);
-	/* The old code still requests for a new regdomain and if
+	/*
+	 * The old code still requests for a new regdomain and if
 	 * you have CRDA you get it updated, otherwise you get
 	 * stuck with the static values. We ignore "EU" code as
-	 * that is not a valid ISO / IEC 3166 alpha2 */
-	if (ieee80211_regdom[0] != 'E' || ieee80211_regdom[1] != 'U')
-		err = __regulatory_hint(NULL, REGDOM_SET_BY_CORE,
-					ieee80211_regdom, 0, ENVIRON_ANY);
+	 * that is not a valid ISO / IEC 3166 alpha2
+	 * stuck with the static values. Since "EU" is not a valid
+	 * ISO / IEC 3166 alpha2 code we can't expect userpace to
+	 * give us a regulatory domain for it. We need last_request
+	 * iniitalized though so lets just send a request which we
+	 * know will be ignored... this crap will be removed once
+	 * OLD_REG dies.
+	 */
+	err = __regulatory_hint(NULL, REGDOM_SET_BY_CORE,
+				ieee80211_regdom, 0, ENVIRON_ANY);
 #else
 	cfg80211_regdomain = cfg80211_world_regdom;
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 24/45] DVB: firedtv: FireDTV S2 problems with tuning solved
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (22 preceding siblings ...)
  2009-03-31 23:11 ` [patch 23/45] cfg80211: force last_request to be set for OLD_REG if regdom is EU Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 25/45] SCSI: sg: fix races during device removal Chris Wright
                   ` (25 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Beat Michel Liechti, Stefan Richter

[-- Attachment #1: dvb-firedtv-firedtv-s2-problems-with-tuning-solved.patch --]
[-- Type: text/plain, Size: 1698 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Beat Michel Liechti <bml303@gmail.com>

upstream commit: 32a0f488ce5e8a9a148491f15edc508ab5e8265b

Tuning was broken on FireDTV S2 (and presumably  FloppyDTV S2) because a
wrong opcode was sent.  The box only gave "not implemented" responses.
Changing the opcode to _TUNE_QPSK2 fixes this for good.

Cc: stable@kernel.org
Signed-off-by: Beat Michel Liechti <bml303@gmail.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/media/dvb/firewire/firedtv-avc.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- a/drivers/media/dvb/firewire/firedtv-avc.c
+++ b/drivers/media/dvb/firewire/firedtv-avc.c
@@ -135,6 +135,7 @@ static const char *debug_fcp_opcode(unsi
 	case SFE_VENDOR_OPCODE_REGISTER_REMOTE_CONTROL:	return "RegisterRC";
 	case SFE_VENDOR_OPCODE_LNB_CONTROL:		return "LNBControl";
 	case SFE_VENDOR_OPCODE_TUNE_QPSK:		return "TuneQPSK";
+	case SFE_VENDOR_OPCODE_TUNE_QPSK2:		return "TuneQPSK2";
 	case SFE_VENDOR_OPCODE_HOST2CA:			return "Host2CA";
 	case SFE_VENDOR_OPCODE_CA2HOST:			return "CA2Host";
 	}
@@ -266,7 +267,10 @@ static void avc_tuner_tuneqpsk(struct fi
 	c->operand[0] = SFE_VENDOR_DE_COMPANYID_0;
 	c->operand[1] = SFE_VENDOR_DE_COMPANYID_1;
 	c->operand[2] = SFE_VENDOR_DE_COMPANYID_2;
-	c->operand[3] = SFE_VENDOR_OPCODE_TUNE_QPSK;
+	if (fdtv->type == FIREDTV_DVB_S2)
+		c->operand[3] = SFE_VENDOR_OPCODE_TUNE_QPSK2;
+	else
+		c->operand[3] = SFE_VENDOR_OPCODE_TUNE_QPSK;
 
 	c->operand[4] = (params->frequency >> 24) & 0xff;
 	c->operand[5] = (params->frequency >> 16) & 0xff;


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 25/45] SCSI: sg: fix races during device removal
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (23 preceding siblings ...)
  2009-03-31 23:11 ` [patch 24/45] DVB: firedtv: FireDTV S2 problems with tuning solved Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:31   ` Linus Torvalds
  2009-03-31 23:11 ` [patch 26/45] SCSI: sg: fix races with ioctl(SG_IO) Chris Wright
                   ` (24 subsequent siblings)
  49 siblings, 1 reply; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Tony Battersby, FUJITA Tomonori, Douglas Gilbert,
	James Bottomley

[-- Attachment #1: scsi-sg-fix-races-during-device-removal.patch --]
[-- Type: text/plain, Size: 22327 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Tony Battersby <tonyb@cybernetics.com>

upstream commit: c6517b7942fad663cc1cf3235cbe4207cf769332

sg has the following problems related to device removal:

* opening a sg fd races with removing a device
* closing a sg fd races with removing a device
* /proc/scsi/sg/* access races with removing a device
* command completion races with removing a device
* command completion races with closing a sg fd
* can rmmod sg with active commands

These problems can cause kernel oopses, memory-use-after-free, or
double-free errors.  This patch fixes these problems by using krefs
to manage the lifetime of sg_device and sg_fd.

Each command submitted to the midlevel holds a reference to sg_fd
until the completion callback.  This ensures that sg_fd doesn't go
away if the fd is closed with commands still outstanding.

sg_fd gets the reference of sg_device (with scsi_device) and also
makes sure that the sg module doesn't go away.

/proc/scsi/sg/* functions don't play nicely with krefs because they
give information about sg_fds which have been closed but not yet
freed due to still having outstanding commands and sg_devices which
have been removed but not yet freed due to still being referenced
by one or more sg_fds.  To deal with this safely without removing
functionality, /proc functions now access sg_device and sg_fd while
holding a lock instead of using kref_get()/kref_put().

Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/scsi/sg.c |  418 +++++++++++++++++++++++++-----------------------------
 1 file changed, 201 insertions(+), 217 deletions(-)

--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -101,6 +101,7 @@ static int scatter_elem_sz_prev = SG_SCA
 #define SG_SECTOR_MSK (SG_SECTOR_SZ - 1)
 
 static int sg_add(struct device *, struct class_interface *);
+static void sg_device_destroy(struct kref *kref);
 static void sg_remove(struct device *, struct class_interface *);
 
 static DEFINE_IDR(sg_index_idr);
@@ -158,6 +159,8 @@ typedef struct sg_fd {		/* holds the sta
 	char next_cmd_len;	/* 0 -> automatic (def), >0 -> use on next write() */
 	char keep_orphan;	/* 0 -> drop orphan (def), 1 -> keep for read() */
 	char mmap_called;	/* 0 -> mmap() never called on this fd */
+	struct kref f_ref;
+	struct execute_work ew;
 } Sg_fd;
 
 typedef struct sg_device { /* holds the state of each scsi generic device */
@@ -171,6 +174,7 @@ typedef struct sg_device { /* holds the 
 	char sgdebug;		/* 0->off, 1->sense, 9->dump dev, 10-> all devs */
 	struct gendisk *disk;
 	struct cdev * cdev;	/* char_dev [sysfs: /sys/cdev/major/sg<n>] */
+	struct kref d_ref;
 } Sg_device;
 
 static int sg_fasync(int fd, struct file *filp, int mode);
@@ -194,13 +198,14 @@ static void sg_build_reserve(Sg_fd * sfp
 static void sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size);
 static void sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp);
 static Sg_fd *sg_add_sfp(Sg_device * sdp, int dev);
-static int sg_remove_sfp(Sg_device * sdp, Sg_fd * sfp);
-static void __sg_remove_sfp(Sg_device * sdp, Sg_fd * sfp);
+static void sg_remove_sfp(struct kref *);
 static Sg_request *sg_get_rq_mark(Sg_fd * sfp, int pack_id);
 static Sg_request *sg_add_request(Sg_fd * sfp);
 static int sg_remove_request(Sg_fd * sfp, Sg_request * srp);
 static int sg_res_in_use(Sg_fd * sfp);
+static Sg_device *sg_lookup_dev(int dev);
 static Sg_device *sg_get_dev(int dev);
+static void sg_put_dev(Sg_device *sdp);
 #ifdef CONFIG_SCSI_PROC_FS
 static int sg_last_dev(void);
 #endif
@@ -237,22 +242,17 @@ sg_open(struct inode *inode, struct file
 	nonseekable_open(inode, filp);
 	SCSI_LOG_TIMEOUT(3, printk("sg_open: dev=%d, flags=0x%x\n", dev, flags));
 	sdp = sg_get_dev(dev);
-	if ((!sdp) || (!sdp->device)) {
-		unlock_kernel();
-		return -ENXIO;
-	}
-	if (sdp->detached) {
-		unlock_kernel();
-		return -ENODEV;
+	if (IS_ERR(sdp)) {
+		retval = PTR_ERR(sdp);
+		sdp = NULL;
+		goto sg_put;
 	}
 
 	/* This driver's module count bumped by fops_get in <linux/fs.h> */
 	/* Prevent the device driver from vanishing while we sleep */
 	retval = scsi_device_get(sdp->device);
-	if (retval) {
-		unlock_kernel();
-		return retval;
-	}
+	if (retval)
+		goto sg_put;
 
 	if (!((flags & O_NONBLOCK) ||
 	      scsi_block_when_processing_errors(sdp->device))) {
@@ -303,16 +303,20 @@ sg_open(struct inode *inode, struct file
 	if ((sfp = sg_add_sfp(sdp, dev)))
 		filp->private_data = sfp;
 	else {
-		if (flags & O_EXCL)
+		if (flags & O_EXCL) {
 			sdp->exclude = 0;	/* undo if error */
+			wake_up_interruptible(&sdp->o_excl_wait);
+		}
 		retval = -ENOMEM;
 		goto error_out;
 	}
-	unlock_kernel();
-	return 0;
-
-      error_out:
-	scsi_device_put(sdp->device);
+	retval = 0;
+error_out:
+	if (retval)
+		scsi_device_put(sdp->device);
+sg_put:
+	if (sdp)
+		sg_put_dev(sdp);
 	unlock_kernel();
 	return retval;
 }
@@ -327,13 +331,13 @@ sg_release(struct inode *inode, struct f
 	if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
 		return -ENXIO;
 	SCSI_LOG_TIMEOUT(3, printk("sg_release: %s\n", sdp->disk->disk_name));
-	if (0 == sg_remove_sfp(sdp, sfp)) {	/* Returns 1 when sdp gone */
-		if (!sdp->detached) {
-			scsi_device_put(sdp->device);
-		}
-		sdp->exclude = 0;
-		wake_up_interruptible(&sdp->o_excl_wait);
-	}
+
+	sfp->closed = 1;
+
+	sdp->exclude = 0;
+	wake_up_interruptible(&sdp->o_excl_wait);
+
+	kref_put(&sfp->f_ref, sg_remove_sfp);
 	return 0;
 }
 
@@ -755,6 +759,7 @@ sg_common_write(Sg_fd * sfp, Sg_request 
 	hp->duration = jiffies_to_msecs(jiffies);
 
 	srp->rq->timeout = timeout;
+	kref_get(&sfp->f_ref); /* sg_rq_end_io() does kref_put(). */
 	blk_execute_rq_nowait(sdp->device->request_queue, sdp->disk,
 			      srp->rq, 1, sg_rq_end_io);
 	return 0;
@@ -1247,24 +1252,23 @@ sg_mmap(struct file *filp, struct vm_are
 static void sg_rq_end_io(struct request *rq, int uptodate)
 {
 	struct sg_request *srp = rq->end_io_data;
-	Sg_device *sdp = NULL;
+	Sg_device *sdp;
 	Sg_fd *sfp;
 	unsigned long iflags;
 	unsigned int ms;
 	char *sense;
-	int result, resid;
+	int result, resid, done = 1;
 
-	if (NULL == srp) {
-		printk(KERN_ERR "sg_cmd_done: NULL request\n");
+	if (WARN_ON(srp->done != 0))
 		return;
-	}
+
 	sfp = srp->parentfp;
-	if (sfp)
-		sdp = sfp->parentdp;
-	if ((NULL == sdp) || sdp->detached) {
-		printk(KERN_INFO "sg_cmd_done: device detached\n");
+	if (WARN_ON(sfp == NULL))
 		return;
-	}
+
+	sdp = sfp->parentdp;
+	if (unlikely(sdp->detached))
+		printk(KERN_INFO "sg_rq_end_io: device detached\n");
 
 	sense = rq->sense;
 	result = rq->errors;
@@ -1303,33 +1307,26 @@ static void sg_rq_end_io(struct request 
 	}
 	/* Rely on write phase to clean out srp status values, so no "else" */
 
-	if (sfp->closed) {	/* whoops this fd already released, cleanup */
-		SCSI_LOG_TIMEOUT(1, printk("sg_cmd_done: already closed, freeing ...\n"));
-		sg_finish_rem_req(srp);
-		srp = NULL;
-		if (NULL == sfp->headrp) {
-			SCSI_LOG_TIMEOUT(1, printk("sg_cmd_done: already closed, final cleanup\n"));
-			if (0 == sg_remove_sfp(sdp, sfp)) {	/* device still present */
-				scsi_device_put(sdp->device);
-			}
-			sfp = NULL;
-		}
-	} else if (srp && srp->orphan) {
+	write_lock_irqsave(&sfp->rq_list_lock, iflags);
+	if (unlikely(srp->orphan)) {
 		if (sfp->keep_orphan)
 			srp->sg_io_owned = 0;
-		else {
-			sg_finish_rem_req(srp);
-			srp = NULL;
-		}
+		else
+			done = 0;
 	}
-	if (sfp && srp) {
-		/* Now wake up any sg_read() that is waiting for this packet. */
-		kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN);
-		write_lock_irqsave(&sfp->rq_list_lock, iflags);
-		srp->done = 1;
+	srp->done = done;
+	write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
+
+	if (likely(done)) {
+		/* Now wake up any sg_read() that is waiting for this
+		 * packet.
+		 */
 		wake_up_interruptible(&sfp->read_wait);
-		write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
-	}
+		kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN);
+	} else
+		sg_finish_rem_req(srp); /* call with srp->done == 0 */
+
+	kref_put(&sfp->f_ref, sg_remove_sfp);
 }
 
 static struct file_operations sg_fops = {
@@ -1364,17 +1361,18 @@ static Sg_device *sg_alloc(struct gendis
 		printk(KERN_WARNING "kmalloc Sg_device failure\n");
 		return ERR_PTR(-ENOMEM);
 	}
-	error = -ENOMEM;
+
 	if (!idr_pre_get(&sg_index_idr, GFP_KERNEL)) {
 		printk(KERN_WARNING "idr expansion Sg_device failure\n");
+		error = -ENOMEM;
 		goto out;
 	}
 
 	write_lock_irqsave(&sg_index_lock, iflags);
-	error = idr_get_new(&sg_index_idr, sdp, &k);
-	write_unlock_irqrestore(&sg_index_lock, iflags);
 
+	error = idr_get_new(&sg_index_idr, sdp, &k);
 	if (error) {
+		write_unlock_irqrestore(&sg_index_lock, iflags);
 		printk(KERN_WARNING "idr allocation Sg_device failure: %d\n",
 		       error);
 		goto out;
@@ -1391,6 +1389,9 @@ static Sg_device *sg_alloc(struct gendis
 	init_waitqueue_head(&sdp->o_excl_wait);
 	sdp->sg_tablesize = min(q->max_hw_segments, q->max_phys_segments);
 	sdp->index = k;
+	kref_init(&sdp->d_ref);
+
+	write_unlock_irqrestore(&sg_index_lock, iflags);
 
 	error = 0;
  out:
@@ -1401,6 +1402,8 @@ static Sg_device *sg_alloc(struct gendis
 	return sdp;
 
  overflow:
+	idr_remove(&sg_index_idr, k);
+	write_unlock_irqrestore(&sg_index_lock, iflags);
 	sdev_printk(KERN_WARNING, scsidp,
 		    "Unable to attach sg device type=%d, minor "
 		    "number exceeds %d\n", scsidp->type, SG_MAX_DEVS - 1);
@@ -1488,49 +1491,46 @@ out:
 	return error;
 }
 
-static void
-sg_remove(struct device *cl_dev, struct class_interface *cl_intf)
+static void sg_device_destroy(struct kref *kref)
+{
+	struct sg_device *sdp = container_of(kref, struct sg_device, d_ref);
+	unsigned long flags;
+
+	/* CAUTION!  Note that the device can still be found via idr_find()
+	 * even though the refcount is 0.  Therefore, do idr_remove() BEFORE
+	 * any other cleanup.
+	 */
+
+	write_lock_irqsave(&sg_index_lock, flags);
+	idr_remove(&sg_index_idr, sdp->index);
+	write_unlock_irqrestore(&sg_index_lock, flags);
+
+	SCSI_LOG_TIMEOUT(3,
+		printk("sg_device_destroy: %s\n",
+			sdp->disk->disk_name));
+
+	put_disk(sdp->disk);
+	kfree(sdp);
+}
+
+static void sg_remove(struct device *cl_dev, struct class_interface *cl_intf)
 {
 	struct scsi_device *scsidp = to_scsi_device(cl_dev->parent);
 	Sg_device *sdp = dev_get_drvdata(cl_dev);
 	unsigned long iflags;
 	Sg_fd *sfp;
-	Sg_fd *tsfp;
-	Sg_request *srp;
-	Sg_request *tsrp;
-	int delay;
 
-	if (!sdp)
+	if (!sdp || sdp->detached)
 		return;
 
-	delay = 0;
+	SCSI_LOG_TIMEOUT(3, printk("sg_remove: %s\n", sdp->disk->disk_name));
+
+	/* Need a write lock to set sdp->detached. */
 	write_lock_irqsave(&sg_index_lock, iflags);
-	if (sdp->headfp) {
-		sdp->detached = 1;
-		for (sfp = sdp->headfp; sfp; sfp = tsfp) {
-			tsfp = sfp->nextfp;
-			for (srp = sfp->headrp; srp; srp = tsrp) {
-				tsrp = srp->nextrp;
-				if (sfp->closed || (0 == sg_srp_done(srp, sfp)))
-					sg_finish_rem_req(srp);
-			}
-			if (sfp->closed) {
-				scsi_device_put(sdp->device);
-				__sg_remove_sfp(sdp, sfp);
-			} else {
-				delay = 1;
-				wake_up_interruptible(&sfp->read_wait);
-				kill_fasync(&sfp->async_qp, SIGPOLL,
-					    POLL_HUP);
-			}
-		}
-		SCSI_LOG_TIMEOUT(3, printk("sg_remove: dev=%d, dirty\n", sdp->index));
-		if (NULL == sdp->headfp) {
-			idr_remove(&sg_index_idr, sdp->index);
-		}
-	} else {	/* nothing active, simple case */
-		SCSI_LOG_TIMEOUT(3, printk("sg_remove: dev=%d\n", sdp->index));
-		idr_remove(&sg_index_idr, sdp->index);
+	sdp->detached = 1;
+	for (sfp = sdp->headfp; sfp; sfp = sfp->nextfp) {
+		wake_up_interruptible(&sfp->read_wait);
+		kill_fasync(&sfp->async_qp, SIGPOLL, POLL_HUP);
 	}
 	write_unlock_irqrestore(&sg_index_lock, iflags);
 
@@ -1538,13 +1538,8 @@ sg_remove(struct device *cl_dev, struct 
 	device_destroy(sg_sysfs_class, MKDEV(SCSI_GENERIC_MAJOR, sdp->index));
 	cdev_del(sdp->cdev);
 	sdp->cdev = NULL;
-	put_disk(sdp->disk);
-	sdp->disk = NULL;
-	if (NULL == sdp->headfp)
-		kfree(sdp);
 
-	if (delay)
-		msleep(10);	/* dirty detach so delay device destruction */
+	sg_put_dev(sdp);
 }
 
 module_param_named(scatter_elem_sz, scatter_elem_sz, int, S_IRUGO | S_IWUSR);
@@ -1941,22 +1936,6 @@ sg_get_rq_mark(Sg_fd * sfp, int pack_id)
 	return resp;
 }
 
-#ifdef CONFIG_SCSI_PROC_FS
-static Sg_request *
-sg_get_nth_request(Sg_fd * sfp, int nth)
-{
-	Sg_request *resp;
-	unsigned long iflags;
-	int k;
-
-	read_lock_irqsave(&sfp->rq_list_lock, iflags);
-	for (k = 0, resp = sfp->headrp; resp && (k < nth);
-	     ++k, resp = resp->nextrp) ;
-	read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
-	return resp;
-}
-#endif
-
 /* always adds to end of list */
 static Sg_request *
 sg_add_request(Sg_fd * sfp)
@@ -2032,22 +2011,6 @@ sg_remove_request(Sg_fd * sfp, Sg_reques
 	return res;
 }
 
-#ifdef CONFIG_SCSI_PROC_FS
-static Sg_fd *
-sg_get_nth_sfp(Sg_device * sdp, int nth)
-{
-	Sg_fd *resp;
-	unsigned long iflags;
-	int k;
-
-	read_lock_irqsave(&sg_index_lock, iflags);
-	for (k = 0, resp = sdp->headfp; resp && (k < nth);
-	     ++k, resp = resp->nextfp) ;
-	read_unlock_irqrestore(&sg_index_lock, iflags);
-	return resp;
-}
-#endif
-
 static Sg_fd *
 sg_add_sfp(Sg_device * sdp, int dev)
 {
@@ -2062,6 +2025,7 @@ sg_add_sfp(Sg_device * sdp, int dev)
 	init_waitqueue_head(&sfp->read_wait);
 	rwlock_init(&sfp->rq_list_lock);
 
+	kref_init(&sfp->f_ref);
 	sfp->timeout = SG_DEFAULT_TIMEOUT;
 	sfp->timeout_user = SG_DEFAULT_TIMEOUT_USER;
 	sfp->force_packid = SG_DEF_FORCE_PACK_ID;
@@ -2089,15 +2053,54 @@ sg_add_sfp(Sg_device * sdp, int dev)
 	sg_build_reserve(sfp, bufflen);
 	SCSI_LOG_TIMEOUT(3, printk("sg_add_sfp:   bufflen=%d, k_use_sg=%d\n",
 			   sfp->reserve.bufflen, sfp->reserve.k_use_sg));
+
+	kref_get(&sdp->d_ref);
+	__module_get(THIS_MODULE);
 	return sfp;
 }
 
-static void
-__sg_remove_sfp(Sg_device * sdp, Sg_fd * sfp)
+static void sg_remove_sfp_usercontext(struct work_struct *work)
+{
+	struct sg_fd *sfp = container_of(work, struct sg_fd, ew.work);
+	struct sg_device *sdp = sfp->parentdp;
+
+	/* Cleanup any responses which were never read(). */
+	while (sfp->headrp)
+		sg_finish_rem_req(sfp->headrp);
+
+	if (sfp->reserve.bufflen > 0) {
+		SCSI_LOG_TIMEOUT(6,
+			printk("sg_remove_sfp:    bufflen=%d, k_use_sg=%d\n",
+				(int) sfp->reserve.bufflen,
+				(int) sfp->reserve.k_use_sg));
+		sg_remove_scat(&sfp->reserve);
+	}
+
+	SCSI_LOG_TIMEOUT(6,
+		printk("sg_remove_sfp: %s, sfp=0x%p\n",
+			sdp->disk->disk_name,
+			sfp));
+	kfree(sfp);
+
+	scsi_device_put(sdp->device);
+	sg_put_dev(sdp);
+	module_put(THIS_MODULE);
+}
+
+static void sg_remove_sfp(struct kref *kref)
 {
+	struct sg_fd *sfp = container_of(kref, struct sg_fd, f_ref);
+	struct sg_device *sdp = sfp->parentdp;
 	Sg_fd *fp;
 	Sg_fd *prev_fp;
+	unsigned long iflags;
+
+	/* CAUTION!  Note that sfp can still be found by walking sdp->headfp
+	 * even though the refcount is now 0.  Therefore, unlink sfp from
+	 * sdp->headfp BEFORE doing any other cleanup.
+	 */
 
+	write_lock_irqsave(&sg_index_lock, iflags);
 	prev_fp = sdp->headfp;
 	if (sfp == prev_fp)
 		sdp->headfp = prev_fp->nextfp;
@@ -2110,54 +2113,10 @@ __sg_remove_sfp(Sg_device * sdp, Sg_fd *
 			prev_fp = fp;
 		}
 	}
-	if (sfp->reserve.bufflen > 0) {
-		SCSI_LOG_TIMEOUT(6, 
-			printk("__sg_remove_sfp:    bufflen=%d, k_use_sg=%d\n",
-			(int) sfp->reserve.bufflen, (int) sfp->reserve.k_use_sg));
-		sg_remove_scat(&sfp->reserve);
-	}
-	sfp->parentdp = NULL;
-	SCSI_LOG_TIMEOUT(6, printk("__sg_remove_sfp:    sfp=0x%p\n", sfp));
-	kfree(sfp);
-}
-
-/* Returns 0 in normal case, 1 when detached and sdp object removed */
-static int
-sg_remove_sfp(Sg_device * sdp, Sg_fd * sfp)
-{
-	Sg_request *srp;
-	Sg_request *tsrp;
-	int dirty = 0;
-	int res = 0;
-
-	for (srp = sfp->headrp; srp; srp = tsrp) {
-		tsrp = srp->nextrp;
-		if (sg_srp_done(srp, sfp))
-			sg_finish_rem_req(srp);
-		else
-			++dirty;
-	}
-	if (0 == dirty) {
-		unsigned long iflags;
+	write_unlock_irqrestore(&sg_index_lock, iflags);
+	wake_up_interruptible(&sdp->o_excl_wait);
 
-		write_lock_irqsave(&sg_index_lock, iflags);
-		__sg_remove_sfp(sdp, sfp);
-		if (sdp->detached && (NULL == sdp->headfp)) {
-			idr_remove(&sg_index_idr, sdp->index);
-			kfree(sdp);
-			res = 1;
-		}
-		write_unlock_irqrestore(&sg_index_lock, iflags);
-	} else {
-		/* MOD_INC's to inhibit unloading sg and associated adapter driver */
-		/* only bump the access_count if we actually succeeded in
-		 * throwing another counter on the host module */
-		scsi_device_get(sdp->device);	/* XXX: retval ignored? */	
-		sfp->closed = 1;	/* flag dirty state on this fd */
-		SCSI_LOG_TIMEOUT(1, printk("sg_remove_sfp: worrisome, %d writes pending\n",
-				  dirty));
-	}
-	return res;
+	execute_in_process_context(sg_remove_sfp_usercontext, &sfp->ew);
 }
 
 static int
@@ -2199,19 +2158,38 @@ sg_last_dev(void)
 }
 #endif
 
-static Sg_device *
-sg_get_dev(int dev)
+/* must be called with sg_index_lock held */
+static Sg_device *sg_lookup_dev(int dev)
 {
-	Sg_device *sdp;
-	unsigned long iflags;
+	return idr_find(&sg_index_idr, dev);
+}
 
-	read_lock_irqsave(&sg_index_lock, iflags);
-	sdp = idr_find(&sg_index_idr, dev);
-	read_unlock_irqrestore(&sg_index_lock, iflags);
+static Sg_device *sg_get_dev(int dev)
+{
+	struct sg_device *sdp;
+	unsigned long flags;
+
+	read_lock_irqsave(&sg_index_lock, flags);
+	sdp = sg_lookup_dev(dev);
+	if (!sdp)
+		sdp = ERR_PTR(-ENXIO);
+	else if (sdp->detached) {
+		/* If sdp->detached, then the refcount may already be 0, in
+		 * which case it would be a bug to do kref_get().
+		 */
+		sdp = ERR_PTR(-ENODEV);
+	} else
+		kref_get(&sdp->d_ref);
+	read_unlock_irqrestore(&sg_index_lock, flags);
 
 	return sdp;
 }
 
+static void sg_put_dev(struct sg_device *sdp)
+{
+	kref_put(&sdp->d_ref, sg_device_destroy);
+}
+
 #ifdef CONFIG_SCSI_PROC_FS
 
 static struct proc_dir_entry *sg_proc_sgp = NULL;
@@ -2468,8 +2446,10 @@ static int sg_proc_seq_show_dev(struct s
 	struct sg_proc_deviter * it = (struct sg_proc_deviter *) v;
 	Sg_device *sdp;
 	struct scsi_device *scsidp;
+	unsigned long iflags;
 
-	sdp = it ? sg_get_dev(it->index) : NULL;
+	read_lock_irqsave(&sg_index_lock, iflags);
+	sdp = it ? sg_lookup_dev(it->index) : NULL;
 	if (sdp && (scsidp = sdp->device) && (!sdp->detached))
 		seq_printf(s, "%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
 			      scsidp->host->host_no, scsidp->channel,
@@ -2480,6 +2460,7 @@ static int sg_proc_seq_show_dev(struct s
 			      (int) scsi_device_online(scsidp));
 	else
 		seq_printf(s, "-1\t-1\t-1\t-1\t-1\t-1\t-1\t-1\t-1\n");
+	read_unlock_irqrestore(&sg_index_lock, iflags);
 	return 0;
 }
 
@@ -2493,16 +2474,20 @@ static int sg_proc_seq_show_devstrs(stru
 	struct sg_proc_deviter * it = (struct sg_proc_deviter *) v;
 	Sg_device *sdp;
 	struct scsi_device *scsidp;
+	unsigned long iflags;
 
-	sdp = it ? sg_get_dev(it->index) : NULL;
+	read_lock_irqsave(&sg_index_lock, iflags);
+	sdp = it ? sg_lookup_dev(it->index) : NULL;
 	if (sdp && (scsidp = sdp->device) && (!sdp->detached))
 		seq_printf(s, "%8.8s\t%16.16s\t%4.4s\n",
 			   scsidp->vendor, scsidp->model, scsidp->rev);
 	else
 		seq_printf(s, "<no active device>\n");
+	read_unlock_irqrestore(&sg_index_lock, iflags);
 	return 0;
 }
 
+/* must be called while holding sg_index_lock */
 static void sg_proc_debug_helper(struct seq_file *s, Sg_device * sdp)
 {
 	int k, m, new_interface, blen, usg;
@@ -2512,7 +2497,8 @@ static void sg_proc_debug_helper(struct 
 	const char * cp;
 	unsigned int ms;
 
-	for (k = 0; (fp = sg_get_nth_sfp(sdp, k)); ++k) {
+	for (k = 0, fp = sdp->headfp; fp != NULL; ++k, fp = fp->nextfp) {
+		read_lock(&fp->rq_list_lock); /* irqs already disabled */
 		seq_printf(s, "   FD(%d): timeout=%dms bufflen=%d "
 			   "(res)sgat=%d low_dma=%d\n", k + 1,
 			   jiffies_to_msecs(fp->timeout),
@@ -2522,7 +2508,9 @@ static void sg_proc_debug_helper(struct 
 		seq_printf(s, "   cmd_q=%d f_packid=%d k_orphan=%d closed=%d\n",
 			   (int) fp->cmd_q, (int) fp->force_packid,
 			   (int) fp->keep_orphan, (int) fp->closed);
-		for (m = 0; (srp = sg_get_nth_request(fp, m)); ++m) {
+		for (m = 0, srp = fp->headrp;
+				srp != NULL;
+				++m, srp = srp->nextrp) {
 			hp = &srp->header;
 			new_interface = (hp->interface_id == '\0') ? 0 : 1;
 			if (srp->res_used) {
@@ -2559,6 +2547,7 @@ static void sg_proc_debug_helper(struct 
 		}
 		if (0 == m)
 			seq_printf(s, "     No requests active\n");
+		read_unlock(&fp->rq_list_lock);
 	}
 }
 
@@ -2571,39 +2560,34 @@ static int sg_proc_seq_show_debug(struct
 {
 	struct sg_proc_deviter * it = (struct sg_proc_deviter *) v;
 	Sg_device *sdp;
+	unsigned long iflags;
 
 	if (it && (0 == it->index)) {
 		seq_printf(s, "max_active_device=%d(origin 1)\n",
 			   (int)it->max);
 		seq_printf(s, " def_reserved_size=%d\n", sg_big_buff);
 	}
-	sdp = it ? sg_get_dev(it->index) : NULL;
-	if (sdp) {
-		struct scsi_device *scsidp = sdp->device;
 
-		if (NULL == scsidp) {
-			seq_printf(s, "device %d detached ??\n", 
-				   (int)it->index);
-			return 0;
-		}
+	read_lock_irqsave(&sg_index_lock, iflags);
+	sdp = it ? sg_lookup_dev(it->index) : NULL;
+	if (sdp && sdp->headfp) {
+		struct scsi_device *scsidp = sdp->device;
 
-		if (sg_get_nth_sfp(sdp, 0)) {
-			seq_printf(s, " >>> device=%s ",
-				sdp->disk->disk_name);
-			if (sdp->detached)
-				seq_printf(s, "detached pending close ");
-			else
-				seq_printf
-				    (s, "scsi%d chan=%d id=%d lun=%d   em=%d",
-				     scsidp->host->host_no,
-				     scsidp->channel, scsidp->id,
-				     scsidp->lun,
-				     scsidp->host->hostt->emulated);
-			seq_printf(s, " sg_tablesize=%d excl=%d\n",
-				   sdp->sg_tablesize, sdp->exclude);
-		}
+		seq_printf(s, " >>> device=%s ", sdp->disk->disk_name);
+		if (sdp->detached)
+			seq_printf(s, "detached pending close ");
+		else
+			seq_printf
+			    (s, "scsi%d chan=%d id=%d lun=%d   em=%d",
+			     scsidp->host->host_no,
+			     scsidp->channel, scsidp->id,
+			     scsidp->lun,
+			     scsidp->host->hostt->emulated);
+		seq_printf(s, " sg_tablesize=%d excl=%d\n",
+			   sdp->sg_tablesize, sdp->exclude);
 		sg_proc_debug_helper(s, sdp);
 	}
+	read_unlock_irqrestore(&sg_index_lock, iflags);
 	return 0;
 }
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 26/45] SCSI: sg: fix races with ioctl(SG_IO)
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (24 preceding siblings ...)
  2009-03-31 23:11 ` [patch 25/45] SCSI: sg: fix races during device removal Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 27/45] SCSI: sg: avoid blk_put_request/blk_rq_unmap_user in interrupt Chris Wright
                   ` (23 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Tony Battersby, FUJITA Tomonori, Douglas Gilbert,
	James Bottomley

[-- Attachment #1: scsi-sg-fix-races-with-ioctl.patch --]
[-- Type: text/plain, Size: 4220 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Tony Battersby <tonyb@cybernetics.com>

upstream commit: a2dd3b4cea335713b58996bb07b3abcde1175f47

sg_io_owned needs to be set before the command is sent to the midlevel;
otherwise, a quickly-completing command may cause a different CPU
to see "srp->done == 1 && !srp->sg_io_owned", which would lead to
incorrect behavior.

Check srp->done and set srp->orphan while holding rq_list_lock to
prevent races with sg_rq_end_io().

There is no need to check sfp->closed from read/write/ioctl/poll/etc.
since the kernel guarantees that this won't happen.

The usefulness of sg_srp_done() was questionable before; now it is
definitely not needed.

Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/scsi/sg.c |   39 ++++++++++++++-------------------------
 1 file changed, 14 insertions(+), 25 deletions(-)

--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -189,7 +189,7 @@ static ssize_t sg_new_read(Sg_fd * sfp, 
 			   Sg_request * srp);
 static ssize_t sg_new_write(Sg_fd *sfp, struct file *file,
 			const char __user *buf, size_t count, int blocking,
-			int read_only, Sg_request **o_srp);
+			int read_only, int sg_io_owned, Sg_request **o_srp);
 static int sg_common_write(Sg_fd * sfp, Sg_request * srp,
 			   unsigned char *cmnd, int timeout, int blocking);
 static int sg_read_oxfer(Sg_request * srp, char __user *outp, int num_read_xfer);
@@ -561,7 +561,8 @@ sg_write(struct file *filp, const char _
 		return -EFAULT;
 	blocking = !(filp->f_flags & O_NONBLOCK);
 	if (old_hdr.reply_len < 0)
-		return sg_new_write(sfp, filp, buf, count, blocking, 0, NULL);
+		return sg_new_write(sfp, filp, buf, count,
+				    blocking, 0, 0, NULL);
 	if (count < (SZ_SG_HEADER + 6))
 		return -EIO;	/* The minimum scsi command length is 6 bytes. */
 
@@ -642,7 +643,7 @@ sg_write(struct file *filp, const char _
 
 static ssize_t
 sg_new_write(Sg_fd *sfp, struct file *file, const char __user *buf,
-		 size_t count, int blocking, int read_only,
+		 size_t count, int blocking, int read_only, int sg_io_owned,
 		 Sg_request **o_srp)
 {
 	int k;
@@ -662,6 +663,7 @@ sg_new_write(Sg_fd *sfp, struct file *fi
 		SCSI_LOG_TIMEOUT(1, printk("sg_new_write: queue full\n"));
 		return -EDOM;
 	}
+	srp->sg_io_owned = sg_io_owned;
 	hp = &srp->header;
 	if (__copy_from_user(hp, buf, SZ_SG_IO_HDR)) {
 		sg_remove_request(sfp, srp);
@@ -766,18 +768,6 @@ sg_common_write(Sg_fd * sfp, Sg_request 
 }
 
 static int
-sg_srp_done(Sg_request *srp, Sg_fd *sfp)
-{
-	unsigned long iflags;
-	int done;
-
-	read_lock_irqsave(&sfp->rq_list_lock, iflags);
-	done = srp->done;
-	read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
-	return done;
-}
-
-static int
 sg_ioctl(struct inode *inode, struct file *filp,
 	 unsigned int cmd_in, unsigned long arg)
 {
@@ -809,27 +799,26 @@ sg_ioctl(struct inode *inode, struct fil
 				return -EFAULT;
 			result =
 			    sg_new_write(sfp, filp, p, SZ_SG_IO_HDR,
-					 blocking, read_only, &srp);
+					 blocking, read_only, 1, &srp);
 			if (result < 0)
 				return result;
-			srp->sg_io_owned = 1;
 			while (1) {
 				result = 0;	/* following macro to beat race condition */
 				__wait_event_interruptible(sfp->read_wait,
-					(sdp->detached || sfp->closed || sg_srp_done(srp, sfp)),
-							   result);
+					(srp->done || sdp->detached),
+					result);
 				if (sdp->detached)
 					return -ENODEV;
-				if (sfp->closed)
-					return 0;	/* request packet dropped already */
-				if (0 == result)
+				write_lock_irq(&sfp->rq_list_lock);
+				if (srp->done) {
+					srp->done = 2;
+					write_unlock_irq(&sfp->rq_list_lock);
 					break;
+				}
 				srp->orphan = 1;
+				write_unlock_irq(&sfp->rq_list_lock);
 				return result;	/* -ERESTARTSYS because signal hit process */
 			}
-			write_lock_irqsave(&sfp->rq_list_lock, iflags);
-			srp->done = 2;
-			write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
 			result = sg_new_read(sfp, p, SZ_SG_IO_HDR, srp);
 			return (result < 0) ? result : 0;
 		}


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 27/45] SCSI: sg: avoid blk_put_request/blk_rq_unmap_user in interrupt
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (25 preceding siblings ...)
  2009-03-31 23:11 ` [patch 26/45] SCSI: sg: fix races with ioctl(SG_IO) Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 28/45] ARM: pxa: fix overlay being un-necessarily initialized on pxa25x Chris Wright
                   ` (22 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, FUJITA Tomonori, Douglas Gilbert, James Bottomley

[-- Attachment #1: scsi-sg-avoid-blk_put_request-blk_rq_unmap_user-in-interrupt.patch --]
[-- Type: text/plain, Size: 2807 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>

upstream commit: c96952ed7031e7c576ecf90cf95b8ec099d5295a

This fixes the following oops:

http://marc.info/?l=linux-kernel&m=123316111415677&w=2

You can reproduce this bug by interrupting a program before a sg
response completes. This leads to the special sg state (the orphan
state), then sg calls blk_put_request in interrupt (rq->end_io).

The above bug report shows the recursive lock problem because sg calls
blk_put_request in interrupt. We could call __blk_put_request here
instead however we also need to handle blk_rq_unmap_user here, which
can't be called in interrupt too.

In the orphan state, we don't need to care about the data transfer
(the program revoked the command) so adding 'just free the resource'
mode to blk_rq_unmap_user is a possible option.

I prefer to avoid complicating the blk mapping API when possible. I
change the orphan state to call sg_finish_rem_req via
execute_in_process_context. We hold sg_fd->kref so sg_fd doesn't go
away until keventd_wq finishes our work. copy_from_user/to_user fails
so blk_rq_unmap_user just frees the resource without the data
transfer.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/scsi/sg.c |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -138,6 +138,7 @@ typedef struct sg_request {	/* SG_MAX_QU
 	volatile char done;	/* 0->before bh, 1->before read, 2->read */
 	struct request *rq;
 	struct bio *bio;
+	struct execute_work ew;
 } Sg_request;
 
 typedef struct sg_fd {		/* holds the state of a file descriptor */
@@ -1234,6 +1235,15 @@ sg_mmap(struct file *filp, struct vm_are
 	return 0;
 }
 
+static void sg_rq_end_io_usercontext(struct work_struct *work)
+{
+	struct sg_request *srp = container_of(work, struct sg_request, ew.work);
+	struct sg_fd *sfp = srp->parentfp;
+
+	sg_finish_rem_req(srp);
+	kref_put(&sfp->f_ref, sg_remove_sfp);
+}
+
 /*
  * This function is a "bottom half" handler that is called by the mid
  * level when a command is completed (or has failed).
@@ -1312,10 +1322,9 @@ static void sg_rq_end_io(struct request 
 		 */
 		wake_up_interruptible(&sfp->read_wait);
 		kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN);
+		kref_put(&sfp->f_ref, sg_remove_sfp);
 	} else
-		sg_finish_rem_req(srp); /* call with srp->done == 0 */
-
-	kref_put(&sfp->f_ref, sg_remove_sfp);
+		execute_in_process_context(sg_rq_end_io_usercontext, &srp->ew);
 }
 
 static struct file_operations sg_fops = {


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 28/45] ARM: pxa: fix overlay being un-necessarily initialized on pxa25x
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (26 preceding siblings ...)
  2009-03-31 23:11 ` [patch 27/45] SCSI: sg: avoid blk_put_request/blk_rq_unmap_user in interrupt Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 29/45] ARM: 5428/1: Module relocation update for R_ARM_V4BX Chris Wright
                   ` (21 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Eric Miao, Russell King

[-- Attachment #1: arm-pxa-fix-overlay-being-un-necessarily-initialized-on-pxa25x.patch --]
[-- Type: text/plain, Size: 1278 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Eric Miao <eric.miao@marvell.com>

upstream commit: 782385ae176b304c7105051e1b06c68bc0b4a2ba

pxa25x doesn't support overlay in its LCD controller, this patch adds
pxafb_overlay_supported() functions to check the initialization is
necessary.

Signed-off-by: Eric Miao <eric.miao@marvell.com>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/video/pxafb.c |   14 ++++++++++++++
 1 file changed, 14 insertions(+)

--- a/drivers/video/pxafb.c
+++ b/drivers/video/pxafb.c
@@ -883,10 +883,21 @@ static void __devinit init_pxafb_overlay
 	init_completion(&ofb->branch_done);
 }
 
+static inline int pxafb_overlay_supported(void)
+{
+	if (cpu_is_pxa27x() || cpu_is_pxa3xx())
+		return 1;
+
+	return 0;
+}
+
 static int __devinit pxafb_overlay_init(struct pxafb_info *fbi)
 {
 	int i, ret;
 
+	if (!pxafb_overlay_supported())
+		return 0;
+
 	for (i = 0; i < 2; i++) {
 		init_pxafb_overlay(fbi, &fbi->overlay[i], i);
 		ret = register_framebuffer(&fbi->overlay[i].fb);
@@ -909,6 +920,9 @@ static void __devexit pxafb_overlay_exit
 {
 	int i;
 
+	if (!pxafb_overlay_supported())
+		return;
+
 	for (i = 0; i < 2; i++)
 		unregister_framebuffer(&fbi->overlay[i].fb);
 }


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 29/45] ARM: 5428/1: Module relocation update for R_ARM_V4BX
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (27 preceding siblings ...)
  2009-03-31 23:11 ` [patch 28/45] ARM: pxa: fix overlay being un-necessarily initialized on pxa25x Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 30/45] ARM: cumana: Fix a long standing bogon Chris Wright
                   ` (20 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Daniel Silverstone, Simtec Linux Team, Vincent Sanders,
	Russell King

[-- Attachment #1: arm-5428-1-module-relocation-update-for-r_arm_v4bx.patch --]
[-- Type: text/plain, Size: 1838 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Daniel Silverstone <dsilvers@simtec.co.uk>

upstream commit: 4731f8b66dd34ebf0e67ca6ba9162b0e509bec06

It would seem when building kernel modules with modern binutils
(required by modern GCC) for ARM v4T targets (specifically observed
with the Samsung 24xx SoC which is an 920T) R_ARM_V4BX relocations
are emitted for function epilogues.

This manifests at module load time with an "unknown relocation: 40"
error message.

The following patch adds the R_ARM_V4BX relocation to the ARM kernel
module loader. The relocation operation is taken from that within the
binutils bfd library.

Signed-off-by: Simtec Linux Team <linux@simtec.co.uk>
Signed-off-by: Vincent Sanders <vince@simtec.co.uk>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/arm/include/asm/elf.h |    1 +
 arch/arm/kernel/module.c   |    9 +++++++++
 2 files changed, 10 insertions(+)

--- a/arch/arm/include/asm/elf.h
+++ b/arch/arm/include/asm/elf.h
@@ -50,6 +50,7 @@ typedef struct user_fp elf_fpregset_t;
 #define R_ARM_ABS32	2
 #define R_ARM_CALL	28
 #define R_ARM_JUMP24	29
+#define R_ARM_V4BX	40
 
 /*
  * These are used to set parameters in the core dumps.
--- a/arch/arm/kernel/module.c
+++ b/arch/arm/kernel/module.c
@@ -132,6 +132,15 @@ apply_relocate(Elf32_Shdr *sechdrs, cons
 			*(u32 *)loc |= offset & 0x00ffffff;
 			break;
 
+	       case R_ARM_V4BX:
+		       /* Preserve Rm and the condition code. Alter
+			* other bits to re-code instruction as
+			* MOV PC,Rm.
+			*/
+		       *(u32 *)loc &= 0xf000000f;
+		       *(u32 *)loc |= 0x01a0f000;
+		       break;
+
 		default:
 			printk(KERN_ERR "%s: unknown relocation: %u\n",
 			       module->name, ELF32_R_TYPE(rel->r_info));


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 30/45] ARM: cumana: Fix a long standing bogon
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (28 preceding siblings ...)
  2009-03-31 23:11 ` [patch 29/45] ARM: 5428/1: Module relocation update for R_ARM_V4BX Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 31/45] ARM: fix leak in iop13xx/pci Chris Wright
                   ` (19 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Russell King

[-- Attachment #1: arm-cumana-fix-a-long-standing-bogon.patch --]
[-- Type: text/plain, Size: 850 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Alan Cox <alan@lxorguk.ukuu.org.uk>

upstream commit: ecbf61e7357d5c7047c813edd6983902d158688c

Should be using strncmp as the data from user space may be unterminated

(Bug #8004)

Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/scsi/arm/cumana_2.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/scsi/arm/cumana_2.c
+++ b/drivers/scsi/arm/cumana_2.c
@@ -318,7 +318,7 @@ cumanascsi_2_set_proc_info(struct Scsi_H
 {
 	int ret = length;
 
-	if (length >= 11 && strcmp(buffer, "CUMANASCSI2") == 0) {
+	if (length >= 11 && strncmp(buffer, "CUMANASCSI2", 11) == 0) {
 		buffer += 11;
 		length -= 11;
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 31/45] ARM: fix leak in iop13xx/pci
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (29 preceding siblings ...)
  2009-03-31 23:11 ` [patch 30/45] ARM: cumana: Fix a long standing bogon Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 32/45] ARM: twl4030 - leak fix Chris Wright
                   ` (18 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Russell King

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: arm-fix-leak-in-iop13xx-pci.patch --]
[-- Type: text/plain, Size: 932 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Alan Cox <alan@lxorguk.ukuu.org.uk>

upstream commit: b23c7a427e4b3764ad686a46de89ab652811c50a

Another leak found by Daniel Marjamäki

Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/arm/mach-iop13xx/pci.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

--- a/arch/arm/mach-iop13xx/pci.c
+++ b/arch/arm/mach-iop13xx/pci.c
@@ -1026,8 +1026,10 @@ int iop13xx_pci_setup(int nr, struct pci
 		which_atu = 0;
 	}
 
-	if (!which_atu)
+	if (!which_atu) {
+		kfree(res);
 		return 0;
+	}
 
 	switch(which_atu) {
 	case IOP13XX_INIT_ATU_ATUX:
@@ -1074,6 +1076,7 @@ int iop13xx_pci_setup(int nr, struct pci
 		sys->map_irq = iop13xx_pcie_map_irq;
 		break;
 	default:
+		kfree(res);
 		return 0;
 	}
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 32/45] ARM: twl4030 - leak fix
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (30 preceding siblings ...)
  2009-03-31 23:11 ` [patch 31/45] ARM: fix leak in iop13xx/pci Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 33/45] ARM: 5435/1: fix compile warning in sanity_check_meminfo() Chris Wright
                   ` (17 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Tony Lindgren, Russell King

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: arm-twl4030-leak-fix.patch --]
[-- Type: text/plain, Size: 854 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Alan Cox <alan@lxorguk.ukuu.org.uk>

upstream commit: 803c78e4da28d7d7cb0642caf643b9289ae7838a

Trivial error path leak fix. Problem found by Daniel Marjamäki using
cppcheck

Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/arm/mach-omap2/mmc-twl4030.c |    1 +
 1 file changed, 1 insertion(+)

--- a/arch/arm/mach-omap2/mmc-twl4030.c
+++ b/arch/arm/mach-omap2/mmc-twl4030.c
@@ -397,6 +397,7 @@ void __init twl4030_mmc_init(struct twl4
 			break;
 		default:
 			pr_err("MMC%d configuration not supported!\n", c->mmc);
+			kfree(mmc);
 			continue;
 		}
 		hsmmc_data[c->mmc - 1] = mmc;


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 33/45] ARM: 5435/1: fix compile warning in sanity_check_meminfo()
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (31 preceding siblings ...)
  2009-03-31 23:11 ` [patch 32/45] ARM: twl4030 - leak fix Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 34/45] fuse: fix fuse_file_lseek returning with lock held Chris Wright
                   ` (16 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Mikael Pettersson, Nicolas Pitre, Russell King

[-- Attachment #1: arm-5435-1-fix-compile-warning-in-sanity_check_meminfo.patch --]
[-- Type: text/plain, Size: 1369 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Mikael Pettersson <mikpe@it.uu.se>

upstream commit: f0bba9f934517533acbda7329be93f55d5a01c03

Compiling recent 2.6.29-rc kernels for ARM gives me the following warning:

arch/arm/mm/mmu.c: In function 'sanity_check_meminfo':
arch/arm/mm/mmu.c:697: warning: comparison between pointer and integer

This is because commit 3fd9825c42c784a59b3b90bdf073f49d4bb42a8d
"[ARM] 5402/1: fix a case of wrap-around in sanity_check_meminfo()"
in 2.6.29-rc5-git4 added a comparison of a pointer with PAGE_OFFSET,
which is an integer.

Fixed by casting PAGE_OFFSET to void *.

Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
Acked-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/arm/mm/mmu.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -694,7 +694,7 @@ static void __init sanity_check_meminfo(
 		 * the vmalloc area.
 		 */
 		if (__va(bank->start) >= VMALLOC_MIN ||
-		    __va(bank->start) < PAGE_OFFSET) {
+		    __va(bank->start) < (void *)PAGE_OFFSET) {
 			printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx "
 			       "(vmalloc region overlap).\n",
 			       bank->start, bank->start + bank->size - 1);


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 34/45] fuse: fix fuse_file_lseek returning with lock held
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (32 preceding siblings ...)
  2009-03-31 23:11 ` [patch 33/45] ARM: 5435/1: fix compile warning in sanity_check_meminfo() Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 35/45] Add a missing unlock_kernel() in raw_open() Chris Wright
                   ` (15 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Dan Carpenter, Miklos Szeredi

[-- Attachment #1: fuse-fix-fuse_file_lseek-returning-with-lock-held.patch --]
[-- Type: text/plain, Size: 1027 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Dan Carpenter <error27@gmail.com>

upstream commit: 5291658d87ac1ae60418e79e7b6bad7d5f595e0c

This bug was found with smatch (http://repo.or.cz/w/smatch.git/).  If
we return directly the inode->i_mutex lock doesn't get released.

Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
CC: stable@kernel.org
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 fs/fuse/file.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -1465,7 +1465,7 @@ static loff_t fuse_file_llseek(struct fi
 	case SEEK_END:
 		retval = fuse_update_attributes(inode, NULL, file, NULL);
 		if (retval)
-			return retval;
+			goto exit;
 		offset += i_size_read(inode);
 		break;
 	case SEEK_CUR:
@@ -1479,6 +1479,7 @@ static loff_t fuse_file_llseek(struct fi
 		}
 		retval = offset;
 	}
+exit:
 	mutex_unlock(&inode->i_mutex);
 	return retval;
 }


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 35/45] Add a missing unlock_kernel() in raw_open()
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (33 preceding siblings ...)
  2009-03-31 23:11 ` [patch 34/45] fuse: fix fuse_file_lseek returning with lock held Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 36/45] x86, PAT, PCI: Change vma prot in pci_mmap to reflect inherited prot Chris Wright
                   ` (14 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Dan Carpenter, Jonathan Corbet

[-- Attachment #1: add-a-missing-unlock_kernel-in-raw_open.patch --]
[-- Type: text/plain, Size: 612 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Dan Carpenter <error27@gmail.com>

upstream commit: 996ff68d8b358885c1de82a45517c607999947c7

Cc: stable@kernel.org
Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/char/raw.c |    1 +
 1 file changed, 1 insertion(+)

--- a/drivers/char/raw.c
+++ b/drivers/char/raw.c
@@ -90,6 +90,7 @@ out1:
 	blkdev_put(bdev, filp->f_mode);
 out:
 	mutex_unlock(&raw_mutex);
+	unlock_kernel();
 	return err;
 }
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 36/45] x86, PAT, PCI: Change vma prot in pci_mmap to reflect inherited prot
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (34 preceding siblings ...)
  2009-03-31 23:11 ` [patch 35/45] Add a missing unlock_kernel() in raw_open() Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 37/45] x86, uv: fix cpumask iterator in uv_bau_init() Chris Wright
                   ` (13 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Venkatesh Pallipadi, Suresh Siddha, Jesse Barnes,
	Dave Airlie, Ingo Molnar

[-- Attachment #1: x86-pat-pci-change-vma-prot-in-pci_mmap-to-reflect-inherited-prot.patch --]
[-- Type: text/plain, Size: 1491 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>

upstream commit: 9cdec049389ce2c324fd1ec508a71528a27d4a07

While looking at the issue in the thread:

  http://marc.info/?l=dri-devel&m=123606627824556&w=2

noticed a bug in pci PAT code and memory type setting.

PCI mmap code did not set the proper protection in vma, when it
inherited protection in reserve_memtype. This bug only affects
the case where there exists a WC mapping before X does an mmap
with /proc or /sys pci interface. This will cause X userlevel
mmap from /proc or /sysfs to fail on fork.

Reported-by: Kevin Winchester <kjwinchester@gmail.com>
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: Dave Airlie <airlied@redhat.com>
Cc: <stable@kernel.org>
LKML-Reference: <20090323190720.GA16831@linux-os.sc.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/x86/pci/i386.c |    3 +++
 1 file changed, 3 insertions(+)

--- a/arch/x86/pci/i386.c
+++ b/arch/x86/pci/i386.c
@@ -319,6 +319,9 @@ int pci_mmap_page_range(struct pci_dev *
 			return -EINVAL;
 		}
 		flags = new_flags;
+		vma->vm_page_prot = __pgprot(
+			(pgprot_val(vma->vm_page_prot) & ~_PAGE_CACHE_MASK) |
+			flags);
 	}
 
 	if (((vma->vm_pgoff < max_low_pfn_mapped) ||


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 37/45] x86, uv: fix cpumask iterator in uv_bau_init()
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (35 preceding siblings ...)
  2009-03-31 23:11 ` [patch 36/45] x86, PAT, PCI: Change vma prot in pci_mmap to reflect inherited prot Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 38/45] x86: fix 64k corruption-check Chris Wright
                   ` (12 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Rusty Russell, Mike Travis, steiner, Ingo Molnar

[-- Attachment #1: x86-uv-fix-cpumask-iterator-in-uv_bau_init.patch --]
[-- Type: text/plain, Size: 1364 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Rusty Russell <rusty@rustcorp.com.au>

upstream commit: 2c74d66624ddbda8101d54d1e184cf9229b378bc

Impact: fix boot crash on UV systems

Commit 76ba0ecda0de9accea9a91cb6dbde46782110e1c "cpumask: use
cpumask_var_t in uv_flush_tlb_others" used cur_cpu as an iterator;
it was supposed to be zero for the code below it.

Reported-by: Cliff Wickman <cpw@sgi.com>
Original-From: Cliff Wickman <cpw@sgi.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Acked-by: Mike Travis <travis@sgi.com>
Cc: steiner@sgi.com
Cc: <stable@kernel.org>
LKML-Reference: <200903180822.31196.rusty@rustcorp.com.au>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/x86/kernel/tlb_uv.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/arch/x86/kernel/tlb_uv.c
+++ b/arch/x86/kernel/tlb_uv.c
@@ -742,7 +742,7 @@ static int __init uv_bau_init(void)
 	int node;
 	int nblades;
 	int last_blade;
-	int cur_cpu = 0;
+	int cur_cpu;
 
 	if (!is_uv_system())
 		return 0;
@@ -752,6 +752,7 @@ static int __init uv_bau_init(void)
 	uv_mmask = (1UL << uv_hub_info->n_val) - 1;
 	nblades = 0;
 	last_blade = -1;
+	cur_cpu = 0;
 	for_each_online_node(node) {
 		blade = uv_node_to_blade_id(node);
 		if (blade == last_blade)


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 38/45] x86: fix 64k corruption-check
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (36 preceding siblings ...)
  2009-03-31 23:11 ` [patch 37/45] x86, uv: fix cpumask iterator in uv_bau_init() Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 39/45] x86: ptrace, bts: fix an unreachable statement Chris Wright
                   ` (11 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Yinghai Lu, Ingo Molnar

[-- Attachment #1: x86-fix-64k-corruption-check.patch --]
[-- Type: text/plain, Size: 1135 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Yinghai Lu <yinghai@kernel.org>

upstream commit: 6d7942dc2a70a7e74c352107b150265602671588

Impact: fix boot crash

Need to exit early if the addr is far above 64k.

The crash got exposed by:

  78a8b35: x86: make e820_update_range() handle small range update

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: <stable@kernel.org>
LKML-Reference: <49BC2279.2030101@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/x86/kernel/check.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/arch/x86/kernel/check.c
+++ b/arch/x86/kernel/check.c
@@ -86,12 +86,12 @@ void __init setup_bios_corruption_check(
 		if (addr == 0)
 			break;
 
+		if (addr >= corruption_check_size)
+			break;
+
 		if ((addr + size) > corruption_check_size)
 			size = corruption_check_size - addr;
 
-		if (size == 0)
-			break;
-
 		e820_update_range(addr, size, E820_RAM, E820_RESERVED);
 		scan_areas[num_scan_areas].addr = addr;
 		scan_areas[num_scan_areas].size = size;


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 39/45] x86: ptrace, bts: fix an unreachable statement
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (37 preceding siblings ...)
  2009-03-31 23:11 ` [patch 38/45] x86: fix 64k corruption-check Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 40/45] x86: mtrr: dont modify RdDram/WrDram bits of fixed MTRRs Chris Wright
                   ` (10 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, xiyou.wangcong, Roland McGrath, Markus Metzger, Ingo Molnar

[-- Attachment #1: x86-ptrace-bts-fix-an-unreachable-statement.patch --]
[-- Type: text/plain, Size: 1042 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: xiyou.wangcong@gmail.com

upstream commit: 5a8ac9d28dae5330c70562c7d7785f5104059c17

Commit c2724775ce57c98b8af9694857b941dc61056516 put a statement
after return, which makes that statement unreachable.

Move that statement before return.

Signed-off-by: WANG Cong <xiyou.wangcong@gmail.com>
Cc: Roland McGrath <roland@redhat.com>
Cc: Markus Metzger <markus.t.metzger@intel.com>
LKML-Reference: <20090313075622.GB8933@hack>
Cc: <stable@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/x86/kernel/ptrace.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -690,9 +690,8 @@ static int ptrace_bts_config(struct task
 		if (!cfg.signal)
 			return -EINVAL;
 
-		return -EOPNOTSUPP;
-
 		child->thread.bts_ovfl_signal = cfg.signal;
+		return -EOPNOTSUPP;
 	}
 
 	if ((cfg.flags & PTRACE_BTS_O_ALLOC) &&


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 40/45] x86: mtrr: dont modify RdDram/WrDram bits of fixed MTRRs
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (38 preceding siblings ...)
  2009-03-31 23:11 ` [patch 39/45] x86: ptrace, bts: fix an unreachable statement Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 41/45] VM, x86, PAT: Change is_linear_pfn_mapping to not use vm_pgoff Chris Wright
                   ` (9 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Andreas Herrmann, trenn, Yinghai Lu, Ingo Molnar

[-- Attachment #1: x86-mtrr-don-t-modify-rddram-wrdram-bits-of-fixed-mtrrs.patch --]
[-- Type: text/plain, Size: 6164 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Andreas Herrmann <andreas.herrmann3@amd.com>

upstream commit: 3ff42da5048649503e343a32be37b14a6a4e8aaf

Impact: bug fix + BIOS workaround

BIOS is expected to clear the SYSCFG[MtrrFixDramModEn] on AMD CPUs
after fixed MTRRs are configured.

Some BIOSes do not clear SYSCFG[MtrrFixDramModEn] on BP (and on APs).

This can lead to obfuscation in Linux when this bit is not cleared on
BP but cleared on APs. A consequence of this is that the saved
fixed-MTRR state (from BP) differs from the fixed-MTRRs of APs --
because RdDram/WrDram bits are read as zero when
SYSCFG[MtrrFixDramModEn] is cleared -- and Linux tries to sync
fixed-MTRR state from BP to AP. This implies that Linux sets
SYSCFG[MtrrFixDramEn] and activates those bits.

More important is that (some) systems change these bits in SMM when
ACPI is enabled. Hence it is racy if Linux modifies RdMem/WrMem bits,
too.

(1) The patch modifies an old fix from Bernhard Kaindl to get
    suspend/resume working on some Acer Laptops. Bernhard's patch
    tried to sync RdMem/WrMem bits of fixed MTRR registers and that
    helped on those old Laptops. (Don't ask me why -- can't test it
    myself). But this old problem was not the motivation for the
    patch. (See http://lkml.org/lkml/2007/4/3/110)

(2) The more important effect is to fix issues on some more current systems.

    On those systems Linux panics or just freezes, see

    http://bugzilla.kernel.org/show_bug.cgi?id=11541
    (and also duplicates of this bug:
    http://bugzilla.kernel.org/show_bug.cgi?id=11737
    http://bugzilla.kernel.org/show_bug.cgi?id=11714)

    The affected systems boot only using acpi=ht, acpi=off or
    when the kernel is built with CONFIG_MTRR=n.

    The acpi options prevent full enablement of ACPI.  Obviously when
    ACPI is enabled the BIOS/SMM modfies RdMem/WrMem bits.  When
    CONFIG_MTRR=y Linux also accesses and modifies those bits when it
    needs to sync fixed-MTRRs across cores (Bernhard's fix, see (1)).
    How do you synchronize that? You can't. As a consequence Linux
    shouldn't touch those bits at all (Rationale are AMD's BKDGs which
    recommend to clear the bit that makes RdMem/WrMem accessible).
    This is the purpose of this patch. And (so far) this suffices to
    fix (1) and (2).

I suggest not to touch RdDram/WrDram bits of fixed-MTRRs and
SYSCFG[MtrrFixDramEn] and to clear SYSCFG[MtrrFixDramModEn] as
suggested by AMD K8, and AMD family 10h/11h BKDGs.
BIOS is expected to do this anyway. This should avoid that
Linux and SMM tread on each other's toes ...

Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
Cc: trenn@suse.de
Cc: Yinghai Lu <yinghai@kernel.org>
LKML-Reference: <20090312163937.GH20716@alberich.amd.com>
Cc: <stable@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/x86/kernel/cpu/mtrr/generic.c |   51 +++++++++++++++++++++----------------
 1 file changed, 30 insertions(+), 21 deletions(-)

--- a/arch/x86/kernel/cpu/mtrr/generic.c
+++ b/arch/x86/kernel/cpu/mtrr/generic.c
@@ -41,6 +41,32 @@ static int __init mtrr_debug(char *opt)
 }
 early_param("mtrr.show", mtrr_debug);
 
+/**
+ * BIOS is expected to clear MtrrFixDramModEn bit, see for example
+ * "BIOS and Kernel Developer's Guide for the AMD Athlon 64 and AMD
+ * Opteron Processors" (26094 Rev. 3.30 February 2006), section
+ * "13.2.1.2 SYSCFG Register": "The MtrrFixDramModEn bit should be set
+ * to 1 during BIOS initalization of the fixed MTRRs, then cleared to
+ * 0 for operation."
+ */
+static inline void k8_check_syscfg_dram_mod_en(void)
+{
+	u32 lo, hi;
+
+	if (!((boot_cpu_data.x86_vendor == X86_VENDOR_AMD) &&
+	      (boot_cpu_data.x86 >= 0x0f)))
+		return;
+
+	rdmsr(MSR_K8_SYSCFG, lo, hi);
+	if (lo & K8_MTRRFIXRANGE_DRAM_MODIFY) {
+		printk(KERN_ERR FW_WARN "MTRR: CPU %u: SYSCFG[MtrrFixDramModEn]"
+		       " not cleared by BIOS, clearing this bit\n",
+		       smp_processor_id());
+		lo &= ~K8_MTRRFIXRANGE_DRAM_MODIFY;
+		mtrr_wrmsr(MSR_K8_SYSCFG, lo, hi);
+	}
+}
+
 /*
  * Returns the effective MTRR type for the region
  * Error returns:
@@ -174,6 +200,8 @@ get_fixed_ranges(mtrr_type * frs)
 	unsigned int *p = (unsigned int *) frs;
 	int i;
 
+	k8_check_syscfg_dram_mod_en();
+
 	rdmsr(MTRRfix64K_00000_MSR, p[0], p[1]);
 
 	for (i = 0; i < 2; i++)
@@ -308,27 +336,10 @@ void mtrr_wrmsr(unsigned msr, unsigned a
 }
 
 /**
- * Enable and allow read/write of extended fixed-range MTRR bits on K8 CPUs
- * see AMD publication no. 24593, chapter 3.2.1 for more information
- */
-static inline void k8_enable_fixed_iorrs(void)
-{
-	unsigned lo, hi;
-
-	rdmsr(MSR_K8_SYSCFG, lo, hi);
-	mtrr_wrmsr(MSR_K8_SYSCFG, lo
-				| K8_MTRRFIXRANGE_DRAM_ENABLE
-				| K8_MTRRFIXRANGE_DRAM_MODIFY, hi);
-}
-
-/**
  * set_fixed_range - checks & updates a fixed-range MTRR if it differs from the value it should have
  * @msr: MSR address of the MTTR which should be checked and updated
  * @changed: pointer which indicates whether the MTRR needed to be changed
  * @msrwords: pointer to the MSR values which the MSR should have
- *
- * If K8 extentions are wanted, update the K8 SYSCFG MSR also.
- * See AMD publication no. 24593, chapter 7.8.1, page 233 for more information.
  */
 static void set_fixed_range(int msr, bool *changed, unsigned int *msrwords)
 {
@@ -337,10 +348,6 @@ static void set_fixed_range(int msr, boo
 	rdmsr(msr, lo, hi);
 
 	if (lo != msrwords[0] || hi != msrwords[1]) {
-		if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
-		    (boot_cpu_data.x86 >= 0x0f && boot_cpu_data.x86 <= 0x11) &&
-		    ((msrwords[0] | msrwords[1]) & K8_MTRR_RDMEM_WRMEM_MASK))
-			k8_enable_fixed_iorrs();
 		mtrr_wrmsr(msr, msrwords[0], msrwords[1]);
 		*changed = true;
 	}
@@ -419,6 +426,8 @@ static int set_fixed_ranges(mtrr_type * 
 	bool changed = false;
 	int block=-1, range;
 
+	k8_check_syscfg_dram_mod_en();
+
 	while (fixed_range_blocks[++block].ranges)
 	    for (range=0; range < fixed_range_blocks[block].ranges; range++)
 		set_fixed_range(fixed_range_blocks[block].base_msr + range,


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 41/45] VM, x86, PAT: Change is_linear_pfn_mapping to not use vm_pgoff
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (39 preceding siblings ...)
  2009-03-31 23:11 ` [patch 40/45] x86: mtrr: dont modify RdDram/WrDram bits of fixed MTRRs Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 42/45] lguest: wire up pte_update/pte_update_defer Chris Wright
                   ` (8 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Venkatesh Pallipadi, Suresh Siddha, Nick Piggin,
	ebiederm@xmission.com, Ingo Molnar

[-- Attachment #1: vm-x86-pat-change-is_linear_pfn_mapping-to-not-use-vm_pgoff.patch --]
[-- Type: text/plain, Size: 4461 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>

upstream commit: 4bb9c5c02153dfc89a6c73a6f32091413805ad7d

Impact: fix false positive PAT warnings - also fix VirtalBox hang

Use of vma->vm_pgoff to identify the pfnmaps that are fully
mapped at mmap time is broken. vm_pgoff is set by generic mmap
code even for cases where drivers are setting up the mappings
at the fault time.

The problem was originally reported here:

 http://marc.info/?l=linux-kernel&m=123383810628583&w=2

Change is_linear_pfn_mapping logic to overload VM_INSERTPAGE
flag along with VM_PFNMAP to mean full PFNMAP setup at mmap
time.

Problem also tracked at:

 http://bugzilla.kernel.org/show_bug.cgi?id=12800

Reported-by: Thomas Hellstrom <thellstrom@vmware.com>
Tested-by: Frans Pop <elendil@planet.nl>
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: Nick Piggin <npiggin@suse.de>
Cc: "ebiederm@xmission.com" <ebiederm@xmission.com>
Cc: <stable@kernel.org>
LKML-Reference: <20090313004527.GA7176@linux-os.sc.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/x86/mm/pat.c  |    5 +++--
 include/linux/mm.h |   15 +++++++++++++--
 mm/memory.c        |    6 ++++--
 3 files changed, 20 insertions(+), 6 deletions(-)

--- a/arch/x86/mm/pat.c
+++ b/arch/x86/mm/pat.c
@@ -641,10 +641,11 @@ static int reserve_pfn_range(u64 paddr, 
 	is_ram = pat_pagerange_is_ram(paddr, paddr + size);
 
 	/*
-	 * reserve_pfn_range() doesn't support RAM pages.
+	 * reserve_pfn_range() doesn't support RAM pages. Maintain the current
+	 * behavior with RAM pages by returning success.
 	 */
 	if (is_ram != 0)
-		return -EINVAL;
+		return 0;
 
 	ret = reserve_memtype(paddr, paddr + size, want_flags, &flags);
 	if (ret)
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -98,7 +98,7 @@ extern unsigned int kobjsize(const void 
 #define VM_HUGETLB	0x00400000	/* Huge TLB Page VM */
 #define VM_NONLINEAR	0x00800000	/* Is non-linear (remap_file_pages) */
 #define VM_MAPPED_COPY	0x01000000	/* T if mapped copy of data (nommu mmap) */
-#define VM_INSERTPAGE	0x02000000	/* The vma has had "vm_insert_page()" done on it */
+#define VM_INSERTPAGE	0x02000000	/* The vma has had "vm_insert_page()" done on it. Refer note in VM_PFNMAP_AT_MMAP below */
 #define VM_ALWAYSDUMP	0x04000000	/* Always include in core dumps */
 
 #define VM_CAN_NONLINEAR 0x08000000	/* Has ->fault & does nonlinear pages */
@@ -127,6 +127,17 @@ extern unsigned int kobjsize(const void 
 #define VM_SPECIAL (VM_IO | VM_DONTEXPAND | VM_RESERVED | VM_PFNMAP)
 
 /*
+ * pfnmap vmas that are fully mapped at mmap time (not mapped on fault).
+ * Used by x86 PAT to identify such PFNMAP mappings and optimize their handling.
+ * Note VM_INSERTPAGE flag is overloaded here. i.e,
+ * VM_INSERTPAGE && !VM_PFNMAP implies
+ *     The vma has had "vm_insert_page()" done on it
+ * VM_INSERTPAGE && VM_PFNMAP implies
+ *     The vma is PFNMAP with full mapping at mmap time
+ */
+#define VM_PFNMAP_AT_MMAP (VM_INSERTPAGE | VM_PFNMAP)
+
+/*
  * mapping from the currently active vm_flags protection bits (the
  * low four bits) to a page protection mask..
  */
@@ -145,7 +156,7 @@ extern pgprot_t protection_map[16];
  */
 static inline int is_linear_pfn_mapping(struct vm_area_struct *vma)
 {
-	return ((vma->vm_flags & VM_PFNMAP) && vma->vm_pgoff);
+	return ((vma->vm_flags & VM_PFNMAP_AT_MMAP) == VM_PFNMAP_AT_MMAP);
 }
 
 static inline int is_pfn_mapping(struct vm_area_struct *vma)
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1665,9 +1665,10 @@ int remap_pfn_range(struct vm_area_struc
 	 * behaviour that some programs depend on. We mark the "original"
 	 * un-COW'ed pages by matching them up with "vma->vm_pgoff".
 	 */
-	if (addr == vma->vm_start && end == vma->vm_end)
+	if (addr == vma->vm_start && end == vma->vm_end) {
 		vma->vm_pgoff = pfn;
-	else if (is_cow_mapping(vma->vm_flags))
+		vma->vm_flags |= VM_PFNMAP_AT_MMAP;
+	} else if (is_cow_mapping(vma->vm_flags))
 		return -EINVAL;
 
 	vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
@@ -1679,6 +1680,7 @@ int remap_pfn_range(struct vm_area_struc
 		 * needed from higher level routine calling unmap_vmas
 		 */
 		vma->vm_flags &= ~(VM_IO | VM_RESERVED | VM_PFNMAP);
+		vma->vm_flags &= ~VM_PFNMAP_AT_MMAP;
 		return -EINVAL;
 	}
 


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 42/45] lguest: wire up pte_update/pte_update_defer
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (40 preceding siblings ...)
  2009-03-31 23:11 ` [patch 41/45] VM, x86, PAT: Change is_linear_pfn_mapping to not use vm_pgoff Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 43/45] lguest: fix spurious BUG_ON() on invalid guest stack Chris Wright
                   ` (7 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Rusty Russell, jeremy, virtualization

[-- Attachment #1: lguest-wire-up-pte_update-pte_update_defer.patch --]
[-- Type: text/plain, Size: 2157 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Rusty Russell <rusty@rustcorp.com.au>

upstream commit: b7ff99ea53cd16de8f6166c0e98f19a7c6ca67ee

Impact: intermittent guest segv/crash fix

I've been seeing random guest bad address crashes and segmentation faults:
bisect led to 4f98a2fee8 (vmscan: split LRU lists into anon & file sets),
but that's a red herring.

It turns out that lguest never hooked up the pte_update/pte_update_defer
calls, so our ptes were not always in sync.  After the vmscan commit, the
bug became reproducible; now a fsck in a 64MB guest causes reproducible
pagetable corruption.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: jeremy@xensource.com
Cc: virtualization@lists.osdl.org
Cc: stable@kernel.org
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/x86/lguest/boot.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

--- a/arch/x86/lguest/boot.c
+++ b/arch/x86/lguest/boot.c
@@ -485,11 +485,17 @@ static void lguest_write_cr4(unsigned lo
  * into a process' address space.  We set the entry then tell the Host the
  * toplevel and address this corresponds to.  The Guest uses one pagetable per
  * process, so we need to tell the Host which one we're changing (mm->pgd). */
+static void lguest_pte_update(struct mm_struct *mm, unsigned long addr,
+			       pte_t *ptep)
+{
+	lazy_hcall(LHCALL_SET_PTE, __pa(mm->pgd), addr, ptep->pte_low);
+}
+
 static void lguest_set_pte_at(struct mm_struct *mm, unsigned long addr,
 			      pte_t *ptep, pte_t pteval)
 {
 	*ptep = pteval;
-	lazy_hcall(LHCALL_SET_PTE, __pa(mm->pgd), addr, pteval.pte_low);
+	lguest_pte_update(mm, addr, ptep);
 }
 
 /* The Guest calls this to set a top-level entry.  Again, we set the entry then
@@ -1034,6 +1040,8 @@ __init void lguest_init(void)
 	pv_mmu_ops.read_cr3 = lguest_read_cr3;
 	pv_mmu_ops.lazy_mode.enter = paravirt_enter_lazy_mmu;
 	pv_mmu_ops.lazy_mode.leave = lguest_leave_lazy_mode;
+	pv_mmu_ops.pte_update = lguest_pte_update;
+	pv_mmu_ops.pte_update_defer = lguest_pte_update;
 
 #ifdef CONFIG_X86_LOCAL_APIC
 	/* apic read/write intercepts */


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 43/45] lguest: fix spurious BUG_ON() on invalid guest stack.
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (41 preceding siblings ...)
  2009-03-31 23:11 ` [patch 42/45] lguest: wire up pte_update/pte_update_defer Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 44/45] cfg80211: fix incorrect assumption on last_request for 11d Chris Wright
                   ` (6 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Rusty Russell

[-- Attachment #1: lguest-fix-spurious-bug_on-on-invalid-guest-stack.patch --]
[-- Type: text/plain, Size: 1143 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Rusty Russell <rusty@rustcorp.com.au>

upstream commit: 6afbdd059c27330eccbd85943354f94c2b83a7fe

Impact: fix crash on misbehaving guest

gpte_addr() contains a BUG_ON(), insisting that the present flag is
set.  We need to return before we call it if that isn't the case.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: stable@kernel.org
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/lguest/page_tables.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/lguest/page_tables.c
+++ b/drivers/lguest/page_tables.c
@@ -373,8 +373,10 @@ unsigned long guest_pa(struct lg_cpu *cp
 	/* First step: get the top-level Guest page table entry. */
 	gpgd = lgread(cpu, gpgd_addr(cpu, vaddr), pgd_t);
 	/* Toplevel not present?  We can't map it in. */
-	if (!(pgd_flags(gpgd) & _PAGE_PRESENT))
+	if (!(pgd_flags(gpgd) & _PAGE_PRESENT)) {
 		kill_guest(cpu, "Bad address %#lx", vaddr);
+		return -1UL;
+	}
 
 	gpte = lgread(cpu, gpte_addr(gpgd, vaddr), pte_t);
 	if (!(pte_flags(gpte) & _PAGE_PRESENT))


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 44/45] cfg80211: fix incorrect assumption on last_request for 11d
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (42 preceding siblings ...)
  2009-03-31 23:11 ` [patch 43/45] lguest: fix spurious BUG_ON() on invalid guest stack Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-03-31 23:11 ` [patch 45/45] KVM: MMU: Fix another largepage memory leak Chris Wright
                   ` (5 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Luis R. Rodriguez, John W Linville

[-- Attachment #1: cfg80211-fix-incorrect-assumption-on-last_request-for-11d.patch --]
[-- Type: text/plain, Size: 1922 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Luis R. Rodriguez <lrodriguez@atheros.com>

upstream commit: cc0b6fe88e99096868bdbacbf486c97299533b5a

The incorrect assumption is the last regulatory request
(last_request) is always a country IE when processing
country IEs. Although this is true 99% of the time the
first time this happens this could not be true.

This fixes an oops in the branch check for the last_request
when accessing drv_last_ie. The access was done under the
assumption the struct won't be null.

Note to stable: to port to 29 replace as follows, only 29 has
country IE code:

s|NL80211_REGDOM_SET_BY_COUNTRY_IE|REGDOM_SET_BY_COUNTRY_IE

Cc: stable@kernel.org
Reported-by: Quentin Armitage <Quentin@armitage.org.uk>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
[chrisw: backport to 2.6.29]
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 net/wireless/reg.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1083,6 +1083,8 @@ EXPORT_SYMBOL(regulatory_hint);
 static bool reg_same_country_ie_hint(struct wiphy *wiphy,
 			u32 country_ie_checksum)
 {
+	if (unlikely(last_request->initiator != REGDOM_SET_BY_COUNTRY_IE))
+		return false;
 	if (!last_request->wiphy)
 		return false;
 	if (likely(last_request->wiphy != wiphy))
@@ -1133,7 +1135,9 @@ void regulatory_hint_11d(struct wiphy *w
 	/* We will run this for *every* beacon processed for the BSSID, so
 	 * we optimize an early check to exit out early if we don't have to
 	 * do anything */
-	if (likely(last_request->wiphy)) {
+	if (likely(last_request->initiator ==
+	    REGDOM_SET_BY_COUNTRY_IE &&
+	    likely(last_request->wiphy))) {
 		struct cfg80211_registered_device *drv_last_ie;
 
 		drv_last_ie = wiphy_to_dev(last_request->wiphy);


^ permalink raw reply	[flat|nested] 59+ messages in thread

* [patch 45/45] KVM: MMU: Fix another largepage memory leak
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (43 preceding siblings ...)
  2009-03-31 23:11 ` [patch 44/45] cfg80211: fix incorrect assumption on last_request for 11d Chris Wright
@ 2009-03-31 23:11 ` Chris Wright
  2009-04-01  3:47 ` [patch 00/45] 2.6.29.1 -stable review David Miller
                   ` (4 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-03-31 23:11 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, torvalds, akpm,
	alan, Joerg Roedel, Marcelo Tosatti, Avi Kivity

[-- Attachment #1: kvm-mmu-fix-another-largepage-memory-leak.patch --]
[-- Type: text/plain, Size: 1146 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Joerg Roedel <joerg.roedel@amd.com>

upstream commit: c5bc22424021cabda862727fb3f5098b866f074d

In the paging_fetch function rmap_remove is called after setting a large
pte to non-present. This causes rmap_remove to not drop the reference to
the large page. The result is a memory leak of that page.

Cc: stable@kernel.org
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Acked-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
[chrisw: backport to 2.6.29]
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/x86/kvm/paging_tmpl.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/x86/kvm/paging_tmpl.h
+++ b/arch/x86/kvm/paging_tmpl.h
@@ -314,9 +314,9 @@ static int FNAME(shadow_walk_entry)(stru
 		return 0;
 
 	if (is_large_pte(*sptep)) {
+		rmap_remove(vcpu->kvm, sptep);
 		set_shadow_pte(sptep, shadow_trap_nonpresent_pte);
 		kvm_flush_remote_tlbs(vcpu->kvm);
-		rmap_remove(vcpu->kvm, sptep);
 	}
 
 	if (level == PT_DIRECTORY_LEVEL && gw->level == PT_DIRECTORY_LEVEL) {


^ permalink raw reply	[flat|nested] 59+ messages in thread

* Re: [patch 25/45] SCSI: sg: fix races during device removal
  2009-03-31 23:11 ` [patch 25/45] SCSI: sg: fix races during device removal Chris Wright
@ 2009-03-31 23:31   ` Linus Torvalds
  2009-04-01  0:10     ` James Bottomley
  0 siblings, 1 reply; 59+ messages in thread
From: Linus Torvalds @ 2009-03-31 23:31 UTC (permalink / raw)
  To: Chris Wright
  Cc: linux-kernel, stable, Justin Forbes, Zwane Mwaikambo,
	Theodore Ts'o, Randy Dunlap, Dave Jones, Chuck Wolber,
	Chris Wedgwood, Michael Krufky, Chuck Ebbert, Domenico Andreoli,
	Willy Tarreau, Rodrigo Rubira Branco, Jake Edge, Eugene Teo, akpm,
	alan, Tony Battersby, FUJITA Tomonori, Douglas Gilbert,
	James Bottomley



On Tue, 31 Mar 2009, Chris Wright wrote:
> 
> From: Tony Battersby <tonyb@cybernetics.com>
> 
> upstream commit: c6517b7942fad663cc1cf3235cbe4207cf769332
> 
> sg has the following problems related to device removal:

Hmm. Is this a new problem to 2.6.29?

The patch is pretty big (certainly _way_ over the official -stable limit), 
and I don't know how critical or new this bug was. I doubt it has gotten 
much testing in the development branch either, yet.

So please convince me that this shouldn't wait a bit, or at least point me 
to the problem reports to convince me that the size limit should be 
ignored.

		Linus

^ permalink raw reply	[flat|nested] 59+ messages in thread

* Re: [patch 25/45] SCSI: sg: fix races during device removal
  2009-03-31 23:31   ` Linus Torvalds
@ 2009-04-01  0:10     ` James Bottomley
  2009-04-01  0:18       ` Linus Torvalds
  0 siblings, 1 reply; 59+ messages in thread
From: James Bottomley @ 2009-04-01  0:10 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Chris Wright, linux-kernel, stable, Justin Forbes,
	Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap, Dave Jones,
	Chuck Wolber, Chris Wedgwood, Michael Krufky, Chuck Ebbert,
	Domenico Andreoli, Willy Tarreau, Rodrigo Rubira Branco,
	Jake Edge, Eugene Teo, akpm, alan, Tony Battersby,
	FUJITA Tomonori, Douglas Gilbert

On Tue, 2009-03-31 at 16:31 -0700, Linus Torvalds wrote: 
> 
> On Tue, 31 Mar 2009, Chris Wright wrote:
> > 
> > From: Tony Battersby <tonyb@cybernetics.com>
> > 
> > upstream commit: c6517b7942fad663cc1cf3235cbe4207cf769332
> > 
> > sg has the following problems related to device removal:
> 
> Hmm. Is this a new problem to 2.6.29?

No, it's fairly old

> The patch is pretty big (certainly _way_ over the official -stable limit), 
> and I don't know how critical or new this bug was. I doubt it has gotten 
> much testing in the development branch either, yet.

Well, I considered the patch too high risk for -rc, so we elected to put
it into the development branch with the understanding that we'd backport
it to 2.6.29 provided it proved stable.

The races it fixes are hard to trigger.  However, we do have an oops
report on it:

http://marc.info/?l=linux-kernel&m=123316111415677

or at least which is fixed by the three patch series.

> So please convince me that this shouldn't wait a bit, or at least point me 
> to the problem reports to convince me that the size limit should be 
> ignored.

I think we could wait a bit to see if any issues turn up in 2.6.30
testing.  I think it should go in eventually, though.

James



^ permalink raw reply	[flat|nested] 59+ messages in thread

* Re: [patch 25/45] SCSI: sg: fix races during device removal
  2009-04-01  0:10     ` James Bottomley
@ 2009-04-01  0:18       ` Linus Torvalds
  2009-04-01  1:15         ` Chris Wright
  0 siblings, 1 reply; 59+ messages in thread
From: Linus Torvalds @ 2009-04-01  0:18 UTC (permalink / raw)
  To: James Bottomley
  Cc: Chris Wright, linux-kernel, stable, Justin Forbes,
	Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap, Dave Jones,
	Chuck Wolber, Chris Wedgwood, Michael Krufky, Chuck Ebbert,
	Domenico Andreoli, Willy Tarreau, Rodrigo Rubira Branco,
	Jake Edge, Eugene Teo, akpm, alan, Tony Battersby,
	FUJITA Tomonori, Douglas Gilbert



On Wed, 1 Apr 2009, James Bottomley wrote:
> 
> I think we could wait a bit to see if any issues turn up in 2.6.30
> testing.  I think it should go in eventually, though.

Sure, that sounds sane. But right now it has very little extra testing, so 
wait with putting it into -stable at _least_ until after -rc1 release or 
something?

		Linus

^ permalink raw reply	[flat|nested] 59+ messages in thread

* Re: [patch 25/45] SCSI: sg: fix races during device removal
  2009-04-01  0:18       ` Linus Torvalds
@ 2009-04-01  1:15         ` Chris Wright
  2009-04-01  1:54           ` FUJITA Tomonori
  0 siblings, 1 reply; 59+ messages in thread
From: Chris Wright @ 2009-04-01  1:15 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: James Bottomley, Chris Wright, linux-kernel, stable,
	Justin Forbes, Zwane Mwaikambo, Theodore Ts'o, Randy Dunlap,
	Dave Jones, Chuck Wolber, Chris Wedgwood, Michael Krufky,
	Chuck Ebbert, Domenico Andreoli, Willy Tarreau,
	Rodrigo Rubira Branco, Jake Edge, Eugene Teo, akpm, alan,
	Tony Battersby, FUJITA Tomonori, Douglas Gilbert

* Linus Torvalds (torvalds@linux-foundation.org) wrote:
> On Wed, 1 Apr 2009, James Bottomley wrote:
> > 
> > I think we could wait a bit to see if any issues turn up in 2.6.30
> > testing.  I think it should go in eventually, though.
> 
> Sure, that sounds sane. But right now it has very little extra testing, so 
> wait with putting it into -stable at _least_ until after -rc1 release or 
> something?

I'll drop it (meaning the three).  James can you resend after they've
withstood the test of time?

thanks,
-chris

^ permalink raw reply	[flat|nested] 59+ messages in thread

* Re: [patch 25/45] SCSI: sg: fix races during device removal
  2009-04-01  1:15         ` Chris Wright
@ 2009-04-01  1:54           ` FUJITA Tomonori
  2009-04-01 15:18             ` Tony Battersby
  0 siblings, 1 reply; 59+ messages in thread
From: FUJITA Tomonori @ 2009-04-01  1:54 UTC (permalink / raw)
  To: chrisw
  Cc: torvalds, James.Bottomley, linux-kernel, stable, jmforbes, zwane,
	tytso, rdunlap, davej, chuckw, reviews, mkrufky, cebbert, cavokz,
	w, rbranco, jake, eteo, akpm, alan, tonyb, fujita.tomonori,
	dgilbert

On Tue, 31 Mar 2009 18:15:33 -0700
Chris Wright <chrisw@sous-sol.org> wrote:

> * Linus Torvalds (torvalds@linux-foundation.org) wrote:
> > On Wed, 1 Apr 2009, James Bottomley wrote:
> > > 
> > > I think we could wait a bit to see if any issues turn up in 2.6.30
> > > testing.  I think it should go in eventually, though.
> > 
> > Sure, that sounds sane. But right now it has very little extra testing, so 
> > wait with putting it into -stable at _least_ until after -rc1 release or 
> > something?
> 
> I'll drop it (meaning the three).  James can you resend after they've
> withstood the test of time?

I really want to push the patches as soon as possible. The bug that
the 27/45 patch fixes has been for two months and I saw bug reports
about it again and again:

http://marc.info/?l=linux-kernel&m=123841463709919&w=2

^ permalink raw reply	[flat|nested] 59+ messages in thread

* Re: [patch 00/45] 2.6.29.1 -stable review
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (44 preceding siblings ...)
  2009-03-31 23:11 ` [patch 45/45] KVM: MMU: Fix another largepage memory leak Chris Wright
@ 2009-04-01  3:47 ` David Miller
  2009-04-01  4:42   ` Michael Krufky
  2009-04-02  6:57 ` [PATCH 46/45] sparc64: Fix MM refcount check in smp_flush_tlb_pending() Chris Wright
                   ` (3 subsequent siblings)
  49 siblings, 1 reply; 59+ messages in thread
From: David Miller @ 2009-04-01  3:47 UTC (permalink / raw)
  To: chrisw
  Cc: linux-kernel, stable, jmforbes, zwane, tytso, rdunlap, davej,
	chuckw, reviews, mkrufky, cebbert, cavokz, w, rbranco, jake, eteo,
	torvalds, akpm, alan

From: Chris Wright <chrisw@sous-sol.org>
Date: Tue, 31 Mar 2009 16:10:45 -0700

> Responses should be made by Thursday, April 2, 23:00 UTC.
> Anything received after that time might be too late.

Chris, any chance you can include the 3 sparc fixes I sent
to stable right before you posted this?

Thanks!


^ permalink raw reply	[flat|nested] 59+ messages in thread

* Re: [patch 00/45] 2.6.29.1 -stable review
  2009-04-01  3:47 ` [patch 00/45] 2.6.29.1 -stable review David Miller
@ 2009-04-01  4:42   ` Michael Krufky
  2009-04-02  6:57     ` Chris Wright
  0 siblings, 1 reply; 59+ messages in thread
From: Michael Krufky @ 2009-04-01  4:42 UTC (permalink / raw)
  To: chrisw
  Cc: David Miller, linux-kernel, stable, jmforbes, zwane, tytso,
	rdunlap, davej, chuckw, reviews, cebbert, cavokz, w, rbranco,
	jake, eteo, torvalds, akpm, alan

David Miller wrote:
> From: Chris Wright <chrisw@sous-sol.org>
> Date: Tue, 31 Mar 2009 16:10:45 -0700
> 
>> Responses should be made by Thursday, April 2, 23:00 UTC.
>> Anything received after that time might be too late.
> 
> Chris, any chance you can include the 3 sparc fixes I sent
> to stable right before you posted this?
> 
> Thanks!
> 

Chris,

...and also the v4l2-common fix that I sent ~10 hours before you posted?

If you can add that one too, I'd appreciate it.

Thanks,

Mike Krufky


^ permalink raw reply	[flat|nested] 59+ messages in thread

* Re: [patch 25/45] SCSI: sg: fix races during device removal
  2009-04-01  1:54           ` FUJITA Tomonori
@ 2009-04-01 15:18             ` Tony Battersby
  0 siblings, 0 replies; 59+ messages in thread
From: Tony Battersby @ 2009-04-01 15:18 UTC (permalink / raw)
  To: FUJITA Tomonori
  Cc: chrisw, torvalds, James.Bottomley, linux-kernel, stable, jmforbes,
	zwane, tytso, rdunlap, davej, chuckw, reviews, mkrufky, cebbert,
	cavokz, w, rbranco, jake, eteo, akpm, alan, dgilbert

FUJITA Tomonori wrote:
> On Tue, 31 Mar 2009 18:15:33 -0700
> Chris Wright <chrisw@sous-sol.org> wrote:
>
>   
>> * Linus Torvalds (torvalds@linux-foundation.org) wrote:
>>     
>>> On Wed, 1 Apr 2009, James Bottomley wrote:
>>>       
>>>> I think we could wait a bit to see if any issues turn up in 2.6.30
>>>> testing.  I think it should go in eventually, though.
>>>>         
>>> Sure, that sounds sane. But right now it has very little extra testing, so 
>>> wait with putting it into -stable at _least_ until after -rc1 release or 
>>> something?
>>>       
>> I'll drop it (meaning the three).  James can you resend after they've
>> withstood the test of time?
>>     
>
> I really want to push the patches as soon as possible. The bug that
> the 27/45 patch fixes has been for two months and I saw bug reports
> about it again and again:
>
> http://marc.info/?l=linux-kernel&m=123841463709919&w=2
>
>   
My two patches (25/45 and 26/45) fix very old problems, so there is no
rush to get them into -stable for their own sake.  However, Fujita's
patch (27/45) looks like it depends on my large patch (25/45), and it
fixes a regression present in 2.6.28 and 2.6.29.  So we have to weigh
the need to fix a regression that affects multiple people against the
chance of introducing new regressions.  Waiting until after 2.6.30-rc1
sounds reasonable to me, although I am not one of the people affected by
the regression fixed by Fujita's patch (since I am still using 2.6.27
-stable).

Another thing to consider is whether these patches should be included in
2.6.27 -stable.  Fujita's patch (27/45) shouldn't be necessary since
2.6.27 doesn't have the regression.  Omitting that patch removes the
dependency on my large patch (25/45), so we could question whether any
of these three patches should be included in 2.6.27.  As Linus points
out, my large patch is way above the official size limit for -stable,
but on the other hand, perhaps we could assume that "good enough for
2.6.28.x and 2.6.29.x" implies "good enough for 2.6.27.x".

Finally, I should point out that the effectiveness of "[patch 26/45]
SCSI: sg: fix races with ioctl(SG_IO)" depends on the changes to
sg_rq_end_io() made by "[patch 25/45] SCSI: sg: fix races during device
removal", so the smaller patch 26/45 should not be applied by itself
without the large patch 25/45.

Tony Battersby
Cybernetics


^ permalink raw reply	[flat|nested] 59+ messages in thread

* Re: [patch 00/45] 2.6.29.1 -stable review
  2009-04-01  4:42   ` Michael Krufky
@ 2009-04-02  6:57     ` Chris Wright
  0 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-04-02  6:57 UTC (permalink / raw)
  To: Michael Krufky
  Cc: chrisw, David Miller, linux-kernel, stable, jmforbes, zwane,
	tytso, rdunlap, davej, chuckw, reviews, cebbert, cavokz, w,
	rbranco, jake, eteo, torvalds, akpm, alan

* Michael Krufky (mkrufky@linuxtv.org) wrote:
> David Miller wrote:
>> From: Chris Wright <chrisw@sous-sol.org>
>> Date: Tue, 31 Mar 2009 16:10:45 -0700
>>
>>> Responses should be made by Thursday, April 2, 23:00 UTC.
>>> Anything received after that time might be too late.
>>
>> Chris, any chance you can include the 3 sparc fixes I sent
>> to stable right before you posted this?
>>
>> Thanks!
>
> ...and also the v4l2-common fix that I sent ~10 hours before you posted?
>
> If you can add that one too, I'd appreciate it.

Typically I'd rather push these to the next cycle (some things will
always miss due to timing), but needed to put -rc2 out (needed to rev
to drop the scsi patches anyway), so I added these.

The whole updated patch series can be found in one patch at:
	kernel.org/pub/linux/kernel/v2.6/stable-review/patch-2.6.29.1-rc2.gz
and the diffstat can be found below.

thanks,
-chris
--

 Makefile                                 |    2 -
 arch/arm/include/asm/elf.h               |    1 
 arch/arm/kernel/module.c                 |    9 +++++
 arch/arm/mach-iop13xx/pci.c              |    5 ++-
 arch/arm/mach-omap2/mmc-twl4030.c        |    1 
 arch/arm/mm/mmu.c                        |    2 -
 arch/sparc/include/asm/tlb_64.h          |    4 +-
 arch/sparc/kernel/nmi.c                  |   23 +++++++++++++
 arch/sparc/kernel/smp_64.c               |    4 +-
 arch/x86/kernel/check.c                  |    6 +--
 arch/x86/kernel/cpu/mtrr/generic.c       |   51 ++++++++++++++++++-------------
 arch/x86/kernel/ptrace.c                 |    3 -
 arch/x86/kernel/tlb_uv.c                 |    3 +
 arch/x86/kvm/paging_tmpl.h               |    2 -
 arch/x86/kvm/svm.c                       |   41 +++++++++++++++++-------
 arch/x86/kvm/vmx.c                       |    2 -
 arch/x86/lguest/boot.c                   |   10 +++++-
 arch/x86/mm/pat.c                        |    5 +--
 arch/x86/pci/i386.c                      |    3 +
 drivers/char/raw.c                       |    1 
 drivers/lguest/page_tables.c             |    4 +-
 drivers/media/dvb/firewire/firedtv-avc.c |    6 +++
 drivers/media/video/v4l2-common.c        |    8 ++--
 drivers/net/dnet.c                       |    1 
 drivers/net/wireless/ath5k/base.c        |   22 +++++++++----
 drivers/net/wireless/ath5k/base.h        |    2 -
 drivers/net/wireless/ath9k/recv.c        |    7 +++-
 drivers/net/wireless/ath9k/xmit.c        |    2 -
 drivers/net/wireless/b43/xmit.c          |    2 -
 drivers/scsi/arm/cumana_2.c              |    2 -
 drivers/usb/core/message.c               |    3 +
 drivers/usb/core/quirks.c                |    4 ++
 drivers/usb/core/sysfs.c                 |    4 +-
 drivers/usb/gadget/f_rndis.c             |    2 -
 drivers/usb/host/ehci-q.c                |   32 +++++++++++++++++++
 drivers/usb/host/ehci.h                  |    3 +
 drivers/usb/storage/cypress_atacb.c      |   15 ++++-----
 drivers/usb/storage/scsiglue.c           |    6 +++
 drivers/video/pxafb.c                    |   14 ++++++++
 fs/cifs/CHANGES                          |    3 +
 fs/cifs/cifssmb.c                        |    6 ++-
 fs/cifs/connect.c                        |    2 -
 fs/fuse/file.c                           |    3 +
 include/linux/mm.h                       |   15 +++++++--
 include/linux/usb/quirks.h               |    3 +
 mm/memory.c                              |    6 ++-
 net/bridge/br_if.c                       |    1 
 net/core/dev.c                           |    9 +----
 net/ipv4/udp.c                           |    6 +++
 net/ipv6/ip6_input.c                     |    4 --
 net/netfilter/nf_conntrack_proto_tcp.c   |    3 +
 net/wireless/reg.c                       |   23 ++++++++++---
 net/xfrm/xfrm_state.c                    |    2 -
 53 files changed, 296 insertions(+), 107 deletions(-)

^ permalink raw reply	[flat|nested] 59+ messages in thread

* [PATCH 46/45] sparc64: Fix MM refcount check in smp_flush_tlb_pending().
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (45 preceding siblings ...)
  2009-04-01  3:47 ` [patch 00/45] 2.6.29.1 -stable review David Miller
@ 2009-04-02  6:57 ` Chris Wright
  2009-04-02  6:57 ` [PATCH 47/45] sparc64: Flush TLB before releasing pages Chris Wright
                   ` (2 subsequent siblings)
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-04-02  6:57 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Theodore Ts'o, Zwane Mwaikambo, Eugene Teo, Justin Forbes,
	Domenico Andreoli, Chris Wedgwood, Jake Edge, Randy Dunlap,
	Michael Krufky, alan, Chuck Ebbert, Dave Jones, Chuck Wolber,
	akpm, torvalds, Willy Tarreau, Rodrigo Rubira Branco, davem

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: David S. Miller <davem@davemloft.net>

[ Upstream commit f9384d41c02408dd404aa64d66d0ef38adcf6479 ]

As explained by Benjamin Herrenschmidt:

> CPU 0 is running the context, task->mm == task->active_mm == your
> context. The CPU is in userspace happily churning things.
>
> CPU 1 used to run it, not anymore, it's now running fancyfsd which
> is a kernel thread, but current->active_mm still points to that
> same context.
>
> Because there's only one "real" user, mm_users is 1 (but mm_count is
> elevated, it's just that the presence on CPU 1 as active_mm has no
> effect on mm_count().
>
> At this point, fancyfsd decides to invalidate a mapping currently mapped
> by that context, for example because a networked file has changed
> remotely or something like that, using unmap_mapping_ranges().
>
> So CPU 1 goes into the zapping code, which eventually ends up calling
> flush_tlb_pending(). Your test will succeed, as current->active_mm is
> indeed the target mm for the flush, and mm_users is indeed 1. So you
> will -not- send an IPI to the other CPU, and CPU 0 will continue happily
> accessing the pages that should have been unmapped.

To fix this problem, check ->mm instead of ->active_mm, and this
means:

> So if you test current->mm, you effectively account for mm_users == 1,
> so the only way the mm can be active on another processor is as a lazy
> mm for a kernel thread. So your test should work properly as long
> as you don't have a HW that will do speculative TLB reloads into the
> TLB on that other CPU (and even if you do, you flush-on-switch-in should
> get rid of any crap here).

And therefore we should be OK.

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/sparc/kernel/smp_64.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/arch/sparc/kernel/smp_64.c
+++ b/arch/sparc/kernel/smp_64.c
@@ -1031,7 +1031,7 @@ void smp_fetch_global_regs(void)
  *    If the address space is non-shared (ie. mm->count == 1) we avoid
  *    cross calls when we want to flush the currently running process's
  *    tlb state.  This is done by clearing all cpu bits except the current
- *    processor's in current->active_mm->cpu_vm_mask and performing the
+ *    processor's in current->mm->cpu_vm_mask and performing the
  *    flush locally only.  This will force any subsequent cpus which run
  *    this task to flush the context from the local tlb if the process
  *    migrates to another cpu (again).
@@ -1074,7 +1074,7 @@ void smp_flush_tlb_pending(struct mm_str
 	u32 ctx = CTX_HWBITS(mm->context);
 	int cpu = get_cpu();
 
-	if (mm == current->active_mm && atomic_read(&mm->mm_users) == 1)
+	if (mm == current->mm && atomic_read(&mm->mm_users) == 1)
 		mm->cpu_vm_mask = cpumask_of_cpu(cpu);
 	else
 		smp_cross_call_masked(&xcall_flush_tlb_pending,

^ permalink raw reply	[flat|nested] 59+ messages in thread

* [PATCH 47/45] sparc64: Flush TLB before releasing pages.
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (46 preceding siblings ...)
  2009-04-02  6:57 ` [PATCH 46/45] sparc64: Fix MM refcount check in smp_flush_tlb_pending() Chris Wright
@ 2009-04-02  6:57 ` Chris Wright
  2009-04-02  6:58 ` [PATCH 48/45] sparc64: Fix reset hangs on Niagara systems Chris Wright
  2009-04-02  6:58 ` [PATCH 49/45] V4L: v4l2-common: remove incorrect MODULE test Chris Wright
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-04-02  6:57 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Theodore Ts'o, Zwane Mwaikambo, Eugene Teo, Justin Forbes,
	Domenico Andreoli, Chris Wedgwood, Jake Edge, Randy Dunlap,
	Michael Krufky, alan, Chuck Ebbert, Dave Jones, Chuck Wolber,
	akpm, torvalds, Willy Tarreau, Rodrigo Rubira Branco, davem

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: David S. Miller <davem@davemloft.net>

[ Upstream commit a552a42cfa91ab653128dff89a70c8dde7fed042 ]

tlb_flush_mmu() needs to flush pending TLB entries before
processing the mmu_gather ->pages list.

Noticed by Benjamin Herrenschmidt.

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/sparc/include/asm/tlb_64.h |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/arch/sparc/include/asm/tlb_64.h
+++ b/arch/sparc/include/asm/tlb_64.h
@@ -58,6 +58,8 @@ static inline struct mmu_gather *tlb_gat
 static inline void tlb_flush_mmu(struct mmu_gather *mp)
 {
 	if (mp->need_flush) {
+		if (!mp->fullmm)
+			flush_tlb_pending();
 		free_pages_and_swap_cache(mp->pages, mp->pages_nr);
 		mp->pages_nr = 0;
 		mp->need_flush = 0;
@@ -78,8 +80,6 @@ static inline void tlb_finish_mmu(struct
 
 	if (mp->fullmm)
 		mp->fullmm = 0;
-	else
-		flush_tlb_pending();
 
 	/* keep the page table cache within bounds */
 	check_pgt_cache();

^ permalink raw reply	[flat|nested] 59+ messages in thread

* [PATCH 48/45] sparc64: Fix reset hangs on Niagara systems.
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (47 preceding siblings ...)
  2009-04-02  6:57 ` [PATCH 47/45] sparc64: Flush TLB before releasing pages Chris Wright
@ 2009-04-02  6:58 ` Chris Wright
  2009-04-02  6:58 ` [PATCH 49/45] V4L: v4l2-common: remove incorrect MODULE test Chris Wright
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-04-02  6:58 UTC (permalink / raw)
  To: Chris Wright
  Cc: linux-kernel, stable, Theodore Ts'o, Zwane Mwaikambo,
	Eugene Teo, Justin Forbes, Domenico Andreoli, Chris Wedgwood,
	Jake Edge, Randy Dunlap, Michael Krufky, alan, Chuck Ebbert,
	Dave Jones, Chuck Wolber, akpm, torvalds, Willy Tarreau,
	Rodrigo Rubira Branco, davem

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: David S. Miller <davem@davemloft.net>

[ Upstream commit ffaba674090f287afe0c44fd8d978c64c03581a8 ]

Hypervisor versions older than version 1.6.1 cannot handle
leaving the profile counter overflow interrupt chirping
when the system does a soft reset.

So use a reboot notifier to shut off the NMI watchdog.

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 arch/sparc/kernel/nmi.c |   23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

--- a/arch/sparc/kernel/nmi.c
+++ b/arch/sparc/kernel/nmi.c
@@ -13,6 +13,7 @@
 #include <linux/module.h>
 #include <linux/kprobes.h>
 #include <linux/kernel_stat.h>
+#include <linux/reboot.h>
 #include <linux/slab.h>
 #include <linux/kdebug.h>
 #include <linux/delay.h>
@@ -206,13 +207,33 @@ void nmi_adjust_hz(unsigned int new_hz)
 }
 EXPORT_SYMBOL_GPL(nmi_adjust_hz);
 
+static int nmi_shutdown(struct notifier_block *nb, unsigned long cmd, void *p)
+{
+	on_each_cpu(stop_watchdog, NULL, 1);
+	return 0;
+}
+
+static struct notifier_block nmi_reboot_notifier = {
+	.notifier_call = nmi_shutdown,
+};
+
 int __init nmi_init(void)
 {
+	int err;
+
 	nmi_usable = 1;
 
 	on_each_cpu(start_watchdog, NULL, 1);
 
-	return check_nmi_watchdog();
+	err = check_nmi_watchdog();
+	if (!err) {
+		err = register_reboot_notifier(&nmi_reboot_notifier);
+		if (err) {
+			nmi_usable = 0;
+			on_each_cpu(stop_watchdog, NULL, 1);
+		}
+	}
+	return err;
 }
 
 static int __init setup_nmi_watchdog(char *str)

^ permalink raw reply	[flat|nested] 59+ messages in thread

* [PATCH 49/45] V4L: v4l2-common: remove incorrect MODULE test
  2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
                   ` (48 preceding siblings ...)
  2009-04-02  6:58 ` [PATCH 48/45] sparc64: Fix reset hangs on Niagara systems Chris Wright
@ 2009-04-02  6:58 ` Chris Wright
  49 siblings, 0 replies; 59+ messages in thread
From: Chris Wright @ 2009-04-02  6:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Theodore Ts'o, Zwane Mwaikambo, Eugene Teo, Justin Forbes,
	Domenico Andreoli, Chris Wedgwood, Jake Edge, Randy Dunlap,
	Michael Krufky, alan, Chuck Ebbert, Dave Jones, Chuck Wolber,
	akpm, torvalds, Willy Tarreau, Rodrigo Rubira Branco, hverkuil,
	g.liakhovetski, mchehab

-stable review patch.  If anyone has any objections, please let us know.
---------------------

From: Hans Verkuil <hverkuil@xs4all.nl>

upstream commit: d64260d58865004c6354e024da3450fdd607ea07

v4l2-common doesn't have to be a module for it to call request_module().
Just remove that test.

Without this patch loading ivtv as a module while v4l2-common is compiled
into the kernel will cause a delayed load of the i2c modules that ivtv
needs since request_module is never called directly.

While it is nice to see the delayed load in action, it is not so nice in
that ivtv fails to do a lot of necessary i2c initializations and will oops
later on with a division-by-zero.

Thanks to Mark Lord for reporting this and helping me figure out what was
wrong.

Thanks-to: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Thanks-to: Mark Lord <lkml@rtr.ca>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
 drivers/media/video/v4l2-common.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- a/drivers/media/video/v4l2-common.c
+++ b/drivers/media/video/v4l2-common.c
@@ -910,10 +910,10 @@ struct v4l2_subdev *v4l2_i2c_new_subdev(
 	struct i2c_board_info info;
 
 	BUG_ON(!dev);
-#ifdef MODULE
+
 	if (module_name)
 		request_module(module_name);
-#endif
+
 	/* Setup the i2c board info with the device type and
 	   the device address. */
 	memset(&info, 0, sizeof(info));
@@ -958,10 +958,10 @@ struct v4l2_subdev *v4l2_i2c_new_probed_
 	struct i2c_board_info info;
 
 	BUG_ON(!dev);
-#ifdef MODULE
+
 	if (module_name)
 		request_module(module_name);
-#endif
+
 	/* Setup the i2c board info with the device type and
 	   the device address. */
 	memset(&info, 0, sizeof(info));

^ permalink raw reply	[flat|nested] 59+ messages in thread

end of thread, other threads:[~2009-04-02  7:05 UTC | newest]

Thread overview: 59+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-31 23:10 [patch 00/45] 2.6.29.1 -stable review Chris Wright
2009-03-31 23:10 ` [patch 01/45] netfilter: nf_conntrack_tcp: fix unaligned memory access in tcp_sack Chris Wright
2009-03-31 23:10 ` [patch 02/45] udp: Wrong locking code in udp seq_file infrastructure Chris Wright
2009-03-31 23:10 ` [patch 03/45] dnet: drivers/net/dnet.c needs <linux/io.h> Chris Wright
2009-03-31 23:10 ` [patch 04/45] bridge: bad error handling when adding invalid ether address Chris Wright
2009-03-31 23:10 ` [patch 05/45] GRO: Disable GRO on legacy netif_rx path Chris Wright
2009-03-31 23:10 ` [patch 06/45] ipv6: Plug sk_buff leak in ipv6_rcv (net/ipv6/ip6_input.c) Chris Wright
2009-03-31 23:10 ` [patch 07/45] xfrm: spin_lock() should be spin_unlock() in xfrm_state.c Chris Wright
2009-03-31 23:10 ` [patch 08/45] USB: EHCI: add software retry for transaction errors Chris Wright
2009-03-31 23:10 ` [patch 09/45] USB: fix USB_STORAGE_CYPRESS_ATACB Chris Wright
2009-03-31 23:10 ` [patch 10/45] USB: usb-storage: increase max_sectors for tape drives Chris Wright
2009-03-31 23:10 ` [patch 11/45] USB: gadget: fix rndis regression Chris Wright
2009-03-31 23:10 ` [patch 12/45] USB: add quirk to avoid config and interface strings Chris Wright
2009-03-31 23:10 ` [patch 13/45] KVM: VMX: Dont allow uninhibited access to EFER on i386 Chris Wright
2009-03-31 23:10 ` [patch 14/45] KVM: SVM: set accessed bit for VMCB segment selectors Chris Wright
2009-03-31 23:11 ` [patch 15/45] ath9k: downgrade xmit queue full message to xmit debug Chris Wright
2009-03-31 23:11 ` [patch 16/45] cifs: fix buffer format byte on NT Rename/hardlink Chris Wright
2009-03-31 23:11 ` [patch 17/45] ath5k: use spin_lock_irqsave for beacon lock Chris Wright
2009-03-31 23:11 ` [patch 18/45] ath9k: fix dma mapping leak of rx buffer upon rmmod Chris Wright
2009-03-31 23:11 ` [patch 19/45] b43: fix b43_plcp_get_bitrate_idx_ofdm return type Chris Wright
2009-03-31 23:11 ` [patch 20/45] ath5k: disable MIB interrupts Chris Wright
2009-03-31 23:11 ` [patch 21/45] ath5k: warn and correct rate for unknown hw rate indexes Chris Wright
2009-03-31 23:11 ` [patch 22/45] CIFS: Fix memory overwrite when saving nativeFileSystem field during mount Chris Wright
2009-03-31 23:11 ` [patch 23/45] cfg80211: force last_request to be set for OLD_REG if regdom is EU Chris Wright
2009-03-31 23:11 ` [patch 24/45] DVB: firedtv: FireDTV S2 problems with tuning solved Chris Wright
2009-03-31 23:11 ` [patch 25/45] SCSI: sg: fix races during device removal Chris Wright
2009-03-31 23:31   ` Linus Torvalds
2009-04-01  0:10     ` James Bottomley
2009-04-01  0:18       ` Linus Torvalds
2009-04-01  1:15         ` Chris Wright
2009-04-01  1:54           ` FUJITA Tomonori
2009-04-01 15:18             ` Tony Battersby
2009-03-31 23:11 ` [patch 26/45] SCSI: sg: fix races with ioctl(SG_IO) Chris Wright
2009-03-31 23:11 ` [patch 27/45] SCSI: sg: avoid blk_put_request/blk_rq_unmap_user in interrupt Chris Wright
2009-03-31 23:11 ` [patch 28/45] ARM: pxa: fix overlay being un-necessarily initialized on pxa25x Chris Wright
2009-03-31 23:11 ` [patch 29/45] ARM: 5428/1: Module relocation update for R_ARM_V4BX Chris Wright
2009-03-31 23:11 ` [patch 30/45] ARM: cumana: Fix a long standing bogon Chris Wright
2009-03-31 23:11 ` [patch 31/45] ARM: fix leak in iop13xx/pci Chris Wright
2009-03-31 23:11 ` [patch 32/45] ARM: twl4030 - leak fix Chris Wright
2009-03-31 23:11 ` [patch 33/45] ARM: 5435/1: fix compile warning in sanity_check_meminfo() Chris Wright
2009-03-31 23:11 ` [patch 34/45] fuse: fix fuse_file_lseek returning with lock held Chris Wright
2009-03-31 23:11 ` [patch 35/45] Add a missing unlock_kernel() in raw_open() Chris Wright
2009-03-31 23:11 ` [patch 36/45] x86, PAT, PCI: Change vma prot in pci_mmap to reflect inherited prot Chris Wright
2009-03-31 23:11 ` [patch 37/45] x86, uv: fix cpumask iterator in uv_bau_init() Chris Wright
2009-03-31 23:11 ` [patch 38/45] x86: fix 64k corruption-check Chris Wright
2009-03-31 23:11 ` [patch 39/45] x86: ptrace, bts: fix an unreachable statement Chris Wright
2009-03-31 23:11 ` [patch 40/45] x86: mtrr: dont modify RdDram/WrDram bits of fixed MTRRs Chris Wright
2009-03-31 23:11 ` [patch 41/45] VM, x86, PAT: Change is_linear_pfn_mapping to not use vm_pgoff Chris Wright
2009-03-31 23:11 ` [patch 42/45] lguest: wire up pte_update/pte_update_defer Chris Wright
2009-03-31 23:11 ` [patch 43/45] lguest: fix spurious BUG_ON() on invalid guest stack Chris Wright
2009-03-31 23:11 ` [patch 44/45] cfg80211: fix incorrect assumption on last_request for 11d Chris Wright
2009-03-31 23:11 ` [patch 45/45] KVM: MMU: Fix another largepage memory leak Chris Wright
2009-04-01  3:47 ` [patch 00/45] 2.6.29.1 -stable review David Miller
2009-04-01  4:42   ` Michael Krufky
2009-04-02  6:57     ` Chris Wright
2009-04-02  6:57 ` [PATCH 46/45] sparc64: Fix MM refcount check in smp_flush_tlb_pending() Chris Wright
2009-04-02  6:57 ` [PATCH 47/45] sparc64: Flush TLB before releasing pages Chris Wright
2009-04-02  6:58 ` [PATCH 48/45] sparc64: Fix reset hangs on Niagara systems Chris Wright
2009-04-02  6:58 ` [PATCH 49/45] V4L: v4l2-common: remove incorrect MODULE test Chris Wright

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox