* [001/107] USB: ftdi_sio: add Calao reference board support
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [002/107] USB: EHCI: Do not rely on PORT_SUSPEND to stop USB resuming in ehci_bus_resume() Greg KH
` (105 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Jean-Christophe PLAGNIOL-VILLARD,
Gregory Hermant, Alan Cox
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
commit c96fbdd0ab97235f930ebf24b38fa42a2e3458cf upstream.
Calao use on there dev kits a FT2232 where the port 0 is used for the JTAG and
port 1 for the UART
They use the same VID and PID as FTDI Chip but they program the manufacturer
name in the eeprom
So use this information to detect it
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: Gregory Hermant <gregory.hermant@calao-systems.com>
Cc: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/serial/ftdi_sio.c | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -105,6 +105,7 @@ static int ftdi_jtag_probe(struct usb_
static int ftdi_mtxorb_hack_setup(struct usb_serial *serial);
static int ftdi_NDI_device_setup(struct usb_serial *serial);
static int ftdi_stmclite_probe(struct usb_serial *serial);
+static int ftdi_8u2232c_probe(struct usb_serial *serial);
static void ftdi_USB_UIRT_setup(struct ftdi_private *priv);
static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv);
@@ -132,6 +133,10 @@ static struct ftdi_sio_quirk ftdi_stmcli
.probe = ftdi_stmclite_probe,
};
+static struct ftdi_sio_quirk ftdi_8u2232c_quirk = {
+ .probe = ftdi_8u2232c_probe,
+};
+
/*
* The 8U232AM has the same API as the sio except for:
* - it can support MUCH higher baudrates; up to:
@@ -181,7 +186,8 @@ static struct usb_device_id id_table_com
{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_232RL_PID) },
- { USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) ,
+ .driver_info = (kernel_ulong_t)&ftdi_8u2232c_quirk },
{ USB_DEVICE(FTDI_VID, FTDI_4232H_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_MICRO_CHAMELEON_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_RELAIS_PID) },
@@ -1761,6 +1767,18 @@ static int ftdi_jtag_probe(struct usb_se
return 0;
}
+
+static int ftdi_8u2232c_probe(struct usb_serial *serial)
+{
+ struct usb_device *udev = serial->dev;
+
+ dbg("%s", __func__);
+
+ if (strcmp(udev->manufacturer, "CALAO Systems") == 0)
+ return ftdi_jtag_probe(serial);
+
+ return 0;
+}
/*
* First and second port on STMCLiteadaptors is reserved for JTAG interface
^ permalink raw reply [flat|nested] 122+ messages in thread
* [002/107] USB: EHCI: Do not rely on PORT_SUSPEND to stop USB resuming in ehci_bus_resume().
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
2011-11-02 22:13 ` [001/107] USB: ftdi_sio: add Calao reference board support Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [003/107] rt2x00: do not drop usb dev reference counter on suspend Greg KH
` (104 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Wang Zhi, Alan Stern
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Wang Zhi <zhi.wang@windriver.com>
commit d0f2fb2500b1c5fe4967eb45d8c9bc758d7aef80 upstream.
>>From EHCI Spec p.28 HC should clear PORT_SUSPEND when SW clears
PORT_RESUME. In Intel Oaktrail platform, MPH (Multi-Port Host
Controller) core clears PORT_SUSPEND directly when SW sets PORT_RESUME
bit. If we rely on PORT_SUSPEND bit to stop USB resume, we will miss
the action of clearing PORT_RESUME. This will cause unexpected long
resume signal on USB bus.
Signed-off-by: Wang Zhi <zhi.wang@windriver.com>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/host/ehci-hub.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -243,7 +243,7 @@ static int ehci_bus_resume (struct usb_h
u32 temp;
u32 power_okay;
int i;
- u8 resume_needed = 0;
+ unsigned long resume_needed = 0;
if (time_before (jiffies, ehci->next_statechange))
msleep(5);
@@ -307,7 +307,7 @@ static int ehci_bus_resume (struct usb_h
if (test_bit(i, &ehci->bus_suspended) &&
(temp & PORT_SUSPEND)) {
temp |= PORT_RESUME;
- resume_needed = 1;
+ set_bit(i, &resume_needed);
}
ehci_writel(ehci, temp, &ehci->regs->port_status [i]);
}
@@ -322,8 +322,7 @@ static int ehci_bus_resume (struct usb_h
i = HCS_N_PORTS (ehci->hcs_params);
while (i--) {
temp = ehci_readl(ehci, &ehci->regs->port_status [i]);
- if (test_bit(i, &ehci->bus_suspended) &&
- (temp & PORT_SUSPEND)) {
+ if (test_bit(i, &resume_needed)) {
temp &= ~(PORT_RWC_BITS | PORT_RESUME);
ehci_writel(ehci, temp, &ehci->regs->port_status [i]);
ehci_vdbg (ehci, "resumed port %d\n", i + 1);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [003/107] rt2x00: do not drop usb dev reference counter on suspend
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
2011-11-02 22:13 ` [001/107] USB: ftdi_sio: add Calao reference board support Greg KH
2011-11-02 22:13 ` [002/107] USB: EHCI: Do not rely on PORT_SUSPEND to stop USB resuming in ehci_bus_resume() Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [004/107] atm: br2684: Fix oops due to skb->dev being NULL Greg KH
` (103 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Stanislaw Gruszka, Ivo van Doorn,
John W. Linville
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Stanislaw Gruszka <sgruszka@redhat.com>
commit 543cc38c8fe86deba4169977c61eb88491036837 upstream.
When hibernating ->resume may not be called by usb core, but disconnect
and probe instead, so we do not increase the counter after decreasing
it in ->supend. As a result we free memory early, and get crash when
unplugging usb dongle.
BUG: unable to handle kernel paging request at 6b6b6b9f
IP: [<c06909b0>] driver_sysfs_remove+0x10/0x30
*pdpt = 0000000034f21001 *pde = 0000000000000000
Pid: 20, comm: khubd Not tainted 3.1.0-rc1-wl+ #20 LENOVO 6369CTO/6369CTO
EIP: 0060:[<c06909b0>] EFLAGS: 00010202 CPU: 1
EIP is at driver_sysfs_remove+0x10/0x30
EAX: 6b6b6b6b EBX: f52bba34 ECX: 00000000 EDX: 6b6b6b6b
ESI: 6b6b6b6b EDI: c0a0ea20 EBP: f61c9e68 ESP: f61c9e64
DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
Process khubd (pid: 20, ti=f61c8000 task=f6138270 task.ti=f61c8000)
Call Trace:
[<c06909ef>] __device_release_driver+0x1f/0xa0
[<c0690b20>] device_release_driver+0x20/0x40
[<c068fd64>] bus_remove_device+0x84/0xe0
[<c068e12a>] ? device_remove_attrs+0x2a/0x80
[<c068e267>] device_del+0xe7/0x170
[<c06d93d4>] usb_disconnect+0xd4/0x180
[<c06d9d61>] hub_thread+0x691/0x1600
[<c0473260>] ? wake_up_bit+0x30/0x30
[<c0442a39>] ? complete+0x49/0x60
[<c06d96d0>] ? hub_disconnect+0xd0/0xd0
[<c06d96d0>] ? hub_disconnect+0xd0/0xd0
[<c0472eb4>] kthread+0x74/0x80
[<c0472e40>] ? kthread_worker_fn+0x150/0x150
[<c0809b3e>] kernel_thread_helper+0x6/0x10
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Acked-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/net/wireless/rt2x00/rt2x00usb.c | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
--- a/drivers/net/wireless/rt2x00/rt2x00usb.c
+++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
@@ -703,18 +703,8 @@ int rt2x00usb_suspend(struct usb_interfa
{
struct ieee80211_hw *hw = usb_get_intfdata(usb_intf);
struct rt2x00_dev *rt2x00dev = hw->priv;
- int retval;
- retval = rt2x00lib_suspend(rt2x00dev, state);
- if (retval)
- return retval;
-
- /*
- * Decrease usbdev refcount.
- */
- usb_put_dev(interface_to_usbdev(usb_intf));
-
- return 0;
+ return rt2x00lib_suspend(rt2x00dev, state);
}
EXPORT_SYMBOL_GPL(rt2x00usb_suspend);
@@ -723,8 +713,6 @@ int rt2x00usb_resume(struct usb_interfac
struct ieee80211_hw *hw = usb_get_intfdata(usb_intf);
struct rt2x00_dev *rt2x00dev = hw->priv;
- usb_get_dev(interface_to_usbdev(usb_intf));
-
return rt2x00lib_resume(rt2x00dev);
}
EXPORT_SYMBOL_GPL(rt2x00usb_resume);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [004/107] atm: br2684: Fix oops due to skb->dev being NULL
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (2 preceding siblings ...)
2011-11-02 22:13 ` [003/107] rt2x00: do not drop usb dev reference counter on suspend Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [005/107] sparc: Allow handling signals when stack is corrupted Greg KH
` (102 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Daniel Schwierzeck, David S. Miller
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
commit fbe5e29ec1886967255e76946aaf537b8cc9b81e upstream.
This oops have been already fixed with commit
27141666b69f535a4d63d7bc6d9e84ee5032f82a
atm: [br2684] Fix oops due to skb->dev being NULL
It happens that if a packet arrives in a VC between the call to open it on
the hardware and the call to change the backend to br2684, br2684_regvcc
processes the packet and oopses dereferencing skb->dev because it is
NULL before the call to br2684_push().
but have been introduced again with commit
b6211ae7f2e56837c6a4849316396d1535606e90
atm: Use SKB queue and list helpers instead of doing it by-hand.
Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/atm/br2684.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
--- a/net/atm/br2684.c
+++ b/net/atm/br2684.c
@@ -530,12 +530,13 @@ static int br2684_regvcc(struct atm_vcc
spin_unlock_irqrestore(&rq->lock, flags);
skb_queue_walk_safe(&queue, skb, tmp) {
- struct net_device *dev = skb->dev;
+ struct net_device *dev;
+
+ br2684_push(atmvcc, skb);
+ dev = skb->dev;
dev->stats.rx_bytes -= skb->len;
dev->stats.rx_packets--;
-
- br2684_push(atmvcc, skb);
}
__module_get(THIS_MODULE);
return 0;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [005/107] sparc: Allow handling signals when stack is corrupted.
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (3 preceding siblings ...)
2011-11-02 22:13 ` [004/107] atm: br2684: Fix oops due to skb->dev being NULL Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-04 4:33 ` Ben Hutchings
2011-11-02 22:13 ` [006/107] sparc: fix array bounds error setting up PCIC NMI trap Greg KH
` (101 subsequent siblings)
106 siblings, 1 reply; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, David S. Miller
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: "David S. Miller" <davem@davemloft.net>
commit 5598473a5b40c47a8c5349dd2c2630797169cf1a upstream.
If we can't push the pending register windows onto the user's stack,
we disallow signal delivery even if the signal would be delivered on a
valid seperate signal stack.
Add a register window save area in the signal frame, and store any
unsavable windows there.
On sigreturn, if any windows are still queued up in the signal frame,
try to push them back onto the stack and if that fails we kill the
process immediately.
This allows the debug/tst-longjmp_chk2 glibc test case to pass.
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/sparc/include/asm/sigcontext.h | 14 ++
arch/sparc/kernel/Makefile | 1
arch/sparc/kernel/signal32.c | 184 ++++++++++++++++++++----------------
arch/sparc/kernel/signal_32.c | 172 +++++++++++++++------------------
arch/sparc/kernel/signal_64.c | 108 +++++++++------------
arch/sparc/kernel/sigutil.h | 9 +
arch/sparc/kernel/sigutil_32.c | 120 +++++++++++++++++++++++
arch/sparc/kernel/sigutil_64.c | 93 ++++++++++++++++++
8 files changed, 468 insertions(+), 233 deletions(-)
--- a/arch/sparc/include/asm/sigcontext.h
+++ b/arch/sparc/include/asm/sigcontext.h
@@ -45,6 +45,19 @@ typedef struct {
int si_mask;
} __siginfo32_t;
+#define __SIGC_MAXWIN 7
+
+typedef struct {
+ unsigned long locals[8];
+ unsigned long ins[8];
+} __siginfo_reg_window;
+
+typedef struct {
+ int wsaved;
+ __siginfo_reg_window reg_window[__SIGC_MAXWIN];
+ unsigned long rwbuf_stkptrs[__SIGC_MAXWIN];
+} __siginfo_rwin_t;
+
#ifdef CONFIG_SPARC64
typedef struct {
unsigned int si_float_regs [64];
@@ -73,6 +86,7 @@ struct sigcontext {
unsigned long ss_size;
} sigc_stack;
unsigned long sigc_mask;
+ __siginfo_rwin_t * sigc_rwin_save;
};
#else
--- a/arch/sparc/kernel/Makefile
+++ b/arch/sparc/kernel/Makefile
@@ -24,6 +24,7 @@ obj-$(CONFIG_SPARC32) += sun4m_irq.o s
obj-y += process_$(BITS).o
obj-y += signal_$(BITS).o
+obj-y += sigutil_$(BITS).o
obj-$(CONFIG_SPARC32) += ioport.o
obj-y += setup_$(BITS).o
obj-y += idprom.o
--- a/arch/sparc/kernel/signal32.c
+++ b/arch/sparc/kernel/signal32.c
@@ -29,6 +29,8 @@
#include <asm/visasm.h>
#include <asm/compat_signal.h>
+#include "sigutil.h"
+
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* This magic should be in g_upper[0] for all upper parts
@@ -44,14 +46,14 @@ typedef struct {
struct signal_frame32 {
struct sparc_stackf32 ss;
__siginfo32_t info;
- /* __siginfo_fpu32_t * */ u32 fpu_save;
+ /* __siginfo_fpu_t * */ u32 fpu_save;
unsigned int insns[2];
unsigned int extramask[_COMPAT_NSIG_WORDS - 1];
unsigned int extra_size; /* Should be sizeof(siginfo_extra_v8plus_t) */
/* Only valid if (info.si_regs.psr & (PSR_VERS|PSR_IMPL)) == PSR_V8PLUS */
siginfo_extra_v8plus_t v8plus;
- __siginfo_fpu_t fpu_state;
-};
+ /* __siginfo_rwin_t * */u32 rwin_save;
+} __attribute__((aligned(8)));
typedef struct compat_siginfo{
int si_signo;
@@ -110,18 +112,14 @@ struct rt_signal_frame32 {
compat_siginfo_t info;
struct pt_regs32 regs;
compat_sigset_t mask;
- /* __siginfo_fpu32_t * */ u32 fpu_save;
+ /* __siginfo_fpu_t * */ u32 fpu_save;
unsigned int insns[2];
stack_t32 stack;
unsigned int extra_size; /* Should be sizeof(siginfo_extra_v8plus_t) */
/* Only valid if (regs.psr & (PSR_VERS|PSR_IMPL)) == PSR_V8PLUS */
siginfo_extra_v8plus_t v8plus;
- __siginfo_fpu_t fpu_state;
-};
-
-/* Align macros */
-#define SF_ALIGNEDSZ (((sizeof(struct signal_frame32) + 15) & (~15)))
-#define RT_ALIGNEDSZ (((sizeof(struct rt_signal_frame32) + 15) & (~15)))
+ /* __siginfo_rwin_t * */u32 rwin_save;
+} __attribute__((aligned(8)));
int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from)
{
@@ -192,30 +190,13 @@ int copy_siginfo_from_user32(siginfo_t *
return 0;
}
-static int restore_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
-{
- unsigned long *fpregs = current_thread_info()->fpregs;
- unsigned long fprs;
- int err;
-
- err = __get_user(fprs, &fpu->si_fprs);
- fprs_write(0);
- regs->tstate &= ~TSTATE_PEF;
- if (fprs & FPRS_DL)
- err |= copy_from_user(fpregs, &fpu->si_float_regs[0], (sizeof(unsigned int) * 32));
- if (fprs & FPRS_DU)
- err |= copy_from_user(fpregs+16, &fpu->si_float_regs[32], (sizeof(unsigned int) * 32));
- err |= __get_user(current_thread_info()->xfsr[0], &fpu->si_fsr);
- err |= __get_user(current_thread_info()->gsr[0], &fpu->si_gsr);
- current_thread_info()->fpsaved[0] |= fprs;
- return err;
-}
-
void do_sigreturn32(struct pt_regs *regs)
{
struct signal_frame32 __user *sf;
+ compat_uptr_t fpu_save;
+ compat_uptr_t rwin_save;
unsigned int psr;
- unsigned pc, npc, fpu_save;
+ unsigned pc, npc;
sigset_t set;
unsigned seta[_COMPAT_NSIG_WORDS];
int err, i;
@@ -273,8 +254,13 @@ void do_sigreturn32(struct pt_regs *regs
pt_regs_clear_syscall(regs);
err |= __get_user(fpu_save, &sf->fpu_save);
- if (fpu_save)
- err |= restore_fpu_state32(regs, &sf->fpu_state);
+ if (!err && fpu_save)
+ err |= restore_fpu_state(regs, compat_ptr(fpu_save));
+ err |= __get_user(rwin_save, &sf->rwin_save);
+ if (!err && rwin_save) {
+ if (restore_rwin_state(compat_ptr(rwin_save)))
+ goto segv;
+ }
err |= __get_user(seta[0], &sf->info.si_mask);
err |= copy_from_user(seta+1, &sf->extramask,
(_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned int));
@@ -300,7 +286,9 @@ segv:
asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
{
struct rt_signal_frame32 __user *sf;
- unsigned int psr, pc, npc, fpu_save, u_ss_sp;
+ unsigned int psr, pc, npc, u_ss_sp;
+ compat_uptr_t fpu_save;
+ compat_uptr_t rwin_save;
mm_segment_t old_fs;
sigset_t set;
compat_sigset_t seta;
@@ -359,8 +347,8 @@ asmlinkage void do_rt_sigreturn32(struct
pt_regs_clear_syscall(regs);
err |= __get_user(fpu_save, &sf->fpu_save);
- if (fpu_save)
- err |= restore_fpu_state32(regs, &sf->fpu_state);
+ if (!err && fpu_save)
+ err |= restore_fpu_state(regs, compat_ptr(fpu_save));
err |= copy_from_user(&seta, &sf->mask, sizeof(compat_sigset_t));
err |= __get_user(u_ss_sp, &sf->stack.ss_sp);
st.ss_sp = compat_ptr(u_ss_sp);
@@ -376,6 +364,12 @@ asmlinkage void do_rt_sigreturn32(struct
do_sigaltstack((stack_t __user *) &st, NULL, (unsigned long)sf);
set_fs(old_fs);
+ err |= __get_user(rwin_save, &sf->rwin_save);
+ if (!err && rwin_save) {
+ if (restore_rwin_state(compat_ptr(rwin_save)))
+ goto segv;
+ }
+
switch (_NSIG_WORDS) {
case 4: set.sig[3] = seta.sig[6] + (((long)seta.sig[7]) << 32);
case 3: set.sig[2] = seta.sig[4] + (((long)seta.sig[5]) << 32);
@@ -433,26 +427,6 @@ static void __user *get_sigframe(struct
return (void __user *) sp;
}
-static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
-{
- unsigned long *fpregs = current_thread_info()->fpregs;
- unsigned long fprs;
- int err = 0;
-
- fprs = current_thread_info()->fpsaved[0];
- if (fprs & FPRS_DL)
- err |= copy_to_user(&fpu->si_float_regs[0], fpregs,
- (sizeof(unsigned int) * 32));
- if (fprs & FPRS_DU)
- err |= copy_to_user(&fpu->si_float_regs[32], fpregs+16,
- (sizeof(unsigned int) * 32));
- err |= __put_user(current_thread_info()->xfsr[0], &fpu->si_fsr);
- err |= __put_user(current_thread_info()->gsr[0], &fpu->si_gsr);
- err |= __put_user(fprs, &fpu->si_fprs);
-
- return err;
-}
-
/* The I-cache flush instruction only works in the primary ASI, which
* right now is the nucleus, aka. kernel space.
*
@@ -515,18 +489,23 @@ static int setup_frame32(struct k_sigact
int signo, sigset_t *oldset)
{
struct signal_frame32 __user *sf;
+ int i, err, wsaved;
+ void __user *tail;
int sigframe_size;
u32 psr;
- int i, err;
unsigned int seta[_COMPAT_NSIG_WORDS];
/* 1. Make sure everything is clean */
synchronize_user_stack();
save_and_clear_fpu();
- sigframe_size = SF_ALIGNEDSZ;
- if (!(current_thread_info()->fpsaved[0] & FPRS_FEF))
- sigframe_size -= sizeof(__siginfo_fpu_t);
+ wsaved = get_thread_wsaved();
+
+ sigframe_size = sizeof(*sf);
+ if (current_thread_info()->fpsaved[0] & FPRS_FEF)
+ sigframe_size += sizeof(__siginfo_fpu_t);
+ if (wsaved)
+ sigframe_size += sizeof(__siginfo_rwin_t);
sf = (struct signal_frame32 __user *)
get_sigframe(&ka->sa, regs, sigframe_size);
@@ -534,8 +513,7 @@ static int setup_frame32(struct k_sigact
if (invalid_frame_pointer(sf, sigframe_size))
goto sigill;
- if (get_thread_wsaved() != 0)
- goto sigill;
+ tail = (sf + 1);
/* 2. Save the current process state */
if (test_thread_flag(TIF_32BIT)) {
@@ -560,11 +538,22 @@ static int setup_frame32(struct k_sigact
&sf->v8plus.asi);
if (psr & PSR_EF) {
- err |= save_fpu_state32(regs, &sf->fpu_state);
- err |= __put_user((u64)&sf->fpu_state, &sf->fpu_save);
+ __siginfo_fpu_t __user *fp = tail;
+ tail += sizeof(*fp);
+ err |= save_fpu_state(regs, fp);
+ err |= __put_user((u64)fp, &sf->fpu_save);
} else {
err |= __put_user(0, &sf->fpu_save);
}
+ if (wsaved) {
+ __siginfo_rwin_t __user *rwp = tail;
+ tail += sizeof(*rwp);
+ err |= save_rwin_state(wsaved, rwp);
+ err |= __put_user((u64)rwp, &sf->rwin_save);
+ set_thread_wsaved(0);
+ } else {
+ err |= __put_user(0, &sf->rwin_save);
+ }
switch (_NSIG_WORDS) {
case 4: seta[7] = (oldset->sig[3] >> 32);
@@ -580,10 +569,21 @@ static int setup_frame32(struct k_sigact
err |= __copy_to_user(sf->extramask, seta + 1,
(_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned int));
- err |= copy_in_user((u32 __user *)sf,
- (u32 __user *)(regs->u_regs[UREG_FP]),
- sizeof(struct reg_window32));
-
+ if (!wsaved) {
+ err |= copy_in_user((u32 __user *)sf,
+ (u32 __user *)(regs->u_regs[UREG_FP]),
+ sizeof(struct reg_window32));
+ } else {
+ struct reg_window *rp;
+
+ rp = ¤t_thread_info()->reg_window[wsaved - 1];
+ for (i = 0; i < 8; i++)
+ err |= __put_user(rp->locals[i], &sf->ss.locals[i]);
+ for (i = 0; i < 6; i++)
+ err |= __put_user(rp->ins[i], &sf->ss.ins[i]);
+ err |= __put_user(rp->ins[6], &sf->ss.fp);
+ err |= __put_user(rp->ins[7], &sf->ss.callers_pc);
+ }
if (err)
goto sigsegv;
@@ -613,7 +613,6 @@ static int setup_frame32(struct k_sigact
err |= __put_user(0x91d02010, &sf->insns[1]); /*t 0x10*/
if (err)
goto sigsegv;
-
flush_signal_insns(address);
}
return 0;
@@ -632,18 +631,23 @@ static int setup_rt_frame32(struct k_sig
siginfo_t *info)
{
struct rt_signal_frame32 __user *sf;
+ int i, err, wsaved;
+ void __user *tail;
int sigframe_size;
u32 psr;
- int i, err;
compat_sigset_t seta;
/* 1. Make sure everything is clean */
synchronize_user_stack();
save_and_clear_fpu();
- sigframe_size = RT_ALIGNEDSZ;
- if (!(current_thread_info()->fpsaved[0] & FPRS_FEF))
- sigframe_size -= sizeof(__siginfo_fpu_t);
+ wsaved = get_thread_wsaved();
+
+ sigframe_size = sizeof(*sf);
+ if (current_thread_info()->fpsaved[0] & FPRS_FEF)
+ sigframe_size += sizeof(__siginfo_fpu_t);
+ if (wsaved)
+ sigframe_size += sizeof(__siginfo_rwin_t);
sf = (struct rt_signal_frame32 __user *)
get_sigframe(&ka->sa, regs, sigframe_size);
@@ -651,8 +655,7 @@ static int setup_rt_frame32(struct k_sig
if (invalid_frame_pointer(sf, sigframe_size))
goto sigill;
- if (get_thread_wsaved() != 0)
- goto sigill;
+ tail = (sf + 1);
/* 2. Save the current process state */
if (test_thread_flag(TIF_32BIT)) {
@@ -677,11 +680,22 @@ static int setup_rt_frame32(struct k_sig
&sf->v8plus.asi);
if (psr & PSR_EF) {
- err |= save_fpu_state32(regs, &sf->fpu_state);
- err |= __put_user((u64)&sf->fpu_state, &sf->fpu_save);
+ __siginfo_fpu_t __user *fp = tail;
+ tail += sizeof(*fp);
+ err |= save_fpu_state(regs, fp);
+ err |= __put_user((u64)fp, &sf->fpu_save);
} else {
err |= __put_user(0, &sf->fpu_save);
}
+ if (wsaved) {
+ __siginfo_rwin_t __user *rwp = tail;
+ tail += sizeof(*rwp);
+ err |= save_rwin_state(wsaved, rwp);
+ err |= __put_user((u64)rwp, &sf->rwin_save);
+ set_thread_wsaved(0);
+ } else {
+ err |= __put_user(0, &sf->rwin_save);
+ }
/* Update the siginfo structure. */
err |= copy_siginfo_to_user32(&sf->info, info);
@@ -703,9 +717,21 @@ static int setup_rt_frame32(struct k_sig
}
err |= __copy_to_user(&sf->mask, &seta, sizeof(compat_sigset_t));
- err |= copy_in_user((u32 __user *)sf,
- (u32 __user *)(regs->u_regs[UREG_FP]),
- sizeof(struct reg_window32));
+ if (!wsaved) {
+ err |= copy_in_user((u32 __user *)sf,
+ (u32 __user *)(regs->u_regs[UREG_FP]),
+ sizeof(struct reg_window32));
+ } else {
+ struct reg_window *rp;
+
+ rp = ¤t_thread_info()->reg_window[wsaved - 1];
+ for (i = 0; i < 8; i++)
+ err |= __put_user(rp->locals[i], &sf->ss.locals[i]);
+ for (i = 0; i < 6; i++)
+ err |= __put_user(rp->ins[i], &sf->ss.ins[i]);
+ err |= __put_user(rp->ins[6], &sf->ss.fp);
+ err |= __put_user(rp->ins[7], &sf->ss.callers_pc);
+ }
if (err)
goto sigsegv;
--- a/arch/sparc/kernel/signal_32.c
+++ b/arch/sparc/kernel/signal_32.c
@@ -26,6 +26,8 @@
#include <asm/pgtable.h>
#include <asm/cacheflush.h> /* flush_sig_insns */
+#include "sigutil.h"
+
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
extern void fpsave(unsigned long *fpregs, unsigned long *fsr,
@@ -39,8 +41,8 @@ struct signal_frame {
unsigned long insns[2] __attribute__ ((aligned (8)));
unsigned int extramask[_NSIG_WORDS - 1];
unsigned int extra_size; /* Should be 0 */
- __siginfo_fpu_t fpu_state;
-};
+ __siginfo_rwin_t __user *rwin_save;
+} __attribute__((aligned(8)));
struct rt_signal_frame {
struct sparc_stackf ss;
@@ -51,8 +53,8 @@ struct rt_signal_frame {
unsigned int insns[2];
stack_t stack;
unsigned int extra_size; /* Should be 0 */
- __siginfo_fpu_t fpu_state;
-};
+ __siginfo_rwin_t __user *rwin_save;
+} __attribute__((aligned(8)));
/* Align macros */
#define SF_ALIGNEDSZ (((sizeof(struct signal_frame) + 7) & (~7)))
@@ -79,43 +81,13 @@ asmlinkage int sys_sigsuspend(old_sigset
return _sigpause_common(set);
}
-static inline int
-restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
-{
- int err;
-#ifdef CONFIG_SMP
- if (test_tsk_thread_flag(current, TIF_USEDFPU))
- regs->psr &= ~PSR_EF;
-#else
- if (current == last_task_used_math) {
- last_task_used_math = NULL;
- regs->psr &= ~PSR_EF;
- }
-#endif
- set_used_math();
- clear_tsk_thread_flag(current, TIF_USEDFPU);
-
- if (!access_ok(VERIFY_READ, fpu, sizeof(*fpu)))
- return -EFAULT;
-
- err = __copy_from_user(¤t->thread.float_regs[0], &fpu->si_float_regs[0],
- (sizeof(unsigned long) * 32));
- err |= __get_user(current->thread.fsr, &fpu->si_fsr);
- err |= __get_user(current->thread.fpqdepth, &fpu->si_fpqdepth);
- if (current->thread.fpqdepth != 0)
- err |= __copy_from_user(¤t->thread.fpqueue[0],
- &fpu->si_fpqueue[0],
- ((sizeof(unsigned long) +
- (sizeof(unsigned long *)))*16));
- return err;
-}
-
asmlinkage void do_sigreturn(struct pt_regs *regs)
{
struct signal_frame __user *sf;
unsigned long up_psr, pc, npc;
sigset_t set;
__siginfo_fpu_t __user *fpu_save;
+ __siginfo_rwin_t __user *rwin_save;
int err;
/* Always make any pending restarted system calls return -EINTR */
@@ -150,9 +122,11 @@ asmlinkage void do_sigreturn(struct pt_r
pt_regs_clear_syscall(regs);
err |= __get_user(fpu_save, &sf->fpu_save);
-
if (fpu_save)
err |= restore_fpu_state(regs, fpu_save);
+ err |= __get_user(rwin_save, &sf->rwin_save);
+ if (rwin_save)
+ err |= restore_rwin_state(rwin_save);
/* This is pretty much atomic, no amount locking would prevent
* the races which exist anyways.
@@ -180,6 +154,7 @@ asmlinkage void do_rt_sigreturn(struct p
struct rt_signal_frame __user *sf;
unsigned int psr, pc, npc;
__siginfo_fpu_t __user *fpu_save;
+ __siginfo_rwin_t __user *rwin_save;
mm_segment_t old_fs;
sigset_t set;
stack_t st;
@@ -207,8 +182,7 @@ asmlinkage void do_rt_sigreturn(struct p
pt_regs_clear_syscall(regs);
err |= __get_user(fpu_save, &sf->fpu_save);
-
- if (fpu_save)
+ if (!err && fpu_save)
err |= restore_fpu_state(regs, fpu_save);
err |= __copy_from_user(&set, &sf->mask, sizeof(sigset_t));
@@ -228,6 +202,12 @@ asmlinkage void do_rt_sigreturn(struct p
do_sigaltstack((const stack_t __user *) &st, NULL, (unsigned long)sf);
set_fs(old_fs);
+ err |= __get_user(rwin_save, &sf->rwin_save);
+ if (!err && rwin_save) {
+ if (restore_rwin_state(rwin_save))
+ goto segv;
+ }
+
sigdelsetmask(&set, ~_BLOCKABLE);
spin_lock_irq(¤t->sighand->siglock);
current->blocked = set;
@@ -280,53 +260,23 @@ static inline void __user *get_sigframe(
return (void __user *) sp;
}
-static inline int
-save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
-{
- int err = 0;
-#ifdef CONFIG_SMP
- if (test_tsk_thread_flag(current, TIF_USEDFPU)) {
- put_psr(get_psr() | PSR_EF);
- fpsave(¤t->thread.float_regs[0], ¤t->thread.fsr,
- ¤t->thread.fpqueue[0], ¤t->thread.fpqdepth);
- regs->psr &= ~(PSR_EF);
- clear_tsk_thread_flag(current, TIF_USEDFPU);
- }
-#else
- if (current == last_task_used_math) {
- put_psr(get_psr() | PSR_EF);
- fpsave(¤t->thread.float_regs[0], ¤t->thread.fsr,
- ¤t->thread.fpqueue[0], ¤t->thread.fpqdepth);
- last_task_used_math = NULL;
- regs->psr &= ~(PSR_EF);
- }
-#endif
- err |= __copy_to_user(&fpu->si_float_regs[0],
- ¤t->thread.float_regs[0],
- (sizeof(unsigned long) * 32));
- err |= __put_user(current->thread.fsr, &fpu->si_fsr);
- err |= __put_user(current->thread.fpqdepth, &fpu->si_fpqdepth);
- if (current->thread.fpqdepth != 0)
- err |= __copy_to_user(&fpu->si_fpqueue[0],
- ¤t->thread.fpqueue[0],
- ((sizeof(unsigned long) +
- (sizeof(unsigned long *)))*16));
- clear_used_math();
- return err;
-}
-
static int setup_frame(struct k_sigaction *ka, struct pt_regs *regs,
int signo, sigset_t *oldset)
{
struct signal_frame __user *sf;
- int sigframe_size, err;
+ int sigframe_size, err, wsaved;
+ void __user *tail;
/* 1. Make sure everything is clean */
synchronize_user_stack();
- sigframe_size = SF_ALIGNEDSZ;
- if (!used_math())
- sigframe_size -= sizeof(__siginfo_fpu_t);
+ wsaved = current_thread_info()->w_saved;
+
+ sigframe_size = sizeof(*sf);
+ if (used_math())
+ sigframe_size += sizeof(__siginfo_fpu_t);
+ if (wsaved)
+ sigframe_size += sizeof(__siginfo_rwin_t);
sf = (struct signal_frame __user *)
get_sigframe(&ka->sa, regs, sigframe_size);
@@ -334,8 +284,7 @@ static int setup_frame(struct k_sigactio
if (invalid_frame_pointer(sf, sigframe_size))
goto sigill_and_return;
- if (current_thread_info()->w_saved != 0)
- goto sigill_and_return;
+ tail = sf + 1;
/* 2. Save the current process state */
err = __copy_to_user(&sf->info.si_regs, regs, sizeof(struct pt_regs));
@@ -343,17 +292,34 @@ static int setup_frame(struct k_sigactio
err |= __put_user(0, &sf->extra_size);
if (used_math()) {
- err |= save_fpu_state(regs, &sf->fpu_state);
- err |= __put_user(&sf->fpu_state, &sf->fpu_save);
+ __siginfo_fpu_t __user *fp = tail;
+ tail += sizeof(*fp);
+ err |= save_fpu_state(regs, fp);
+ err |= __put_user(fp, &sf->fpu_save);
} else {
err |= __put_user(0, &sf->fpu_save);
}
+ if (wsaved) {
+ __siginfo_rwin_t __user *rwp = tail;
+ tail += sizeof(*rwp);
+ err |= save_rwin_state(wsaved, rwp);
+ err |= __put_user(rwp, &sf->rwin_save);
+ } else {
+ err |= __put_user(0, &sf->rwin_save);
+ }
err |= __put_user(oldset->sig[0], &sf->info.si_mask);
err |= __copy_to_user(sf->extramask, &oldset->sig[1],
(_NSIG_WORDS - 1) * sizeof(unsigned int));
- err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP],
- sizeof(struct reg_window32));
+ if (!wsaved) {
+ err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP],
+ sizeof(struct reg_window32));
+ } else {
+ struct reg_window32 *rp;
+
+ rp = ¤t_thread_info()->reg_window[wsaved - 1];
+ err |= __copy_to_user(sf, rp, sizeof(struct reg_window32));
+ }
if (err)
goto sigsegv;
@@ -399,21 +365,24 @@ static int setup_rt_frame(struct k_sigac
int signo, sigset_t *oldset, siginfo_t *info)
{
struct rt_signal_frame __user *sf;
- int sigframe_size;
+ int sigframe_size, wsaved;
+ void __user *tail;
unsigned int psr;
int err;
synchronize_user_stack();
- sigframe_size = RT_ALIGNEDSZ;
- if (!used_math())
- sigframe_size -= sizeof(__siginfo_fpu_t);
+ wsaved = current_thread_info()->w_saved;
+ sigframe_size = sizeof(*sf);
+ if (used_math())
+ sigframe_size += sizeof(__siginfo_fpu_t);
+ if (wsaved)
+ sigframe_size += sizeof(__siginfo_rwin_t);
sf = (struct rt_signal_frame __user *)
get_sigframe(&ka->sa, regs, sigframe_size);
if (invalid_frame_pointer(sf, sigframe_size))
goto sigill;
- if (current_thread_info()->w_saved != 0)
- goto sigill;
+ tail = sf + 1;
err = __put_user(regs->pc, &sf->regs.pc);
err |= __put_user(regs->npc, &sf->regs.npc);
err |= __put_user(regs->y, &sf->regs.y);
@@ -425,11 +394,21 @@ static int setup_rt_frame(struct k_sigac
err |= __put_user(0, &sf->extra_size);
if (psr & PSR_EF) {
- err |= save_fpu_state(regs, &sf->fpu_state);
- err |= __put_user(&sf->fpu_state, &sf->fpu_save);
+ __siginfo_fpu_t *fp = tail;
+ tail += sizeof(*fp);
+ err |= save_fpu_state(regs, fp);
+ err |= __put_user(fp, &sf->fpu_save);
} else {
err |= __put_user(0, &sf->fpu_save);
}
+ if (wsaved) {
+ __siginfo_rwin_t *rwp = tail;
+ tail += sizeof(*rwp);
+ err |= save_rwin_state(wsaved, rwp);
+ err |= __put_user(rwp, &sf->rwin_save);
+ } else {
+ err |= __put_user(0, &sf->rwin_save);
+ }
err |= __copy_to_user(&sf->mask, &oldset->sig[0], sizeof(sigset_t));
/* Setup sigaltstack */
@@ -437,8 +416,15 @@ static int setup_rt_frame(struct k_sigac
err |= __put_user(sas_ss_flags(regs->u_regs[UREG_FP]), &sf->stack.ss_flags);
err |= __put_user(current->sas_ss_size, &sf->stack.ss_size);
- err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP],
- sizeof(struct reg_window32));
+ if (!wsaved) {
+ err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP],
+ sizeof(struct reg_window32));
+ } else {
+ struct reg_window32 *rp;
+
+ rp = ¤t_thread_info()->reg_window[wsaved - 1];
+ err |= __copy_to_user(sf, rp, sizeof(struct reg_window32));
+ }
err |= copy_siginfo_to_user(&sf->info, info);
--- a/arch/sparc/kernel/signal_64.c
+++ b/arch/sparc/kernel/signal_64.c
@@ -34,6 +34,7 @@
#include "entry.h"
#include "systbls.h"
+#include "sigutil.h"
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
@@ -236,7 +237,7 @@ struct rt_signal_frame {
__siginfo_fpu_t __user *fpu_save;
stack_t stack;
sigset_t mask;
- __siginfo_fpu_t fpu_state;
+ __siginfo_rwin_t *rwin_save;
};
static long _sigpause_common(old_sigset_t set)
@@ -266,33 +267,12 @@ asmlinkage long sys_sigsuspend(old_sigse
return _sigpause_common(set);
}
-static inline int
-restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
-{
- unsigned long *fpregs = current_thread_info()->fpregs;
- unsigned long fprs;
- int err;
-
- err = __get_user(fprs, &fpu->si_fprs);
- fprs_write(0);
- regs->tstate &= ~TSTATE_PEF;
- if (fprs & FPRS_DL)
- err |= copy_from_user(fpregs, &fpu->si_float_regs[0],
- (sizeof(unsigned int) * 32));
- if (fprs & FPRS_DU)
- err |= copy_from_user(fpregs+16, &fpu->si_float_regs[32],
- (sizeof(unsigned int) * 32));
- err |= __get_user(current_thread_info()->xfsr[0], &fpu->si_fsr);
- err |= __get_user(current_thread_info()->gsr[0], &fpu->si_gsr);
- current_thread_info()->fpsaved[0] |= fprs;
- return err;
-}
-
void do_rt_sigreturn(struct pt_regs *regs)
{
struct rt_signal_frame __user *sf;
unsigned long tpc, tnpc, tstate;
__siginfo_fpu_t __user *fpu_save;
+ __siginfo_rwin_t __user *rwin_save;
sigset_t set;
int err;
@@ -325,8 +305,8 @@ void do_rt_sigreturn(struct pt_regs *reg
regs->tstate |= (tstate & (TSTATE_ASI | TSTATE_ICC | TSTATE_XCC));
err |= __get_user(fpu_save, &sf->fpu_save);
- if (fpu_save)
- err |= restore_fpu_state(regs, &sf->fpu_state);
+ if (!err && fpu_save)
+ err |= restore_fpu_state(regs, fpu_save);
err |= __copy_from_user(&set, &sf->mask, sizeof(sigset_t));
err |= do_sigaltstack(&sf->stack, NULL, (unsigned long)sf);
@@ -334,6 +314,12 @@ void do_rt_sigreturn(struct pt_regs *reg
if (err)
goto segv;
+ err |= __get_user(rwin_save, &sf->rwin_save);
+ if (!err && rwin_save) {
+ if (restore_rwin_state(rwin_save))
+ goto segv;
+ }
+
regs->tpc = tpc;
regs->tnpc = tnpc;
@@ -351,34 +337,13 @@ segv:
}
/* Checks if the fp is valid */
-static int invalid_frame_pointer(void __user *fp, int fplen)
+static int invalid_frame_pointer(void __user *fp)
{
if (((unsigned long) fp) & 15)
return 1;
return 0;
}
-static inline int
-save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
-{
- unsigned long *fpregs = current_thread_info()->fpregs;
- unsigned long fprs;
- int err = 0;
-
- fprs = current_thread_info()->fpsaved[0];
- if (fprs & FPRS_DL)
- err |= copy_to_user(&fpu->si_float_regs[0], fpregs,
- (sizeof(unsigned int) * 32));
- if (fprs & FPRS_DU)
- err |= copy_to_user(&fpu->si_float_regs[32], fpregs+16,
- (sizeof(unsigned int) * 32));
- err |= __put_user(current_thread_info()->xfsr[0], &fpu->si_fsr);
- err |= __put_user(current_thread_info()->gsr[0], &fpu->si_gsr);
- err |= __put_user(fprs, &fpu->si_fprs);
-
- return err;
-}
-
static inline void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, unsigned long framesize)
{
unsigned long sp = regs->u_regs[UREG_FP] + STACK_BIAS;
@@ -414,34 +379,48 @@ setup_rt_frame(struct k_sigaction *ka, s
int signo, sigset_t *oldset, siginfo_t *info)
{
struct rt_signal_frame __user *sf;
- int sigframe_size, err;
+ int wsaved, err, sf_size;
+ void __user *tail;
/* 1. Make sure everything is clean */
synchronize_user_stack();
save_and_clear_fpu();
- sigframe_size = sizeof(struct rt_signal_frame);
- if (!(current_thread_info()->fpsaved[0] & FPRS_FEF))
- sigframe_size -= sizeof(__siginfo_fpu_t);
+ wsaved = get_thread_wsaved();
+ sf_size = sizeof(struct rt_signal_frame);
+ if (current_thread_info()->fpsaved[0] & FPRS_FEF)
+ sf_size += sizeof(__siginfo_fpu_t);
+ if (wsaved)
+ sf_size += sizeof(__siginfo_rwin_t);
sf = (struct rt_signal_frame __user *)
- get_sigframe(ka, regs, sigframe_size);
-
- if (invalid_frame_pointer (sf, sigframe_size))
- goto sigill;
+ get_sigframe(ka, regs, sf_size);
- if (get_thread_wsaved() != 0)
+ if (invalid_frame_pointer (sf))
goto sigill;
+ tail = (sf + 1);
+
/* 2. Save the current process state */
err = copy_to_user(&sf->regs, regs, sizeof (*regs));
if (current_thread_info()->fpsaved[0] & FPRS_FEF) {
- err |= save_fpu_state(regs, &sf->fpu_state);
- err |= __put_user((u64)&sf->fpu_state, &sf->fpu_save);
+ __siginfo_fpu_t __user *fpu_save = tail;
+ tail += sizeof(__siginfo_fpu_t);
+ err |= save_fpu_state(regs, fpu_save);
+ err |= __put_user((u64)fpu_save, &sf->fpu_save);
} else {
err |= __put_user(0, &sf->fpu_save);
}
+ if (wsaved) {
+ __siginfo_rwin_t __user *rwin_save = tail;
+ tail += sizeof(__siginfo_rwin_t);
+ err |= save_rwin_state(wsaved, rwin_save);
+ err |= __put_user((u64)rwin_save, &sf->rwin_save);
+ set_thread_wsaved(0);
+ } else {
+ err |= __put_user(0, &sf->rwin_save);
+ }
/* Setup sigaltstack */
err |= __put_user(current->sas_ss_sp, &sf->stack.ss_sp);
@@ -450,10 +429,17 @@ setup_rt_frame(struct k_sigaction *ka, s
err |= copy_to_user(&sf->mask, oldset, sizeof(sigset_t));
- err |= copy_in_user((u64 __user *)sf,
- (u64 __user *)(regs->u_regs[UREG_FP]+STACK_BIAS),
- sizeof(struct reg_window));
+ if (!wsaved) {
+ err |= copy_in_user((u64 __user *)sf,
+ (u64 __user *)(regs->u_regs[UREG_FP] +
+ STACK_BIAS),
+ sizeof(struct reg_window));
+ } else {
+ struct reg_window *rp;
+ rp = ¤t_thread_info()->reg_window[wsaved - 1];
+ err |= copy_to_user(sf, rp, sizeof(struct reg_window));
+ }
if (info)
err |= copy_siginfo_to_user(&sf->info, info);
else {
--- /dev/null
+++ b/arch/sparc/kernel/sigutil.h
@@ -0,0 +1,9 @@
+#ifndef _SIGUTIL_H
+#define _SIGUTIL_H
+
+int save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu);
+int restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu);
+int save_rwin_state(int wsaved, __siginfo_rwin_t __user *rwin);
+int restore_rwin_state(__siginfo_rwin_t __user *rp);
+
+#endif /* _SIGUTIL_H */
--- /dev/null
+++ b/arch/sparc/kernel/sigutil_32.c
@@ -0,0 +1,120 @@
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/thread_info.h>
+#include <linux/uaccess.h>
+#include <linux/sched.h>
+
+#include <asm/sigcontext.h>
+#include <asm/fpumacro.h>
+#include <asm/ptrace.h>
+
+#include "sigutil.h"
+
+int save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
+{
+ int err = 0;
+#ifdef CONFIG_SMP
+ if (test_tsk_thread_flag(current, TIF_USEDFPU)) {
+ put_psr(get_psr() | PSR_EF);
+ fpsave(¤t->thread.float_regs[0], ¤t->thread.fsr,
+ ¤t->thread.fpqueue[0], ¤t->thread.fpqdepth);
+ regs->psr &= ~(PSR_EF);
+ clear_tsk_thread_flag(current, TIF_USEDFPU);
+ }
+#else
+ if (current == last_task_used_math) {
+ put_psr(get_psr() | PSR_EF);
+ fpsave(¤t->thread.float_regs[0], ¤t->thread.fsr,
+ ¤t->thread.fpqueue[0], ¤t->thread.fpqdepth);
+ last_task_used_math = NULL;
+ regs->psr &= ~(PSR_EF);
+ }
+#endif
+ err |= __copy_to_user(&fpu->si_float_regs[0],
+ ¤t->thread.float_regs[0],
+ (sizeof(unsigned long) * 32));
+ err |= __put_user(current->thread.fsr, &fpu->si_fsr);
+ err |= __put_user(current->thread.fpqdepth, &fpu->si_fpqdepth);
+ if (current->thread.fpqdepth != 0)
+ err |= __copy_to_user(&fpu->si_fpqueue[0],
+ ¤t->thread.fpqueue[0],
+ ((sizeof(unsigned long) +
+ (sizeof(unsigned long *)))*16));
+ clear_used_math();
+ return err;
+}
+
+int restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
+{
+ int err;
+#ifdef CONFIG_SMP
+ if (test_tsk_thread_flag(current, TIF_USEDFPU))
+ regs->psr &= ~PSR_EF;
+#else
+ if (current == last_task_used_math) {
+ last_task_used_math = NULL;
+ regs->psr &= ~PSR_EF;
+ }
+#endif
+ set_used_math();
+ clear_tsk_thread_flag(current, TIF_USEDFPU);
+
+ if (!access_ok(VERIFY_READ, fpu, sizeof(*fpu)))
+ return -EFAULT;
+
+ err = __copy_from_user(¤t->thread.float_regs[0], &fpu->si_float_regs[0],
+ (sizeof(unsigned long) * 32));
+ err |= __get_user(current->thread.fsr, &fpu->si_fsr);
+ err |= __get_user(current->thread.fpqdepth, &fpu->si_fpqdepth);
+ if (current->thread.fpqdepth != 0)
+ err |= __copy_from_user(¤t->thread.fpqueue[0],
+ &fpu->si_fpqueue[0],
+ ((sizeof(unsigned long) +
+ (sizeof(unsigned long *)))*16));
+ return err;
+}
+
+int save_rwin_state(int wsaved, __siginfo_rwin_t __user *rwin)
+{
+ int i, err = __put_user(wsaved, &rwin->wsaved);
+
+ for (i = 0; i < wsaved; i++) {
+ struct reg_window32 *rp;
+ unsigned long fp;
+
+ rp = ¤t_thread_info()->reg_window[i];
+ fp = current_thread_info()->rwbuf_stkptrs[i];
+ err |= copy_to_user(&rwin->reg_window[i], rp,
+ sizeof(struct reg_window32));
+ err |= __put_user(fp, &rwin->rwbuf_stkptrs[i]);
+ }
+ return err;
+}
+
+int restore_rwin_state(__siginfo_rwin_t __user *rp)
+{
+ struct thread_info *t = current_thread_info();
+ int i, wsaved, err;
+
+ __get_user(wsaved, &rp->wsaved);
+ if (wsaved > NSWINS)
+ return -EFAULT;
+
+ err = 0;
+ for (i = 0; i < wsaved; i++) {
+ err |= copy_from_user(&t->reg_window[i],
+ &rp->reg_window[i],
+ sizeof(struct reg_window32));
+ err |= __get_user(t->rwbuf_stkptrs[i],
+ &rp->rwbuf_stkptrs[i]);
+ }
+ if (err)
+ return err;
+
+ t->w_saved = wsaved;
+ synchronize_user_stack();
+ if (t->w_saved)
+ return -EFAULT;
+ return 0;
+
+}
--- /dev/null
+++ b/arch/sparc/kernel/sigutil_64.c
@@ -0,0 +1,93 @@
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/thread_info.h>
+#include <linux/uaccess.h>
+
+#include <asm/sigcontext.h>
+#include <asm/fpumacro.h>
+#include <asm/ptrace.h>
+
+#include "sigutil.h"
+
+int save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
+{
+ unsigned long *fpregs = current_thread_info()->fpregs;
+ unsigned long fprs;
+ int err = 0;
+
+ fprs = current_thread_info()->fpsaved[0];
+ if (fprs & FPRS_DL)
+ err |= copy_to_user(&fpu->si_float_regs[0], fpregs,
+ (sizeof(unsigned int) * 32));
+ if (fprs & FPRS_DU)
+ err |= copy_to_user(&fpu->si_float_regs[32], fpregs+16,
+ (sizeof(unsigned int) * 32));
+ err |= __put_user(current_thread_info()->xfsr[0], &fpu->si_fsr);
+ err |= __put_user(current_thread_info()->gsr[0], &fpu->si_gsr);
+ err |= __put_user(fprs, &fpu->si_fprs);
+
+ return err;
+}
+
+int restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
+{
+ unsigned long *fpregs = current_thread_info()->fpregs;
+ unsigned long fprs;
+ int err;
+
+ err = __get_user(fprs, &fpu->si_fprs);
+ fprs_write(0);
+ regs->tstate &= ~TSTATE_PEF;
+ if (fprs & FPRS_DL)
+ err |= copy_from_user(fpregs, &fpu->si_float_regs[0],
+ (sizeof(unsigned int) * 32));
+ if (fprs & FPRS_DU)
+ err |= copy_from_user(fpregs+16, &fpu->si_float_regs[32],
+ (sizeof(unsigned int) * 32));
+ err |= __get_user(current_thread_info()->xfsr[0], &fpu->si_fsr);
+ err |= __get_user(current_thread_info()->gsr[0], &fpu->si_gsr);
+ current_thread_info()->fpsaved[0] |= fprs;
+ return err;
+}
+
+int save_rwin_state(int wsaved, __siginfo_rwin_t __user *rwin)
+{
+ int i, err = __put_user(wsaved, &rwin->wsaved);
+
+ for (i = 0; i < wsaved; i++) {
+ struct reg_window *rp = ¤t_thread_info()->reg_window[i];
+ unsigned long fp = current_thread_info()->rwbuf_stkptrs[i];
+
+ err |= copy_to_user(&rwin->reg_window[i], rp,
+ sizeof(struct reg_window));
+ err |= __put_user(fp, &rwin->rwbuf_stkptrs[i]);
+ }
+ return err;
+}
+
+int restore_rwin_state(__siginfo_rwin_t __user *rp)
+{
+ struct thread_info *t = current_thread_info();
+ int i, wsaved, err;
+
+ __get_user(wsaved, &rp->wsaved);
+ if (wsaved > NSWINS)
+ return -EFAULT;
+
+ err = 0;
+ for (i = 0; i < wsaved; i++) {
+ err |= copy_from_user(&t->reg_window[i],
+ &rp->reg_window[i],
+ sizeof(struct reg_window));
+ err |= __get_user(t->rwbuf_stkptrs[i],
+ &rp->rwbuf_stkptrs[i]);
+ }
+ if (err)
+ return err;
+
+ set_thread_wsaved(wsaved);
+ synchronize_user_stack();
+ if (get_thread_wsaved())
+ return -EFAULT;
+ return 0;
+}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [006/107] sparc: fix array bounds error setting up PCIC NMI trap
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (4 preceding siblings ...)
2011-11-02 22:13 ` [005/107] sparc: Allow handling signals when stack is corrupted Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [007/107] Fix broken backport for IPv6 tunnels Greg KH
` (100 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Ian Campbell, David S. Miller, sparclinux
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Ian Campbell <Ian.Campbell@citrix.com>
commit 4a0342ca8e8150bd47e7118a76e300692a1b6b7b upstream.
CC arch/sparc/kernel/pcic.o
arch/sparc/kernel/pcic.c: In function 'pcic_probe':
arch/sparc/kernel/pcic.c:359:33: error: array subscript is above array bounds [-Werror=array-bounds]
arch/sparc/kernel/pcic.c:359:8: error: array subscript is above array bounds [-Werror=array-bounds]
arch/sparc/kernel/pcic.c:360:33: error: array subscript is above array bounds [-Werror=array-bounds]
arch/sparc/kernel/pcic.c:360:8: error: array subscript is above array bounds [-Werror=array-bounds]
arch/sparc/kernel/pcic.c:361:33: error: array subscript is above array bounds [-Werror=array-bounds]
arch/sparc/kernel/pcic.c:361:8: error: array subscript is above array bounds [-Werror=array-bounds]
cc1: all warnings being treated as errors
I'm not particularly familiar with sparc but t_nmi (defined in head_32.S via
the TRAP_ENTRY macro) and pcic_nmi_trap_patch (defined in entry.S) both appear
to be 4 instructions long and I presume from the usage that instructions are
int sized.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: sparclinux@vger.kernel.org
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/sparc/kernel/pcic.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/arch/sparc/kernel/pcic.c
+++ b/arch/sparc/kernel/pcic.c
@@ -350,8 +350,8 @@ int __init pcic_probe(void)
strcpy(pbm->prom_name, namebuf);
{
- extern volatile int t_nmi[1];
- extern int pcic_nmi_trap_patch[1];
+ extern volatile int t_nmi[4];
+ extern int pcic_nmi_trap_patch[4];
t_nmi[0] = pcic_nmi_trap_patch[0];
t_nmi[1] = pcic_nmi_trap_patch[1];
^ permalink raw reply [flat|nested] 122+ messages in thread
* [007/107] Fix broken backport for IPv6 tunnels
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (5 preceding siblings ...)
2011-11-02 22:13 ` [006/107] sparc: fix array bounds error setting up PCIC NMI trap Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [008/107] net: Fix IPv6 GSO type checks in Intel ethernet drivers Greg KH
` (99 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Stratos Psomadakis, Wolfgang Walter,
Tim Gardner, Andy Whitcroft
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Stratos Psomadakis <psomas@gentoo.org>
Fix broken backport for IPv6 tunnels in 2.6.32-longterm kernels.
upstream commit d5aa407f59f5b83d2c50ec88f5bf56d40f1f8978 ("tunnels: fix
netns vs proto registration ordering") , which was included in
2.6.32.44-longterm, was not backported correctly, and results in a NULL
pointer dereference in ip6_tunnel.c for longterm kernels >=2.6.32.44
Use [un]register_pernet_gen_device() instead of
[un]register_pernet_device() to fix it.
Signed-off-by: Stratos Psomadakis <psomas@gentoo.org>
Cc: Wolfgang Walter <wolfgang.walter@stwm.de>
Cc: Tim Gardner <tim.gardner@canonical.com>
Cc: Andy Whitcroft <apw@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/ipv6/ip6_tunnel.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -1466,7 +1466,7 @@ static int __init ip6_tunnel_init(void)
{
int err;
- err = register_pernet_device(&ip6_tnl_net_ops);
+ err = register_pernet_gen_device(&ip6_tnl_net_id, &ip6_tnl_net_ops);
if (err < 0)
goto out_pernet;
@@ -1487,7 +1487,7 @@ static int __init ip6_tunnel_init(void)
out_ip6ip6:
xfrm6_tunnel_deregister(&ip4ip6_handler, AF_INET);
out_ip4ip6:
- unregister_pernet_device(&ip6_tnl_net_ops);
+ unregister_pernet_gen_device(ip6_tnl_net_id, &ip6_tnl_net_ops);
out_pernet:
return err;
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [008/107] net: Fix IPv6 GSO type checks in Intel ethernet drivers
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (6 preceding siblings ...)
2011-11-02 22:13 ` [007/107] Fix broken backport for IPv6 tunnels Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [009/107] ipv6: Add GSO support on forwarding path Greg KH
` (98 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Sridhar Samudrala, Jeff Kirsher,
David S. Miller, Faidon Liambotis
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Sridhar Samudrala <sri@us.ibm.com>
commit 8e1e8a4779cb23c1d9f51e9223795e07ec54d77a upstream.
Found this problem when testing IPv6 from a KVM guest to a remote
host via e1000e device on the host.
The following patch fixes the check for IPv6 GSO packet in Intel
ethernet drivers to use skb_is_gso_v6(). SKB_GSO_DODGY is also set
when packets are forwarded from a guest.
Signed-off-by: Sridhar Samudrala <sri@us.ibm.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Faidon Liambotis <paravoid@debian.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/net/e1000e/netdev.c | 2 +-
drivers/net/igb/igb_main.c | 2 +-
drivers/net/igbvf/netdev.c | 2 +-
drivers/net/ixgbe/ixgbe_main.c | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -3807,7 +3807,7 @@ static int e1000_tso(struct e1000_adapte
0);
cmd_length = E1000_TXD_CMD_IP;
ipcse = skb_transport_offset(skb) - 1;
- } else if (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV6) {
+ } else if (skb_is_gso_v6(skb)) {
ipv6_hdr(skb)->payload_len = 0;
tcp_hdr(skb)->check =
~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -3032,7 +3032,7 @@ static inline int igb_tso_adv(struct igb
iph->daddr, 0,
IPPROTO_TCP,
0);
- } else if (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV6) {
+ } else if (skb_is_gso_v6(skb)) {
ipv6_hdr(skb)->payload_len = 0;
tcp_hdr(skb)->check = ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
&ipv6_hdr(skb)->daddr,
--- a/drivers/net/igbvf/netdev.c
+++ b/drivers/net/igbvf/netdev.c
@@ -1953,7 +1953,7 @@ static int igbvf_tso(struct igbvf_adapte
iph->daddr, 0,
IPPROTO_TCP,
0);
- } else if (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV6) {
+ } else if (skb_is_gso_v6(skb)) {
ipv6_hdr(skb)->payload_len = 0;
tcp_hdr(skb)->check = ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
&ipv6_hdr(skb)->daddr,
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -4881,7 +4881,7 @@ static int ixgbe_tso(struct ixgbe_adapte
IPPROTO_TCP,
0);
adapter->hw_tso_ctxt++;
- } else if (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV6) {
+ } else if (skb_is_gso_v6(skb)) {
ipv6_hdr(skb)->payload_len = 0;
tcp_hdr(skb)->check =
~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
^ permalink raw reply [flat|nested] 122+ messages in thread
* [009/107] ipv6: Add GSO support on forwarding path
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (7 preceding siblings ...)
2011-11-02 22:13 ` [008/107] net: Fix IPv6 GSO type checks in Intel ethernet drivers Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [010/107] Revert "x86, hotplug: Use mwait to offline a processor, fix the legacy case" Greg KH
` (97 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Herbert Xu, David S. Miller,
Apollon Oikonomopoulos, Faidon Liambotis
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Herbert Xu <herbert@gondor.apana.org.au>
commit 0aa68271510ae2b221d4b60892103837be63afe4 upstream.
Currently we disallow GSO packets on the IPv6 forward path.
This patch fixes this.
Note that I discovered that our existing GSO MTU checks (e.g.,
IPv4 forwarding) are buggy in that they skip the check altogether,
when they really should be checking gso_size + header instead.
I have also been lazy here in that I haven't bothered to segment
the GSO packet by hand before generating an ICMP message. Someone
should add that to be 100% correct.
Reported-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Apollon Oikonomopoulos <apoikos@gmail.com>
Signed-off-by: Faidon Liambotis <paravoid@debian.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/ipv6/ip6_output.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -510,7 +510,7 @@ int ip6_forward(struct sk_buff *skb)
}
}
- if (skb->len > dst_mtu(dst)) {
+ if (skb->len > dst_mtu(dst) && !skb_is_gso(skb)) {
/* Again, force OUTPUT device used as source address */
skb->dev = dst->dev;
icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, dst_mtu(dst), skb->dev);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [010/107] Revert "x86, hotplug: Use mwait to offline a processor, fix the legacy case"
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (8 preceding siblings ...)
2011-11-02 22:13 ` [009/107] ipv6: Add GSO support on forwarding path Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [011/107] GRO: fix merging a paged skb after non-paged skbs Greg KH
` (96 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Jonathan Nieder, H. Peter Anvin, Len Brown
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Greg Kroah-Hartman <gregkh@suse.de>
This reverts commit 226917b0735f31cf5c704e07fdd590d99bbfae58 (upstream
ea53069231f9317062910d6e772cca4ce93de8c8 and
a68e5c94f7d3dd64fef34dd5d97e365cae4bb42a and
ce5f68246bf2385d6174856708d0b746dc378f20 all mushed together) as
Jonathan Nieder reports that this causes a regression on some hardware.
More details can be found at http://bugs.debian.org/622259
Cc: Jonathan Nieder <jrnieder@gmail.com>
Cc: H. Peter Anvin <hpa@linux.intel.com>
Cc: Len Brown <len.brown@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/x86/include/asm/processor.h | 23 ++++++++++
arch/x86/kernel/smpboot.c | 85 +-------------------------------------
2 files changed, 24 insertions(+), 84 deletions(-)
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index da35a70..fa04dea 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -765,6 +765,29 @@ extern unsigned long boot_option_idle_override;
extern unsigned long idle_halt;
extern unsigned long idle_nomwait;
+/*
+ * on systems with caches, caches must be flashed as the absolute
+ * last instruction before going into a suspended halt. Otherwise,
+ * dirty data can linger in the cache and become stale on resume,
+ * leading to strange errors.
+ *
+ * perform a variety of operations to guarantee that the compiler
+ * will not reorder instructions. wbinvd itself is serializing
+ * so the processor will not reorder.
+ *
+ * Systems without cache can just go into halt.
+ */
+static inline void wbinvd_halt(void)
+{
+ mb();
+ /* check for clflush to determine if wbinvd is legal */
+ if (cpu_has_clflush)
+ asm volatile("cli; wbinvd; 1: hlt; jmp 1b" : : : "memory");
+ else
+ while (1)
+ halt();
+}
+
extern void enable_sep_cpu(void);
extern int sysenter_setup(void);
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index 539bb6c..7e8e905 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -1338,94 +1338,11 @@ void play_dead_common(void)
local_irq_disable();
}
-#define MWAIT_SUBSTATE_MASK 0xf
-#define MWAIT_SUBSTATE_SIZE 4
-
-#define CPUID_MWAIT_LEAF 5
-#define CPUID5_ECX_EXTENSIONS_SUPPORTED 0x1
-
-/*
- * We need to flush the caches before going to sleep, lest we have
- * dirty data in our caches when we come back up.
- */
-static inline void mwait_play_dead(void)
-{
- unsigned int eax, ebx, ecx, edx;
- unsigned int highest_cstate = 0;
- unsigned int highest_subcstate = 0;
- int i;
- void *mwait_ptr;
-
- if (!cpu_has(¤t_cpu_data, X86_FEATURE_MWAIT))
- return;
- if (!cpu_has(¤t_cpu_data, X86_FEATURE_CLFLSH))
- return;
- if (current_cpu_data.cpuid_level < CPUID_MWAIT_LEAF)
- return;
-
- eax = CPUID_MWAIT_LEAF;
- ecx = 0;
- native_cpuid(&eax, &ebx, &ecx, &edx);
-
- /*
- * eax will be 0 if EDX enumeration is not valid.
- * Initialized below to cstate, sub_cstate value when EDX is valid.
- */
- if (!(ecx & CPUID5_ECX_EXTENSIONS_SUPPORTED)) {
- eax = 0;
- } else {
- edx >>= MWAIT_SUBSTATE_SIZE;
- for (i = 0; i < 7 && edx; i++, edx >>= MWAIT_SUBSTATE_SIZE) {
- if (edx & MWAIT_SUBSTATE_MASK) {
- highest_cstate = i;
- highest_subcstate = edx & MWAIT_SUBSTATE_MASK;
- }
- }
- eax = (highest_cstate << MWAIT_SUBSTATE_SIZE) |
- (highest_subcstate - 1);
- }
-
- /*
- * This should be a memory location in a cache line which is
- * unlikely to be touched by other processors. The actual
- * content is immaterial as it is not actually modified in any way.
- */
- mwait_ptr = ¤t_thread_info()->flags;
-
- wbinvd();
-
- while (1) {
- /*
- * The CLFLUSH is a workaround for erratum AAI65 for
- * the Xeon 7400 series. It's not clear it is actually
- * needed, but it should be harmless in either case.
- * The WBINVD is insufficient due to the spurious-wakeup
- * case where we return around the loop.
- */
- clflush(mwait_ptr);
- __monitor(mwait_ptr, 0, 0);
- mb();
- __mwait(eax, 0);
- }
-}
-
-static inline void hlt_play_dead(void)
-{
- if (current_cpu_data.x86 >= 4)
- wbinvd();
-
- while (1) {
- native_halt();
- }
-}
-
void native_play_dead(void)
{
play_dead_common();
tboot_shutdown(TB_SHUTDOWN_WFS);
-
- mwait_play_dead(); /* Only returns on failure */
- hlt_play_dead();
+ wbinvd_halt();
}
#else /* ... !CONFIG_HOTPLUG_CPU */
--
1.7.6.1
^ permalink raw reply related [flat|nested] 122+ messages in thread
* [011/107] GRO: fix merging a paged skb after non-paged skbs
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (9 preceding siblings ...)
2011-11-02 22:13 ` [010/107] Revert "x86, hotplug: Use mwait to offline a processor, fix the legacy case" Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [012/107] xen-blkfront: fix data size for xenbus_gather in blkfront_connect Greg KH
` (95 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Michal Schmidt, Eric Dumazet,
David S. Miller
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Michal Schmidt <mschmidt@redhat.com>
commit d1dc7abf2fafa34b0ffcd070fd59405aa9c0a4d8 upstream.
Suppose that several linear skbs of the same flow were received by GRO. They
were thus merged into one skb with a frag_list. Then a new skb of the same flow
arrives, but it is a paged skb with data starting in its frags[].
Before adding the skb to the frag_list skb_gro_receive() will of course adjust
the skb to throw away the headers. It correctly modifies the page_offset and
size of the frag, but it leaves incorrect information in the skb:
->data_len is not decreased at all.
->len is decreased only by headlen, as if no change were done to the frag.
Later in a receiving process this causes skb_copy_datagram_iovec() to return
-EFAULT and this is seen in userspace as the result of the recv() syscall.
In practice the bug can be reproduced with the sfc driver. By default the
driver uses an adaptive scheme when it switches between using
napi_gro_receive() (with skbs) and napi_gro_frags() (with pages). The bug is
reproduced when under rx load with enough successful GRO merging the driver
decides to switch from the former to the latter.
Manual control is also possible, so reproducing this is easy with netcat:
- on machine1 (with sfc): nc -l 12345 > /dev/null
- on machine2: nc machine1 12345 < /dev/zero
- on machine1:
echo 1 > /sys/module/sfc/parameters/rx_alloc_method # use skbs
echo 2 > /sys/module/sfc/parameters/rx_alloc_method # use pages
- See that nc has quit suddenly.
[v2: Modified by Eric Dumazet to avoid advancing skb->data past the end
and to use a temporary variable.]
Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/core/skbuff.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -2746,8 +2746,12 @@ int skb_gro_receive(struct sk_buff **hea
merge:
if (offset > headlen) {
- skbinfo->frags[0].page_offset += offset - headlen;
- skbinfo->frags[0].size -= offset - headlen;
+ unsigned int eat = offset - headlen;
+
+ skbinfo->frags[0].page_offset += eat;
+ skbinfo->frags[0].size -= eat;
+ skb->data_len -= eat;
+ skb->len -= eat;
offset = headlen;
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [012/107] xen-blkfront: fix data size for xenbus_gather in blkfront_connect
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (10 preceding siblings ...)
2011-11-02 22:13 ` [011/107] GRO: fix merging a paged skb after non-paged skbs Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [013/107] md/linear: avoid corrupting structure while waiting for rcu_free to complete Greg KH
` (94 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Marek Marczykowski, Ian Campbell,
Konrad Rzeszutek Wilk
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Marek Marczykowski <marmarek@mimuw.edu.pl>
commit 4352b47ab7918108b389a48d2163c9a4c2aaf139 upstream.
barrier variable is int, not long. This overflow caused another variable
override: "err" (in PV code) and "binfo" (in xenlinux code -
drivers/xen/blkfront/blkfront.c). The later caused incorrect device
flags (RO/removable etc).
Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>
Acked-by: Ian Campbell <Ian.Campbell@citrix.com>
[v1: Changed title]
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/block/xen-blkfront.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -889,7 +889,7 @@ static void blkfront_connect(struct blkf
}
err = xenbus_gather(XBT_NIL, info->xbdev->otherend,
- "feature-barrier", "%lu", &info->feature_barrier,
+ "feature-barrier", "%d", &info->feature_barrier,
NULL);
if (err)
info->feature_barrier = 0;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [013/107] md/linear: avoid corrupting structure while waiting for rcu_free to complete.
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (11 preceding siblings ...)
2011-11-02 22:13 ` [012/107] xen-blkfront: fix data size for xenbus_gather in blkfront_connect Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [014/107] powerpc/mpic: Fix problem that affinity is not updated Greg KH
` (93 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, NeilBrown
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: NeilBrown <neilb@suse.de>
commit 1b6afa17581027218088a18a9ceda600e0ddba7a upstream.
I don't know what I was thinking putting 'rcu' after a dynamically
sized array! The array could still be in use when we call rcu_free()
(That is the point) so we mustn't corrupt it.
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/md/linear.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/md/linear.h
+++ b/drivers/md/linear.h
@@ -10,9 +10,9 @@ typedef struct dev_info dev_info_t;
struct linear_private_data
{
+ struct rcu_head rcu;
sector_t array_sectors;
dev_info_t disks[0];
- struct rcu_head rcu;
};
^ permalink raw reply [flat|nested] 122+ messages in thread
* [014/107] powerpc/mpic: Fix problem that affinity is not updated
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (12 preceding siblings ...)
2011-11-02 22:13 ` [013/107] md/linear: avoid corrupting structure while waiting for rcu_free to complete Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [015/107] powerpc/pci: Check devices status property when scanning OF tree Greg KH
` (92 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Jiajun Wu, Li Yang, Benjamin Herrenschmidt
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Yang Li <leoli@freescale.com>
commit 38e1313fc753482b93aa6c6f11cfbd43a5bcd963 upstream.
Since commit 57b150cce8e004ddd36330490a68bfb59b7271e9, desc->affinity
of an irq is changed after calling desc->chip->set_affinity.
Therefore we need to fix the irq_choose_cpu() not to depend on the
desc->affinity for new mask.
Signed-off-by: Jiajun Wu <b06378@freescale.com>
Signed-off-by: Li Yang <leoli@freescale.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/powerpc/sysdev/mpic.c | 17 +++++------------
1 file changed, 5 insertions(+), 12 deletions(-)
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -567,12 +567,10 @@ static void __init mpic_scan_ht_pics(str
#endif /* CONFIG_MPIC_U3_HT_IRQS */
#ifdef CONFIG_SMP
-static int irq_choose_cpu(unsigned int virt_irq)
+static int irq_choose_cpu(const cpumask_t *mask)
{
- cpumask_t mask;
int cpuid;
- cpumask_copy(&mask, irq_desc[virt_irq].affinity);
if (cpus_equal(mask, CPU_MASK_ALL)) {
static int irq_rover;
static DEFINE_SPINLOCK(irq_rover_lock);
@@ -594,20 +592,15 @@ static int irq_choose_cpu(unsigned int v
spin_unlock_irqrestore(&irq_rover_lock, flags);
} else {
- cpumask_t tmp;
-
- cpus_and(tmp, cpu_online_map, mask);
-
- if (cpus_empty(tmp))
+ cpuid = cpumask_first_and(mask, cpu_online_mask);
+ if (cpuid >= nr_cpu_ids)
goto do_round_robin;
-
- cpuid = first_cpu(tmp);
}
return get_hard_smp_processor_id(cpuid);
}
#else
-static int irq_choose_cpu(unsigned int virt_irq)
+static int irq_choose_cpu(const cpumask_t *mask)
{
return hard_smp_processor_id();
}
@@ -816,7 +809,7 @@ int mpic_set_affinity(unsigned int irq,
unsigned int src = mpic_irq_to_hw(irq);
if (mpic->flags & MPIC_SINGLE_DEST_CPU) {
- int cpuid = irq_choose_cpu(irq);
+ int cpuid = irq_choose_cpu(cpumask);
mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), 1 << cpuid);
} else {
^ permalink raw reply [flat|nested] 122+ messages in thread
* [015/107] powerpc/pci: Check devices status property when scanning OF tree
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (13 preceding siblings ...)
2011-11-02 22:13 ` [014/107] powerpc/mpic: Fix problem that affinity is not updated Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [016/107] xen: x86_32: do not enable iterrupts when returning from exception in interrupt context Greg KH
` (91 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Benjamin Herrenschmidt
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Sonny Rao <sonnyrao@us.ibm.com>
commit 5b339bdf164d8aee394609768f7e2e4415b0252a upstream.
We ran into an issue where it looks like we're not properly ignoring a
pci device with a non-good status property when we walk the device tree
and instanciate the Linux side PCI devices.
However, the EEH init code does look for the property and disables EEH
on these devices. This leaves us in an inconsistent where we are poking
at a supposedly bad piece of hardware and RTAS will block our config
cycles because EEH isn't enabled anyway.
Signed-of-by: Sonny Rao <sonnyrao@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/powerpc/kernel/pci_of_scan.c | 2 ++
1 file changed, 2 insertions(+)
--- a/arch/powerpc/kernel/pci_of_scan.c
+++ b/arch/powerpc/kernel/pci_of_scan.c
@@ -300,6 +300,8 @@ static void __devinit __of_scan_bus(stru
/* Scan direct children */
for_each_child_of_node(node, child) {
pr_debug(" * %s\n", child->full_name);
+ if (!of_device_is_available(child))
+ continue;
reg = of_get_property(child, "reg", ®len);
if (reg == NULL || reglen < 20)
continue;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [016/107] xen: x86_32: do not enable iterrupts when returning from exception in interrupt context
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (14 preceding siblings ...)
2011-11-02 22:13 ` [015/107] powerpc/pci: Check devices status property when scanning OF tree Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [017/107] xen/smp: Warn user why they keel over - nosmp or noapic and what to use instead Greg KH
` (90 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Igor Mammedov, Jeremy Fitzhardinge,
Konrad Rzeszutek Wilk
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Igor Mammedov <imammedo@redhat.com>
commit d198d499148a0c64a41b3aba9e7dd43772832b91 upstream.
If vmalloc page_fault happens inside of interrupt handler with interrupts
disabled then on exit path from exception handler when there is no pending
interrupts, the following code (arch/x86/xen/xen-asm_32.S:112):
cmpw $0x0001, XEN_vcpu_info_pending(%eax)
sete XEN_vcpu_info_mask(%eax)
will enable interrupts even if they has been previously disabled according to
eflags from the bounce frame (arch/x86/xen/xen-asm_32.S:99)
testb $X86_EFLAGS_IF>>8, 8+1+ESP_OFFSET(%esp)
setz XEN_vcpu_info_mask(%eax)
Solution is in setting XEN_vcpu_info_mask only when it should be set
according to
cmpw $0x0001, XEN_vcpu_info_pending(%eax)
but not clearing it if there isn't any pending events.
Reproducer for bug is attached to RHBZ 707552
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Acked-by: Jeremy Fitzhardinge <jeremy@goop.org>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/x86/xen/xen-asm_32.S | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
--- a/arch/x86/xen/xen-asm_32.S
+++ b/arch/x86/xen/xen-asm_32.S
@@ -113,11 +113,13 @@ xen_iret_start_crit:
/*
* If there's something pending, mask events again so we can
- * jump back into xen_hypervisor_callback
+ * jump back into xen_hypervisor_callback. Otherwise do not
+ * touch XEN_vcpu_info_mask.
*/
- sete XEN_vcpu_info_mask(%eax)
+ jne 1f
+ movb $1, XEN_vcpu_info_mask(%eax)
- popl %eax
+1: popl %eax
/*
* From this point on the registers are restored and the stack
^ permalink raw reply [flat|nested] 122+ messages in thread
* [017/107] xen/smp: Warn user why they keel over - nosmp or noapic and what to use instead.
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (15 preceding siblings ...)
2011-11-02 22:13 ` [016/107] xen: x86_32: do not enable iterrupts when returning from exception in interrupt context Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [018/107] ARM: davinci: da850 EVM: read mac address from SPI flash Greg KH
` (89 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Ian Campbell, Konrad Rzeszutek Wilk
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
commit ed467e69f16e6b480e2face7bc5963834d025f91 upstream.
We have hit a couple of customer bugs where they would like to
use those parameters to run an UP kernel - but both of those
options turn of important sources of interrupt information so
we end up not being able to boot. The correct way is to
pass in 'dom0_max_vcpus=1' on the Xen hypervisor line and
the kernel will patch itself to be a UP kernel.
Fixes bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=637308
Acked-by: Ian Campbell <Ian.Campbell@eu.citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/x86/xen/smp.c | 10 ++++++++++
1 file changed, 10 insertions(+)
--- a/arch/x86/xen/smp.c
+++ b/arch/x86/xen/smp.c
@@ -30,6 +30,7 @@
#include <xen/page.h>
#include <xen/events.h>
+#include <xen/hvc-console.h>
#include "xen-ops.h"
#include "mmu.h"
@@ -179,6 +180,15 @@ static void __init xen_smp_prepare_cpus(
{
unsigned cpu;
+ if (skip_ioapic_setup) {
+ char *m = (max_cpus == 0) ?
+ "The nosmp parameter is incompatible with Xen; " \
+ "use Xen dom0_max_vcpus=1 parameter" :
+ "The noapic parameter is incompatible with Xen";
+
+ xen_raw_printk(m);
+ panic(m);
+ }
xen_init_lock_cpu(0);
smp_store_cpu_info(0);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [018/107] ARM: davinci: da850 EVM: read mac address from SPI flash
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (16 preceding siblings ...)
2011-11-02 22:13 ` [017/107] xen/smp: Warn user why they keel over - nosmp or noapic and what to use instead Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [019/107] md: Fix handling for devices from 2TB to 4TB in 0.90 metadata Greg KH
` (88 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Sudhakar Rajashekhara, Sekhar Nori
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Sudhakar Rajashekhara <sudhakar.raj@ti.com>
commit 810198bc9c109489dfadc57131c5183ce6ad2d7d upstream.
DA850/OMAP-L138 EMAC driver uses random mac address instead of
a fixed one because the mac address is not stuffed into EMAC
platform data.
This patch provides a function which reads the mac address
stored in SPI flash (registered as MTD device) and populates the
EMAC platform data. The function which reads the mac address is
registered as a callback which gets called upon addition of MTD
device.
NOTE: In case the MAC address stored in SPI flash is erased, follow
the instructions at [1] to restore it.
[1] http://processors.wiki.ti.com/index.php/GSG:_OMAP-L138_DVEVM_Additional_Procedures#Restoring_MAC_address_on_SPI_Flash
Modifications in v2:
Guarded registering the mtd_notifier only when MTD is enabled.
Earlier this was handled using mtd_has_partitions() call, but
this has been removed in Linux v3.0.
Modifications in v3:
a. Guarded da850_evm_m25p80_notify_add() function and
da850evm_spi_notifier structure with CONFIG_MTD macros.
b. Renamed da850_evm_register_mtd_user() function to
da850_evm_setup_mac_addr() and removed the struct mtd_notifier
argument to this function.
c. Passed the da850evm_spi_notifier structure to register_mtd_user()
function.
Modifications in v4:
Moved the da850_evm_setup_mac_addr() function within the first
CONFIG_MTD ifdef construct.
Signed-off-by: Sudhakar Rajashekhara <sudhakar.raj@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/arm/mach-davinci/board-da850-evm.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
--- a/arch/arm/mach-davinci/board-da850-evm.c
+++ b/arch/arm/mach-davinci/board-da850-evm.c
@@ -42,6 +42,32 @@
#define DA850_MMCSD_CD_PIN GPIO_TO_PIN(4, 0)
#define DA850_MMCSD_WP_PIN GPIO_TO_PIN(4, 1)
+#ifdef CONFIG_MTD
+static void da850_evm_m25p80_notify_add(struct mtd_info *mtd)
+{
+ char *mac_addr = davinci_soc_info.emac_pdata->mac_addr;
+ size_t retlen;
+
+ if (!strcmp(mtd->name, "MAC-Address")) {
+ mtd->read(mtd, 0, ETH_ALEN, &retlen, mac_addr);
+ if (retlen == ETH_ALEN)
+ pr_info("Read MAC addr from SPI Flash: %pM\n",
+ mac_addr);
+ }
+}
+
+static struct mtd_notifier da850evm_spi_notifier = {
+ .add = da850_evm_m25p80_notify_add,
+};
+
+static void da850_evm_setup_mac_addr(void)
+{
+ register_mtd_user(&da850evm_spi_notifier);
+}
+#else
+static void da850_evm_setup_mac_addr(void) { }
+#endif
+
static struct mtd_partition da850_evm_norflash_partition[] = {
{
.name = "NOR filesystem",
@@ -381,6 +407,8 @@ static __init void da850_evm_init(void)
if (ret)
pr_warning("da850_evm_init: lcdc registration failed: %d\n",
ret);
+
+ da850_evm_setup_mac_addr();
}
#ifdef CONFIG_SERIAL_8250_CONSOLE
^ permalink raw reply [flat|nested] 122+ messages in thread
* [019/107] md: Fix handling for devices from 2TB to 4TB in 0.90 metadata.
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (17 preceding siblings ...)
2011-11-02 22:13 ` [018/107] ARM: davinci: da850 EVM: read mac address from SPI flash Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [020/107] net/9p: fix client code to fail more gracefully on protocol error Greg KH
` (87 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, NeilBrown
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: NeilBrown <neilb@suse.de>
commit 27a7b260f71439c40546b43588448faac01adb93 upstream.
0.90 metadata uses an unsigned 32bit number to count the number of
kilobytes used from each device.
This should allow up to 4TB per device.
However we multiply this by 2 (to get sectors) before casting to a
larger type, so sizes above 2TB get truncated.
Also we allow rdev->sectors to be larger than 4TB, so it is possible
for the array to be resized larger than the metadata can handle.
So make sure rdev->sectors never exceeds 4TB when 0.90 metadata is in
used.
Also the sanity check at the end of super_90_load should include level
1 as it used ->size too. (RAID0 and Linear don't use ->size at all).
Reported-by: Pim Zandbergen <P.Zandbergen@macroscoop.nl>
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/md/md.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -848,8 +848,11 @@ static int super_90_load(mdk_rdev_t *rde
ret = 0;
}
rdev->sectors = rdev->sb_start;
+ /* Limit to 4TB as metadata cannot record more than that */
+ if (rdev->sectors >= (2ULL << 32))
+ rdev->sectors = (2ULL << 32) - 2;
- if (rdev->sectors < sb->size * 2 && sb->level > 1)
+ if (rdev->sectors < ((sector_t)sb->size) * 2 && sb->level >= 1)
/* "this cannot possibly happen" ... */
ret = -EINVAL;
@@ -884,7 +887,7 @@ static int super_90_validate(mddev_t *md
mddev->clevel[0] = 0;
mddev->layout = sb->layout;
mddev->raid_disks = sb->raid_disks;
- mddev->dev_sectors = sb->size * 2;
+ mddev->dev_sectors = ((sector_t)sb->size) * 2;
mddev->events = ev1;
mddev->bitmap_offset = 0;
mddev->default_bitmap_offset = MD_SB_BYTES >> 9;
@@ -1122,6 +1125,11 @@ super_90_rdev_size_change(mdk_rdev_t *rd
rdev->sb_start = calc_dev_sboffset(rdev->bdev);
if (!num_sectors || num_sectors > rdev->sb_start)
num_sectors = rdev->sb_start;
+ /* Limit to 4TB as metadata cannot record more than that.
+ * 4TB == 2^32 KB, or 2*2^32 sectors.
+ */
+ if (num_sectors >= (2ULL << 32))
+ num_sectors = (2ULL << 32) - 2;
md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size,
rdev->sb_page);
md_super_wait(rdev->mddev);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [020/107] net/9p: fix client code to fail more gracefully on protocol error
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (18 preceding siblings ...)
2011-11-02 22:13 ` [019/107] md: Fix handling for devices from 2TB to 4TB in 0.90 metadata Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [021/107] fs/9p: Fid is not valid after a failed clunk Greg KH
` (86 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Eric Van Hensbergen
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Eric Van Hensbergen <ericvh@gmail.com>
commit b85f7d92d7bd7e3298159e8b1eed8cb8cbbb0348 upstream.
There was a BUG_ON to protect against a bad id which could be dealt with
more gracefully.
Reported-by: Natalie Orlin <norlin@us.ibm.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/9p/client.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -221,7 +221,8 @@ struct p9_req_t *p9_tag_lookup(struct p9
* buffer to read the data into */
tag++;
- BUG_ON(tag >= c->max_tag);
+ if(tag >= c->max_tag)
+ return NULL;
row = tag / P9_ROW_MAXTAG;
col = tag % P9_ROW_MAXTAG;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [021/107] fs/9p: Fid is not valid after a failed clunk.
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (19 preceding siblings ...)
2011-11-02 22:13 ` [020/107] net/9p: fix client code to fail more gracefully on protocol error Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [022/107] net/9p: Fix the msize calculation Greg KH
` (85 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Aneesh Kumar K.V, Eric Van Hensbergen
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
commit 5034990e28efb2d232ee82443a9edd62defd17ba upstream.
free the fid even in case of failed clunk.
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/9p/client.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -1022,9 +1022,11 @@ int p9_client_clunk(struct p9_fid *fid)
P9_DPRINTK(P9_DEBUG_9P, "<<< RCLUNK fid %d\n", fid->fid);
p9_free_req(clnt, req);
- p9_fid_destroy(fid);
-
error:
+ /*
+ * Fid is not valid even after a failed clunk
+ */
+ p9_fid_destroy(fid);
return err;
}
EXPORT_SYMBOL(p9_client_clunk);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [022/107] net/9p: Fix the msize calculation.
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (20 preceding siblings ...)
2011-11-02 22:13 ` [021/107] fs/9p: Fid is not valid after a failed clunk Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [023/107] irda: fix smsc-ircc2 section mismatch warning Greg KH
` (84 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan,
=?ISO-8859-15?q?Venkateswararao=20Jujjuri=20, "?= <jvrao,
Aneesh, Kumar, K.V, " <aneesh.kumar
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: "Venkateswararao Jujjuri (JV)" <jvrao@linux.vnet.ibm.com>
commit c9ffb05ca5b5098d6ea468c909dd384d90da7d54 upstream.
msize represents the maximum PDU size that includes P9_IOHDRSZ.
Signed-off-by: Venkateswararao Jujjuri "<jvrao@linux.vnet.ibm.com>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/9p/client.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/net/9p/client.c
+++ b/net/9p/client.c
@@ -698,8 +698,8 @@ struct p9_client *p9_client_create(const
if (err)
goto error;
- if ((clnt->msize+P9_IOHDRSZ) > clnt->trans_mod->maxsize)
- clnt->msize = clnt->trans_mod->maxsize-P9_IOHDRSZ;
+ if (clnt->msize > clnt->trans_mod->maxsize)
+ clnt->msize = clnt->trans_mod->maxsize;
err = p9_client_version(clnt);
if (err)
^ permalink raw reply [flat|nested] 122+ messages in thread
* [023/107] irda: fix smsc-ircc2 section mismatch warning
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (21 preceding siblings ...)
2011-11-02 22:13 ` [022/107] net/9p: Fix the msize calculation Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [024/107] [SCSI] qla2xxx: Correct inadvertent loop state transitions during port-update handling Greg KH
` (83 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Randy Dunlap, David S. Miller
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Randy Dunlap <randy.dunlap@oracle.com>
commit f470e5ae34d68880a38aa79ee5c102ebc2a1aef6 upstream.
Fix section mismatch warning:
WARNING: drivers/net/irda/smsc-ircc2.o(.devinit.text+0x1a7): Section mismatch in reference from the function smsc_ircc_pnp_probe() to the function .init.text:smsc_ircc_open()
Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/net/irda/smsc-ircc2.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/irda/smsc-ircc2.c
+++ b/drivers/net/irda/smsc-ircc2.c
@@ -515,7 +515,7 @@ static const struct net_device_ops smsc_
* Try to open driver instance
*
*/
-static int __init smsc_ircc_open(unsigned int fir_base, unsigned int sir_base, u8 dma, u8 irq)
+static int __devinit smsc_ircc_open(unsigned int fir_base, unsigned int sir_base, u8 dma, u8 irq)
{
struct smsc_ircc_cb *self;
struct net_device *dev;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [024/107] [SCSI] qla2xxx: Correct inadvertent loop state transitions during port-update handling.
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (22 preceding siblings ...)
2011-11-02 22:13 ` [023/107] irda: fix smsc-ircc2 section mismatch warning Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [025/107] e1000: Fix driver to be used on PA RISC C8000 workstations Greg KH
` (82 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Andrew Vasquez, Chad Dupuis,
James Bottomley
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Andrew Vasquez <andrew.vasquez@qlogic.com>
commit 58b48576966ed0afd3f63ef17480ec12748a7119 upstream.
Transitioning to a LOOP_UPDATE loop-state could cause the driver
to miss normal link/target processing. LOOP_UPDATE is a crufty
artifact leftover from at time the driver performed it's own
internal command-queuing. Safely remove this state.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
---
drivers/scsi/qla2xxx/qla_init.c | 3 ---
drivers/scsi/qla2xxx/qla_isr.c | 1 -
2 files changed, 4 deletions(-)
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -3459,15 +3459,12 @@ qla2x00_loop_resync(scsi_qla_host_t *vha
req = vha->req;
rsp = req->rsp;
- atomic_set(&vha->loop_state, LOOP_UPDATE);
clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags);
if (vha->flags.online) {
if (!(rval = qla2x00_fw_ready(vha))) {
/* Wait at most MAX_TARGET RSCNs for a stable link. */
wait_time = 256;
do {
- atomic_set(&vha->loop_state, LOOP_UPDATE);
-
/* Issue a marker after FW becomes ready. */
qla2x00_marker(vha, req, rsp, 0, 0,
MK_SYNC_ALL);
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -717,7 +717,6 @@ skip_rio:
vha->flags.rscn_queue_overflow = 1;
}
- atomic_set(&vha->loop_state, LOOP_UPDATE);
atomic_set(&vha->loop_down_timer, 0);
vha->flags.management_server_logged_in = 0;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [025/107] e1000: Fix driver to be used on PA RISC C8000 workstations
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (23 preceding siblings ...)
2011-11-02 22:13 ` [024/107] [SCSI] qla2xxx: Correct inadvertent loop state transitions during port-update handling Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [026/107] ASoC: Fix reporting of partial jack updates Greg KH
` (81 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Guy Martin, Rolf Eike Beer, Matt Turner,
Jeff Kirsher, Jesse Brandeburg, David S. Miller
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
commit e2faeec2de9e2c73958e6ea6065dde1e8cd6f3a2 upstream.
The checksum field in the EEPROM on HPPA is really not a
checksum but a signature (0x16d6). So allow 0x16d6 as the
matching checksum on HPPA systems.
This issue is present on longterm/stable kernels, I have
verified that this patch is applicable back to at least
2.6.32.y kernels.
v2- changed ifdef to use CONFIG_PARISC instead of __hppa__
CC: Guy Martin <gmsoft@tuxicoman.be>
CC: Rolf Eike Beer <eike-kernel@sf-tec.de>
CC: Matt Turner <mattst88@gmail.com>
Reported-by: Mikulas Patocka <mikulas@artax.kerlin.mff.cuni.cz>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Acked-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/net/e1000/e1000_hw.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/drivers/net/e1000/e1000_hw.c
+++ b/drivers/net/e1000/e1000_hw.c
@@ -3842,6 +3842,12 @@ s32 e1000_validate_eeprom_checksum(struc
checksum += eeprom_data;
}
+#ifdef CONFIG_PARISC
+ /* This is a signature and not a checksum on HP c8000 */
+ if ((hw->subsystem_vendor_id == 0x103C) && (eeprom_data == 0x16d6))
+ return E1000_SUCCESS;
+
+#endif
if (checksum == (u16) EEPROM_SUM)
return E1000_SUCCESS;
else {
^ permalink raw reply [flat|nested] 122+ messages in thread
* [026/107] ASoC: Fix reporting of partial jack updates
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (24 preceding siblings ...)
2011-11-02 22:13 ` [025/107] e1000: Fix driver to be used on PA RISC C8000 workstations Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [027/107] ALSA: HDA: Cirrus - fix "Surround Speaker" volume control name Greg KH
` (80 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Mark Brown, Liam Girdwood
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Mark Brown <broonie@opensource.wolfsonmicro.com>
commit 747da0f80e566500421bd7760b2e050fea3fde5e upstream.
We need to report the entire jack state to the core jack code, not just
the bits that were being updated by the caller, otherwise the status
reported by other detection methods will be omitted from the state seen
by userspace.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
sound/soc/soc-jack.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/sound/soc/soc-jack.c
+++ b/sound/soc/soc-jack.c
@@ -94,7 +94,7 @@ void snd_soc_jack_report(struct snd_soc_
snd_soc_dapm_sync(codec);
- snd_jack_report(jack->jack, status);
+ snd_jack_report(jack->jack, jack->status);
out:
mutex_unlock(&codec->mutex);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [027/107] ALSA: HDA: Cirrus - fix "Surround Speaker" volume control name
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (25 preceding siblings ...)
2011-11-02 22:13 ` [026/107] ASoC: Fix reporting of partial jack updates Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [028/107] drm/radeon/kms: fix typo in r100_blit_copy Greg KH
` (79 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, David Henningsson, Takashi Iwai
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: David Henningsson <david.henningsson@canonical.com>
commit 2e1210bc3d065a6e26ff5fef228a9a7e08921d2c upstream.
This patch fixes "Surround Speaker Playback Volume" being cut off.
(Commit b4dabfc452a10 was probably meant to fix this, but it fixed
only the "Switch" name, not the "Volume" name.)
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
sound/pci/hda/patch_cirrus.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/sound/pci/hda/patch_cirrus.c
+++ b/sound/pci/hda/patch_cirrus.c
@@ -509,7 +509,7 @@ static int add_volume(struct hda_codec *
int index, unsigned int pval, int dir,
struct snd_kcontrol **kctlp)
{
- char tmp[32];
+ char tmp[44];
struct snd_kcontrol_new knew =
HDA_CODEC_VOLUME_IDX(tmp, index, 0, 0, HDA_OUTPUT);
knew.private_value = pval;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [028/107] drm/radeon/kms: fix typo in r100_blit_copy
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (26 preceding siblings ...)
2011-11-02 22:13 ` [027/107] ALSA: HDA: Cirrus - fix "Surround Speaker" volume control name Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-03 13:01 ` Deucher, Alexander
2011-11-02 22:13 ` [029/107] cifs: fix possible memory corruption in CIFSFindNext Greg KH
` (78 subsequent siblings)
106 siblings, 1 reply; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Alex Deucher, Dave Airlie
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1131 bytes --]
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Alex Deucher <alexander.deucher@amd.com>
commit 18b4fada275dd2b6dd9db904ddf70fe39e272222 upstream.
cur_pages is the number of pages per loop iteration.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/gpu/drm/radeon/r100.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -355,8 +355,8 @@ int r100_copy_blit(struct radeon_device
radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16));
radeon_ring_write(rdev, 0);
radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16));
- radeon_ring_write(rdev, num_pages);
- radeon_ring_write(rdev, num_pages);
+ radeon_ring_write(rdev, cur_pages);
+ radeon_ring_write(rdev, cur_pages);
radeon_ring_write(rdev, cur_pages | (stride_pixels << 16));
}
radeon_ring_write(rdev, PACKET0(RADEON_DSTCACHE_CTLSTAT, 0));
^ permalink raw reply [flat|nested] 122+ messages in thread
* [029/107] cifs: fix possible memory corruption in CIFSFindNext
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (27 preceding siblings ...)
2011-11-02 22:13 ` [028/107] drm/radeon/kms: fix typo in r100_blit_copy Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [030/107] b43: Fix beacon problem in ad-hoc mode Greg KH
` (77 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Jeff Layton, Steve French
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Layton <jlayton@redhat.com>
commit 9438fabb73eb48055b58b89fc51e0bc4db22fabd upstream.
The name_len variable in CIFSFindNext is a signed int that gets set to
the resume_name_len in the cifs_search_info. The resume_name_len however
is unsigned and for some infolevels is populated directly from a 32 bit
value sent by the server.
If the server sends a very large value for this, then that value could
look negative when converted to a signed int. That would make that
value pass the PATH_MAX check later in CIFSFindNext. The name_len would
then be used as a length value for a memcpy. It would then be treated
as unsigned again, and the memcpy scribbles over a ton of memory.
Fix this by making the name_len an unsigned value in CIFSFindNext.
Reported-by: Darren Lavender <dcl@hppine99.gbr.hp.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/cifs/cifssmb.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/fs/cifs/cifssmb.c
+++ b/fs/cifs/cifssmb.c
@@ -3596,7 +3596,8 @@ int CIFSFindNext(const int xid, struct c
T2_FNEXT_RSP_PARMS *parms;
char *response_data;
int rc = 0;
- int bytes_returned, name_len;
+ int bytes_returned;
+ unsigned int name_len;
__u16 params, byte_count;
cFYI(1, ("In FindNext"));
^ permalink raw reply [flat|nested] 122+ messages in thread
* [030/107] b43: Fix beacon problem in ad-hoc mode
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (28 preceding siblings ...)
2011-11-02 22:13 ` [029/107] cifs: fix possible memory corruption in CIFSFindNext Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [031/107] wireless: Reset beacon_found while updating regulatory Greg KH
` (76 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Manual Munz, Larry Finger, John W. Linville
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Manual Munz <freifunk@somakoma.de>
commit 8c23516fbb209ccf8f8c36268311c721faff29ee upstream.
In ad-hoc mode, driver b43 does not issue beacons.
Signed-off-by: Manual Munz <freifunk@somakoma.de>
Tested-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/net/wireless/b43/main.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -1526,7 +1526,8 @@ static void handle_irq_beacon(struct b43
u32 cmd, beacon0_valid, beacon1_valid;
if (!b43_is_mode(wl, NL80211_IFTYPE_AP) &&
- !b43_is_mode(wl, NL80211_IFTYPE_MESH_POINT))
+ !b43_is_mode(wl, NL80211_IFTYPE_MESH_POINT) &&
+ !b43_is_mode(wl, NL80211_IFTYPE_ADHOC))
return;
/* This is the bottom half of the asynchronous beacon update. */
^ permalink raw reply [flat|nested] 122+ messages in thread
* [031/107] wireless: Reset beacon_found while updating regulatory
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (29 preceding siblings ...)
2011-11-02 22:13 ` [030/107] b43: Fix beacon problem in ad-hoc mode Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [032/107] USB: PL2303: correctly handle baudrates above 115200 Greg KH
` (75 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Rajkumar Manoharan, Luis R. Rodriguez,
John W. Linville
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
commit aa3d7eef398dd4f29045e9889b817d5161afe03e upstream.
During the association, the regulatory is updated by country IE
that reaps the previously found beacons. The impact is that
after a STA disconnects *or* when for any reason a regulatory
domain change happens the beacon hint flag is not cleared
therefore preventing future beacon hints to be learned.
This is important as a regulatory domain change or a restore
of regulatory settings would set back the passive scan and no-ibss
flags on the channel. This is the right place to do this given that
it covers any regulatory domain change.
Reviewed-by: Luis R. Rodriguez <mcgrof@gmail.com>
Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/wireless/reg.c | 1 +
1 file changed, 1 insertion(+)
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1023,6 +1023,7 @@ static void handle_channel(struct wiphy
return;
}
+ chan->beacon_found = false;
chan->flags = flags | bw_flags | map_regdom_flags(reg_rule->flags);
chan->max_antenna_gain = min(chan->orig_mag,
(int) MBI_TO_DBI(power_rule->max_antenna_gain));
^ permalink raw reply [flat|nested] 122+ messages in thread
* [032/107] USB: PL2303: correctly handle baudrates above 115200
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (30 preceding siblings ...)
2011-11-02 22:13 ` [031/107] wireless: Reset beacon_found while updating regulatory Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:13 ` [033/107] ASIX: Add AX88772B USB ID Greg KH
` (74 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Michal Sroczynski
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Michal Sroczynski <msroczyn@gmail.com>
commit 8d48fdf689fed2c73c493e5146d1463689246442 upstream.
PL2303: correctly handle baudrates above 115200
Signed-off-by: Michal Sroczynski <msroczyn@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/serial/pl2303.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -617,10 +617,28 @@ static void pl2303_set_termios(struct tt
baud = 6000000;
}
dbg("%s - baud set = %d", __func__, baud);
- buf[0] = baud & 0xff;
- buf[1] = (baud >> 8) & 0xff;
- buf[2] = (baud >> 16) & 0xff;
- buf[3] = (baud >> 24) & 0xff;
+ if (baud <= 115200) {
+ buf[0] = baud & 0xff;
+ buf[1] = (baud >> 8) & 0xff;
+ buf[2] = (baud >> 16) & 0xff;
+ buf[3] = (baud >> 24) & 0xff;
+ } else {
+ /* apparently the formula for higher speeds is:
+ * baudrate = 12M * 32 / (2^buf[1]) / buf[0]
+ */
+ unsigned tmp = 12*1000*1000*32 / baud;
+ buf[3] = 0x80;
+ buf[2] = 0;
+ buf[1] = (tmp >= 256);
+ while (tmp >= 256) {
+ tmp >>= 2;
+ buf[1] <<= 1;
+ }
+ if (tmp > 256) {
+ tmp %= 256;
+ }
+ buf[0] = tmp;
+ }
}
/* For reference buf[4]=0 is 1 stop bits */
^ permalink raw reply [flat|nested] 122+ messages in thread
* [033/107] ASIX: Add AX88772B USB ID
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (31 preceding siblings ...)
2011-11-02 22:13 ` [032/107] USB: PL2303: correctly handle baudrates above 115200 Greg KH
@ 2011-11-02 22:13 ` Greg KH
2011-11-02 22:14 ` [034/107] hvc_console: Improve tty/console put_chars handling Greg KH
` (73 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:13 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Marek Vasut, David S. Miller
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Marek Vasut <marek.vasut@gmail.com>
commit 308859097831831a979f2e82cbeef0a94f438080 upstream.
This device can be found in Acer Iconia TAB W500 tablet dock.
Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/net/usb/asix.c | 4 ++++
1 file changed, 4 insertions(+)
--- a/drivers/net/usb/asix.c
+++ b/drivers/net/usb/asix.c
@@ -1467,6 +1467,10 @@ static const struct usb_device_id produc
USB_DEVICE (0x04f1, 0x3008),
.driver_info = (unsigned long) &ax8817x_info,
}, {
+ // ASIX AX88772B 10/100
+ USB_DEVICE (0x0b95, 0x772b),
+ .driver_info = (unsigned long) &ax88772_info,
+}, {
// ASIX AX88772 10/100
USB_DEVICE (0x0b95, 0x7720),
.driver_info = (unsigned long) &ax88772_info,
^ permalink raw reply [flat|nested] 122+ messages in thread
* [034/107] hvc_console: Improve tty/console put_chars handling
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (32 preceding siblings ...)
2011-11-02 22:13 ` [033/107] ASIX: Add AX88772B USB ID Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [035/107] TPM: Call tpm_transmit with correct size Greg KH
` (72 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Hendrik Brueckner, Anton Blanchard,
Benjamin Herrenschmidt
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
commit 8c2381af0d3ef62a681dac5a141b6dabb27bf2e1 upstream.
Currently, the hvc_console_print() function drops console output if the
hvc backend's put_chars() returns 0. This patch changes this behavior
to allow a retry through returning -EAGAIN.
This change also affects the hvc_push() function. Both functions are
changed to handle -EAGAIN and to retry the put_chars() operation.
If a hvc backend returns -EAGAIN, the retry handling differs:
- hvc_console_print() spins to write the complete console output.
- hvc_push() behaves the same way as for returning 0.
Now hvc backends can indirectly control the way how console output is
handled through the hvc console layer.
Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Acked-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/char/hvc_console.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
--- a/drivers/char/hvc_console.c
+++ b/drivers/char/hvc_console.c
@@ -162,8 +162,10 @@ static void hvc_console_print(struct con
} else {
r = cons_ops[index]->put_chars(vtermnos[index], c, i);
if (r <= 0) {
- /* throw away chars on error */
- i = 0;
+ /* throw away characters on error
+ * but spin in case of -EAGAIN */
+ if (r != -EAGAIN)
+ i = 0;
} else if (r > 0) {
i -= r;
if (i > 0)
@@ -447,7 +449,7 @@ static int hvc_push(struct hvc_struct *h
n = hp->ops->put_chars(hp->vtermno, hp->outbuf, hp->n_outbuf);
if (n <= 0) {
- if (n == 0) {
+ if (n == 0 || n == -EAGAIN) {
hp->do_wakeup = 1;
return 0;
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [035/107] TPM: Call tpm_transmit with correct size
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (33 preceding siblings ...)
2011-11-02 22:14 ` [034/107] hvc_console: Improve tty/console put_chars handling Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [036/107] TPM: Zero buffer after copying to userspace Greg KH
` (71 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Rajiv Andrade, James Morris
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Peter Huewe <huewe.external.infineon@googlemail.com>
commit 6b07d30aca7e52f2881b8c8c20c8a2cd28e8b3d3 upstream.
This patch changes the call of tpm_transmit by supplying the size of the
userspace buffer instead of TPM_BUFSIZE.
This got assigned CVE-2011-1161.
[The first hunk didn't make sense given one could expect
way less data than TPM_BUFSIZE, so added tpm_transmit boundary
check over bufsiz instead
The last parameter of tpm_transmit() reflects the amount
of data expected from the device, and not the buffer size
being supplied to it. It isn't ideal to parse it directly,
so we just set it to the maximum the input buffer can handle
and let the userspace API to do such job.]
Signed-off-by: Rajiv Andrade <srajiv@linux.vnet.ibm.com>
Signed-off-by: James Morris <jmorris@namei.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/char/tpm/tpm.c | 3 +++
1 file changed, 3 insertions(+)
--- a/drivers/char/tpm/tpm.c
+++ b/drivers/char/tpm/tpm.c
@@ -374,6 +374,9 @@ static ssize_t tpm_transmit(struct tpm_c
u32 count, ordinal;
unsigned long stop;
+ if (bufsiz > TPM_BUFSIZE)
+ bufsiz = TPM_BUFSIZE;
+
count = be32_to_cpu(*((__be32 *) (buf + 2)));
ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
if (count == 0)
^ permalink raw reply [flat|nested] 122+ messages in thread
* [036/107] TPM: Zero buffer after copying to userspace
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (34 preceding siblings ...)
2011-11-02 22:14 ` [035/107] TPM: Call tpm_transmit with correct size Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [037/107] [SCSI] libiscsi_tcp: fix LLD data allocation Greg KH
` (70 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Rajiv Andrade, James Morris
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Peter Huewe <huewe.external.infineon@googlemail.com>
commit 3321c07ae5068568cd61ac9f4ba749006a7185c9 upstream.
Since the buffer might contain security related data it might be a good idea to
zero the buffer after we have copied it to userspace.
This got assigned CVE-2011-1162.
Signed-off-by: Rajiv Andrade <srajiv@linux.vnet.ibm.com>
Signed-off-by: James Morris <jmorris@namei.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/char/tpm/tpm.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
--- a/drivers/char/tpm/tpm.c
+++ b/drivers/char/tpm/tpm.c
@@ -1044,6 +1044,7 @@ ssize_t tpm_read(struct file *file, char
{
struct tpm_chip *chip = file->private_data;
ssize_t ret_size;
+ int rc;
del_singleshot_timer_sync(&chip->user_read_timer);
flush_scheduled_work();
@@ -1054,8 +1055,11 @@ ssize_t tpm_read(struct file *file, char
ret_size = size;
mutex_lock(&chip->buffer_mutex);
- if (copy_to_user(buf, chip->data_buffer, ret_size))
+ rc = copy_to_user(buf, chip->data_buffer, ret_size);
+ memset(chip->data_buffer, 0, ret_size);
+ if (rc)
ret_size = -EFAULT;
+
mutex_unlock(&chip->buffer_mutex);
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [037/107] [SCSI] libiscsi_tcp: fix LLD data allocation
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (35 preceding siblings ...)
2011-11-02 22:14 ` [036/107] TPM: Zero buffer after copying to userspace Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [038/107] cnic: Improve NETDEV_UP event handling Greg KH
` (69 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Mike Christie, James Bottomley
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Mike Christie <michaelc@cs.wisc.edu>
commit 74dcd0ec735ba9c5bef254b2f6e53068cf3f9ff0 upstream.
Have libiscsi_tcp have upper layers allocate the LLD data
along with the iscsi_cls_conn struct, so it is refcounted.
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/scsi/libiscsi_tcp.c | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
--- a/drivers/scsi/libiscsi_tcp.c
+++ b/drivers/scsi/libiscsi_tcp.c
@@ -1069,7 +1069,8 @@ iscsi_tcp_conn_setup(struct iscsi_cls_se
struct iscsi_cls_conn *cls_conn;
struct iscsi_tcp_conn *tcp_conn;
- cls_conn = iscsi_conn_setup(cls_session, sizeof(*tcp_conn), conn_idx);
+ cls_conn = iscsi_conn_setup(cls_session,
+ sizeof(*tcp_conn) + dd_data_size, conn_idx);
if (!cls_conn)
return NULL;
conn = cls_conn->dd_data;
@@ -1081,22 +1082,13 @@ iscsi_tcp_conn_setup(struct iscsi_cls_se
tcp_conn = conn->dd_data;
tcp_conn->iscsi_conn = conn;
-
- tcp_conn->dd_data = kzalloc(dd_data_size, GFP_KERNEL);
- if (!tcp_conn->dd_data) {
- iscsi_conn_teardown(cls_conn);
- return NULL;
- }
+ tcp_conn->dd_data = conn->dd_data + sizeof(*tcp_conn);
return cls_conn;
}
EXPORT_SYMBOL_GPL(iscsi_tcp_conn_setup);
void iscsi_tcp_conn_teardown(struct iscsi_cls_conn *cls_conn)
{
- struct iscsi_conn *conn = cls_conn->dd_data;
- struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
-
- kfree(tcp_conn->dd_data);
iscsi_conn_teardown(cls_conn);
}
EXPORT_SYMBOL_GPL(iscsi_tcp_conn_teardown);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [038/107] cnic: Improve NETDEV_UP event handling
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (36 preceding siblings ...)
2011-11-02 22:14 ` [037/107] [SCSI] libiscsi_tcp: fix LLD data allocation Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [039/107] ALSA: hda/realtek - Avoid bogus HP-pin assignment Greg KH
` (68 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Michael Chan, David S. Miller
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Michael Chan <mchan@broadcom.com>
commit db1d350fcb156b58f66a67680617077bcacfe6fc upstream.
During NETDEV_UP, we use symbol_get() to get the net driver's cnic
probe function. This sometimes doesn't work if NETDEV_UP happens
right after NETDEV_REGISTER and the net driver is still running module
init code. As a result, the cnic device may not be discovered. We
fix this by probing on all NETDEV events if the device's netif_running
state is up.
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/net/cnic.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/drivers/net/cnic.c
+++ b/drivers/net/cnic.c
@@ -2718,7 +2718,7 @@ static int cnic_netdev_event(struct noti
dev = cnic_from_netdev(netdev);
- if (!dev && (event == NETDEV_REGISTER || event == NETDEV_UP)) {
+ if (!dev && (event == NETDEV_REGISTER || netif_running(netdev))) {
/* Check for the hot-plug device */
dev = is_cnic_dev(netdev);
if (dev) {
@@ -2734,7 +2734,7 @@ static int cnic_netdev_event(struct noti
else if (event == NETDEV_UNREGISTER)
cnic_ulp_exit(dev);
- if (event == NETDEV_UP) {
+ if (event == NETDEV_UP || (new_dev && netif_running(netdev))) {
if (cnic_register_netdev(dev) != 0) {
cnic_put(dev);
goto done;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [039/107] ALSA: hda/realtek - Avoid bogus HP-pin assignment
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (37 preceding siblings ...)
2011-11-02 22:14 ` [038/107] cnic: Improve NETDEV_UP event handling Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [040/107] [SCSI] 3w-9xxx: fix iommu_iova leak Greg KH
` (67 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Takashi Iwai
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Takashi Iwai <tiwai@suse.de>
commit 5fe6e0151dbd969f5fbcd94d05c968b76d76952b upstream.
When the headphone pin is assigned as primary output to line_out_pins[],
the automatic HP-pin assignment by ASSID must be suppressed. Otherwise
a wrong pin might be assigned to the headphone and breaks the auto-mute.
Reference: https://bugzilla.novell.com/show_bug.cgi?id=716104
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
sound/pci/hda/patch_realtek.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -1337,7 +1337,9 @@ do_sku:
* 15 : 1 --> enable the function "Mute internal speaker
* when the external headphone out jack is plugged"
*/
- if (!spec->autocfg.hp_pins[0]) {
+ if (!spec->autocfg.hp_pins[0] &&
+ !(spec->autocfg.line_out_pins[0] &&
+ spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)) {
hda_nid_t nid;
tmp = (ass >> 11) & 0x3; /* HP to chassis */
if (tmp == 0)
^ permalink raw reply [flat|nested] 122+ messages in thread
* [040/107] [SCSI] 3w-9xxx: fix iommu_iova leak
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (38 preceding siblings ...)
2011-11-02 22:14 ` [039/107] ALSA: hda/realtek - Avoid bogus HP-pin assignment Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [041/107] [SCSI] aacraid: reset should disable MSI interrupt Greg KH
` (66 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Adam Radford, James Bottomley
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: James Bottomley <JBottomley@Parallels.com>
commit 96067723e46b0dd24ae7b934085ab4eff4d26a1b upstream.
Following reports on the list, it looks like the 3e-9xxx driver will leak dma
mappings every time we get a transient queueing error back from the card.
This is because it maps the sg list in the routine that sends the command, but
doesn't unmap again in the transient failure path (even though the command is
sent back to the block layer). Fix by unmapping before returning the status.
Reported-by: Chris Boot <bootc@bootc.net>
Tested-by: Chris Boot <bootc@bootc.net>
Acked-by: Adam Radford <aradford@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/scsi/3w-9xxx.c | 2 ++
1 file changed, 2 insertions(+)
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -1786,10 +1786,12 @@ static int twa_scsi_queue(struct scsi_cm
switch (retval) {
case SCSI_MLQUEUE_HOST_BUSY:
twa_free_request_id(tw_dev, request_id);
+ twa_unmap_scsi_data(tw_dev, request_id);
break;
case 1:
tw_dev->state[request_id] = TW_S_COMPLETED;
twa_free_request_id(tw_dev, request_id);
+ twa_unmap_scsi_data(tw_dev, request_id);
SCpnt->result = (DID_ERROR << 16);
done(SCpnt);
retval = 0;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [041/107] [SCSI] aacraid: reset should disable MSI interrupt
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (39 preceding siblings ...)
2011-11-02 22:14 ` [040/107] [SCSI] 3w-9xxx: fix iommu_iova leak Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [042/107] [SCSI] libsas: fix failure to revalidate domain for anything but the first expander child Greg KH
` (65 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Vasily Averin, Mark Salyzyn,
James Bottomley
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Vasily Averin <vvs@parallels.com>
commit d0efab26f89506387a1bde898556660e06d7eb15 upstream.
scsi reset on hardware with enabled MSI interrupts generates WARNING message
[11027.798722] aacraid: Host adapter abort request (0,0,0,0)
[11027.798814] aacraid: Host adapter reset request. SCSI hang ?
[11087.762237] aacraid: SCSI bus appears hung
[11135.082543] ------------[ cut here ]------------
[11135.082646] WARNING: at drivers/pci/msi.c:658 pci_enable_msi_block+0x251/0x290()
Signed-off-by: Vasily Averin <vvs@sw.ru>
Acked-by: Mark Salyzyn <mark_salyzyn@us.xyratex.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/scsi/aacraid/commsup.c | 2 ++
1 file changed, 2 insertions(+)
--- a/drivers/scsi/aacraid/commsup.c
+++ b/drivers/scsi/aacraid/commsup.c
@@ -1202,6 +1202,8 @@ static int _aac_reset_adapter(struct aac
kfree(aac->queues);
aac->queues = NULL;
free_irq(aac->pdev->irq, aac);
+ if (aac->msi)
+ pci_disable_msi(aac->pdev);
kfree(aac->fsa_dev);
aac->fsa_dev = NULL;
quirks = aac_get_driver_ident(index)->quirks;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [042/107] [SCSI] libsas: fix failure to revalidate domain for anything but the first expander child.
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (40 preceding siblings ...)
2011-11-02 22:14 ` [041/107] [SCSI] aacraid: reset should disable MSI interrupt Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [043/107] cfg80211: Fix validation of AKM suites Greg KH
` (64 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Mark Salyzyn, James Bottomley
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Mark Salyzyn <mark_salyzyn@us.xyratex.com>
commit 24926dadc41cc566e974022b0e66231b82c6375f upstream.
In an enclosure model where there are chaining expanders to a large body
of storage, it was discovered that libsas, responding to a broadcast
event change, would only revalidate the domain of first child expander
in the list.
The issue is that the pointer value to the discovered source device was
used to break out of the loop, rather than the content of the pointer.
This still remains non-compliant as the revalidate domain code is
supposed to loop through all child expanders, and not stop at the first
one it finds that reports a change count. However, the design of this
routine does not allow multiple device discoveries and that would be a
more complicated set of patches reserved for another day. We are fixing
the glaring bug rather than refactoring the code.
Signed-off-by: Mark Salyzyn <msalyzyn@us.xyratex.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/scsi/libsas/sas_expander.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/scsi/libsas/sas_expander.c
+++ b/drivers/scsi/libsas/sas_expander.c
@@ -1712,7 +1712,7 @@ static int sas_find_bcast_dev(struct dom
list_for_each_entry(ch, &ex->children, siblings) {
if (ch->dev_type == EDGE_DEV || ch->dev_type == FANOUT_DEV) {
res = sas_find_bcast_dev(ch, src_dev);
- if (src_dev)
+ if (*src_dev)
return res;
}
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [043/107] cfg80211: Fix validation of AKM suites
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (41 preceding siblings ...)
2011-11-02 22:14 ` [042/107] [SCSI] libsas: fix failure to revalidate domain for anything but the first expander child Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [044/107] splice: direct_splice_actor() should not use pos in sd Greg KH
` (63 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Jouni Malinen, John W. Linville
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jouni Malinen <jouni@qca.qualcomm.com>
commit 1b9ca0272ffae212e726380f66777b30a56ed7a5 upstream.
Incorrect variable was used in validating the akm_suites array from
NL80211_ATTR_AKM_SUITES. In addition, there was no explicit
validation of the array length (we only have room for
NL80211_MAX_NR_AKM_SUITES).
This can result in a buffer write overflow for stack variables with
arbitrary data from user space. The nl80211 commands using the affected
functionality require GENL_ADMIN_PERM, so this is only exposed to admin
users.
Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/wireless/nl80211.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -3364,9 +3364,12 @@ static int nl80211_crypto_settings(struc
if (len % sizeof(u32))
return -EINVAL;
+ if (settings->n_akm_suites > NL80211_MAX_NR_AKM_SUITES)
+ return -EINVAL;
+
memcpy(settings->akm_suites, data, len);
- for (i = 0; i < settings->n_ciphers_pairwise; i++)
+ for (i = 0; i < settings->n_akm_suites; i++)
if (!nl80211_valid_akm_suite(settings->akm_suites[i]))
return -EINVAL;
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [044/107] splice: direct_splice_actor() should not use pos in sd
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (42 preceding siblings ...)
2011-11-02 22:14 ` [043/107] cfg80211: Fix validation of AKM suites Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [045/107] [SCSI] libsas: fix panic when single phy is disabled on a wide port Greg KH
` (62 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Changli Gao, Miklos Szeredi, Jens Axboe
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Changli Gao <xiaosuo@gmail.com>
commit 2cb4b05e7647891b46b91c07c9a60304803d1688 upstream.
direct_splice_actor() shouldn't use sd->pos, as sd->pos is for file reading,
file->f_pos should be used instead.
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/splice.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -1221,7 +1221,8 @@ static int direct_splice_actor(struct pi
{
struct file *file = sd->u.file;
- return do_splice_from(pipe, file, &sd->pos, sd->total_len, sd->flags);
+ return do_splice_from(pipe, file, &file->f_pos, sd->total_len,
+ sd->flags);
}
/**
^ permalink raw reply [flat|nested] 122+ messages in thread
* [045/107] [SCSI] libsas: fix panic when single phy is disabled on a wide port
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (43 preceding siblings ...)
2011-11-02 22:14 ` [044/107] splice: direct_splice_actor() should not use pos in sd Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [046/107] ahci: Enable SB600 64bit DMA on Asus M3A Greg KH
` (61 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Mark Salyzyn, James Bottomley
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Mark Salyzyn <mark_salyzyn@us.xyratex.com>
commit a73914c35b05d80f8ce78288e10056c91090b666 upstream.
When a wide port is being utilized to a target, if one disables only one
of the
phys, we get an OS crash:
BUG: unable to handle kernel NULL pointer dereference at
0000000000000238
IP: [<ffffffff814ca9b1>] mutex_lock+0x21/0x50
PGD 4103f5067 PUD 41dba9067 PMD 0
Oops: 0002 [#1] SMP
last sysfs file: /sys/bus/pci/slots/5/address
CPU 0
Modules linked in: pm8001(U) ses enclosure fuse nfsd exportfs autofs4
ipmi_devintf ipmi_si ipmi_msghandler nfs lockd fscache nfs_acl
auth_rpcgss 8021q fcoe libfcoe garp libfc scsi_transport_fc stp scsi_tgt
llc sunrpc cpufreq_ondemand acpi_cpufreq freq_table ipv6 sr_mod cdrom
dm_mirror dm_region_hash dm_log uinput sg i2c_i801 i2c_core iTCO_wdt
iTCO_vendor_support e1000e mlx4_ib ib_mad ib_core mlx4_en mlx4_core ext3
jbd mbcache sd_mod crc_t10dif usb_storage ata_generic pata_acpi ata_piix
libsas(U) scsi_transport_sas dm_mod [last unloaded: pm8001]
Modules linked in: pm8001(U) ses enclosure fuse nfsd exportfs autofs4
ipmi_devintf ipmi_si ipmi_msghandler nfs lockd fscache nfs_acl
auth_rpcgss 8021q fcoe libfcoe garp libfc scsi_transport_fc stp scsi_tgt
llc sunrpc cpufreq_ondemand acpi_cpufreq freq_table ipv6 sr_mod cdrom
dm_mirror dm_region_hash dm_log uinput sg i2c_i801 i2c_core iTCO_wdt
iTCO_vendor_support e1000e mlx4_ib ib_mad ib_core mlx4_en mlx4_core ext3
jbd mbcache sd_mod crc_t10dif usb_storage ata_generic pata_acpi ata_piix
libsas(U) scsi_transport_sas dm_mod [last unloaded: pm8001]
Pid: 5146, comm: scsi_wq_5 Not tainted
2.6.32-71.29.1.el6.lustre.7.x86_64 #1 Storage Server
RIP: 0010:[<ffffffff814ca9b1>] [<ffffffff814ca9b1>]
mutex_lock+0x21/0x50
RSP: 0018:ffff8803e4e33d30 EFLAGS: 00010246
RAX: 0000000000000000 RBX: 0000000000000238 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffff8803e664c800 RDI: 0000000000000238
RBP: ffff8803e4e33d40 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000000
R13: 0000000000000238 R14: ffff88041acb7200 R15: ffff88041c51ada0
FS: 0000000000000000(0000) GS:ffff880028200000(0000)
knlGS:0000000000000000
CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
CR2: 0000000000000238 CR3: 0000000410143000 CR4: 00000000000006f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process scsi_wq_5 (pid: 5146, threadinfo ffff8803e4e32000, task
ffff8803e4e294a0)
Stack:
ffff8803e664c800 0000000000000000 ffff8803e4e33d70 ffffffffa001f06e
<0> ffff8803e4e33d60 ffff88041c51ada0 ffff88041acb7200 ffff88041bc0aa00
<0> ffff8803e4e33d90 ffffffffa0032b6c 0000000000000014 ffff88041acb7200
Call Trace:
[<ffffffffa001f06e>] sas_port_delete_phy+0x2e/0xa0 [scsi_transport_sas]
[<ffffffffa0032b6c>] sas_unregister_devs_sas_addr+0xac/0xe0 [libsas]
[<ffffffffa0034914>] sas_ex_revalidate_domain+0x204/0x330 [libsas]
[<ffffffffa00307f0>] ? sas_revalidate_domain+0x0/0x90 [libsas]
[<ffffffffa0030855>] sas_revalidate_domain+0x65/0x90 [libsas]
[<ffffffff8108c7d0>] worker_thread+0x170/0x2a0
[<ffffffff81091ea0>] ? autoremove_wake_function+0x0/0x40
[<ffffffff8108c660>] ? worker_thread+0x0/0x2a0
[<ffffffff81091b36>] kthread+0x96/0xa0
[<ffffffff810141ca>] child_rip+0xa/0x20
[<ffffffff81091aa0>] ? kthread+0x0/0xa0
[<ffffffff810141c0>] ? child_rip+0x0/0x20
Code: ff ff 85 c0 75 ed eb d6 66 90 55 48 89 e5 48 83 ec 10 48 89 1c 24
4c 89 64 24 08 0f 1f 44 00 00 48 89 fb e8 92 f4 ff ff 48 89 df <f0> ff
0f 79 05 e8 25 00 00 00 65 48 8b 04 25 08 cc 00 00 48 2d
RIP [<ffffffff814ca9b1>] mutex_lock+0x21/0x50
RSP <ffff8803e4e33d30>
CR2: 0000000000000238
The following patch is admittedly a band-aid, and does not solve the
root cause, but it still is a good candidate for hardening as a pointer
check before reference.
Signed-off-by: Mark Salyzyn <mark_salyzyn@us.xyratex.com>
Tested-by: Jack Wang <jack_wang@usish.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/scsi/libsas/sas_expander.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
--- a/drivers/scsi/libsas/sas_expander.c
+++ b/drivers/scsi/libsas/sas_expander.c
@@ -1757,10 +1757,12 @@ static void sas_unregister_devs_sas_addr
sas_disable_routing(parent, phy->attached_sas_addr);
}
memset(phy->attached_sas_addr, 0, SAS_ADDR_SIZE);
- sas_port_delete_phy(phy->port, phy->phy);
- if (phy->port->num_phys == 0)
- sas_port_delete(phy->port);
- phy->port = NULL;
+ if (phy->port) {
+ sas_port_delete_phy(phy->port, phy->phy);
+ if (phy->port->num_phys == 0)
+ sas_port_delete(phy->port);
+ phy->port = NULL;
+ }
}
static int sas_discover_bfs_by_root_level(struct domain_device *root,
^ permalink raw reply [flat|nested] 122+ messages in thread
* [046/107] ahci: Enable SB600 64bit DMA on Asus M3A
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (44 preceding siblings ...)
2011-11-02 22:14 ` [045/107] [SCSI] libsas: fix panic when single phy is disabled on a wide port Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [047/107] HID: usbhid: Add support for SiGma Micro chip Greg KH
` (60 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Mark Nelson, Jeff Garzik
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Mark Nelson <mdnelson8@gmail.com>
commit 3c4aa91f21f65b7b40bdfb015eacbcb8453ccae2 upstream.
Like e65cc194f7628ecaa02462f22f42fb09b50dcd49 this patch enables 64bit DMA
for the AHCI SATA controller of a board that has the SB600 southbridge. In
this case though we're enabling 64bit DMA for the Asus M3A motherboard. It
is a new enough board that all of the BIOS releases since the initial
release (0301 from 2007-10-22) work correctly with 64bit DMA enabled.
Signed-off-by: Mark Nelson <mdnelson8@gmail.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/ata/ahci.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -2769,6 +2769,18 @@ static bool ahci_sb600_enable_64bit(stru
DMI_MATCH(DMI_BOARD_NAME, "MS-7376"),
},
},
+ /*
+ * All BIOS versions for the Asus M3A support 64bit DMA.
+ * (all release versions from 0301 to 1206 were tested)
+ */
+ {
+ .ident = "ASUS M3A",
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR,
+ "ASUSTeK Computer INC."),
+ DMI_MATCH(DMI_BOARD_NAME, "M3A"),
+ },
+ },
{ }
};
const struct dmi_system_id *match;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [047/107] HID: usbhid: Add support for SiGma Micro chip
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (45 preceding siblings ...)
2011-11-02 22:14 ` [046/107] ahci: Enable SB600 64bit DMA on Asus M3A Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [048/107] hwmon: (w83627ehf) Properly report thermal diode sensors Greg KH
` (59 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Jeremiah Matthey, Jiri Kosina,
Jonathan Nieder
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jeremiah Matthey <sprg86@gmail.com>
commit f5e4282586dc0c9dab8c7d32e6c43aa07f68586b upstream.
Patch to add SiGma Micro-based keyboards (1c4f:0002) to hid-quirks.
These keyboards dont seem to allow the records to be initialized, and hence a
timeout occurs when the usbhid driver attempts to initialize them. The patch
just adds the signature for these keyboards to the hid-quirks list with the
setting HID_QUIRK_NO_INIT_REPORTS. This removes the 5-10 second wait for the
timeout to occur.
Signed-off-by: Jeremiah Matthey <sprg86@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/hid/hid-ids.h | 3 +++
drivers/hid/usbhid/hid-quirks.c | 1 +
2 files changed, 4 insertions(+)
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -389,6 +389,9 @@
#define USB_VENDOR_ID_SAMSUNG 0x0419
#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001
+#define USB_VENDOR_ID_SIGMA_MICRO 0x1c4f
+#define USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD 0x0002
+
#define USB_VENDOR_ID_SONY 0x054c
#define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE 0x024b
#define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -65,6 +65,7 @@ static const struct hid_blacklist {
{ USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
{ USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
+ { USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD, HID_QUIRK_NO_INIT_REPORTS },
{ 0, 0 }
};
^ permalink raw reply [flat|nested] 122+ messages in thread
* [048/107] hwmon: (w83627ehf) Properly report thermal diode sensors
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (46 preceding siblings ...)
2011-11-02 22:14 ` [047/107] HID: usbhid: Add support for SiGma Micro chip Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [049/107] x25: Prevent skb overreads when checking call user data Greg KH
` (58 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Jean Delvare, Guenter Roeck
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jean Delvare <khali@linux-fr.org>
commit bf164c58e58328c40ebc597a8ac00cc6840f9703 upstream.
The w83627ehf driver is improperly reporting thermal diode sensors as
type 2, instead of 3. This caused "sensors" and possibly other
monitoring tools to report these sensors as "transistor" instead of
"thermal diode".
Furthermore, diode subtype selection (CPU vs. external) is only
supported by the original W83627EHF/EHG. All later models only support
CPU diode type, and some (NCT6776F) don't even have the register in
question so we should avoid reading from it.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/hwmon/w83627ehf.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
--- a/drivers/hwmon/w83627ehf.c
+++ b/drivers/hwmon/w83627ehf.c
@@ -1239,7 +1239,8 @@ static void w83627ehf_device_remove_file
}
/* Get the monitoring functions started */
-static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data)
+static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data,
+ enum kinds kind)
{
int i;
u8 tmp, diode;
@@ -1268,10 +1269,16 @@ static inline void __devinit w83627ehf_i
w83627ehf_write_value(data, W83627EHF_REG_VBAT, tmp | 0x01);
/* Get thermal sensor types */
- diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
+ switch (kind) {
+ case w83627ehf:
+ diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
+ break;
+ default:
+ diode = 0x70;
+ }
for (i = 0; i < 3; i++) {
if ((tmp & (0x02 << i)))
- data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 2;
+ data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3;
else
data->temp_type[i] = 4; /* thermistor */
}
@@ -1319,7 +1326,7 @@ static int __devinit w83627ehf_probe(str
}
/* Initialize the chip */
- w83627ehf_init_device(data);
+ w83627ehf_init_device(data, sio_data->kind);
data->vrm = vid_which_vrm();
superio_enter(sio_data->sioreg);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [049/107] x25: Prevent skb overreads when checking call user data
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (47 preceding siblings ...)
2011-11-02 22:14 ` [048/107] hwmon: (w83627ehf) Properly report thermal diode sensors Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov() Greg KH
` (57 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Matthew Daley, Eric Dumazet, Andrew Hendry,
David S. Miller
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Matthew Daley <mattjd@gmail.com>
commit 7f81e25befdfb3272345a2e775f520e1d515fa20 upstream.
x25_find_listener does not check that the amount of call user data given
in the skb is big enough in per-socket comparisons, hence buffer
overreads may occur. Fix this by adding a check.
Signed-off-by: Matthew Daley <mattjd@gmail.com>
Cc: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Andrew Hendry <andrew.hendry@gmail.com>
Acked-by: Andrew Hendry <andrew.hendry@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/x25/af_x25.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
--- a/net/x25/af_x25.c
+++ b/net/x25/af_x25.c
@@ -294,7 +294,8 @@ static struct sock *x25_find_listener(st
* Found a listening socket, now check the incoming
* call user data vs this sockets call user data
*/
- if(skb->len > 0 && x25_sk(s)->cudmatchlength > 0) {
+ if (x25_sk(s)->cudmatchlength > 0 &&
+ skb->len >= x25_sk(s)->cudmatchlength) {
if((memcmp(x25_sk(s)->calluserdata.cuddata,
skb->data,
x25_sk(s)->cudmatchlength)) == 0) {
^ permalink raw reply [flat|nested] 122+ messages in thread
* [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov()
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (48 preceding siblings ...)
2011-11-02 22:14 ` [049/107] x25: Prevent skb overreads when checking call user data Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-04 15:24 ` Ben Hutchings
2011-11-02 22:14 ` [051/107] staging: quatech_usb2: Potential lost wakeup scenario in TIOCMIWAIT Greg KH
` (56 subsequent siblings)
106 siblings, 1 reply; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Xiaotian Feng, Jens Axboe, Dan Carpenter
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Xiaotian Feng <dfeng@redhat.com>
commit 5478755616ae2ef1ce144dded589b62b2a50d575 upstream.
commit 9284bcf checks for proper length of iov entries in
blk_rq_map_user_iov(). But if the map is unaligned, kernel
will break out the loop without checking for the proper length.
So we need to check the proper length before the unalign check.
Signed-off-by: Xiaotian Feng <dfeng@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
block/blk-map.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -201,12 +201,13 @@ int blk_rq_map_user_iov(struct request_q
for (i = 0; i < iov_count; i++) {
unsigned long uaddr = (unsigned long)iov[i].iov_base;
+ if (!iov[i].iov_len)
+ return -EINVAL;
+
if (uaddr & queue_dma_alignment(q)) {
unaligned = 1;
break;
}
- if (!iov[i].iov_len)
- return -EINVAL;
}
if (unaligned || (q->dma_pad_mask & len) || map_data)
^ permalink raw reply [flat|nested] 122+ messages in thread
* [051/107] staging: quatech_usb2: Potential lost wakeup scenario in TIOCMIWAIT
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (49 preceding siblings ...)
2011-11-02 22:14 ` [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov() Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [052/107] USB: qcserial: add device ID for "HP un2430 Mobile Broadband Module" Greg KH
` (55 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Kautuk Consul
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Kautuk Consul <consul.kautuk@gmail.com>
commit e8df1674d383d2ecc6efa8d7dba74c03aafdfdd7 upstream.
If the usermode app does an ioctl over this serial device by
using TIOCMIWAIT, then the code will wait by setting the current
task state to TASK_INTERRUPTIBLE and then calling schedule().
This will be woken up by the qt2_process_modem_status on URB
completion when the port_extra->shadowMSR is set to the new
modem status.
However, this could result in a lost wakeup scenario due to a race
in the logic in the qt2_ioctl(TIOCMIWAIT) loop and the URB completion
for new modem status in qt2_process_modem_status.
Due to this, the usermode app's task will continue to sleep despite a
change in the modem status.
Signed-off-by: Kautuk Consul <consul.kautuk@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/staging/quatech_usb2/quatech_usb2.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
--- a/drivers/staging/quatech_usb2/quatech_usb2.c
+++ b/drivers/staging/quatech_usb2/quatech_usb2.c
@@ -921,9 +921,10 @@ static int qt2_ioctl(struct tty_struct *
dbg("%s() port %d, cmd == TIOCMIWAIT enter",
__func__, port->number);
prev_msr_value = port_extra->shadowMSR & QT2_SERIAL_MSR_MASK;
+ barrier();
+ __set_current_state(TASK_INTERRUPTIBLE);
while (1) {
add_wait_queue(&port_extra->wait, &wait);
- set_current_state(TASK_INTERRUPTIBLE);
schedule();
dbg("%s(): port %d, cmd == TIOCMIWAIT here\n",
__func__, port->number);
@@ -931,9 +932,12 @@ static int qt2_ioctl(struct tty_struct *
/* see if a signal woke us up */
if (signal_pending(current))
return -ERESTARTSYS;
+ set_current_state(TASK_INTERRUPTIBLE);
msr_value = port_extra->shadowMSR & QT2_SERIAL_MSR_MASK;
- if (msr_value == prev_msr_value)
+ if (msr_value == prev_msr_value) {
+ __set_current_state(TASK_RUNNING);
return -EIO; /* no change - error */
+ }
if ((arg & TIOCM_RNG &&
((prev_msr_value & QT2_SERIAL_MSR_RI) ==
(msr_value & QT2_SERIAL_MSR_RI))) ||
@@ -946,6 +950,7 @@ static int qt2_ioctl(struct tty_struct *
(arg & TIOCM_CTS &&
((prev_msr_value & QT2_SERIAL_MSR_CTS) ==
(msr_value & QT2_SERIAL_MSR_CTS)))) {
+ __set_current_state(TASK_RUNNING);
return 0;
}
} /* end inifinite while */
^ permalink raw reply [flat|nested] 122+ messages in thread
* [052/107] USB: qcserial: add device ID for "HP un2430 Mobile Broadband Module"
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (50 preceding siblings ...)
2011-11-02 22:14 ` [051/107] staging: quatech_usb2: Potential lost wakeup scenario in TIOCMIWAIT Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [053/107] xhci-mem.c: Check for ring->first_seg != NULL Greg KH
` (54 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Rigbert Hamisch
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Rigbert Hamisch <rigbert@gmx.de>
commit 1bfac90d1b8e63a4d44158c3445d8fda3fb6d5eb upstream.
add device ID for "HP un2430 Mobile Broadband Module"
Signed-off-by: Rigbert Hamisch <rigbert@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/serial/qcserial.c | 1 +
1 file changed, 1 insertion(+)
--- a/drivers/usb/serial/qcserial.c
+++ b/drivers/usb/serial/qcserial.c
@@ -26,6 +26,7 @@ static struct usb_device_id id_table[] =
{USB_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
{USB_DEVICE(0x03f0, 0x1f1d)}, /* HP un2400 Gobi Modem Device */
{USB_DEVICE(0x03f0, 0x201d)}, /* HP un2400 Gobi QDL Device */
+ {USB_DEVICE(0x03f0, 0x371d)}, /* HP un2430 Mobile Broadband Module */
{USB_DEVICE(0x04da, 0x250d)}, /* Panasonic Gobi Modem device */
{USB_DEVICE(0x04da, 0x250c)}, /* Panasonic Gobi QDL device */
{USB_DEVICE(0x413c, 0x8172)}, /* Dell Gobi Modem device */
^ permalink raw reply [flat|nested] 122+ messages in thread
* [053/107] xhci-mem.c: Check for ring->first_seg != NULL
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (51 preceding siblings ...)
2011-11-02 22:14 ` [052/107] USB: qcserial: add device ID for "HP un2430 Mobile Broadband Module" Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [054/107] [SCSI] ipr: Always initiate hard reset in kdump kernel Greg KH
` (53 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Kautuk Consul, Sarah Sharp
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Kautuk Consul <consul.kautuk@gmail.com>
commit 0e6c7f746ea99089fb3263709075c20485a479ae upstream.
There are 2 situations wherein the xhci_ring* might not get freed:
- When xhci_ring_alloc() -> xhci_segment_alloc() returns NULL and
we goto the fail: label in xhci_ring_alloc. In this case, the ring
will not get kfreed.
- When the num_segs argument to xhci_ring_alloc is passed as 0 and
we try to free the rung after that.
( This doesn't really happen as of now in the code but we seem to
be entertaining num_segs=0 in xhci_ring_alloc )
This should be backported to kernels as old as 2.6.31.
Signed-off-by: Kautuk Consul <consul.kautuk@gmail.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/host/xhci-mem.c | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -110,18 +110,20 @@ void xhci_ring_free(struct xhci_hcd *xhc
struct xhci_segment *seg;
struct xhci_segment *first_seg;
- if (!ring || !ring->first_seg)
+ if (!ring)
return;
- first_seg = ring->first_seg;
- seg = first_seg->next;
- xhci_dbg(xhci, "Freeing ring at %p\n", ring);
- while (seg != first_seg) {
- struct xhci_segment *next = seg->next;
- xhci_segment_free(xhci, seg);
- seg = next;
+ if (ring->first_seg) {
+ first_seg = ring->first_seg;
+ seg = first_seg->next;
+ xhci_dbg(xhci, "Freeing ring at %p\n", ring);
+ while (seg != first_seg) {
+ struct xhci_segment *next = seg->next;
+ xhci_segment_free(xhci, seg);
+ seg = next;
+ }
+ xhci_segment_free(xhci, first_seg);
+ ring->first_seg = NULL;
}
- xhci_segment_free(xhci, first_seg);
- ring->first_seg = NULL;
kfree(ring);
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [054/107] [SCSI] ipr: Always initiate hard reset in kdump kernel
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (52 preceding siblings ...)
2011-11-02 22:14 ` [053/107] xhci-mem.c: Check for ring->first_seg != NULL Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [055/107] [SCSI] libsas: set sas_address and device type of rphy Greg KH
` (52 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Anton Blanchard, Brian King,
James Bottomley
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Anton Blanchard <anton@samba.org>
commit 5d7c20b7fa5c6ca19e871b4050e321c99d32bd43 upstream.
During kdump testing I noticed timeouts when initialising each IPR
adapter. While the driver has logic to detect an adapter in an
indeterminate state, it wasn't triggering and each adapter went
through a 5 minute timeout before finally going operational.
Some analysis showed the needs_hard_reset flag wasn't getting set.
We can check the reset_devices kernel parameter which is set by
kdump and force a full reset. This fixes the problem.
Signed-off-by: Anton Blanchard <anton@samba.org>
Acked-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/scsi/ipr.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -7668,7 +7668,7 @@ static int __devinit ipr_probe_ioa(struc
uproc = readl(ioa_cfg->regs.sense_uproc_interrupt_reg);
if ((mask & IPR_PCII_HRRQ_UPDATED) == 0 || (uproc & IPR_UPROCI_RESET_ALERT))
ioa_cfg->needs_hard_reset = 1;
- if (interrupts & IPR_PCII_ERROR_INTERRUPTS)
+ if ((interrupts & IPR_PCII_ERROR_INTERRUPTS) || reset_devices)
ioa_cfg->needs_hard_reset = 1;
if (interrupts & IPR_PCII_IOA_UNIT_CHECKED)
ioa_cfg->ioa_unit_checked = 1;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [055/107] [SCSI] libsas: set sas_address and device type of rphy
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (53 preceding siblings ...)
2011-11-02 22:14 ` [054/107] [SCSI] ipr: Always initiate hard reset in kdump kernel Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [056/107] ALSA: HDA: Add new revision for ALC662 Greg KH
` (51 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Jack Wang, James Bottomley
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jack Wang <jack_wang@usish.com>
commit bb041a0e9c31229071b6e56e1d0d8374af0d2038 upstream.
Libsas forget to set the sas_address and device type of rphy lead to file
under /sys/class/sas_x show wrong value, fix that.
Signed-off-by: Jack Wang <jack_wang@usish.com>
Tested-by: Crystal Yu <crystal_yu@usish.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/scsi/libsas/sas_expander.c | 2 ++
1 file changed, 2 insertions(+)
--- a/drivers/scsi/libsas/sas_expander.c
+++ b/drivers/scsi/libsas/sas_expander.c
@@ -198,6 +198,8 @@ static void sas_set_ex_phy(struct domain
phy->virtual = dr->virtual;
phy->last_da_index = -1;
+ phy->phy->identify.sas_address = SAS_ADDR(phy->attached_sas_addr);
+ phy->phy->identify.device_type = phy->attached_dev_type;
phy->phy->identify.initiator_port_protocols = phy->attached_iproto;
phy->phy->identify.target_port_protocols = phy->attached_tproto;
phy->phy->identify.phy_identifier = phy_id;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [056/107] ALSA: HDA: Add new revision for ALC662
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (54 preceding siblings ...)
2011-11-02 22:14 ` [055/107] [SCSI] libsas: set sas_address and device type of rphy Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [057/107] x86: Fix compilation bug in kprobes twobyte_is_boostable Greg KH
` (50 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, David Henningsson, Kailang Yang,
Takashi Iwai
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: David Henningsson <david.henningsson@canonical.com>
commit cc667a72d471e79fd8e5e291ea115923cf44dca0 upstream.
The revision 0x100300 was found for ALC662. It seems to work well
with patch_alc662.
BugLink: http://bugs.launchpad.net/bugs/877373
Tested-by: Shengyao Xue <Shengyao.xue@canonical.com>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Acked-by: Kailang Yang <kailang@realtek.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
sound/pci/hda/patch_realtek.c | 2 ++
1 file changed, 2 insertions(+)
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -17685,6 +17685,8 @@ static struct hda_codec_preset snd_hda_p
.patch = patch_alc882 },
{ .id = 0x10ec0662, .rev = 0x100101, .name = "ALC662 rev1",
.patch = patch_alc662 },
+ { .id = 0x10ec0662, .rev = 0x100300, .name = "ALC662 rev3",
+ .patch = patch_alc662 },
{ .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 },
{ .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 },
{ .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 },
^ permalink raw reply [flat|nested] 122+ messages in thread
* [057/107] x86: Fix compilation bug in kprobes twobyte_is_boostable
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (55 preceding siblings ...)
2011-11-02 22:14 ` [056/107] ALSA: HDA: Add new revision for ALC662 Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [058/107] epoll: fix spurious lockdep warnings Greg KH
` (49 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Josh Stone, Masami Hiramatsu, Jakub Jelinek
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 3784 bytes --]
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Josh Stone <jistone@redhat.com>
commit 315eb8a2a1b7f335d40ceeeb11b9e067475eb881 upstream.
When compiling an i386_defconfig kernel with gcc-4.6.1-9.fc15.i686, I
noticed a warning about the asm operand for test_bit in kprobes'
can_boost. I discovered that this caused only the first long of
twobyte_is_boostable[] to be output.
Jakub filed and fixed gcc PR50571 to correct the warning and this output
issue. But to solve it for less current gcc, we can make kprobes'
twobyte_is_boostable[] non-const, and it won't be optimized out.
Before:
CC arch/x86/kernel/kprobes.o
In file included from include/linux/bitops.h:22:0,
from include/linux/kernel.h:17,
from [...]/arch/x86/include/asm/percpu.h:44,
from [...]/arch/x86/include/asm/current.h:5,
from [...]/arch/x86/include/asm/processor.h:15,
from [...]/arch/x86/include/asm/atomic.h:6,
from include/linux/atomic.h:4,
from include/linux/mutex.h:18,
from include/linux/notifier.h:13,
from include/linux/kprobes.h:34,
from arch/x86/kernel/kprobes.c:43:
[...]/arch/x86/include/asm/bitops.h: In function ‘can_boost.part.1’:
[...]/arch/x86/include/asm/bitops.h:319:2: warning: use of memory input
without lvalue in asm operand 1 is deprecated [enabled by default]
$ objdump -rd arch/x86/kernel/kprobes.o | grep -A1 -w bt
551: 0f a3 05 00 00 00 00 bt %eax,0x0
554: R_386_32 .rodata.cst4
$ objdump -s -j .rodata.cst4 -j .data arch/x86/kernel/kprobes.o
arch/x86/kernel/kprobes.o: file format elf32-i386
Contents of section .data:
0000 48000000 00000000 00000000 00000000 H...............
Contents of section .rodata.cst4:
0000 4c030000 L...
Only a single long of twobyte_is_boostable[] is in the object file.
After, without the const on twobyte_is_boostable:
$ objdump -rd arch/x86/kernel/kprobes.o | grep -A1 -w bt
551: 0f a3 05 20 00 00 00 bt %eax,0x20
554: R_386_32 .data
$ objdump -s -j .rodata.cst4 -j .data arch/x86/kernel/kprobes.o
arch/x86/kernel/kprobes.o: file format elf32-i386
Contents of section .data:
0000 48000000 00000000 00000000 00000000 H...............
0010 00000000 00000000 00000000 00000000 ................
0020 4c030000 0f000200 ffff0000 ffcff0c0 L...............
0030 0000ffff 3bbbfff8 03ff2ebb 26bb2e77 ....;.......&..w
Now all 32 bytes are output into .data instead.
Signed-off-by: Josh Stone <jistone@redhat.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Jakub Jelinek <jakub@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/x86/kernel/kprobes.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/arch/x86/kernel/kprobes.c
+++ b/arch/x86/kernel/kprobes.c
@@ -83,8 +83,10 @@ DEFINE_PER_CPU(struct kprobe_ctlblk, kpr
/*
* Undefined/reserved opcodes, conditional jump, Opcode Extension
* Groups, and some special opcodes can not boost.
+ * This is non-const to keep gcc from statically optimizing it out, as
+ * variable_test_bit makes gcc think only *(unsigned long*) is used.
*/
-static const u32 twobyte_is_boostable[256 / 32] = {
+static u32 twobyte_is_boostable[256 / 32] = {
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
/* ---------------------------------------------- */
W(0x00, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0) | /* 00 */
^ permalink raw reply [flat|nested] 122+ messages in thread
* [058/107] epoll: fix spurious lockdep warnings
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (56 preceding siblings ...)
2011-11-02 22:14 ` [057/107] x86: Fix compilation bug in kprobes twobyte_is_boostable Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [059/107] usbmon vs. tcpdump: fix dropped packet count Greg KH
` (48 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Nelson Elhage, Jason Baron, Dave Jones,
Davide Libenzi
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Nelson Elhage <nelhage@nelhage.com>
commit d8805e633e054c816c47cb6e727c81f156d9253d upstream.
epoll can acquire recursively acquire ep->mtx on multiple "struct
eventpoll"s at once in the case where one epoll fd is monitoring another
epoll fd. This is perfectly OK, since we're careful about the lock
ordering, but it causes spurious lockdep warnings. Annotate the recursion
using mutex_lock_nested, and add a comment explaining the nesting rules
for good measure.
Recent versions of systemd are triggering this, and it can also be
demonstrated with the following trivial test program:
--------------------8<--------------------
int main(void) {
int e1, e2;
struct epoll_event evt = {
.events = EPOLLIN
};
e1 = epoll_create1(0);
e2 = epoll_create1(0);
epoll_ctl(e1, EPOLL_CTL_ADD, e2, &evt);
return 0;
}
--------------------8<--------------------
Reported-by: Paul Bolle <pebolle@tiscali.nl>
Tested-by: Paul Bolle <pebolle@tiscali.nl>
Signed-off-by: Nelson Elhage <nelhage@nelhage.com>
Acked-by: Jason Baron <jbaron@redhat.com>
Cc: Dave Jones <davej@redhat.com>
Cc: Davide Libenzi <davidel@xmailserver.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/eventpoll.c | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
--- a/fs/eventpoll.c
+++ b/fs/eventpoll.c
@@ -70,6 +70,15 @@
* simultaneous inserts (A into B and B into A) from racing and
* constructing a cycle without either insert observing that it is
* going to.
+ * It is necessary to acquire multiple "ep->mtx"es at once in the
+ * case when one epoll fd is added to another. In this case, we
+ * always acquire the locks in the order of nesting (i.e. after
+ * epoll_ctl(e1, EPOLL_CTL_ADD, e2), e1->mtx will always be acquired
+ * before e2->mtx). Since we disallow cycles of epoll file
+ * descriptors, this ensures that the mutexes are well-ordered. In
+ * order to communicate this nesting to lockdep, when walking a tree
+ * of epoll file descriptors, we use the current recursion depth as
+ * the lockdep subkey.
* It is possible to drop the "ep->mtx" and to use the global
* mutex "epmutex" (together with "ep->lock") to have it working,
* but having "ep->mtx" will make the interface more scalable.
@@ -452,13 +461,15 @@ static void ep_unregister_pollwait(struc
* @ep: Pointer to the epoll private data structure.
* @sproc: Pointer to the scan callback.
* @priv: Private opaque data passed to the @sproc callback.
+ * @depth: The current depth of recursive f_op->poll calls.
*
* Returns: The same integer error code returned by the @sproc callback.
*/
static int ep_scan_ready_list(struct eventpoll *ep,
int (*sproc)(struct eventpoll *,
struct list_head *, void *),
- void *priv)
+ void *priv,
+ int depth)
{
int error, pwake = 0;
unsigned long flags;
@@ -469,7 +480,7 @@ static int ep_scan_ready_list(struct eve
* We need to lock this because we could be hit by
* eventpoll_release_file() and epoll_ctl().
*/
- mutex_lock(&ep->mtx);
+ mutex_lock_nested(&ep->mtx, depth);
/*
* Steal the ready list, and re-init the original one to the
@@ -658,7 +669,7 @@ static int ep_read_events_proc(struct ev
static int ep_poll_readyevents_proc(void *priv, void *cookie, int call_nests)
{
- return ep_scan_ready_list(priv, ep_read_events_proc, NULL);
+ return ep_scan_ready_list(priv, ep_read_events_proc, NULL, call_nests + 1);
}
static unsigned int ep_eventpoll_poll(struct file *file, poll_table *wait)
@@ -724,7 +735,7 @@ void eventpoll_release_file(struct file
ep = epi->ep;
list_del_init(&epi->fllink);
- mutex_lock(&ep->mtx);
+ mutex_lock_nested(&ep->mtx, 0);
ep_remove(ep, epi);
mutex_unlock(&ep->mtx);
}
@@ -1120,7 +1131,7 @@ static int ep_send_events(struct eventpo
esed.maxevents = maxevents;
esed.events = events;
- return ep_scan_ready_list(ep, ep_send_events_proc, &esed);
+ return ep_scan_ready_list(ep, ep_send_events_proc, &esed, 0);
}
static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events,
@@ -1215,7 +1226,7 @@ static int ep_loop_check_proc(void *priv
struct rb_node *rbp;
struct epitem *epi;
- mutex_lock(&ep->mtx);
+ mutex_lock_nested(&ep->mtx, call_nests + 1);
for (rbp = rb_first(&ep->rbr); rbp; rbp = rb_next(rbp)) {
epi = rb_entry(rbp, struct epitem, rbn);
if (unlikely(is_file_epoll(epi->ffd.file))) {
@@ -1357,7 +1368,7 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, in
}
- mutex_lock(&ep->mtx);
+ mutex_lock_nested(&ep->mtx, 0);
/*
* Try to lookup the file inside our RB tree, Since we grabbed "mtx"
^ permalink raw reply [flat|nested] 122+ messages in thread
* [059/107] usbmon vs. tcpdump: fix dropped packet count
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (57 preceding siblings ...)
2011-11-02 22:14 ` [058/107] epoll: fix spurious lockdep warnings Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [060/107] USB: storage: Use normalized sense when emulating autosense Greg KH
` (47 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Johannes Stezenbach
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Johannes Stezenbach <js@sig21.net>
commit 236c448cb6e7f82096101e1ace4b77f8b38f82c8 upstream.
Report the number of dropped packets instead of zero
when using the binary usbmon interface with tcpdump.
# tcpdump -i usbmon1 -w dump
tcpdump: listening on usbmon1, link-type USB_LINUX_MMAPPED (USB with padded Linux header), capture size 65535 bytes
^C2155 packets captured
2155 packets received by filter
1019 packets dropped by kernel
Signed-off-by: Johannes Stezenbach <js@sig21.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/mon/mon_bin.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/usb/mon/mon_bin.c
+++ b/drivers/usb/mon/mon_bin.c
@@ -1041,7 +1041,7 @@ static int mon_bin_ioctl(struct inode *i
nevents = mon_bin_queued(rp);
sp = (struct mon_bin_stats __user *)arg;
- if (put_user(rp->cnt_lost, &sp->dropped))
+ if (put_user(ndropped, &sp->dropped))
return -EFAULT;
if (put_user(nevents, &sp->queued))
return -EFAULT;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [060/107] USB: storage: Use normalized sense when emulating autosense
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (58 preceding siblings ...)
2011-11-02 22:14 ` [059/107] usbmon vs. tcpdump: fix dropped packet count Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [061/107] USB: pid_ns: ensure pid is not freed during kill_pid_info_as_uid Greg KH
` (46 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Luben Tuikov, Alan Stern, Matthew Dharm
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Luben Tuikov <ltuikov@yahoo.com>
commit e16da02fcdf1c5e824432f88abf42623dafdf191 upstream.
This patch solves two things:
1) Enables autosense emulation code to correctly
interpret descriptor format sense data, and
2) Fixes a bug whereby the autosense emulation
code would overwrite descriptor format sense data
with SENSE KEY HARDWARE ERROR in fixed format, to
incorrectly look like this:
Oct 21 14:11:07 localhost kernel: sd 7:0:0:0: [sdc] Sense Key : Recovered Error [current] [descriptor]
Oct 21 14:11:07 localhost kernel: Descriptor sense data with sense descriptors (in hex):
Oct 21 14:11:07 localhost kernel: 72 01 04 1d 00 00 00 0e 09 0c 00 00 00 00 00 00
Oct 21 14:11:07 localhost kernel: 00 4f 00 c2 00 50
Oct 21 14:11:07 localhost kernel: sd 7:0:0:0: [sdc] ASC=0x4 ASCQ=0x1d
Signed-off-by: Luben Tuikov <ltuikov@yahoo.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: Matthew Dharm <mdharm-usb@one-eyed-alien.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/storage/transport.c | 34 +++++++++++++++++++---------------
1 file changed, 19 insertions(+), 15 deletions(-)
--- a/drivers/usb/storage/transport.c
+++ b/drivers/usb/storage/transport.c
@@ -693,6 +693,9 @@ void usb_stor_invoke_transport(struct sc
int temp_result;
struct scsi_eh_save ses;
int sense_size = US_SENSE_SIZE;
+ struct scsi_sense_hdr sshdr;
+ const u8 *scdd;
+ u8 fm_ili;
/* device supports and needs bigger sense buffer */
if (us->fflags & US_FL_SANE_SENSE)
@@ -776,32 +779,30 @@ Retry_Sense:
srb->sense_buffer[7] = (US_SENSE_SIZE - 8);
}
+ scsi_normalize_sense(srb->sense_buffer, SCSI_SENSE_BUFFERSIZE,
+ &sshdr);
+
US_DEBUGP("-- Result from auto-sense is %d\n", temp_result);
US_DEBUGP("-- code: 0x%x, key: 0x%x, ASC: 0x%x, ASCQ: 0x%x\n",
- srb->sense_buffer[0],
- srb->sense_buffer[2] & 0xf,
- srb->sense_buffer[12],
- srb->sense_buffer[13]);
+ sshdr.response_code, sshdr.sense_key,
+ sshdr.asc, sshdr.ascq);
#ifdef CONFIG_USB_STORAGE_DEBUG
- usb_stor_show_sense(
- srb->sense_buffer[2] & 0xf,
- srb->sense_buffer[12],
- srb->sense_buffer[13]);
+ usb_stor_show_sense(sshdr.sense_key, sshdr.asc, sshdr.ascq);
#endif
/* set the result so the higher layers expect this data */
srb->result = SAM_STAT_CHECK_CONDITION;
+ scdd = scsi_sense_desc_find(srb->sense_buffer,
+ SCSI_SENSE_BUFFERSIZE, 4);
+ fm_ili = (scdd ? scdd[3] : srb->sense_buffer[2]) & 0xA0;
+
/* We often get empty sense data. This could indicate that
* everything worked or that there was an unspecified
* problem. We have to decide which.
*/
- if ( /* Filemark 0, ignore EOM, ILI 0, no sense */
- (srb->sense_buffer[2] & 0xaf) == 0 &&
- /* No ASC or ASCQ */
- srb->sense_buffer[12] == 0 &&
- srb->sense_buffer[13] == 0) {
-
+ if (sshdr.sense_key == 0 && sshdr.asc == 0 && sshdr.ascq == 0 &&
+ fm_ili == 0) {
/* If things are really okay, then let's show that.
* Zero out the sense buffer so the higher layers
* won't realize we did an unsolicited auto-sense.
@@ -816,7 +817,10 @@ Retry_Sense:
*/
} else {
srb->result = DID_ERROR << 16;
- srb->sense_buffer[2] = HARDWARE_ERROR;
+ if ((sshdr.response_code & 0x72) == 0x72)
+ srb->sense_buffer[1] = HARDWARE_ERROR;
+ else
+ srb->sense_buffer[2] = HARDWARE_ERROR;
}
}
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [061/107] USB: pid_ns: ensure pid is not freed during kill_pid_info_as_uid
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (59 preceding siblings ...)
2011-11-02 22:14 ` [060/107] USB: storage: Use normalized sense when emulating autosense Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [062/107] usb: cdc-acm: Owen SI-30 support Greg KH
` (45 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Serge Hallyn
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Serge Hallyn <serge.hallyn@canonical.com>
commit aec01c5895051849ed842dc5b8794017a7751f28 upstream.
Alan Stern points out that after spin_unlock(&ps->lock) there is no
guarantee that ps->pid won't be freed. Since kill_pid_info_as_uid() is
called after the spin_unlock(), the pid passed to it must be pinned.
Reported-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/core/devio.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -403,7 +403,7 @@ static void async_completed(struct urb *
sinfo.si_errno = as->status;
sinfo.si_code = SI_ASYNCIO;
sinfo.si_addr = as->userurb;
- pid = as->pid;
+ pid = get_pid(as->pid);
uid = as->uid;
euid = as->euid;
secid = as->secid;
@@ -416,9 +416,11 @@ static void async_completed(struct urb *
cancel_bulk_urbs(ps, as->bulk_addr);
spin_unlock(&ps->lock);
- if (signr)
+ if (signr) {
kill_pid_info_as_uid(sinfo.si_signo, &sinfo, pid, uid,
euid, secid);
+ put_pid(pid);
+ }
wake_up(&ps->wait);
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [062/107] usb: cdc-acm: Owen SI-30 support
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (60 preceding siblings ...)
2011-11-02 22:14 ` [061/107] USB: pid_ns: ensure pid is not freed during kill_pid_info_as_uid Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [063/107] USB: add RESET_RESUME for webcams shown to be quirky Greg KH
` (44 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Denis Pershin
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Denis Pershin <dyp@perchine.com>
commit 65e52f41fa944cef2e6d4222b8c54f46cc575214 upstream.
here is the patch to support Owen SI-30 device.
This is a pulse counter controller.
http://www.owen.ru/en/catalog/93788515
usb-drivers output:
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=02(commc) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=03eb ProdID=0030 Rev=01.01
C: #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=0mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=00 Driver=cdc_acm
I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm
This patch is installed on my home system which receives data from this
controller connected to cold water counter.
Signed-off-by: Denis Pershin <dyp@perchine.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/class/cdc-acm.c | 3 +++
1 file changed, 3 insertions(+)
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -1606,6 +1606,9 @@ static struct usb_device_id acm_ids[] =
{ NOKIA_PCSUITE_ACM_INFO(0x03cd), }, /* Nokia C7 */
{ SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
+ /* Support for Owen devices */
+ { USB_DEVICE(0x03eb, 0x0030), }, /* Owen SI30 */
+
/* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
/* control interfaces without any protocol set */
^ permalink raw reply [flat|nested] 122+ messages in thread
* [063/107] USB: add RESET_RESUME for webcams shown to be quirky
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (61 preceding siblings ...)
2011-11-02 22:14 ` [062/107] usb: cdc-acm: Owen SI-30 support Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [064/107] USB: pl2303: add id for SMART device Greg KH
` (43 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Oliver Neukum
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Oliver Neukum <oneukum@suse.de>
commit 2394d67e446bf616a0885167d5f0d397bdacfdfc upstream.
The new runtime PM code has shown that many webcams suffer
from a race condition that may crash them upon resume.
Runtime PM is especially prone to show the problem because
it retains power to the cameras at all times. However
system suspension may also crash the devices and retain
power to the devices.
The only way to solve this problem without races is in
usbcore with the RESET_RESUME quirk.
Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/core/quirks.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -38,6 +38,24 @@ static const struct usb_device_id usb_qu
/* Creative SB Audigy 2 NX */
{ USB_DEVICE(0x041e, 0x3020), .driver_info = USB_QUIRK_RESET_RESUME },
+ /* Logitech Webcam C200 */
+ { USB_DEVICE(0x046d, 0x0802), .driver_info = USB_QUIRK_RESET_RESUME },
+
+ /* Logitech Webcam C250 */
+ { USB_DEVICE(0x046d, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME },
+
+ /* Logitech Webcam B/C500 */
+ { USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME },
+
+ /* Logitech Webcam Pro 9000 */
+ { USB_DEVICE(0x046d, 0x0809), .driver_info = USB_QUIRK_RESET_RESUME },
+
+ /* Logitech Webcam C310 */
+ { USB_DEVICE(0x046d, 0x081b), .driver_info = USB_QUIRK_RESET_RESUME },
+
+ /* Logitech Webcam C270 */
+ { USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME },
+
/* Logitech Harmony 700-series */
{ USB_DEVICE(0x046d, 0xc122), .driver_info = USB_QUIRK_DELAY_INIT },
@@ -69,6 +87,9 @@ static const struct usb_device_id usb_qu
{ USB_DEVICE(0x06a3, 0x0006), .driver_info =
USB_QUIRK_CONFIG_INTF_STRINGS },
+ /* Guillemot Webcam Hercules Dualpix Exchange*/
+ { USB_DEVICE(0x06f8, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME },
+
/* M-Systems Flash Disk Pioneers */
{ USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
^ permalink raw reply [flat|nested] 122+ messages in thread
* [064/107] USB: pl2303: add id for SMART device
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (62 preceding siblings ...)
2011-11-02 22:14 ` [063/107] USB: add RESET_RESUME for webcams shown to be quirky Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [065/107] USB: ftdi_sio: add PID for Sony Ericsson Urban Greg KH
` (42 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Eric Benoit
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Eric Benoit <eric@ecks.ca>
commit 598f0b703506da841d3459dc0c48506be14d1778 upstream.
Add vendor and product ID for the SMART USB to serial adapter. These
were meant to be used with their SMART Board whiteboards, but can be
re-purposed for other tasks. Tested and working (at at least 9600 bps).
Signed-off-by: Eric Benoit <eric@ecks.ca>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/serial/pl2303.c | 1 +
drivers/usb/serial/pl2303.h | 5 +++++
2 files changed, 6 insertions(+)
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -102,6 +102,7 @@ static struct usb_device_id id_table []
{ USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) },
{ USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) },
{ USB_DEVICE(WINCHIPHEAD_VENDOR_ID, WINCHIPHEAD_USBSER_PRODUCT_ID) },
+ { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
{ } /* Terminating entry */
};
--- a/drivers/usb/serial/pl2303.h
+++ b/drivers/usb/serial/pl2303.h
@@ -148,3 +148,8 @@
/* WinChipHead USB->RS 232 adapter */
#define WINCHIPHEAD_VENDOR_ID 0x4348
#define WINCHIPHEAD_USBSER_PRODUCT_ID 0x5523
+
+/* SMART USB Serial Adapter */
+#define SMART_VENDOR_ID 0x0b8c
+#define SMART_PRODUCT_ID 0x2303
+
^ permalink raw reply [flat|nested] 122+ messages in thread
* [065/107] USB: ftdi_sio: add PID for Sony Ericsson Urban
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (63 preceding siblings ...)
2011-11-02 22:14 ` [064/107] USB: pl2303: add id for SMART device Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [066/107] USB: ftdi_sio: Support TI/Luminary Micro Stellaris BD-ICDI Board Greg KH
` (41 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Hakan Kvist, Oskar Andero
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Hakan Kvist <hakan.kvist@sonyericsson.com>
commit 74bdf22b5c3858b06af46f19d05c23e76c40a3bb upstream.
Add PID 0xfc8a, 0xfc8b for device Sony Ericsson Urban
Signed-off-by: Hakan Kvist <hakan.kvist@sonyericsson.com>
Signed-off-by: Oskar Andero <oskar.andero@sonyericsson.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/serial/ftdi_sio.c | 2 ++
drivers/usb/serial/ftdi_sio_ids.h | 6 ++++--
2 files changed, 6 insertions(+), 2 deletions(-)
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -209,6 +209,8 @@ static struct usb_device_id id_table_com
{ USB_DEVICE(FTDI_VID, FTDI_XF_640_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_XF_642_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_DSS20_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_URBAN_0_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_URBAN_1_PID) },
{ USB_DEVICE(FTDI_NF_RIC_VID, FTDI_NF_RIC_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_VNHCPCUSB_D_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_MTXORB_0_PID) },
--- a/drivers/usb/serial/ftdi_sio_ids.h
+++ b/drivers/usb/serial/ftdi_sio_ids.h
@@ -419,9 +419,11 @@
#define PROTEGO_SPECIAL_4 0xFC73 /* special/unknown device */
/*
- * DSS-20 Sync Station for Sony Ericsson P800
+ * Sony Ericsson product ids
*/
-#define FTDI_DSS20_PID 0xFC82
+#define FTDI_DSS20_PID 0xFC82 /* DSS-20 Sync Station for Sony Ericsson P800 */
+#define FTDI_URBAN_0_PID 0xFC8A /* Sony Ericsson Urban, uart #0 */
+#define FTDI_URBAN_1_PID 0xFC8B /* Sony Ericsson Urban, uart #1 */
/* www.irtrans.de device */
#define FTDI_IRTRANS_PID 0xFC60 /* Product Id */
^ permalink raw reply [flat|nested] 122+ messages in thread
* [066/107] USB: ftdi_sio: Support TI/Luminary Micro Stellaris BD-ICDI Board
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (64 preceding siblings ...)
2011-11-02 22:14 ` [065/107] USB: ftdi_sio: add PID for Sony Ericsson Urban Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [067/107] QE/FHCI: fixed the CONTROL bug Greg KH
` (40 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Peter Stuge
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Peter Stuge <peter@stuge.se>
commit 3687f641307eeff6f7fe31a88dc39db88e89238b upstream.
Some Stellaris evaluation kits have the JTAG/SWD FTDI chip onboard,
and some, like EK-LM3S9B90, come with a separate In-Circuit Debugger
Interface Board. The ICDI board can also be used stand-alone, for
other boards and chips than the kit it came with. The ICDI has both
old style 20-pin JTAG connector and new style JTAG/SWD 10-pin 1.27mm
pitch connector.
Tested with EK-LM3S9B90, where the BD-ICDI board is included.
Signed-off-by: Peter Stuge <peter@stuge.se>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/serial/ftdi_sio.c | 2 ++
drivers/usb/serial/ftdi_sio_ids.h | 1 +
2 files changed, 3 insertions(+)
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -748,6 +748,8 @@ static struct usb_device_id id_table_com
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
{ USB_DEVICE(FTDI_VID, LMI_LM3S_EVAL_BOARD_PID),
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
+ { USB_DEVICE(FTDI_VID, LMI_LM3S_ICDI_BOARD_PID),
+ .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
{ USB_DEVICE(FTDI_VID, FTDI_TURTELIZER_PID),
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
{ USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) },
--- a/drivers/usb/serial/ftdi_sio_ids.h
+++ b/drivers/usb/serial/ftdi_sio_ids.h
@@ -53,6 +53,7 @@
/* FTDI 2332C Dual channel device, side A=245 FIFO (JTAG), Side B=RS232 UART */
#define LMI_LM3S_DEVEL_BOARD_PID 0xbcd8
#define LMI_LM3S_EVAL_BOARD_PID 0xbcd9
+#define LMI_LM3S_ICDI_BOARD_PID 0xbcda
#define FTDI_TURTELIZER_PID 0xBDC8 /* JTAG/RS-232 adapter by egnite GmBH */
^ permalink raw reply [flat|nested] 122+ messages in thread
* [067/107] QE/FHCI: fixed the CONTROL bug
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (65 preceding siblings ...)
2011-11-02 22:14 ` [066/107] USB: ftdi_sio: Support TI/Luminary Micro Stellaris BD-ICDI Board Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [068/107] Update email address for stable patch submission Greg KH
` (39 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Jerry Huang
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jerry Huang <r66093@freescale.com>
commit 273d23574f9dacd9c63c80e7d63639a669aad441 upstream.
For USB CONTROL transaction, when the data length is zero,
the IN package is needed to finish this transaction in status stage.
Signed-off-by: Jerry Huang <r66093@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/host/fhci-sched.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
--- a/drivers/usb/host/fhci-sched.c
+++ b/drivers/usb/host/fhci-sched.c
@@ -1,7 +1,7 @@
/*
* Freescale QUICC Engine USB Host Controller Driver
*
- * Copyright (c) Freescale Semicondutor, Inc. 2006.
+ * Copyright (c) Freescale Semicondutor, Inc. 2006, 2011.
* Shlomi Gridish <gridish@freescale.com>
* Jerry Huang <Chang-Ming.Huang@freescale.com>
* Copyright (c) Logic Product Development, Inc. 2007
@@ -810,9 +810,11 @@ void fhci_queue_urb(struct fhci_hcd *fhc
ed->dev_addr = usb_pipedevice(urb->pipe);
ed->max_pkt_size = usb_maxpacket(urb->dev, urb->pipe,
usb_pipeout(urb->pipe));
+ /* setup stage */
td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++, FHCI_TA_SETUP,
USB_TD_TOGGLE_DATA0, urb->setup_packet, 8, 0, 0, true);
+ /* data stage */
if (data_len > 0) {
td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++,
usb_pipeout(urb->pipe) ? FHCI_TA_OUT :
@@ -820,9 +822,18 @@ void fhci_queue_urb(struct fhci_hcd *fhc
USB_TD_TOGGLE_DATA1, data, data_len, 0, 0,
true);
}
- td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++,
- usb_pipeout(urb->pipe) ? FHCI_TA_IN : FHCI_TA_OUT,
- USB_TD_TOGGLE_DATA1, data, 0, 0, 0, true);
+
+ /* status stage */
+ if (data_len > 0)
+ td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++,
+ (usb_pipeout(urb->pipe) ? FHCI_TA_IN :
+ FHCI_TA_OUT),
+ USB_TD_TOGGLE_DATA1, data, 0, 0, 0, true);
+ else
+ td = fhci_td_fill(fhci, urb, urb_priv, ed, cnt++,
+ FHCI_TA_IN,
+ USB_TD_TOGGLE_DATA1, data, 0, 0, 0, true);
+
urb_state = US_CTRL_SETUP;
break;
case FHCI_TF_ISO:
^ permalink raw reply [flat|nested] 122+ messages in thread
* [068/107] Update email address for stable patch submission
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (66 preceding siblings ...)
2011-11-02 22:14 ` [067/107] QE/FHCI: fixed the CONTROL bug Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-03 8:08 ` Christoph Biedl
2011-11-02 22:14 ` [069/107] kobj_uevent: Ignore if some listeners cannot handle message Greg KH
` (38 subsequent siblings)
106 siblings, 1 reply; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Josh Boyer
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Josh Boyer <jwboyer@redhat.com>
commit 5fa224295f0e0358c8bc0e5390702338df889def upstream.
The stable@vger.kernel.org email address has been replaced with the
stable@vger.kernel.org mailing list. Change the stable kernel rules to
reference the new list instead of the semi-defunct email alias.
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
Documentation/stable_kernel_rules.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/Documentation/stable_kernel_rules.txt
+++ b/Documentation/stable_kernel_rules.txt
@@ -25,13 +25,13 @@ Rules on what kind of patches are accept
Procedure for submitting patches to the -stable tree:
- Send the patch, after verifying that it follows the above rules, to
- stable@vger.kernel.org.
+ stable@vger.kernel.org.
- The sender will receive an ACK when the patch has been accepted into the
queue, or a NAK if the patch is rejected. This response might take a few
days, according to the developer's schedules.
- If accepted, the patch will be added to the -stable queue, for review by
other developers and by the relevant subsystem maintainer.
- - If the stable@vger.kernel.org address is added to a patch, when it goes into
+ - If the stable@vger.kernel.org address is added to a patch, when it goes into
Linus's tree it will automatically be emailed to the stable team.
- Security patches should not be sent to this alias, but instead to the
documented security@kernel.org address.
^ permalink raw reply [flat|nested] 122+ messages in thread
* [069/107] kobj_uevent: Ignore if some listeners cannot handle message
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (67 preceding siblings ...)
2011-11-02 22:14 ` [068/107] Update email address for stable patch submission Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [070/107] kmod: prevent kmod_loop_msg overflow in __request_module() Greg KH
` (37 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Milan Broz, Kay Sievers
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Milan Broz <mbroz@redhat.com>
commit ebf4127cd677e9781b450e44dfaaa1cc595efcaa upstream.
kobject_uevent() uses a multicast socket and should ignore
if one of listeners cannot handle messages or nobody is
listening at all.
Easily reproducible when a process in system is cloned
with CLONE_NEWNET flag.
(See also http://article.gmane.org/gmane.linux.kernel.device-mapper.dm-crypt/5256)
Signed-off-by: Milan Broz <mbroz@redhat.com>
Acked-by: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
lib/kobject_uevent.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/lib/kobject_uevent.c
+++ b/lib/kobject_uevent.c
@@ -235,7 +235,7 @@ int kobject_uevent_env(struct kobject *k
retval = netlink_broadcast(uevent_sock, skb, 0, 1,
GFP_KERNEL);
/* ENOBUFS should be handled in userspace */
- if (retval == -ENOBUFS)
+ if (retval == -ENOBUFS || retval == -ESRCH)
retval = 0;
} else
retval = -ENOMEM;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [070/107] kmod: prevent kmod_loop_msg overflow in __request_module()
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (68 preceding siblings ...)
2011-11-02 22:14 ` [069/107] kobj_uevent: Ignore if some listeners cannot handle message Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [071/107] time: Change jiffies_to_clock_t() argument type to unsigned long Greg KH
` (36 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Jiri Kosina, Rusty Russell
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jiri Kosina <jkosina@suse.cz>
commit 37252db6aa576c34fd794a5a54fb32d7a8b3a07a upstream.
Due to post-increment in condition of kmod_loop_msg in __request_module(),
the system log can be spammed by much more than 5 instances of the 'runaway
loop' message if the number of events triggering it makes the kmod_loop_msg
to overflow.
Fix that by making sure we never increment it past the threshold.
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
kernel/kmod.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/kernel/kmod.c
+++ b/kernel/kmod.c
@@ -106,10 +106,12 @@ int __request_module(bool wait, const ch
atomic_inc(&kmod_concurrent);
if (atomic_read(&kmod_concurrent) > max_modprobes) {
/* We may be blaming an innocent here, but unlikely */
- if (kmod_loop_msg++ < 5)
+ if (kmod_loop_msg < 5) {
printk(KERN_ERR
"request_module: runaway loop modprobe %s\n",
module_name);
+ kmod_loop_msg++;
+ }
atomic_dec(&kmod_concurrent);
return -ENOMEM;
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [071/107] time: Change jiffies_to_clock_t() argument type to unsigned long
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (69 preceding siblings ...)
2011-11-02 22:14 ` [070/107] kmod: prevent kmod_loop_msg overflow in __request_module() Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [072/107] nfsd4: Remove check for a 32-bit cookie in nfsd4_readdir() Greg KH
` (35 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, hank, John Stultz, Thomas Gleixner,
Ingo Molnar
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: hank <pyu@redhat.com>
commit cbbc719fccdb8cbd87350a05c0d33167c9b79365 upstream.
The parameter's origin type is long. On an i386 architecture, it can
easily be larger than 0x80000000, causing this function to convert it
to a sign-extended u64 type.
Change the type to unsigned long so we get the correct result.
Signed-off-by: hank <pyu@redhat.com>
Cc: John Stultz <john.stultz@linaro.org>
[ build fix ]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
include/linux/jiffies.h | 2 +-
kernel/time.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -303,7 +303,7 @@ extern void jiffies_to_timespec(const un
extern unsigned long timeval_to_jiffies(const struct timeval *value);
extern void jiffies_to_timeval(const unsigned long jiffies,
struct timeval *value);
-extern clock_t jiffies_to_clock_t(long x);
+extern clock_t jiffies_to_clock_t(unsigned long x);
extern unsigned long clock_t_to_jiffies(unsigned long x);
extern u64 jiffies_64_to_clock_t(u64 x);
extern u64 nsec_to_clock_t(u64 x);
--- a/kernel/time.c
+++ b/kernel/time.c
@@ -593,7 +593,7 @@ EXPORT_SYMBOL(jiffies_to_timeval);
/*
* Convert jiffies/jiffies_64 to clock_t and back.
*/
-clock_t jiffies_to_clock_t(long x)
+clock_t jiffies_to_clock_t(unsigned long x)
{
#if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
# if HZ < USER_HZ
^ permalink raw reply [flat|nested] 122+ messages in thread
* [072/107] nfsd4: Remove check for a 32-bit cookie in nfsd4_readdir()
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (70 preceding siblings ...)
2011-11-02 22:14 ` [071/107] time: Change jiffies_to_clock_t() argument type to unsigned long Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [073/107] nfsd4: ignore WANT bits in open downgrade Greg KH
` (34 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Bernd Schubert, J. Bruce Fields
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de>
commit 832023bffb4b493f230be901f681020caf3ed1f8 upstream.
Fan Yong <yong.fan@whamcloud.com> noticed setting
FMODE_32bithash wouldn't work with nfsd v4, as
nfsd4_readdir() checks for 32 bit cookies. However, according to RFC 3530
cookies have a 64 bit type and cookies are also defined as u64 in
'struct nfsd4_readdir'. So remove the test for >32-bit values.
Signed-off-by: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/nfsd/nfs4proc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -688,7 +688,7 @@ nfsd4_readdir(struct svc_rqst *rqstp, st
readdir->rd_bmval[1] &= nfsd_suppattrs1(cstate->minorversion);
readdir->rd_bmval[2] &= nfsd_suppattrs2(cstate->minorversion);
- if ((cookie > ~(u32)0) || (cookie == 1) || (cookie == 2) ||
+ if ((cookie == 1) || (cookie == 2) ||
(cookie == 0 && memcmp(readdir->rd_verf.data, zeroverf.data, NFS4_VERIFIER_SIZE)))
return nfserr_bad_cookie;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [073/107] nfsd4: ignore WANT bits in open downgrade
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (71 preceding siblings ...)
2011-11-02 22:14 ` [072/107] nfsd4: Remove check for a 32-bit cookie in nfsd4_readdir() Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [074/107] ASoC: wm8940: Properly set codec->dapm.bias_level Greg KH
` (33 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, J. Bruce Fields
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: "J. Bruce Fields" <bfields@redhat.com>
commit c30e92df30d7d5fe65262fbce5d1b7de675fe34e upstream.
We don't use WANT bits yet--and sending them can probably trigger a
BUG() further down.
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/nfsd/nfs4state.c | 2 ++
1 file changed, 2 insertions(+)
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -3079,6 +3079,8 @@ nfsd4_open_downgrade(struct svc_rqst *rq
if (!access_valid(od->od_share_access, cstate->minorversion)
|| !deny_valid(od->od_share_deny))
return nfserr_inval;
+ /* We don't yet support WANT bits: */
+ od->od_share_access &= NFS4_SHARE_ACCESS_MASK;
nfs4_lock_state();
if ((status = nfs4_preprocess_seqid_op(cstate,
^ permalink raw reply [flat|nested] 122+ messages in thread
* [074/107] ASoC: wm8940: Properly set codec->dapm.bias_level
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (72 preceding siblings ...)
2011-11-02 22:14 ` [073/107] nfsd4: ignore WANT bits in open downgrade Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [075/107] ASoC: ak4642: fixup cache register table Greg KH
` (32 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Axel Lin, Mark Brown
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Axel Lin <axel.lin@gmail.com>
commit 5927f94700e860ae27ff24e7f3bc9e4f7b9922eb upstream.
Reported-by: Chris Paulson-Ellis <chris@edesix.com>
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
sound/soc/codecs/wm8940.c | 2 ++
1 file changed, 2 insertions(+)
--- a/sound/soc/codecs/wm8940.c
+++ b/sound/soc/codecs/wm8940.c
@@ -473,6 +473,8 @@ static int wm8940_set_bias_level(struct
break;
}
+ codec->dapm.bias_level = level;
+
return ret;
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [075/107] ASoC: ak4642: fixup cache register table
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (73 preceding siblings ...)
2011-11-02 22:14 ` [074/107] ASoC: wm8940: Properly set codec->dapm.bias_level Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [076/107] ASoC: ak4535: " Greg KH
` (31 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Kuninori Morimoto, Mark Brown
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
commit 19b115e523208a926813751aac8934cf3fc6085e upstream.
ak4642 register was 8bit, but cache table was defined as 16bit.
ak4642 doesn't work correctry without this patch.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
sound/soc/codecs/ak4642.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -93,17 +93,17 @@ static struct snd_soc_codec *ak4642_code
/*
* ak4642 register cache
*/
-static const u16 ak4642_reg[AK4642_CACHEREGNUM] = {
- 0x0000, 0x0000, 0x0001, 0x0000,
- 0x0002, 0x0000, 0x0000, 0x0000,
- 0x00e1, 0x00e1, 0x0018, 0x0000,
- 0x00e1, 0x0018, 0x0011, 0x0008,
- 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000,
+static const u8 ak4642_reg[AK4642_CACHEREGNUM] = {
+ 0x00, 0x00, 0x01, 0x00,
+ 0x02, 0x00, 0x00, 0x00,
+ 0xe1, 0xe1, 0x18, 0x00,
+ 0xe1, 0x18, 0x11, 0x08,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00,
};
/*
^ permalink raw reply [flat|nested] 122+ messages in thread
* [076/107] ASoC: ak4535: fixup cache register table
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (74 preceding siblings ...)
2011-11-02 22:14 ` [075/107] ASoC: ak4642: fixup cache register table Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [077/107] KVM: s390: check cpu_id prior to using it Greg KH
` (30 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Axel Lin, Mark Brown
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Axel Lin <axel.lin@gmail.com>
commit 7c04241acbdaf97f1448dcccd27ea0fcd1a57684 upstream.
ak4535_reg should be 8bit, but cache table is defined as 16bit.
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
sound/soc/codecs/ak4535.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
--- a/sound/soc/codecs/ak4535.c
+++ b/sound/soc/codecs/ak4535.c
@@ -40,11 +40,11 @@ struct ak4535_priv {
/*
* ak4535 register cache
*/
-static const u16 ak4535_reg[AK4535_CACHEREGNUM] = {
- 0x0000, 0x0080, 0x0000, 0x0003,
- 0x0002, 0x0000, 0x0011, 0x0001,
- 0x0000, 0x0040, 0x0036, 0x0010,
- 0x0000, 0x0000, 0x0057, 0x0000,
+static const u8 ak4535_reg[AK4535_CACHEREGNUM] = {
+ 0x00, 0x80, 0x00, 0x03,
+ 0x02, 0x00, 0x11, 0x01,
+ 0x00, 0x40, 0x36, 0x10,
+ 0x00, 0x00, 0x57, 0x00,
};
/*
^ permalink raw reply [flat|nested] 122+ messages in thread
* [077/107] KVM: s390: check cpu_id prior to using it
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (75 preceding siblings ...)
2011-11-02 22:14 ` [076/107] ASoC: ak4535: " Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [078/107] [S390] ccwgroup: move attributes to attribute group Greg KH
` (29 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Carsten Otte, Christian Borntraeger,
Marcelo Tosatti
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Carsten Otte <cotte@de.ibm.com>
commit 4d47555a80495657161a7e71ec3014ff2021e450 upstream.
We use the cpu id provided by userspace as array index here. Thus we
clearly need to check it first. Ooops.
Signed-off-by: Carsten Otte <cotte@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/s390/kvm/kvm-s390.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -308,11 +308,17 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu
struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
unsigned int id)
{
- struct kvm_vcpu *vcpu = kzalloc(sizeof(struct kvm_vcpu), GFP_KERNEL);
- int rc = -ENOMEM;
+ struct kvm_vcpu *vcpu;
+ int rc = -EINVAL;
+ if (id >= KVM_MAX_VCPUS)
+ goto out;
+
+ rc = -ENOMEM;
+
+ vcpu = kzalloc(sizeof(struct kvm_vcpu), GFP_KERNEL);
if (!vcpu)
- goto out_nomem;
+ goto out;
vcpu->arch.sie_block = (struct kvm_s390_sie_block *)
get_zeroed_page(GFP_KERNEL);
@@ -347,7 +353,7 @@ out_free_sie_block:
free_page((unsigned long)(vcpu->arch.sie_block));
out_free_cpu:
kfree(vcpu);
-out_nomem:
+out:
return ERR_PTR(rc);
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [078/107] [S390] ccwgroup: move attributes to attribute group
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (76 preceding siblings ...)
2011-11-02 22:14 ` [077/107] KVM: s390: check cpu_id prior to using it Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [079/107] iommu/amd: Fix wrong shift direction Greg KH
` (28 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Sebastian Ott, Martin Schwidefsky
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Sebastian Ott <sebott@linux.vnet.ibm.com>
commit dbdf1afcaaabe83dea15a3cb9b9013e73ae3b1ad upstream.
Put sysfs attributes of ccwgroup devices in an attribute group to
ensure that these attributes are actually present when userspace
is notified via uevents.
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/s390/cio/ccwgroup.c | 42 ++++++++++++++++++++++--------------------
1 file changed, 22 insertions(+), 20 deletions(-)
--- a/drivers/s390/cio/ccwgroup.c
+++ b/drivers/s390/cio/ccwgroup.c
@@ -66,6 +66,12 @@ __ccwgroup_remove_symlinks(struct ccwgro
}
+static ssize_t ccwgroup_online_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count);
+static ssize_t ccwgroup_online_show(struct device *dev,
+ struct device_attribute *attr,
+ char *buf);
/*
* Provide an 'ungroup' attribute so the user can remove group devices no
* longer needed or accidentially created. Saves memory :)
@@ -112,6 +118,20 @@ out:
}
static DEVICE_ATTR(ungroup, 0200, NULL, ccwgroup_ungroup_store);
+static DEVICE_ATTR(online, 0644, ccwgroup_online_show, ccwgroup_online_store);
+
+static struct attribute *ccwgroup_attrs[] = {
+ &dev_attr_online.attr,
+ &dev_attr_ungroup.attr,
+ NULL,
+};
+static struct attribute_group ccwgroup_attr_group = {
+ .attrs = ccwgroup_attrs,
+};
+static const struct attribute_group *ccwgroup_attr_groups[] = {
+ &ccwgroup_attr_group,
+ NULL,
+};
static void
ccwgroup_release (struct device *dev)
@@ -280,25 +300,17 @@ int ccwgroup_create_from_string(struct d
}
dev_set_name(&gdev->dev, "%s", dev_name(&gdev->cdev[0]->dev));
-
+ gdev->dev.groups = ccwgroup_attr_groups;
rc = device_add(&gdev->dev);
if (rc)
goto error;
get_device(&gdev->dev);
- rc = device_create_file(&gdev->dev, &dev_attr_ungroup);
-
- if (rc) {
- device_unregister(&gdev->dev);
- goto error;
- }
-
rc = __ccwgroup_create_symlinks(gdev);
if (!rc) {
mutex_unlock(&gdev->reg_mutex);
put_device(&gdev->dev);
return 0;
}
- device_remove_file(&gdev->dev, &dev_attr_ungroup);
device_unregister(&gdev->dev);
error:
for (i = 0; i < num_devices; i++)
@@ -408,7 +420,7 @@ ccwgroup_online_store (struct device *de
int ret;
if (!dev->driver)
- return -ENODEV;
+ return -EINVAL;
gdev = to_ccwgroupdev(dev);
gdrv = to_ccwgroupdrv(dev->driver);
@@ -441,8 +453,6 @@ ccwgroup_online_show (struct device *dev
return sprintf(buf, online ? "1\n" : "0\n");
}
-static DEVICE_ATTR(online, 0644, ccwgroup_online_show, ccwgroup_online_store);
-
static int
ccwgroup_probe (struct device *dev)
{
@@ -454,12 +464,7 @@ ccwgroup_probe (struct device *dev)
gdev = to_ccwgroupdev(dev);
gdrv = to_ccwgroupdrv(dev->driver);
- if ((ret = device_create_file(dev, &dev_attr_online)))
- return ret;
-
ret = gdrv->probe ? gdrv->probe(gdev) : -ENODEV;
- if (ret)
- device_remove_file(dev, &dev_attr_online);
return ret;
}
@@ -470,9 +475,6 @@ ccwgroup_remove (struct device *dev)
struct ccwgroup_device *gdev;
struct ccwgroup_driver *gdrv;
- device_remove_file(dev, &dev_attr_online);
- device_remove_file(dev, &dev_attr_ungroup);
-
if (!dev->driver)
return 0;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [079/107] iommu/amd: Fix wrong shift direction
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (77 preceding siblings ...)
2011-11-02 22:14 ` [078/107] [S390] ccwgroup: move attributes to attribute group Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [080/107] carminefb: Fix module parameters permissions Greg KH
` (27 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Joerg Roedel
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Joerg Roedel <joerg.roedel@amd.com>
commit fcd0861db1cf4e6ed99f60a815b7b72c2ed36ea4 upstream.
The shift direction was wrong because the function takes a
page number and i is the address is the loop.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/x86/kernel/amd_iommu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/arch/x86/kernel/amd_iommu.c
+++ b/arch/x86/kernel/amd_iommu.c
@@ -842,7 +842,7 @@ static int alloc_new_range(struct amd_io
if (!pte || !IOMMU_PTE_PRESENT(*pte))
continue;
- dma_ops_reserve_addresses(dma_dom, i << PAGE_SHIFT, 1);
+ dma_ops_reserve_addresses(dma_dom, i >> PAGE_SHIFT, 1);
}
update_domain(&dma_dom->domain);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [080/107] carminefb: Fix module parameters permissions
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (78 preceding siblings ...)
2011-11-02 22:14 ` [079/107] iommu/amd: Fix wrong shift direction Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [081/107] [media] uvcvideo: Set alternate setting 0 on resume if the bus has been reset Greg KH
` (26 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Jean Delvare, Paul Mundt, Sebastian Siewior
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jean Delvare <jdelvare@suse.de>
commit c84c14224bbca6ec60d5851fcc87be0e34df2f44 upstream.
The third parameter of module_param is supposed to be an octal value.
The missing leading "0" causes the following:
$ ls -l /sys/module/carminefb/parameters/
total 0
-rw-rwxr-- 1 root root 4096 Jul 8 08:55 fb_displays
-rw-rwxr-- 1 root root 4096 Jul 8 08:55 fb_mode
-rw-rwxr-- 1 root root 4096 Jul 8 08:55 fb_mode_str
After fixing the perm parameter, we get the expected:
$ ls -l /sys/module/carminefb/parameters/
total 0
-r--r--r-- 1 root root 4096 Jul 8 08:56 fb_displays
-r--r--r-- 1 root root 4096 Jul 8 08:56 fb_mode
-r--r--r-- 1 root root 4096 Jul 8 08:56 fb_mode_str
Signed-off-by: Jean Delvare <jdelvare@suse.de>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Sebastian Siewior <bigeasy@linutronix.de>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/video/carminefb.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
--- a/drivers/video/carminefb.c
+++ b/drivers/video/carminefb.c
@@ -31,11 +31,11 @@
#define CARMINEFB_DEFAULT_VIDEO_MODE 1
static unsigned int fb_mode = CARMINEFB_DEFAULT_VIDEO_MODE;
-module_param(fb_mode, uint, 444);
+module_param(fb_mode, uint, 0444);
MODULE_PARM_DESC(fb_mode, "Initial video mode as integer.");
static char *fb_mode_str;
-module_param(fb_mode_str, charp, 444);
+module_param(fb_mode_str, charp, 0444);
MODULE_PARM_DESC(fb_mode_str, "Initial video mode in characters.");
/*
@@ -45,7 +45,7 @@ MODULE_PARM_DESC(fb_mode_str, "Initial v
* 0b010 Display 1
*/
static int fb_displays = CARMINE_USE_DISPLAY0 | CARMINE_USE_DISPLAY1;
-module_param(fb_displays, int, 444);
+module_param(fb_displays, int, 0444);
MODULE_PARM_DESC(fb_displays, "Bit mode, which displays are used");
struct carmine_hw {
^ permalink raw reply [flat|nested] 122+ messages in thread
* [081/107] [media] uvcvideo: Set alternate setting 0 on resume if the bus has been reset
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (79 preceding siblings ...)
2011-11-02 22:14 ` [080/107] carminefb: Fix module parameters permissions Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [082/107] [media] tuner_xc2028: Allow selection of the frequency adjustment code for XC3028 Greg KH
` (25 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Ming Lei, Laurent Pinchart,
Mauro Carvalho Chehab
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Ming Lei <tom.leiming@gmail.com>
commit d59a7b1dbce8b972ec2dc9fcaaae0bfa23687423 upstream.
If the bus has been reset on resume, set the alternate setting to 0.
This should be the default value, but some devices crash or otherwise
misbehave if they don't receive a SET_INTERFACE request before any other
video control request.
Microdia's 0c45:6437 camera has been found to require this change or it
will stop sending video data after resume.
uvc_video.c]
Signed-off-by: Ming Lei <ming.lei@canonical.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/media/video/uvc/uvc_driver.c | 2 +-
drivers/media/video/uvc/uvc_video.c | 10 +++++++++-
drivers/media/video/uvc/uvcvideo.h | 2 +-
3 files changed, 11 insertions(+), 3 deletions(-)
--- a/drivers/media/video/uvc/uvc_driver.c
+++ b/drivers/media/video/uvc/uvc_driver.c
@@ -1889,7 +1889,7 @@ static int __uvc_resume(struct usb_inter
list_for_each_entry(stream, &dev->streams, list) {
if (stream->intf == intf)
- return uvc_video_resume(stream);
+ return uvc_video_resume(stream, reset);
}
uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface "
--- a/drivers/media/video/uvc/uvc_video.c
+++ b/drivers/media/video/uvc/uvc_video.c
@@ -1024,10 +1024,18 @@ int uvc_video_suspend(struct uvc_streami
* buffers, making sure userspace applications are notified of the problem
* instead of waiting forever.
*/
-int uvc_video_resume(struct uvc_streaming *stream)
+int uvc_video_resume(struct uvc_streaming *stream, int reset)
{
int ret;
+ /* If the bus has been reset on resume, set the alternate setting to 0.
+ * This should be the default value, but some devices crash or otherwise
+ * misbehave if they don't receive a SET_INTERFACE request before any
+ * other video control request.
+ */
+ if (reset)
+ usb_set_interface(stream->dev->udev, stream->intfnum, 0);
+
stream->frozen = 0;
ret = uvc_commit_video(stream, &stream->ctrl);
--- a/drivers/media/video/uvc/uvcvideo.h
+++ b/drivers/media/video/uvc/uvcvideo.h
@@ -608,7 +608,7 @@ extern const struct v4l2_file_operations
/* Video */
extern int uvc_video_init(struct uvc_streaming *stream);
extern int uvc_video_suspend(struct uvc_streaming *stream);
-extern int uvc_video_resume(struct uvc_streaming *stream);
+extern int uvc_video_resume(struct uvc_streaming *stream, int reset);
extern int uvc_video_enable(struct uvc_streaming *stream, int enable);
extern int uvc_probe_video(struct uvc_streaming *stream,
struct uvc_streaming_control *probe);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [082/107] [media] tuner_xc2028: Allow selection of the frequency adjustment code for XC3028
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (80 preceding siblings ...)
2011-11-02 22:14 ` [081/107] [media] uvcvideo: Set alternate setting 0 on resume if the bus has been reset Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [083/107] plat-mxc: iomux-v3.h: implicitly enable pull-up/down when thats desired Greg KH
` (24 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Mauro Carvalho Chehab
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Mauro Carvalho Chehab <mchehab@redhat.com>
commit 9bed77ee2fb46b74782d0d9d14b92e9d07f3df6e upstream.
This device is not using the proper demod IF. Instead of using the
IF macro, it is specifying a IF frequency. This doesn't work, as xc3028
needs to load an specific SCODE for the tuner. In this case, there's
no IF table for 5 MHz.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/media/video/cx23885/cx23885-dvb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/media/video/cx23885/cx23885-dvb.c
+++ b/drivers/media/video/cx23885/cx23885-dvb.c
@@ -693,7 +693,7 @@ static int dvb_register(struct cx23885_t
static struct xc2028_ctrl ctl = {
.fname = XC3028L_DEFAULT_FIRMWARE,
.max_len = 64,
- .demod = 5000,
+ .demod = XC3028_FE_DIBCOM52,
/* This is true for all demods with
v36 firmware? */
.type = XC2028_D2633,
^ permalink raw reply [flat|nested] 122+ messages in thread
* [083/107] plat-mxc: iomux-v3.h: implicitly enable pull-up/down when thats desired
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (81 preceding siblings ...)
2011-11-02 22:14 ` [082/107] [media] tuner_xc2028: Allow selection of the frequency adjustment code for XC3028 Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [084/107] um: fix ubd cow size Greg KH
` (23 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Paul Fertser, Sascha Hauer
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Paul Fertser <fercerpav@gmail.com>
commit 6571534b600b8ca1936ff5630b9e0947f21faf16 upstream.
To configure pads during the initialisation a set of special constants
is used, e.g.
#define MX25_PAD_FEC_MDIO__FEC_MDIO IOMUX_PAD(0x3c4, 0x1cc, 0x10, 0, 0, PAD_CTL_HYS | PAD_CTL_PUS_22K_UP)
The problem is that no pull-up/down is getting activated unless both
PAD_CTL_PUE (pull-up enable) and PAD_CTL_PKE (pull/keeper module
enable) set. This is clearly stated in the i.MX25 datasheet and is
confirmed by the measurements on hardware. This leads to some rather
hard to understand bugs such as misdetecting an absent ethernet PHY (a
real bug i had), unstable data transfer etc. This might affect mx25,
mx35, mx50, mx51 and mx53 SoCs.
It's reasonable to expect that if the pullup value is specified, the
intention was to have it actually active, so we implicitly add the
needed bits.
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/arm/plat-mxc/include/mach/iomux-v3.h | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
--- a/arch/arm/plat-mxc/include/mach/iomux-v3.h
+++ b/arch/arm/plat-mxc/include/mach/iomux-v3.h
@@ -73,11 +73,11 @@ struct pad_desc {
#define PAD_CTL_HYS (1 << 8)
#define PAD_CTL_PKE (1 << 7)
-#define PAD_CTL_PUE (1 << 6)
-#define PAD_CTL_PUS_100K_DOWN (0 << 4)
-#define PAD_CTL_PUS_47K_UP (1 << 4)
-#define PAD_CTL_PUS_100K_UP (2 << 4)
-#define PAD_CTL_PUS_22K_UP (3 << 4)
+#define PAD_CTL_PUE (1 << 6 | PAD_CTL_PKE)
+#define PAD_CTL_PUS_100K_DOWN (0 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_47K_UP (1 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_100K_UP (2 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_22K_UP (3 << 4 | PAD_CTL_PUE)
#define PAD_CTL_ODE (1 << 3)
^ permalink raw reply [flat|nested] 122+ messages in thread
* [084/107] um: fix ubd cow size
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (82 preceding siblings ...)
2011-11-02 22:14 ` [083/107] plat-mxc: iomux-v3.h: implicitly enable pull-up/down when thats desired Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [085/107] cfq: calculate the seek_mean per cfq_queue not per cfq_io_context Greg KH
` (22 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Richard Weinberger
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Richard Weinberger <richard@nod.at>
commit 8535639810e578960233ad39def3ac2157b0c3ec upstream.
ubd_file_size() cannot use ubd_dev->cow.file because at this time
ubd_dev->cow.file is not initialized.
Therefore, ubd_file_size() will always report a wrong disk size when
COW files are used.
Reading from /dev/ubd* would crash the kernel.
We have to read the correct disk size from the COW file's backing
file.
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/um/drivers/ubd_kern.c | 31 ++++++++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
--- a/arch/um/drivers/ubd_kern.c
+++ b/arch/um/drivers/ubd_kern.c
@@ -510,8 +510,37 @@ __uml_exitcall(kill_io_thread);
static inline int ubd_file_size(struct ubd *ubd_dev, __u64 *size_out)
{
char *file;
+ int fd;
+ int err;
- file = ubd_dev->cow.file ? ubd_dev->cow.file : ubd_dev->file;
+ __u32 version;
+ __u32 align;
+ char *backing_file;
+ time_t mtime;
+ unsigned long long size;
+ int sector_size;
+ int bitmap_offset;
+
+ if (ubd_dev->file && ubd_dev->cow.file) {
+ file = ubd_dev->cow.file;
+
+ goto out;
+ }
+
+ fd = os_open_file(ubd_dev->file, global_openflags, 0);
+ if (fd < 0)
+ return fd;
+
+ err = read_cow_header(file_reader, &fd, &version, &backing_file, \
+ &mtime, &size, §or_size, &align, &bitmap_offset);
+ os_close_file(fd);
+
+ if(err == -EINVAL)
+ file = ubd_dev->file;
+ else
+ file = backing_file;
+
+out:
return os_file_size(file, size_out);
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [085/107] cfq: calculate the seek_mean per cfq_queue not per cfq_io_context
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (83 preceding siblings ...)
2011-11-02 22:14 ` [084/107] um: fix ubd cow size Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [086/107] cfq: merge cooperating cfq_queues Greg KH
` (21 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Jeff Moyer, Jens Axboe, Suresh Jayaraman
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Moyer <jmoyer@redhat.com>
commit b2c18e1e08a5a9663094d57bb4be2f02226ee61c upstream.
async cfq_queue's are already shared between processes within the same
priority, and forthcoming patches will change the mapping of cic to sync
cfq_queue from 1:1 to 1:N. So, calculate the seekiness of a process
based on the cfq_queue instead of the cfq_io_context.
Signed-off-by: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
block/cfq-iosched.c | 68 ++++++++++++++++++++++------------------------
include/linux/iocontext.h | 5 ---
2 files changed, 33 insertions(+), 40 deletions(-)
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -112,6 +112,11 @@ struct cfq_queue {
unsigned short ioprio, org_ioprio;
unsigned short ioprio_class, org_ioprio_class;
+ unsigned int seek_samples;
+ u64 seek_total;
+ sector_t seek_mean;
+ sector_t last_request_pos;
+
pid_t pid;
};
@@ -967,16 +972,16 @@ static inline sector_t cfq_dist_from_las
return cfqd->last_position - blk_rq_pos(rq);
}
-#define CIC_SEEK_THR 8 * 1024
-#define CIC_SEEKY(cic) ((cic)->seek_mean > CIC_SEEK_THR)
+#define CFQQ_SEEK_THR 8 * 1024
+#define CFQQ_SEEKY(cfqq) ((cfqq)->seek_mean > CFQQ_SEEK_THR)
-static inline int cfq_rq_close(struct cfq_data *cfqd, struct request *rq)
+static inline int cfq_rq_close(struct cfq_data *cfqd, struct cfq_queue *cfqq,
+ struct request *rq)
{
- struct cfq_io_context *cic = cfqd->active_cic;
- sector_t sdist = cic->seek_mean;
+ sector_t sdist = cfqq->seek_mean;
- if (!sample_valid(cic->seek_samples))
- sdist = CIC_SEEK_THR;
+ if (!sample_valid(cfqq->seek_samples))
+ sdist = CFQQ_SEEK_THR;
return cfq_dist_from_last(cfqd, rq) <= sdist;
}
@@ -1005,7 +1010,7 @@ static struct cfq_queue *cfqq_close(stru
* will contain the closest sector.
*/
__cfqq = rb_entry(parent, struct cfq_queue, p_node);
- if (cfq_rq_close(cfqd, __cfqq->next_rq))
+ if (cfq_rq_close(cfqd, cur_cfqq, __cfqq->next_rq))
return __cfqq;
if (blk_rq_pos(__cfqq->next_rq) < sector)
@@ -1016,7 +1021,7 @@ static struct cfq_queue *cfqq_close(stru
return NULL;
__cfqq = rb_entry(node, struct cfq_queue, p_node);
- if (cfq_rq_close(cfqd, __cfqq->next_rq))
+ if (cfq_rq_close(cfqd, cur_cfqq, __cfqq->next_rq))
return __cfqq;
return NULL;
@@ -1039,13 +1044,6 @@ static struct cfq_queue *cfq_close_coope
struct cfq_queue *cfqq;
/*
- * A valid cfq_io_context is necessary to compare requests against
- * the seek_mean of the current cfqq.
- */
- if (!cfqd->active_cic)
- return NULL;
-
- /*
* We should notice if some of the queues are cooperating, eg
* working closely on the same area of the disk. In that case,
* we can group them together and don't waste time idling.
@@ -1115,7 +1113,7 @@ static void cfq_arm_slice_timer(struct c
* seeks. so allow a little bit of time for him to submit a new rq
*/
sl = cfqd->cfq_slice_idle;
- if (sample_valid(cic->seek_samples) && CIC_SEEKY(cic))
+ if (sample_valid(cfqq->seek_samples) && CFQQ_SEEKY(cfqq))
sl = min(sl, msecs_to_jiffies(CFQ_MIN_TT));
mod_timer(&cfqd->idle_slice_timer, jiffies + sl);
@@ -1958,33 +1956,33 @@ cfq_update_io_thinktime(struct cfq_data
}
static void
-cfq_update_io_seektime(struct cfq_data *cfqd, struct cfq_io_context *cic,
+cfq_update_io_seektime(struct cfq_data *cfqd, struct cfq_queue *cfqq,
struct request *rq)
{
sector_t sdist;
u64 total;
- if (!cic->last_request_pos)
+ if (!cfqq->last_request_pos)
sdist = 0;
- else if (cic->last_request_pos < blk_rq_pos(rq))
- sdist = blk_rq_pos(rq) - cic->last_request_pos;
+ else if (cfqq->last_request_pos < blk_rq_pos(rq))
+ sdist = blk_rq_pos(rq) - cfqq->last_request_pos;
else
- sdist = cic->last_request_pos - blk_rq_pos(rq);
+ sdist = cfqq->last_request_pos - blk_rq_pos(rq);
/*
* Don't allow the seek distance to get too large from the
* odd fragment, pagein, etc
*/
- if (cic->seek_samples <= 60) /* second&third seek */
- sdist = min(sdist, (cic->seek_mean * 4) + 2*1024*1024);
+ if (cfqq->seek_samples <= 60) /* second&third seek */
+ sdist = min(sdist, (cfqq->seek_mean * 4) + 2*1024*1024);
else
- sdist = min(sdist, (cic->seek_mean * 4) + 2*1024*64);
+ sdist = min(sdist, (cfqq->seek_mean * 4) + 2*1024*64);
- cic->seek_samples = (7*cic->seek_samples + 256) / 8;
- cic->seek_total = (7*cic->seek_total + (u64)256*sdist) / 8;
- total = cic->seek_total + (cic->seek_samples/2);
- do_div(total, cic->seek_samples);
- cic->seek_mean = (sector_t)total;
+ cfqq->seek_samples = (7*cfqq->seek_samples + 256) / 8;
+ cfqq->seek_total = (7*cfqq->seek_total + (u64)256*sdist) / 8;
+ total = cfqq->seek_total + (cfqq->seek_samples/2);
+ do_div(total, cfqq->seek_samples);
+ cfqq->seek_mean = (sector_t)total;
}
/*
@@ -2006,11 +2004,11 @@ cfq_update_idle_window(struct cfq_data *
enable_idle = old_idle = cfq_cfqq_idle_window(cfqq);
if (!atomic_read(&cic->ioc->nr_tasks) || !cfqd->cfq_slice_idle ||
- (!cfqd->cfq_latency && cfqd->hw_tag && CIC_SEEKY(cic)))
+ (!cfqd->cfq_latency && cfqd->hw_tag && CFQQ_SEEKY(cfqq)))
enable_idle = 0;
else if (sample_valid(cic->ttime_samples)) {
unsigned int slice_idle = cfqd->cfq_slice_idle;
- if (sample_valid(cic->seek_samples) && CIC_SEEKY(cic))
+ if (sample_valid(cfqq->seek_samples) && CFQQ_SEEKY(cfqq))
slice_idle = msecs_to_jiffies(CFQ_MIN_TT);
if (cic->ttime_mean > slice_idle)
enable_idle = 0;
@@ -2077,7 +2075,7 @@ cfq_should_preempt(struct cfq_data *cfqd
* if this request is as-good as one we would expect from the
* current cfqq, let it preempt
*/
- if (cfq_rq_close(cfqd, rq) && (!cfq_cfqq_coop(new_cfqq) ||
+ if (cfq_rq_close(cfqd, cfqq, rq) && (!cfq_cfqq_coop(new_cfqq) ||
cfqd->busy_queues == 1)) {
/*
* Mark new queue coop_preempt, so its coop flag will not be
@@ -2127,10 +2125,10 @@ cfq_rq_enqueued(struct cfq_data *cfqd, s
cfqq->meta_pending++;
cfq_update_io_thinktime(cfqd, cic);
- cfq_update_io_seektime(cfqd, cic, rq);
+ cfq_update_io_seektime(cfqd, cfqq, rq);
cfq_update_idle_window(cfqd, cfqq, cic);
- cic->last_request_pos = blk_rq_pos(rq) + blk_rq_sectors(rq);
+ cfqq->last_request_pos = blk_rq_pos(rq) + blk_rq_sectors(rq);
if (cfqq == cfqd->active_queue) {
/*
--- a/include/linux/iocontext.h
+++ b/include/linux/iocontext.h
@@ -40,16 +40,11 @@ struct cfq_io_context {
struct io_context *ioc;
unsigned long last_end_request;
- sector_t last_request_pos;
unsigned long ttime_total;
unsigned long ttime_samples;
unsigned long ttime_mean;
- unsigned int seek_samples;
- u64 seek_total;
- sector_t seek_mean;
-
struct list_head queue_list;
struct hlist_node cic_list;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [086/107] cfq: merge cooperating cfq_queues
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (84 preceding siblings ...)
2011-11-02 22:14 ` [085/107] cfq: calculate the seek_mean per cfq_queue not per cfq_io_context Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [087/107] cfq: change the meaning of the cfqq_coop flag Greg KH
` (20 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Jeff Moyer, Jens Axboe, Suresh Jayaraman
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Moyer <jmoyer@redhat.com>
commit df5fe3e8e13883f58dc97489076bbcc150789a21 upstream.
When cooperating cfq_queues are detected currently, they are allowed to
skip ahead in the scheduling order. It is much more efficient to
automatically share the cfq_queue data structure between cooperating processes.
Performance of the read-test2 benchmark (which is written to emulate the
dump(8) utility) went from 12MB/s to 90MB/s on my SATA disk. NFS servers
with multiple nfsd threads also saw performance increases.
Signed-off-by: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
block/cfq-iosched.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 87 insertions(+), 2 deletions(-)
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -118,6 +118,8 @@ struct cfq_queue {
sector_t last_request_pos;
pid_t pid;
+
+ struct cfq_queue *new_cfqq;
};
/*
@@ -1052,6 +1054,12 @@ static struct cfq_queue *cfq_close_coope
if (!cfqq)
return NULL;
+ /*
+ * It only makes sense to merge sync queues.
+ */
+ if (!cfq_cfqq_sync(cfqq))
+ return NULL;
+
if (cfq_cfqq_coop(cfqq))
return NULL;
@@ -1173,6 +1181,43 @@ cfq_prio_to_maxrq(struct cfq_data *cfqd,
}
/*
+ * Must be called with the queue_lock held.
+ */
+static int cfqq_process_refs(struct cfq_queue *cfqq)
+{
+ int process_refs, io_refs;
+
+ io_refs = cfqq->allocated[READ] + cfqq->allocated[WRITE];
+ process_refs = atomic_read(&cfqq->ref) - io_refs;
+ BUG_ON(process_refs < 0);
+ return process_refs;
+}
+
+static void cfq_setup_merge(struct cfq_queue *cfqq, struct cfq_queue *new_cfqq)
+{
+ int process_refs;
+ struct cfq_queue *__cfqq;
+
+ /* Avoid a circular list and skip interim queue merges */
+ while ((__cfqq = new_cfqq->new_cfqq)) {
+ if (__cfqq == cfqq)
+ return;
+ new_cfqq = __cfqq;
+ }
+
+ process_refs = cfqq_process_refs(cfqq);
+ /*
+ * If the process for the cfqq has gone away, there is no
+ * sense in merging the queues.
+ */
+ if (process_refs == 0)
+ return;
+
+ cfqq->new_cfqq = new_cfqq;
+ atomic_add(process_refs, &new_cfqq->ref);
+}
+
+/*
* Select a queue for service. If we have a current active queue,
* check whether to continue servicing it, or retrieve and set a new one.
*/
@@ -1201,11 +1246,14 @@ static struct cfq_queue *cfq_select_queu
* If another queue has a request waiting within our mean seek
* distance, let it run. The expire code will check for close
* cooperators and put the close queue at the front of the service
- * tree.
+ * tree. If possible, merge the expiring queue with the new cfqq.
*/
new_cfqq = cfq_close_cooperator(cfqd, cfqq, 0);
- if (new_cfqq)
+ if (new_cfqq) {
+ if (!cfqq->new_cfqq)
+ cfq_setup_merge(cfqq, new_cfqq);
goto expire;
+ }
/*
* No requests pending. If the active queue still has requests in
@@ -1516,11 +1564,29 @@ static void cfq_free_io_context(struct i
static void cfq_exit_cfqq(struct cfq_data *cfqd, struct cfq_queue *cfqq)
{
+ struct cfq_queue *__cfqq, *next;
+
if (unlikely(cfqq == cfqd->active_queue)) {
__cfq_slice_expired(cfqd, cfqq, 0);
cfq_schedule_dispatch(cfqd);
}
+ /*
+ * If this queue was scheduled to merge with another queue, be
+ * sure to drop the reference taken on that queue (and others in
+ * the merge chain). See cfq_setup_merge and cfq_merge_cfqqs.
+ */
+ __cfqq = cfqq->new_cfqq;
+ while (__cfqq) {
+ if (__cfqq == cfqq) {
+ WARN(1, "cfqq->new_cfqq loop detected\n");
+ break;
+ }
+ next = __cfqq->new_cfqq;
+ cfq_put_queue(__cfqq);
+ __cfqq = next;
+ }
+
cfq_put_queue(cfqq);
}
@@ -2342,6 +2408,16 @@ static void cfq_put_request(struct reque
}
}
+static struct cfq_queue *
+cfq_merge_cfqqs(struct cfq_data *cfqd, struct cfq_io_context *cic,
+ struct cfq_queue *cfqq)
+{
+ cfq_log_cfqq(cfqd, cfqq, "merging with queue %p", cfqq->new_cfqq);
+ cic_set_cfqq(cic, cfqq->new_cfqq, 1);
+ cfq_put_queue(cfqq);
+ return cic_to_cfqq(cic, 1);
+}
+
/*
* Allocate cfq data structures associated with this request.
*/
@@ -2368,6 +2444,15 @@ cfq_set_request(struct request_queue *q,
if (!cfqq || cfqq == &cfqd->oom_cfqq) {
cfqq = cfq_get_queue(cfqd, is_sync, cic->ioc, gfp_mask);
cic_set_cfqq(cic, cfqq, is_sync);
+ } else {
+ /*
+ * Check to see if this queue is scheduled to merge with
+ * another, closely cooperating queue. The merging of
+ * queues happens here as it must be done in process context.
+ * The reference on new_cfqq was taken in merge_cfqqs.
+ */
+ if (cfqq->new_cfqq)
+ cfqq = cfq_merge_cfqqs(cfqd, cic, cfqq);
}
cfqq->allocated[rw]++;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [087/107] cfq: change the meaning of the cfqq_coop flag
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (85 preceding siblings ...)
2011-11-02 22:14 ` [086/107] cfq: merge cooperating cfq_queues Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [088/107] cfq: break apart merged cfqqs if they stop cooperating Greg KH
` (19 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Jeff Moyer, Jens Axboe, Suresh Jayaraman
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Moyer <jmoyer@redhat.com>
commit b3b6d0408c953524f979468562e7e210d8634150 upstream
The flag used to indicate that a cfqq was allowed to jump ahead in the
scheduling order due to submitting a request close to the queue that
just executed. Since closely cooperating queues are now merged, the flag
holds little meaning. Change it to indicate that multiple queues were
merged. This will later be used to allow the breaking up of merged queues
when they are no longer cooperating.
Signed-off-by: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
block/cfq-iosched.c | 20 ++++++--------------
1 file changed, 6 insertions(+), 14 deletions(-)
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -202,7 +202,7 @@ enum cfqq_state_flags {
CFQ_CFQQ_FLAG_prio_changed, /* task priority has changed */
CFQ_CFQQ_FLAG_slice_new, /* no requests dispatched in slice */
CFQ_CFQQ_FLAG_sync, /* synchronous queue */
- CFQ_CFQQ_FLAG_coop, /* has done a coop jump of the queue */
+ CFQ_CFQQ_FLAG_coop, /* cfqq is shared */
CFQ_CFQQ_FLAG_coop_preempt, /* coop preempt */
};
@@ -952,11 +952,8 @@ static struct cfq_queue *cfq_get_next_qu
static struct cfq_queue *cfq_set_active_queue(struct cfq_data *cfqd,
struct cfq_queue *cfqq)
{
- if (!cfqq) {
+ if (!cfqq)
cfqq = cfq_get_next_queue(cfqd);
- if (cfqq && !cfq_cfqq_coop_preempt(cfqq))
- cfq_clear_cfqq_coop(cfqq);
- }
if (cfqq)
cfq_clear_cfqq_coop_preempt(cfqq);
@@ -1040,8 +1037,7 @@ static struct cfq_queue *cfqq_close(stru
* assumption.
*/
static struct cfq_queue *cfq_close_cooperator(struct cfq_data *cfqd,
- struct cfq_queue *cur_cfqq,
- bool probe)
+ struct cfq_queue *cur_cfqq)
{
struct cfq_queue *cfqq;
@@ -1060,11 +1056,6 @@ static struct cfq_queue *cfq_close_coope
if (!cfq_cfqq_sync(cfqq))
return NULL;
- if (cfq_cfqq_coop(cfqq))
- return NULL;
-
- if (!probe)
- cfq_mark_cfqq_coop(cfqq);
return cfqq;
}
@@ -1248,7 +1239,7 @@ static struct cfq_queue *cfq_select_queu
* cooperators and put the close queue at the front of the service
* tree. If possible, merge the expiring queue with the new cfqq.
*/
- new_cfqq = cfq_close_cooperator(cfqd, cfqq, 0);
+ new_cfqq = cfq_close_cooperator(cfqd, cfqq);
if (new_cfqq) {
if (!cfqq->new_cfqq)
cfq_setup_merge(cfqq, new_cfqq);
@@ -2313,7 +2304,7 @@ static void cfq_completed_request(struct
*/
if (cfq_slice_used(cfqq) || cfq_class_idle(cfqq))
cfq_slice_expired(cfqd, 1);
- else if (cfqq_empty && !cfq_close_cooperator(cfqd, cfqq, 1) &&
+ else if (cfqq_empty && !cfq_close_cooperator(cfqd, cfqq) &&
sync && !rq_noidle(rq))
cfq_arm_slice_timer(cfqd);
}
@@ -2414,6 +2405,7 @@ cfq_merge_cfqqs(struct cfq_data *cfqd, s
{
cfq_log_cfqq(cfqd, cfqq, "merging with queue %p", cfqq->new_cfqq);
cic_set_cfqq(cic, cfqq->new_cfqq, 1);
+ cfq_mark_cfqq_coop(cfqq->new_cfqq);
cfq_put_queue(cfqq);
return cic_to_cfqq(cic, 1);
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [088/107] cfq: break apart merged cfqqs if they stop cooperating
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (86 preceding siblings ...)
2011-11-02 22:14 ` [087/107] cfq: change the meaning of the cfqq_coop flag Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [089/107] cfq-iosched: get rid of the coop_preempt flag Greg KH
` (18 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Jeff Moyer, Jens Axboe, Suresh Jayaraman
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Moyer <jmoyer@redhat.com>
commit e6c5bc737ab71e4af6025ef7d150f5a26ae5f146 upstream.
cfq_queues are merged if they are issuing requests within the mean seek
distance of one another. This patch detects when the coopearting stops and
breaks the queues back up.
Signed-off-by: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
block/cfq-iosched.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 76 insertions(+), 3 deletions(-)
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -38,6 +38,12 @@ static int cfq_slice_idle = HZ / 125;
*/
#define CFQ_MIN_TT (2)
+/*
+ * Allow merged cfqqs to perform this amount of seeky I/O before
+ * deciding to break the queues up again.
+ */
+#define CFQQ_COOP_TOUT (HZ)
+
#define CFQ_SLICE_SCALE (5)
#define CFQ_HW_QUEUE_MIN (5)
@@ -116,6 +122,7 @@ struct cfq_queue {
u64 seek_total;
sector_t seek_mean;
sector_t last_request_pos;
+ unsigned long seeky_start;
pid_t pid;
@@ -1041,6 +1048,11 @@ static struct cfq_queue *cfq_close_coope
{
struct cfq_queue *cfqq;
+ if (!cfq_cfqq_sync(cur_cfqq))
+ return NULL;
+ if (CFQQ_SEEKY(cur_cfqq))
+ return NULL;
+
/*
* We should notice if some of the queues are cooperating, eg
* working closely on the same area of the disk. In that case,
@@ -1055,6 +1067,8 @@ static struct cfq_queue *cfq_close_coope
*/
if (!cfq_cfqq_sync(cfqq))
return NULL;
+ if (CFQQ_SEEKY(cfqq))
+ return NULL;
return cfqq;
}
@@ -1186,7 +1200,7 @@ static int cfqq_process_refs(struct cfq_
static void cfq_setup_merge(struct cfq_queue *cfqq, struct cfq_queue *new_cfqq)
{
- int process_refs;
+ int process_refs, new_process_refs;
struct cfq_queue *__cfqq;
/* Avoid a circular list and skip interim queue merges */
@@ -1204,8 +1218,17 @@ static void cfq_setup_merge(struct cfq_q
if (process_refs == 0)
return;
- cfqq->new_cfqq = new_cfqq;
- atomic_add(process_refs, &new_cfqq->ref);
+ /*
+ * Merge in the direction of the lesser amount of work.
+ */
+ new_process_refs = cfqq_process_refs(new_cfqq);
+ if (new_process_refs >= process_refs) {
+ cfqq->new_cfqq = new_cfqq;
+ atomic_add(process_refs, &new_cfqq->ref);
+ } else {
+ new_cfqq->new_cfqq = cfqq;
+ atomic_add(new_process_refs, &cfqq->ref);
+ }
}
/*
@@ -2040,6 +2063,19 @@ cfq_update_io_seektime(struct cfq_data *
total = cfqq->seek_total + (cfqq->seek_samples/2);
do_div(total, cfqq->seek_samples);
cfqq->seek_mean = (sector_t)total;
+
+ /*
+ * If this cfqq is shared between multiple processes, check to
+ * make sure that those processes are still issuing I/Os within
+ * the mean seek distance. If not, it may be time to break the
+ * queues apart again.
+ */
+ if (cfq_cfqq_coop(cfqq)) {
+ if (CFQQ_SEEKY(cfqq) && !cfqq->seeky_start)
+ cfqq->seeky_start = jiffies;
+ else if (!CFQQ_SEEKY(cfqq))
+ cfqq->seeky_start = 0;
+ }
}
/*
@@ -2410,6 +2446,32 @@ cfq_merge_cfqqs(struct cfq_data *cfqd, s
return cic_to_cfqq(cic, 1);
}
+static int should_split_cfqq(struct cfq_queue *cfqq)
+{
+ if (cfqq->seeky_start &&
+ time_after(jiffies, cfqq->seeky_start + CFQQ_COOP_TOUT))
+ return 1;
+ return 0;
+}
+
+/*
+ * Returns NULL if a new cfqq should be allocated, or the old cfqq if this
+ * was the last process referring to said cfqq.
+ */
+static struct cfq_queue *
+split_cfqq(struct cfq_io_context *cic, struct cfq_queue *cfqq)
+{
+ if (cfqq_process_refs(cfqq) == 1) {
+ cfqq->seeky_start = 0;
+ cfqq->pid = current->pid;
+ cfq_clear_cfqq_coop(cfqq);
+ return cfqq;
+ }
+
+ cic_set_cfqq(cic, NULL, 1);
+ cfq_put_queue(cfqq);
+ return NULL;
+}
/*
* Allocate cfq data structures associated with this request.
*/
@@ -2432,12 +2494,23 @@ cfq_set_request(struct request_queue *q,
if (!cic)
goto queue_fail;
+new_queue:
cfqq = cic_to_cfqq(cic, is_sync);
if (!cfqq || cfqq == &cfqd->oom_cfqq) {
cfqq = cfq_get_queue(cfqd, is_sync, cic->ioc, gfp_mask);
cic_set_cfqq(cic, cfqq, is_sync);
} else {
/*
+ * If the queue was seeky for too long, break it apart.
+ */
+ if (cfq_cfqq_coop(cfqq) && should_split_cfqq(cfqq)) {
+ cfq_log_cfqq(cfqd, cfqq, "breaking apart cfqq");
+ cfqq = split_cfqq(cic, cfqq);
+ if (!cfqq)
+ goto new_queue;
+ }
+
+ /*
* Check to see if this queue is scheduled to merge with
* another, closely cooperating queue. The merging of
* queues happens here as it must be done in process context.
^ permalink raw reply [flat|nested] 122+ messages in thread
* [089/107] cfq-iosched: get rid of the coop_preempt flag
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (87 preceding siblings ...)
2011-11-02 22:14 ` [088/107] cfq: break apart merged cfqqs if they stop cooperating Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [090/107] cfq: Dont allow queue merges for queues that have no process references Greg KH
` (17 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Jens Axboe, Suresh Jayaraman
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jens Axboe <jens.axboe@oracle.com>
commit e00ef7997195e4f8e10593727a6286e2e2802159 upstream
We need to rework this logic post the cooperating cfq_queue merging,
for now just get rid of it and Jeff Moyer will fix the fall out.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
block/cfq-iosched.c | 15 +--------------
1 file changed, 1 insertion(+), 14 deletions(-)
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -210,7 +210,6 @@ enum cfqq_state_flags {
CFQ_CFQQ_FLAG_slice_new, /* no requests dispatched in slice */
CFQ_CFQQ_FLAG_sync, /* synchronous queue */
CFQ_CFQQ_FLAG_coop, /* cfqq is shared */
- CFQ_CFQQ_FLAG_coop_preempt, /* coop preempt */
};
#define CFQ_CFQQ_FNS(name) \
@@ -237,7 +236,6 @@ CFQ_CFQQ_FNS(prio_changed);
CFQ_CFQQ_FNS(slice_new);
CFQ_CFQQ_FNS(sync);
CFQ_CFQQ_FNS(coop);
-CFQ_CFQQ_FNS(coop_preempt);
#undef CFQ_CFQQ_FNS
#define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \
@@ -962,9 +960,6 @@ static struct cfq_queue *cfq_set_active_
if (!cfqq)
cfqq = cfq_get_next_queue(cfqd);
- if (cfqq)
- cfq_clear_cfqq_coop_preempt(cfqq);
-
__cfq_set_active_queue(cfqd, cfqq);
return cfqq;
}
@@ -2168,16 +2163,8 @@ cfq_should_preempt(struct cfq_data *cfqd
* if this request is as-good as one we would expect from the
* current cfqq, let it preempt
*/
- if (cfq_rq_close(cfqd, cfqq, rq) && (!cfq_cfqq_coop(new_cfqq) ||
- cfqd->busy_queues == 1)) {
- /*
- * Mark new queue coop_preempt, so its coop flag will not be
- * cleared when new queue gets scheduled at the very first time
- */
- cfq_mark_cfqq_coop_preempt(new_cfqq);
- cfq_mark_cfqq_coop(new_cfqq);
+ if (cfq_rq_close(cfqd, cfqq, rq))
return true;
- }
return false;
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [090/107] cfq: Dont allow queue merges for queues that have no process references
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (88 preceding siblings ...)
2011-11-02 22:14 ` [089/107] cfq-iosched: get rid of the coop_preempt flag Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [091/107] xen/timer: Missing IRQF_NO_SUSPEND in timer code broke suspend Greg KH
` (16 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Jeff Moyer, Jens Axboe, Suresh Jayaraman
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Jeff Moyer <jmoyer@redhat.com>
commit c10b61f0910466b4b99c266a7d76ac4390743fb5 upstream.
Hi,
A user reported a kernel bug when running a particular program that did
the following:
created 32 threads
- each thread took a mutex, grabbed a global offset, added a buffer size
to that offset, released the lock
- read from the given offset in the file
- created a new thread to do the same
- exited
The result is that cfq's close cooperator logic would trigger, as the
threads were issuing I/O within the mean seek distance of one another.
This workload managed to routinely trigger a use after free bug when
walking the list of merge candidates for a particular cfqq
(cfqq->new_cfqq). The logic used for merging queues looks like this:
static void cfq_setup_merge(struct cfq_queue *cfqq, struct cfq_queue *new_cfqq)
{
int process_refs, new_process_refs;
struct cfq_queue *__cfqq;
/* Avoid a circular list and skip interim queue merges */
while ((__cfqq = new_cfqq->new_cfqq)) {
if (__cfqq == cfqq)
return;
new_cfqq = __cfqq;
}
process_refs = cfqq_process_refs(cfqq);
/*
* If the process for the cfqq has gone away, there is no
* sense in merging the queues.
*/
if (process_refs == 0)
return;
/*
* Merge in the direction of the lesser amount of work.
*/
new_process_refs = cfqq_process_refs(new_cfqq);
if (new_process_refs >= process_refs) {
cfqq->new_cfqq = new_cfqq;
atomic_add(process_refs, &new_cfqq->ref);
} else {
new_cfqq->new_cfqq = cfqq;
atomic_add(new_process_refs, &cfqq->ref);
}
}
When a merge candidate is found, we add the process references for the
queue with less references to the queue with more. The actual merging
of queues happens when a new request is issued for a given cfqq. In the
case of the test program, it only does a single pread call to read in
1MB, so the actual merge never happens.
Normally, this is fine, as when the queue exits, we simply drop the
references we took on the other cfqqs in the merge chain:
/*
* If this queue was scheduled to merge with another queue, be
* sure to drop the reference taken on that queue (and others in
* the merge chain). See cfq_setup_merge and cfq_merge_cfqqs.
*/
__cfqq = cfqq->new_cfqq;
while (__cfqq) {
if (__cfqq == cfqq) {
WARN(1, "cfqq->new_cfqq loop detected\n");
break;
}
next = __cfqq->new_cfqq;
cfq_put_queue(__cfqq);
__cfqq = next;
}
However, there is a hole in this logic. Consider the following (and
keep in mind that each I/O keeps a reference to the cfqq):
q1->new_cfqq = q2 // q2 now has 2 process references
q3->new_cfqq = q2 // q2 now has 3 process references
// the process associated with q2 exits
// q2 now has 2 process references
// queue 1 exits, drops its reference on q2
// q2 now has 1 process reference
// q3 exits, so has 0 process references, and hence drops its references
// to q2, which leaves q2 also with 0 process references
q4 comes along and wants to merge with q3
q3->new_cfqq still points at q2! We follow that link and end up at an
already freed cfqq.
So, the fix is to not follow a merge chain if the top-most queue does
not have a process reference, otherwise any queue in the chain could be
already freed. I also changed the logic to disallow merging with a
queue that does not have any process references. Previously, we did
this check for one of the merge candidates, but not the other. That
doesn't really make sense.
Without the attached patch, my system would BUG within a couple of
seconds of running the reproducer program. With the patch applied, my
system ran the program for over an hour without issues.
This addresses the following bugzilla:
https://bugzilla.kernel.org/show_bug.cgi?id=16217
Thanks a ton to Phil Carns for providing the bug report and an excellent
reproducer.
[ Note for stable: this applies to 2.6.32/33/34 ].
Signed-off-by: Jeff Moyer <jmoyer@redhat.com>
Reported-by: Phil Carns <carns@mcs.anl.gov>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
block/cfq-iosched.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -1198,6 +1198,15 @@ static void cfq_setup_merge(struct cfq_q
int process_refs, new_process_refs;
struct cfq_queue *__cfqq;
+ /*
+ * If there are no process references on the new_cfqq, then it is
+ * unsafe to follow the ->new_cfqq chain as other cfqq's in the
+ * chain may have dropped their last reference (not just their
+ * last process reference).
+ */
+ if (!cfqq_process_refs(new_cfqq))
+ return;
+
/* Avoid a circular list and skip interim queue merges */
while ((__cfqq = new_cfqq->new_cfqq)) {
if (__cfqq == cfqq)
@@ -1206,17 +1215,17 @@ static void cfq_setup_merge(struct cfq_q
}
process_refs = cfqq_process_refs(cfqq);
+ new_process_refs = cfqq_process_refs(new_cfqq);
/*
* If the process for the cfqq has gone away, there is no
* sense in merging the queues.
*/
- if (process_refs == 0)
+ if (process_refs == 0 || new_process_refs == 0)
return;
/*
* Merge in the direction of the lesser amount of work.
*/
- new_process_refs = cfqq_process_refs(new_cfqq);
if (new_process_refs >= process_refs) {
cfqq->new_cfqq = new_cfqq;
atomic_add(process_refs, &new_cfqq->ref);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [091/107] xen/timer: Missing IRQF_NO_SUSPEND in timer code broke suspend.
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (89 preceding siblings ...)
2011-11-02 22:14 ` [090/107] cfq: Dont allow queue merges for queues that have no process references Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [092/107] KVM: x86: Reset tsc_timestamp on TSC writes Greg KH
` (15 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Ian Campbell, Konrad Rzeszutek Wilk
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Ian Campbell <Ian.Campbell@citrix.com>
commit f611f2da99420abc973c32cdbddbf5c365d0a20c upstream.
The patches missed an indirect use of IRQF_NO_SUSPEND pulled in via
IRQF_TIMER. The following patch fixes the issue.
With this fixlet PV guest migration works just fine. I also booted the
entire series as a dom0 kernel and it appeared fine.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/x86/xen/time.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/arch/x86/xen/time.c
+++ b/arch/x86/xen/time.c
@@ -395,7 +395,9 @@ void xen_setup_timer(int cpu)
name = "<timer kasprintf failed>";
irq = bind_virq_to_irqhandler(VIRQ_TIMER, cpu, xen_timer_interrupt,
- IRQF_DISABLED|IRQF_PERCPU|IRQF_NOBALANCING|IRQF_TIMER,
+ IRQF_DISABLED|IRQF_PERCPU|
+ IRQF_NOBALANCING|IRQF_TIMER|
+ IRQF_FORCE_RESUME,
name, NULL);
evt = &per_cpu(xen_clock_events, cpu);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [092/107] KVM: x86: Reset tsc_timestamp on TSC writes
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (90 preceding siblings ...)
2011-11-02 22:14 ` [091/107] xen/timer: Missing IRQF_NO_SUSPEND in timer code broke suspend Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:14 ` [093/107] genirq: Add IRQF_RESUME_EARLY and resume such IRQs earlier Greg KH
` (14 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable, greg
Cc: torvalds, akpm, alan, Avi Kivity, Philipp Hahn, Marcelo Tosatti
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 3248 bytes --]
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Philipp Hahn <hahn@univention.de>
There is no upstream commit ID for this patch since it is not a straight
backport from upstream. It is a fix only relevant to 2.6.32.y.
Since 1d5f066e0b63271b67eac6d3752f8aa96adcbddb from 2.6.37 was
back-ported to 2.6.32.40 as ad2088cabe0fd7f633f38ba106025d33ed9a2105,
the following patch is needed to add the needed reset logic to 2.6.32 as
well.
Bug #23257: Reset tsc_timestamp on TSC writes
vcpu->last_guest_tsc is updated in vcpu_enter_guest() and kvm_arch_vcpu_put()
by getting the last value of the TSC from the guest.
On reset, the SeaBIOS resets the TSC to 0, which triggers a bug on the next
call to kvm_write_guest_time(): Since vcpu->hw_clock.tsc_timestamp still
contains the old value before the reset, "max_kernel_ns = vcpu->last_guest_tsc
- vcpu->hw_clock.tsc_timestamp" gets negative. Since the variable is u64, it
gets translated to a large positive value.
[9333.197080]
vcpu->last_guest_tsc =209_328_760_015 ←
vcpu->hv_clock.tsc_timestamp=209_328_708_109
vcpu->last_kernel_ns =9_333_179_830_643
kernel_ns =9_333_197_073_429
max_kernel_ns =9_333_179_847_943 ←
[9336.910995]
vcpu->last_guest_tsc =9_438_510_584 ←
vcpu->hv_clock.tsc_timestamp=211_080_593_143
vcpu->last_kernel_ns =9_333_763_732_907
kernel_ns =9_336_910_990_771
max_kernel_ns =6_148_296_831_006_663_830 ←
For completeness, here are the values for my 3 GHz CPU:
vcpu->hv_clock.tsc_shift =-1
vcpu->hv_clock.tsc_to_system_mul =2_863_019_502
This makes the guest kernel crawl very slowly when clocksource=kvmclock is
used: sleeps take way longer than expected and don't match wall clock any more.
The times printed with printk() don't match real time and the reboot often
stalls for long times.
In linux-git this isn't a problem, since on every MSR_IA32_TSC write
vcpu->arch.hv_clock.tsc_timestamp is reset to 0, which disables above logic.
The code there is only in arch/x86/kvm/x86.c, since much of the kvm-clock
related code has been refactured for 2.6.37:
99e3e30a arch/x86/kvm/x86.c
(Zachary Amsden 2010-08-19 22:07:17 -1000 1084)
vcpu->arch.hv_clock.tsc_timestamp = 0;
Signed-off-by: Philipp Hahn <hahn@univention.de>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
arch/x86/kvm/svm.c | 1 +
arch/x86/kvm/vmx.c | 1 +
2 files changed, 2 insertions(+)
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -2256,6 +2256,7 @@ static int svm_set_msr(struct kvm_vcpu *
}
svm->vmcb->control.tsc_offset = tsc_offset + g_tsc_offset;
+ vcpu->arch.hv_clock.tsc_timestamp = 0;
break;
}
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -1067,6 +1067,7 @@ static int vmx_set_msr(struct kvm_vcpu *
case MSR_IA32_TSC:
rdtscll(host_tsc);
guest_write_tsc(data, host_tsc);
+ vcpu->arch.hv_clock.tsc_timestamp = 0;
break;
case MSR_IA32_CR_PAT:
if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) {
^ permalink raw reply [flat|nested] 122+ messages in thread
* [093/107] genirq: Add IRQF_RESUME_EARLY and resume such IRQs earlier
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (91 preceding siblings ...)
2011-11-02 22:14 ` [092/107] KVM: x86: Reset tsc_timestamp on TSC writes Greg KH
@ 2011-11-02 22:14 ` Greg KH
2011-11-02 22:15 ` [094/107] Revert "usb: musb: restore INDEX register in resume path" Greg KH
` (13 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:14 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Ian Campbell, Rafael J. Wysocki,
Jeremy Fitzhardinge, xen-devel, Konrad Rzeszutek Wilk,
Thomas Gleixner
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Ian Campbell <ian.campbell@citrix.com>
commit 9bab0b7fbaceec47d32db51cd9e59c82fb071f5a upstream
This adds a mechanism to resume selected IRQs during syscore_resume
instead of dpm_resume_noirq.
Under Xen we need to resume IRQs associated with IPIs early enough
that the resched IPI is unmasked and we can therefore schedule
ourselves out of the stop_machine where the suspend/resume takes
place.
This issue was introduced by 676dc3cf5bc3 "xen: Use IRQF_FORCE_RESUME".
Back ported to 2.6.32 (which lacks syscore support) by calling the relavant
resume function directly from sysdev_resume).
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Cc: Jeremy Fitzhardinge <Jeremy.Fitzhardinge@citrix.com>
Cc: xen-devel <xen-devel@lists.xensource.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Link: http://lkml.kernel.org/r/1318713254.11016.52.camel@dagon.hellion.org.uk
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/base/sys.c | 6 ++++++
drivers/xen/events.c | 2 +-
include/linux/interrupt.h | 5 +++++
kernel/irq/pm.c | 35 ++++++++++++++++++++++++++++-------
4 files changed, 40 insertions(+), 8 deletions(-)
--- a/drivers/base/sys.c
+++ b/drivers/base/sys.c
@@ -471,6 +471,12 @@ int sysdev_resume(void)
{
struct sysdev_class *cls;
+ /*
+ * Called from syscore in mainline but called directly here
+ * since syscore does not exist in this tree.
+ */
+ irq_pm_syscore_resume();
+
WARN_ONCE(!irqs_disabled(),
"Interrupts enabled while resuming system devices\n");
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -536,7 +536,7 @@ int bind_ipi_to_irqhandler(enum ipi_vect
if (irq < 0)
return irq;
- irqflags |= IRQF_NO_SUSPEND | IRQF_FORCE_RESUME;
+ irqflags |= IRQF_NO_SUSPEND | IRQF_FORCE_RESUME | IRQF_EARLY_RESUME;
retval = request_irq(irq, handler, irqflags, devname, dev_id);
if (retval != 0) {
unbind_from_irq(irq);
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -54,6 +54,8 @@
* irq line disabled until the threaded handler has been run.
* IRQF_NO_SUSPEND - Do not disable this IRQ during suspend
* IRQF_FORCE_RESUME - Force enable it on resume even if IRQF_NO_SUSPEND is set
+ * IRQF_EARLY_RESUME - Resume IRQ early during syscore instead of at device
+ * resume time.
*/
#define IRQF_DISABLED 0x00000020
#define IRQF_SAMPLE_RANDOM 0x00000040
@@ -66,6 +68,7 @@
#define IRQF_ONESHOT 0x00002000
#define IRQF_NO_SUSPEND 0x00004000
#define IRQF_FORCE_RESUME 0x00008000
+#define IRQF_EARLY_RESUME 0x00020000
#define IRQF_TIMER (__IRQF_TIMER | IRQF_NO_SUSPEND)
@@ -196,6 +199,7 @@ extern void enable_irq(unsigned int irq)
#ifdef CONFIG_GENERIC_HARDIRQS
extern void suspend_device_irqs(void);
extern void resume_device_irqs(void);
+extern void irq_pm_syscore_resume(void);
#ifdef CONFIG_PM_SLEEP
extern int check_wakeup_irqs(void);
#else
@@ -204,6 +208,7 @@ static inline int check_wakeup_irqs(void
#else
static inline void suspend_device_irqs(void) { };
static inline void resume_device_irqs(void) { };
+static inline void irq_pm_syscore_resume(void) { };
static inline int check_wakeup_irqs(void) { return 0; }
#endif
--- a/kernel/irq/pm.c
+++ b/kernel/irq/pm.c
@@ -39,25 +39,46 @@ void suspend_device_irqs(void)
}
EXPORT_SYMBOL_GPL(suspend_device_irqs);
-/**
- * resume_device_irqs - enable interrupt lines disabled by suspend_device_irqs()
- *
- * Enable all interrupt lines previously disabled by suspend_device_irqs() that
- * have the IRQ_SUSPENDED flag set.
- */
-void resume_device_irqs(void)
+static void resume_irqs(bool want_early)
{
struct irq_desc *desc;
int irq;
for_each_irq_desc(irq, desc) {
unsigned long flags;
+ bool is_early = desc->action &&
+ desc->action->flags & IRQF_EARLY_RESUME;
+
+ if (is_early != want_early)
+ continue;
spin_lock_irqsave(&desc->lock, flags);
__enable_irq(desc, irq, true);
spin_unlock_irqrestore(&desc->lock, flags);
}
}
+
+/**
+ * irq_pm_syscore_ops - enable interrupt lines early
+ *
+ * Enable all interrupt lines with %IRQF_EARLY_RESUME set.
+ */
+void irq_pm_syscore_resume(void)
+{
+ resume_irqs(true);
+}
+
+/**
+ * resume_device_irqs - enable interrupt lines disabled by suspend_device_irqs()
+ *
+ * Enable all non-%IRQF_EARLY_RESUME interrupt lines previously
+ * disabled by suspend_device_irqs() that have the IRQS_SUSPENDED flag
+ * set as well as those with %IRQF_FORCE_RESUME.
+ */
+void resume_device_irqs(void)
+{
+ resume_irqs(false);
+}
EXPORT_SYMBOL_GPL(resume_device_irqs);
/**
^ permalink raw reply [flat|nested] 122+ messages in thread
* [094/107] Revert "usb: musb: restore INDEX register in resume path"
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (92 preceding siblings ...)
2011-11-02 22:14 ` [093/107] genirq: Add IRQF_RESUME_EARLY and resume such IRQs earlier Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [095/107] Revert "MIPS: MTX-1: Make au1000_eth probe all PHY Greg KH
` (12 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Anand Gadiyar, Ajay Kumar Gupta,
Felipe Balbi
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Greg Kroah-Hartman <gregkh@suse.de>
This reverts commit 262e2d9d559334e09bc80516132ea99d82f97b8c.
Turns out this breaks the build, and as such, really isn't needed for
the 2.6.32-stable branch at all.
Reported-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
Cc: Anand Gadiyar <gadiyar@ti.com>
Cc: Ajay Kumar Gupta <ajay.gupta@ti.com>
Cc: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/musb/musb_core.c | 1 -
1 file changed, 1 deletion(-)
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -1634,7 +1634,6 @@ void musb_dma_completion(struct musb *mu
}
}
}
- musb_writeb(musb_base, MUSB_INDEX, musb->context.index);
}
#else
^ permalink raw reply [flat|nested] 122+ messages in thread
* [095/107] Revert "MIPS: MTX-1: Make au1000_eth probe all PHY
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (93 preceding siblings ...)
2011-11-02 22:15 ` [094/107] Revert "usb: musb: restore INDEX register in resume path" Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [096/107] watchdog: mtx1-wdt: fix build failure Greg KH
` (11 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Ralf Baechle, Florian Fainelli
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Florian Fainelli <florian@openwrt.org>
Commit ec3eb823 was not applicable in 2.6.32 and introduces a build breakage.
Revert that commit since it is irrelevant for this kernel version.
Acked-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Florian Fainelli <florian@openwrt.org>
---
arch/mips/alchemy/mtx-1/platform.c | 9 ---------
1 file changed, 9 deletions(-)
--- a/arch/mips/alchemy/mtx-1/platform.c
+++ b/arch/mips/alchemy/mtx-1/platform.c
@@ -28,8 +28,6 @@
#include <linux/mtd/physmap.h>
#include <mtd/mtd-abi.h>
-#include <asm/mach-au1x00/au1xxx_eth.h>
-
static struct gpio_keys_button mtx1_gpio_button[] = {
{
.gpio = 207,
@@ -142,17 +140,10 @@ static struct __initdata platform_device
&mtx1_mtd,
};
-static struct au1000_eth_platform_data mtx1_au1000_eth0_pdata = {
- .phy_search_highest_addr = 1,
- .phy1_search_mac0 = 1,
-};
-
static int __init mtx1_register_devices(void)
{
int rc;
- au1xxx_override_eth_cfg(0, &mtx1_au1000_eth0_pdata);
-
rc = gpio_request(mtx1_gpio_button[0].gpio,
mtx1_gpio_button[0].desc);
if (rc < 0) {
^ permalink raw reply [flat|nested] 122+ messages in thread
* [096/107] watchdog: mtx1-wdt: fix build failure
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (94 preceding siblings ...)
2011-11-02 22:15 ` [095/107] Revert "MIPS: MTX-1: Make au1000_eth probe all PHY Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [097/107] kcore: fix test for end of list Greg KH
` (10 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Florian Fainelli
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Florian Fainelli <florian@openwrt.org>
Commit 6d86a0ee (watchdog: mtx1-wdt: request gpio before using it) was
backported from upstream. The patch is using a gpiolib call which is only
available in kernel 2.6.34+. Fix build by using the "old" gpiolib API
instead.
Signed-off-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/watchdog/mtx-1_wdt.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
--- a/drivers/watchdog/mtx-1_wdt.c
+++ b/drivers/watchdog/mtx-1_wdt.c
@@ -211,13 +211,14 @@ static int __devinit mtx1_wdt_probe(stru
int ret;
mtx1_wdt_device.gpio = pdev->resource[0].start;
- ret = gpio_request_one(mtx1_wdt_device.gpio,
- GPIOF_OUT_INIT_HIGH, "mtx1-wdt");
+ ret = gpio_request(mtx1_wdt_device.gpio, "mtx1-wdt");
if (ret < 0) {
dev_err(&pdev->dev, "failed to request gpio");
return ret;
}
+ gpio_direction_output(mtx1_wdt_device.gpio, 1);
+
spin_lock_init(&mtx1_wdt_device.lock);
init_completion(&mtx1_wdt_device.stop);
mtx1_wdt_device.queue = 0;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [097/107] kcore: fix test for end of list
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (95 preceding siblings ...)
2011-11-02 22:15 ` [096/107] watchdog: mtx1-wdt: fix build failure Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [098/107] thinkpad-acpi: module autoloading for newer Lenovo ThinkPads Greg KH
` (9 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Dan Carpenter, KAMEZAWA Hiroyuki, WANG Cong,
Leonardo Chiquitto
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Dan Carpenter <error27@gmail.com>
commit 4fd2c20d964a8fb9861045f1022475c9d200d684 upstream.
"m" is never NULL here. We need a different test for the end of list
condition.
Signed-off-by: Dan Carpenter <error27@gmail.com>
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: WANG Cong <xiyou.wangcong@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Leonardo Chiquitto <leonardo.lists@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/proc/kcore.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/fs/proc/kcore.c
+++ b/fs/proc/kcore.c
@@ -490,7 +490,7 @@ read_kcore(struct file *file, char __use
}
read_unlock(&kclist_lock);
- if (m == NULL) {
+ if (&m->list == &kclist_head) {
if (clear_user(buffer, tsz))
return -EFAULT;
} else if (is_vmalloc_or_module_addr((void *)start)) {
^ permalink raw reply [flat|nested] 122+ messages in thread
* [098/107] thinkpad-acpi: module autoloading for newer Lenovo ThinkPads.
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (96 preceding siblings ...)
2011-11-02 22:15 ` [097/107] kcore: fix test for end of list Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [099/107] scm: lower SCM_MAX_FD Greg KH
` (8 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable, stable
Cc: torvalds, akpm, alan, Manoj Iyer, Andy Lutomirski,
Matthew Garrett, Henrique de Moraes Holschuh, Bjørn Mork
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1395 bytes --]
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Manoj Iyer <manoj.iyer@canonical.com>
commit 9fbdaeb4f4dd14a0caa9fc35c496d5440c251a3a upstream.
The newer Lenovo ThinkPads have HKEY HID of LEN0068 instead
of IBM0068. Added new HID so that thinkpad_acpi module will
auto load on these newer Lenovo ThinkPads.
Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Cc: stable@vger.kernel.org
Signed-off-by: Manoj Iyer <manoj.iyer@canonical.com>
Signed-off-by: Andy Lutomirski <luto@mit.edu>
Signed-off-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Bj�rn Mork <bjorn@mork.no>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/platform/x86/thinkpad_acpi.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -118,7 +118,9 @@ enum {
};
/* ACPI HIDs */
-#define TPACPI_ACPI_HKEY_HID "IBM0068"
+#define TPACPI_ACPI_IBM_HKEY_HID "IBM0068"
+#define TPACPI_ACPI_LENOVO_HKEY_HID "LEN0068"
+#define TPACPI_ACPI_EC_HID "PNP0C09"
/* Input IDs */
#define TPACPI_HKEY_INPUT_PRODUCT 0x5054 /* "TP" */
@@ -3840,7 +3842,8 @@ errexit:
}
static const struct acpi_device_id ibm_htk_device_ids[] = {
- {TPACPI_ACPI_HKEY_HID, 0},
+ {TPACPI_ACPI_IBM_HKEY_HID, 0},
+ {TPACPI_ACPI_LENOVO_HKEY_HID, 0},
{"", 0},
};
^ permalink raw reply [flat|nested] 122+ messages in thread
* [099/107] scm: lower SCM_MAX_FD
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (97 preceding siblings ...)
2011-11-02 22:15 ` [098/107] thinkpad-acpi: module autoloading for newer Lenovo ThinkPads Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [100/107] deal with races in /proc/*/{syscall,stack,personality} Greg KH
` (7 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Eric Dumazet, David S. Miller
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Eric Dumazet <eric.dumazet@gmail.com>
commit bba14de98753cb6599a2dae0e520714b2153522d upstream.
Lower SCM_MAX_FD from 255 to 253 so that allocations for scm_fp_list are
halved. (commit f8d570a4 added two pointers in this structure)
scm_fp_dup() should not copy whole structure (and trigger kmemcheck
warnings), but only the used part. While we are at it, only allocate
needed size.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
include/net/scm.h | 5 +++--
net/core/scm.c | 10 ++++++----
2 files changed, 9 insertions(+), 6 deletions(-)
--- a/include/net/scm.h
+++ b/include/net/scm.h
@@ -10,12 +10,13 @@
/* Well, we should have at least one descriptor open
* to accept passed FDs 8)
*/
-#define SCM_MAX_FD 255
+#define SCM_MAX_FD 253
struct scm_fp_list
{
struct list_head list;
- int count;
+ short count;
+ short max;
struct file *fp[SCM_MAX_FD];
};
--- a/net/core/scm.c
+++ b/net/core/scm.c
@@ -78,10 +78,11 @@ static int scm_fp_copy(struct cmsghdr *c
return -ENOMEM;
*fplp = fpl;
fpl->count = 0;
+ fpl->max = SCM_MAX_FD;
}
fpp = &fpl->fp[fpl->count];
- if (fpl->count + num > SCM_MAX_FD)
+ if (fpl->count + num > fpl->max)
return -EINVAL;
/*
@@ -302,11 +303,12 @@ struct scm_fp_list *scm_fp_dup(struct sc
if (!fpl)
return NULL;
- new_fpl = kmalloc(sizeof(*fpl), GFP_KERNEL);
+ new_fpl = kmemdup(fpl, offsetof(struct scm_fp_list, fp[fpl->count]),
+ GFP_KERNEL);
if (new_fpl) {
- for (i=fpl->count-1; i>=0; i--)
+ for (i = 0; i < fpl->count; i++)
get_file(fpl->fp[i]);
- memcpy(new_fpl, fpl, sizeof(*fpl));
+ new_fpl->max = new_fpl->count;
}
return new_fpl;
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [100/107] deal with races in /proc/*/{syscall,stack,personality}
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (98 preceding siblings ...)
2011-11-02 22:15 ` [099/107] scm: lower SCM_MAX_FD Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [101/107] NLM: Dont hang forever on NLM unlock requests Greg KH
` (6 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Al Viro
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Al Viro <viro@zeniv.linux.org.uk>
commit a9712bc12c40c172e393f85a9b2ba8db4bf59509 upstream.
All of those are rw-r--r-- and all are broken for suid - if you open
a file before the target does suid-root exec, you'll be still able
to access it. For personality it's not a big deal, but for syscall
and stack it's a real problem.
Fix: check that task is tracable for you at the time of read().
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/proc/base.c | 69 +++++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 50 insertions(+), 19 deletions(-)
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -328,6 +328,23 @@ static int proc_pid_wchan(struct task_st
}
#endif /* CONFIG_KALLSYMS */
+static int lock_trace(struct task_struct *task)
+{
+ int err = mutex_lock_killable(&task->cred_guard_mutex);
+ if (err)
+ return err;
+ if (!ptrace_may_access(task, PTRACE_MODE_ATTACH)) {
+ mutex_unlock(&task->cred_guard_mutex);
+ return -EPERM;
+ }
+ return 0;
+}
+
+static void unlock_trace(struct task_struct *task)
+{
+ mutex_unlock(&task->cred_guard_mutex);
+}
+
#ifdef CONFIG_STACKTRACE
#define MAX_STACK_TRACE_DEPTH 64
@@ -337,6 +354,7 @@ static int proc_pid_stack(struct seq_fil
{
struct stack_trace trace;
unsigned long *entries;
+ int err;
int i;
entries = kmalloc(MAX_STACK_TRACE_DEPTH * sizeof(*entries), GFP_KERNEL);
@@ -347,15 +365,20 @@ static int proc_pid_stack(struct seq_fil
trace.max_entries = MAX_STACK_TRACE_DEPTH;
trace.entries = entries;
trace.skip = 0;
- save_stack_trace_tsk(task, &trace);
- for (i = 0; i < trace.nr_entries; i++) {
- seq_printf(m, "[<%p>] %pS\n",
- (void *)entries[i], (void *)entries[i]);
+ err = lock_trace(task);
+ if (!err) {
+ save_stack_trace_tsk(task, &trace);
+
+ for (i = 0; i < trace.nr_entries; i++) {
+ seq_printf(m, "[<%p>] %pS\n",
+ (void *)entries[i], (void *)entries[i]);
+ }
+ unlock_trace(task);
}
kfree(entries);
- return 0;
+ return err;
}
#endif
@@ -527,18 +550,22 @@ static int proc_pid_syscall(struct task_
{
long nr;
unsigned long args[6], sp, pc;
+ int res = lock_trace(task);
+ if (res)
+ return res;
if (task_current_syscall(task, &nr, args, 6, &sp, &pc))
- return sprintf(buffer, "running\n");
-
- if (nr < 0)
- return sprintf(buffer, "%ld 0x%lx 0x%lx\n", nr, sp, pc);
-
- return sprintf(buffer,
+ res = sprintf(buffer, "running\n");
+ else if (nr < 0)
+ res = sprintf(buffer, "%ld 0x%lx 0x%lx\n", nr, sp, pc);
+ else
+ res = sprintf(buffer,
"%ld 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx 0x%lx\n",
nr,
args[0], args[1], args[2], args[3], args[4], args[5],
sp, pc);
+ unlock_trace(task);
+ return res;
}
#endif /* CONFIG_HAVE_ARCH_TRACEHOOK */
@@ -2497,8 +2524,12 @@ static int proc_tgid_io_accounting(struc
static int proc_pid_personality(struct seq_file *m, struct pid_namespace *ns,
struct pid *pid, struct task_struct *task)
{
- seq_printf(m, "%08x\n", task->personality);
- return 0;
+ int err = lock_trace(task);
+ if (!err) {
+ seq_printf(m, "%08x\n", task->personality);
+ unlock_trace(task);
+ }
+ return err;
}
/*
@@ -2517,13 +2548,13 @@ static const struct pid_entry tgid_base_
REG("environ", S_IRUSR, proc_environ_operations),
INF("auxv", S_IRUSR, proc_pid_auxv),
ONE("status", S_IRUGO, proc_pid_status),
- ONE("personality", S_IRUSR, proc_pid_personality),
+ ONE("personality", S_IRUGO, proc_pid_personality),
INF("limits", S_IRUSR, proc_pid_limits),
#ifdef CONFIG_SCHED_DEBUG
REG("sched", S_IRUGO|S_IWUSR, proc_pid_sched_operations),
#endif
#ifdef CONFIG_HAVE_ARCH_TRACEHOOK
- INF("syscall", S_IRUSR, proc_pid_syscall),
+ INF("syscall", S_IRUGO, proc_pid_syscall),
#endif
INF("cmdline", S_IRUGO, proc_pid_cmdline),
ONE("stat", S_IRUGO, proc_tgid_stat),
@@ -2551,7 +2582,7 @@ static const struct pid_entry tgid_base_
INF("wchan", S_IRUGO, proc_pid_wchan),
#endif
#ifdef CONFIG_STACKTRACE
- ONE("stack", S_IRUSR, proc_pid_stack),
+ ONE("stack", S_IRUGO, proc_pid_stack),
#endif
#ifdef CONFIG_SCHEDSTATS
INF("schedstat", S_IRUGO, proc_pid_schedstat),
@@ -2856,13 +2887,13 @@ static const struct pid_entry tid_base_s
REG("environ", S_IRUSR, proc_environ_operations),
INF("auxv", S_IRUSR, proc_pid_auxv),
ONE("status", S_IRUGO, proc_pid_status),
- ONE("personality", S_IRUSR, proc_pid_personality),
+ ONE("personality", S_IRUGO, proc_pid_personality),
INF("limits", S_IRUSR, proc_pid_limits),
#ifdef CONFIG_SCHED_DEBUG
REG("sched", S_IRUGO|S_IWUSR, proc_pid_sched_operations),
#endif
#ifdef CONFIG_HAVE_ARCH_TRACEHOOK
- INF("syscall", S_IRUSR, proc_pid_syscall),
+ INF("syscall", S_IRUGO, proc_pid_syscall),
#endif
INF("cmdline", S_IRUGO, proc_pid_cmdline),
ONE("stat", S_IRUGO, proc_tid_stat),
@@ -2889,7 +2920,7 @@ static const struct pid_entry tid_base_s
INF("wchan", S_IRUGO, proc_pid_wchan),
#endif
#ifdef CONFIG_STACKTRACE
- ONE("stack", S_IRUSR, proc_pid_stack),
+ ONE("stack", S_IRUGO, proc_pid_stack),
#endif
#ifdef CONFIG_SCHEDSTATS
INF("schedstat", S_IRUGO, proc_pid_schedstat),
^ permalink raw reply [flat|nested] 122+ messages in thread
* [101/107] NLM: Dont hang forever on NLM unlock requests
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (99 preceding siblings ...)
2011-11-02 22:15 ` [100/107] deal with races in /proc/*/{syscall,stack,personality} Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [102/107] Bluetooth: l2cap and rfcomm: fix 1 byte infoleak to userspace Greg KH
` (5 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Trond Myklebust
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Trond Myklebust <Trond.Myklebust@netapp.com>
commit 0b760113a3a155269a3fba93a409c640031dd68f upstream.
If the NLM daemon is killed on the NFS server, we can currently end up
hanging forever on an 'unlock' request, instead of aborting. Basically,
if the rpcbind request fails, or the server keeps returning garbage, we
really want to quit instead of retrying.
Tested-by: Vasily Averin <vvs@sw.ru>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/lockd/clntproc.c | 8 +++++++-
include/linux/sunrpc/sched.h | 4 ++--
net/sunrpc/clnt.c | 3 +++
net/sunrpc/sched.c | 1 +
4 files changed, 13 insertions(+), 3 deletions(-)
--- a/fs/lockd/clntproc.c
+++ b/fs/lockd/clntproc.c
@@ -709,7 +709,13 @@ static void nlmclnt_unlock_callback(stru
if (task->tk_status < 0) {
dprintk("lockd: unlock failed (err = %d)\n", -task->tk_status);
- goto retry_rebind;
+ switch (task->tk_status) {
+ case -EACCES:
+ case -EIO:
+ goto die;
+ default:
+ goto retry_rebind;
+ }
}
if (status == NLM_LCK_DENIED_GRACE_PERIOD) {
rpc_delay(task, NLMCLNT_GRACE_WAIT);
--- a/include/linux/sunrpc/sched.h
+++ b/include/linux/sunrpc/sched.h
@@ -84,8 +84,8 @@ struct rpc_task {
long tk_rtt; /* round-trip time (jiffies) */
pid_t tk_owner; /* Process id for batching tasks */
- unsigned char tk_priority : 2;/* Task priority */
-
+ unsigned char tk_priority : 2,/* Task priority */
+ tk_rebind_retry : 2;
#ifdef RPC_DEBUG
unsigned short tk_pid; /* debugging aid */
#endif
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -1052,6 +1052,9 @@ call_bind_status(struct rpc_task *task)
status = -EOPNOTSUPP;
break;
}
+ if (task->tk_rebind_retry == 0)
+ break;
+ task->tk_rebind_retry--;
rpc_delay(task, 3*HZ);
goto retry_timeout;
case -ETIMEDOUT:
--- a/net/sunrpc/sched.c
+++ b/net/sunrpc/sched.c
@@ -784,6 +784,7 @@ static void rpc_init_task(struct rpc_tas
/* Initialize retry counters */
task->tk_garb_retry = 2;
task->tk_cred_retry = 2;
+ task->tk_rebind_retry = 2;
task->tk_priority = task_setup_data->priority - RPC_PRIORITY_LOW;
task->tk_owner = current->tgid;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [102/107] Bluetooth: l2cap and rfcomm: fix 1 byte infoleak to userspace.
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (100 preceding siblings ...)
2011-11-02 22:15 ` [101/107] NLM: Dont hang forever on NLM unlock requests Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [103/107] vm: fix vm_pgoff wrap in stack expansion Greg KH
` (4 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Filip Palian, Marcel Holtmann,
Gustavo F. Padovan
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Filip Palian <s3810@pjwstk.edu.pl>
commit 8d03e971cf403305217b8e62db3a2e5ad2d6263f upstream.
Structures "l2cap_conninfo" and "rfcomm_conninfo" have one padding
byte each. This byte in "cinfo" is copied to userspace uninitialized.
Signed-off-by: Filip Palian <filip.palian@pjwstk.edu.pl>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/bluetooth/l2cap.c | 1 +
net/bluetooth/rfcomm/sock.c | 1 +
2 files changed, 2 insertions(+)
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -1886,6 +1886,7 @@ static int l2cap_sock_getsockopt_old(str
break;
}
+ memset(&cinfo, 0, sizeof(cinfo));
cinfo.hci_handle = l2cap_pi(sk)->conn->hcon->handle;
memcpy(cinfo.dev_class, l2cap_pi(sk)->conn->hcon->dev_class, 3);
--- a/net/bluetooth/rfcomm/sock.c
+++ b/net/bluetooth/rfcomm/sock.c
@@ -878,6 +878,7 @@ static int rfcomm_sock_getsockopt_old(st
l2cap_sk = rfcomm_pi(sk)->dlc->session->sock->sk;
+ memset(&cinfo, 0, sizeof(cinfo));
cinfo.hci_handle = l2cap_pi(l2cap_sk)->conn->hcon->handle;
memcpy(cinfo.dev_class, l2cap_pi(l2cap_sk)->conn->hcon->dev_class, 3);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [103/107] vm: fix vm_pgoff wrap in stack expansion
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (101 preceding siblings ...)
2011-11-02 22:15 ` [102/107] Bluetooth: l2cap and rfcomm: fix 1 byte infoleak to userspace Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [104/107] vm: fix vm_pgoff wrap in upward expansion Greg KH
` (3 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1374 bytes --]
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Linus Torvalds <torvalds@linux-foundation.org>
commit a626ca6a656450e9f4df91d0dda238fff23285f4 upstream.
Commit 982134ba6261 ("mm: avoid wrapping vm_pgoff in mremap()") fixed
the case of a expanding mapping causing vm_pgoff wrapping when you used
mremap. But there was another case where we expand mappings hiding in
plain sight: the automatic stack expansion.
This fixes that case too.
This one also found by Robert Święcki, using his nasty system call
fuzzer tool. Good job.
Reported-and-tested-by: Robert Święcki <robert@swiecki.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
mm/mmap.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -1680,10 +1680,13 @@ static int expand_downwards(struct vm_ar
size = vma->vm_end - address;
grow = (vma->vm_start - address) >> PAGE_SHIFT;
- error = acct_stack_growth(vma, size, grow);
- if (!error) {
- vma->vm_start = address;
- vma->vm_pgoff -= grow;
+ error = -ENOMEM;
+ if (grow <= vma->vm_pgoff) {
+ error = acct_stack_growth(vma, size, grow);
+ if (!error) {
+ vma->vm_start = address;
+ vma->vm_pgoff -= grow;
+ }
}
}
anon_vma_unlock(vma);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [104/107] vm: fix vm_pgoff wrap in upward expansion
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (102 preceding siblings ...)
2011-11-02 22:15 ` [103/107] vm: fix vm_pgoff wrap in stack expansion Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [105/107] Bluetooth: Prevent buffer overflow in l2cap config request Greg KH
` (2 subsequent siblings)
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Hugh Dickins
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Hugh Dickins <hughd@google.com>
commit 42c36f63ac1366ab0ecc2d5717821362c259f517 upstream.
Commit a626ca6a6564 ("vm: fix vm_pgoff wrap in stack expansion") fixed
the case of an expanding mapping causing vm_pgoff wrapping when you had
downward stack expansion. But there was another case where IA64 and
PA-RISC expand mappings: upward expansion.
This fixes that case too.
Signed-off-by: Hugh Dickins <hughd@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
mm/mmap.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -1636,9 +1636,12 @@ int expand_upwards(struct vm_area_struct
size = address - vma->vm_start;
grow = (address - vma->vm_end) >> PAGE_SHIFT;
- error = acct_stack_growth(vma, size, grow);
- if (!error)
- vma->vm_end = address;
+ error = -ENOMEM;
+ if (vma->vm_pgoff + (size >> PAGE_SHIFT) >= vma->vm_pgoff) {
+ error = acct_stack_growth(vma, size, grow);
+ if (!error)
+ vma->vm_end = address;
+ }
}
anon_vma_unlock(vma);
return error;
^ permalink raw reply [flat|nested] 122+ messages in thread
* [105/107] Bluetooth: Prevent buffer overflow in l2cap config request
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (103 preceding siblings ...)
2011-11-02 22:15 ` [104/107] vm: fix vm_pgoff wrap in upward expansion Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [106/107] nl80211: fix overflow in ssid_len Greg KH
2011-11-02 22:15 ` [107/107] net_sched: Fix qdisc_notify() Greg KH
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Dan Rosenberg, Gustavo F. Padovan
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Dan Rosenberg <drosenberg@vsecurity.com>
commit 7ac28817536797fd40e9646452183606f9e17f71 upstream.
A remote user can provide a small value for the command size field in
the command header of an l2cap configuration request, resulting in an
integer underflow when subtracting the size of the configuration request
header. This results in copying a very large amount of data via
memcpy() and destroying the kernel heap. Check for underflow.
Signed-off-by: Dan Rosenberg <drosenberg@vsecurity.com>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/bluetooth/l2cap.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -2720,7 +2720,7 @@ static inline int l2cap_config_req(struc
/* Reject if config buffer is too small. */
len = cmd_len - sizeof(*req);
- if (l2cap_pi(sk)->conf_len + len > sizeof(l2cap_pi(sk)->conf_req)) {
+ if (len < 0 || l2cap_pi(sk)->conf_len + len > sizeof(l2cap_pi(sk)->conf_req)) {
l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
l2cap_build_conf_rsp(sk, rsp,
L2CAP_CONF_REJECT, flags), rsp);
^ permalink raw reply [flat|nested] 122+ messages in thread
* [106/107] nl80211: fix overflow in ssid_len
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (104 preceding siblings ...)
2011-11-02 22:15 ` [105/107] Bluetooth: Prevent buffer overflow in l2cap config request Greg KH
@ 2011-11-02 22:15 ` Greg KH
2011-11-02 22:15 ` [107/107] net_sched: Fix qdisc_notify() Greg KH
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable
Cc: torvalds, akpm, alan, Luciano Coelho, John W. Linville
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Luciano Coelho <coelho@ti.com>
commit 57a27e1d6a3bb9ad4efeebd3a8c71156d6207536 upstream.
When one of the SSID's length passed in a scan or sched_scan request
is larger than 255, there will be an overflow in the u8 that is used
to store the length before checking. This causes the check to fail
and we overrun the buffer when copying the SSID.
Fix this by checking the nl80211 attribute length before copying it to
the struct.
This is a follow up for the previous commit
208c72f4fe44fe09577e7975ba0e7fa0278f3d03, which didn't fix the problem
entirely.
Reported-by: Ido Yariv <ido@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/wireless/nl80211.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -2995,11 +2995,11 @@ static int nl80211_trigger_scan(struct s
i = 0;
if (info->attrs[NL80211_ATTR_SCAN_SSIDS]) {
nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_SSIDS], tmp) {
- request->ssids[i].ssid_len = nla_len(attr);
- if (request->ssids[i].ssid_len > IEEE80211_MAX_SSID_LEN) {
+ if (nla_len(attr) > IEEE80211_MAX_SSID_LEN) {
err = -EINVAL;
goto out_free;
}
+ request->ssids[i].ssid_len = nla_len(attr);
memcpy(request->ssids[i].ssid, nla_data(attr), nla_len(attr));
i++;
}
^ permalink raw reply [flat|nested] 122+ messages in thread
* [107/107] net_sched: Fix qdisc_notify()
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
` (105 preceding siblings ...)
2011-11-02 22:15 ` [106/107] nl80211: fix overflow in ssid_len Greg KH
@ 2011-11-02 22:15 ` Greg KH
106 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:15 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan, Eric Dumazet, David S. Miller
2.6.32-longterm review patch. If anyone has any objections, please let us know.
------------------
From: Eric Dumazet <eric.dumazet@gmail.com>
commit 53b0f08042f04813cd1a7473dacd3edfacb28eb3 upstream.
Ben Pfaff reported a kernel oops and provided a test program to
reproduce it.
https://kerneltrap.org/mailarchive/linux-netdev/2010/5/21/6277805
tc_fill_qdisc() should not be called for builtin qdisc, or it
dereference a NULL pointer to get device ifindex.
Fix is to always use tc_qdisc_dump_ignore() before calling
tc_fill_qdisc().
Reported-by: Ben Pfaff <blp@nicira.com>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
net/sched/sch_api.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -1195,6 +1195,11 @@ nla_put_failure:
return -1;
}
+static bool tc_qdisc_dump_ignore(struct Qdisc *q)
+{
+ return (q->flags & TCQ_F_BUILTIN) ? true : false;
+}
+
static int qdisc_notify(struct sk_buff *oskb, struct nlmsghdr *n,
u32 clid, struct Qdisc *old, struct Qdisc *new)
{
@@ -1205,11 +1210,11 @@ static int qdisc_notify(struct sk_buff *
if (!skb)
return -ENOBUFS;
- if (old && old->handle) {
+ if (old && !tc_qdisc_dump_ignore(old)) {
if (tc_fill_qdisc(skb, old, clid, pid, n->nlmsg_seq, 0, RTM_DELQDISC) < 0)
goto err_out;
}
- if (new) {
+ if (new && !tc_qdisc_dump_ignore(new)) {
if (tc_fill_qdisc(skb, new, clid, pid, n->nlmsg_seq, old ? NLM_F_REPLACE : 0, RTM_NEWQDISC) < 0)
goto err_out;
}
@@ -1222,11 +1227,6 @@ err_out:
return -EINVAL;
}
-static bool tc_qdisc_dump_ignore(struct Qdisc *q)
-{
- return (q->flags & TCQ_F_BUILTIN) ? true : false;
-}
-
static int tc_dump_qdisc_root(struct Qdisc *root, struct sk_buff *skb,
struct netlink_callback *cb,
int *q_idx_p, int s_q_idx)
^ permalink raw reply [flat|nested] 122+ messages in thread
* [000/107] 2.6.32.47-longterm review
@ 2011-11-02 22:16 Greg KH
2011-11-02 22:13 ` [001/107] USB: ftdi_sio: add Calao reference board support Greg KH
` (106 more replies)
0 siblings, 107 replies; 122+ messages in thread
From: Greg KH @ 2011-11-02 22:16 UTC (permalink / raw)
To: linux-kernel, stable; +Cc: torvalds, akpm, alan
This is the start of the longterm review cycle for the 2.6.32.47 release.
There are 107 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.
Responses should be made by Friday, November 4, 22:00: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/longterm-review/patch-2.6.32.47-rc1.gz
and the diffstat can be found below.
thanks,
greg k-h
Documentation/stable_kernel_rules.txt | 4 +-
Makefile | 2 +-
arch/arm/mach-davinci/board-da850-evm.c | 28 +++
arch/arm/plat-mxc/include/mach/iomux-v3.h | 10 +-
arch/mips/alchemy/mtx-1/platform.c | 9 -
arch/powerpc/kernel/pci_of_scan.c | 2 +
arch/powerpc/sysdev/mpic.c | 17 +--
arch/s390/kvm/kvm-s390.c | 14 +-
arch/sparc/include/asm/sigcontext.h | 14 ++
arch/sparc/kernel/Makefile | 1 +
arch/sparc/kernel/pcic.c | 4 +-
arch/sparc/kernel/signal32.c | 184 +++++++++++--------
arch/sparc/kernel/signal_32.c | 172 ++++++++----------
arch/sparc/kernel/signal_64.c | 108 +++++------
arch/sparc/kernel/sigutil.h | 9 +
arch/sparc/kernel/sigutil_32.c | 120 ++++++++++++
arch/sparc/kernel/sigutil_64.c | 93 ++++++++++
arch/um/drivers/ubd_kern.c | 31 +++-
arch/x86/include/asm/processor.h | 23 +++
arch/x86/kernel/amd_iommu.c | 2 +-
arch/x86/kernel/kprobes.c | 4 +-
arch/x86/kernel/smpboot.c | 85 +---------
arch/x86/kvm/svm.c | 1 +
arch/x86/kvm/vmx.c | 1 +
arch/x86/xen/smp.c | 10 +
arch/x86/xen/time.c | 4 +-
arch/x86/xen/xen-asm_32.S | 8 +-
block/blk-map.c | 5 +-
block/cfq-iosched.c | 264 +++++++++++++++++++++------
drivers/ata/ahci.c | 12 ++
drivers/base/sys.c | 6 +
drivers/block/xen-blkfront.c | 2 +-
drivers/char/hvc_console.c | 8 +-
drivers/char/tpm/tpm.c | 9 +-
drivers/gpu/drm/radeon/r100.c | 4 +-
drivers/hid/hid-ids.h | 3 +
drivers/hid/usbhid/hid-quirks.c | 1 +
drivers/hwmon/w83627ehf.c | 15 +-
drivers/md/linear.h | 2 +-
drivers/md/md.c | 12 +-
drivers/media/video/cx23885/cx23885-dvb.c | 2 +-
drivers/media/video/uvc/uvc_driver.c | 2 +-
drivers/media/video/uvc/uvc_video.c | 10 +-
drivers/media/video/uvc/uvcvideo.h | 2 +-
drivers/net/cnic.c | 4 +-
drivers/net/e1000/e1000_hw.c | 6 +
drivers/net/e1000e/netdev.c | 2 +-
drivers/net/igb/igb_main.c | 2 +-
drivers/net/igbvf/netdev.c | 2 +-
drivers/net/irda/smsc-ircc2.c | 2 +-
drivers/net/ixgbe/ixgbe_main.c | 2 +-
drivers/net/usb/asix.c | 4 +
drivers/net/wireless/b43/main.c | 3 +-
drivers/net/wireless/rt2x00/rt2x00usb.c | 14 +--
drivers/platform/x86/thinkpad_acpi.c | 7 +-
drivers/s390/cio/ccwgroup.c | 42 +++--
drivers/scsi/3w-9xxx.c | 2 +
drivers/scsi/aacraid/commsup.c | 2 +
drivers/scsi/ipr.c | 2 +-
drivers/scsi/libiscsi_tcp.c | 14 +-
drivers/scsi/libsas/sas_expander.c | 14 +-
drivers/scsi/qla2xxx/qla_init.c | 3 -
drivers/scsi/qla2xxx/qla_isr.c | 1 -
drivers/staging/quatech_usb2/quatech_usb2.c | 9 +-
drivers/usb/class/cdc-acm.c | 3 +
drivers/usb/core/devio.c | 6 +-
drivers/usb/core/quirks.c | 21 ++
drivers/usb/host/ehci-hub.c | 7 +-
drivers/usb/host/fhci-sched.c | 19 ++-
drivers/usb/host/xhci-mem.c | 22 ++-
drivers/usb/mon/mon_bin.c | 2 +-
drivers/usb/musb/musb_core.c | 1 -
drivers/usb/serial/ftdi_sio.c | 24 +++-
drivers/usb/serial/ftdi_sio_ids.h | 7 +-
drivers/usb/serial/pl2303.c | 27 +++-
drivers/usb/serial/pl2303.h | 5 +
drivers/usb/serial/qcserial.c | 1 +
drivers/usb/storage/transport.c | 34 ++--
drivers/video/carminefb.c | 6 +-
drivers/watchdog/mtx-1_wdt.c | 5 +-
drivers/xen/events.c | 2 +-
fs/cifs/cifssmb.c | 3 +-
fs/eventpoll.c | 25 ++-
fs/lockd/clntproc.c | 8 +-
fs/nfsd/nfs4proc.c | 2 +-
fs/nfsd/nfs4state.c | 2 +
fs/proc/base.c | 69 +++++--
fs/proc/kcore.c | 2 +-
fs/splice.c | 3 +-
include/linux/interrupt.h | 5 +
include/linux/iocontext.h | 5 -
include/linux/jiffies.h | 2 +-
include/linux/sunrpc/sched.h | 4 +-
include/net/scm.h | 5 +-
kernel/irq/pm.c | 35 +++-
kernel/kmod.c | 4 +-
kernel/time.c | 2 +-
lib/kobject_uevent.c | 2 +-
mm/mmap.c | 20 ++-
net/9p/client.c | 13 +-
net/atm/br2684.c | 7 +-
net/bluetooth/l2cap.c | 3 +-
net/bluetooth/rfcomm/sock.c | 1 +
net/core/scm.c | 10 +-
net/core/skbuff.c | 8 +-
net/ipv6/ip6_output.c | 2 +-
net/ipv6/ip6_tunnel.c | 4 +-
net/sched/sch_api.c | 14 +-
net/sunrpc/clnt.c | 3 +
net/sunrpc/sched.c | 1 +
net/wireless/nl80211.c | 9 +-
net/wireless/reg.c | 1 +
net/x25/af_x25.c | 3 +-
sound/pci/hda/patch_cirrus.c | 2 +-
sound/pci/hda/patch_realtek.c | 6 +-
sound/soc/codecs/ak4535.c | 10 +-
sound/soc/codecs/ak4642.c | 22 +-
sound/soc/codecs/wm8940.c | 2 +
sound/soc/soc-jack.c | 2 +-
119 files changed, 1308 insertions(+), 661 deletions(-)
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [068/107] Update email address for stable patch submission
2011-11-02 22:14 ` [068/107] Update email address for stable patch submission Greg KH
@ 2011-11-03 8:08 ` Christoph Biedl
2011-11-03 8:25 ` Sven Joachim
0 siblings, 1 reply; 122+ messages in thread
From: Christoph Biedl @ 2011-11-03 8:08 UTC (permalink / raw)
To: Greg KH, linux-kernel, stable
Greg KH wrote...
(...)
Just out of curiosity:
> - Send the patch, after verifying that it follows the above rules, to
> - stable@vger.kernel.org.
> + stable@vger.kernel.org.
> - The sender will receive an ACK when the patch has been accepted into the
> other developers and by the relevant subsystem maintainer.
> - - If the stable@vger.kernel.org address is added to a patch, when it goes into
> + - If the stable@vger.kernel.org address is added to a patch, when it goes into
> Linus's tree it will automatically be emailed to the stable team.
Whatever you used to create the patches, why did these hunks come into
existence?
Christoph
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [068/107] Update email address for stable patch submission
2011-11-03 8:08 ` Christoph Biedl
@ 2011-11-03 8:25 ` Sven Joachim
2011-11-03 12:18 ` Greg KH
0 siblings, 1 reply; 122+ messages in thread
From: Sven Joachim @ 2011-11-03 8:25 UTC (permalink / raw)
To: Christoph Biedl; +Cc: Greg KH, linux-kernel, stable
Am 03.11.2011 um 09:08 schrieb Christoph Biedl:
> Greg KH wrote...
>
> (...)
>
> Just out of curiosity:
>
>> - Send the patch, after verifying that it follows the above rules, to
>> - stable@vger.kernel.org.
>> + stable@vger.kernel.org.
>> - The sender will receive an ACK when the patch has been accepted into the
>
>> other developers and by the relevant subsystem maintainer.
>> - - If the stable@vger.kernel.org address is added to a patch, when it goes into
>> + - If the stable@vger.kernel.org address is added to a patch, when it goes into
>> Linus's tree it will automatically be emailed to the stable team.
>
> Whatever you used to create the patches, why did these hunks come into
> existence?
The original lines should have had the stable@kernel.org email address,
looks like Greg's scripts eagerly replaced those with the new address…
Cheers,
Sven
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [068/107] Update email address for stable patch submission
2011-11-03 8:25 ` Sven Joachim
@ 2011-11-03 12:18 ` Greg KH
0 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-03 12:18 UTC (permalink / raw)
To: Sven Joachim; +Cc: Christoph Biedl, linux-kernel, stable
On Thu, Nov 03, 2011 at 09:25:09AM +0100, Sven Joachim wrote:
> Am 03.11.2011 um 09:08 schrieb Christoph Biedl:
>
> > Greg KH wrote...
> >
> > (...)
> >
> > Just out of curiosity:
> >
> >> - Send the patch, after verifying that it follows the above rules, to
> >> - stable@vger.kernel.org.
> >> + stable@vger.kernel.org.
> >> - The sender will receive an ACK when the patch has been accepted into the
> >
> >> other developers and by the relevant subsystem maintainer.
> >> - - If the stable@vger.kernel.org address is added to a patch, when it goes into
> >> + - If the stable@vger.kernel.org address is added to a patch, when it goes into
> >> Linus's tree it will automatically be emailed to the stable team.
> >
> > Whatever you used to create the patches, why did these hunks come into
> > existence?
>
> The original lines should have had the stable@kernel.org email address,
> looks like Greg's scripts eagerly replaced those with the new address…
Ugh, yes, that was due to me running a script on the emails to keep any
old stable@kernel.org address out of them when I sent them out. The
original patch is fine, thanks for checking.
greg k-h
^ permalink raw reply [flat|nested] 122+ messages in thread
* RE: [028/107] drm/radeon/kms: fix typo in r100_blit_copy
2011-11-02 22:13 ` [028/107] drm/radeon/kms: fix typo in r100_blit_copy Greg KH
@ 2011-11-03 13:01 ` Deucher, Alexander
2011-11-03 13:15 ` Greg KH
0 siblings, 1 reply; 122+ messages in thread
From: Deucher, Alexander @ 2011-11-03 13:01 UTC (permalink / raw)
To: Greg KH, linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org,
alan@lxorguk.ukuu.org.uk, Dave Airlie
Please don't apply. This ended up getting reverted upstream.
> -----Original Message-----
> From: Greg KH [mailto:gregkh@suse.de]
> Sent: Wednesday, November 02, 2011 6:14 PM
> To: linux-kernel@vger.kernel.org; stable@vger.kernel.org
> Cc: torvalds@linux-foundation.org; akpm@linux-foundation.org;
> alan@lxorguk.ukuu.org.uk; Deucher, Alexander; Dave Airlie
> Subject: [028/107] drm/radeon/kms: fix typo in r100_blit_copy
>
> 2.6.32-longterm review patch. If anyone has any objections, please let us
> know.
>
> ------------------
>
> From: Alex Deucher <alexander.deucher@amd.com>
>
> commit 18b4fada275dd2b6dd9db904ddf70fe39e272222 upstream.
>
> cur_pages is the number of pages per loop iteration.
>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
> Signed-off-by: Dave Airlie <airlied@redhat.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
>
> ---
> drivers/gpu/drm/radeon/r100.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> --- a/drivers/gpu/drm/radeon/r100.c
> +++ b/drivers/gpu/drm/radeon/r100.c
> @@ -355,8 +355,8 @@ int r100_copy_blit(struct radeon_device
> radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16));
> radeon_ring_write(rdev, 0);
> radeon_ring_write(rdev, (0x1fff) | (0x1fff << 16));
> - radeon_ring_write(rdev, num_pages);
> - radeon_ring_write(rdev, num_pages);
> + radeon_ring_write(rdev, cur_pages);
> + radeon_ring_write(rdev, cur_pages);
> radeon_ring_write(rdev, cur_pages | (stride_pixels << 16));
> }
> radeon_ring_write(rdev, PACKET0(RADEON_DSTCACHE_CTLSTAT,
> 0));
>
>
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [028/107] drm/radeon/kms: fix typo in r100_blit_copy
2011-11-03 13:01 ` Deucher, Alexander
@ 2011-11-03 13:15 ` Greg KH
0 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-03 13:15 UTC (permalink / raw)
To: Deucher, Alexander
Cc: linux-kernel@vger.kernel.org, stable@vger.kernel.org,
torvalds@linux-foundation.org, akpm@linux-foundation.org,
alan@lxorguk.ukuu.org.uk, Dave Airlie
On Thu, Nov 03, 2011 at 01:01:35PM +0000, Deucher, Alexander wrote:
> Please don't apply. This ended up getting reverted upstream.
Ah, thanks, I forgot to remove it here when I also removed it from the
3.0 tree.
greg k-h
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [005/107] sparc: Allow handling signals when stack is corrupted.
2011-11-02 22:13 ` [005/107] sparc: Allow handling signals when stack is corrupted Greg KH
@ 2011-11-04 4:33 ` Ben Hutchings
2011-11-04 6:09 ` David Miller
0 siblings, 1 reply; 122+ messages in thread
From: Ben Hutchings @ 2011-11-04 4:33 UTC (permalink / raw)
To: Greg KH; +Cc: linux-kernel, stable, torvalds, akpm, alan, David S. Miller
[-- Attachment #1: Type: text/plain, Size: 949 bytes --]
On Wed, 2011-11-02 at 15:13 -0700, Greg KH wrote:
> 2.6.32-longterm review patch. If anyone has any objections, please let us know.
>
> ------------------
>
> From: "David S. Miller" <davem@davemloft.net>
>
> commit 5598473a5b40c47a8c5349dd2c2630797169cf1a upstream.
>
> If we can't push the pending register windows onto the user's stack,
> we disallow signal delivery even if the signal would be delivered on a
> valid seperate signal stack.
>
> Add a register window save area in the signal frame, and store any
> unsavable windows there.
>
> On sigreturn, if any windows are still queued up in the signal frame,
> try to push them back onto the stack and if that fails we kill the
> process immediately.
>
> This allows the debug/tst-longjmp_chk2 glibc test case to pass.
[...]
But is there a real application that needs this?
Ben.
--
Ben Hutchings
Sturgeon's Law: Ninety percent of everything is crap.
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 828 bytes --]
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [005/107] sparc: Allow handling signals when stack is corrupted.
2011-11-04 4:33 ` Ben Hutchings
@ 2011-11-04 6:09 ` David Miller
0 siblings, 0 replies; 122+ messages in thread
From: David Miller @ 2011-11-04 6:09 UTC (permalink / raw)
To: ben; +Cc: gregkh, linux-kernel, stable, torvalds, akpm, alan
From: Ben Hutchings <ben@decadent.org.uk>
Date: Fri, 04 Nov 2011 04:33:28 +0000
> But is there a real application that needs this?
You get zero debugging information when this happens so without
this change analysis of a crash is virtually impossible.
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov()
2011-11-02 22:14 ` [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov() Greg KH
@ 2011-11-04 15:24 ` Ben Hutchings
2011-11-04 17:14 ` Greg KH
2011-11-04 19:36 ` Dan Carpenter
0 siblings, 2 replies; 122+ messages in thread
From: Ben Hutchings @ 2011-11-04 15:24 UTC (permalink / raw)
To: Greg KH, Dan Carpenter, Xiaotian Feng, Jens Axboe
Cc: linux-kernel, stable, torvalds, akpm, alan
[-- Attachment #1: Type: text/plain, Size: 1312 bytes --]
On Wed, 2011-11-02 at 15:14 -0700, Greg KH wrote:
> 2.6.32-longterm review patch. If anyone has any objections, please let us know.
>
> ------------------
>
> From: Xiaotian Feng <dfeng@redhat.com>
>
> commit 5478755616ae2ef1ce144dded589b62b2a50d575 upstream.
>
> commit 9284bcf checks for proper length of iov entries in
> blk_rq_map_user_iov(). But if the map is unaligned, kernel
> will break out the loop without checking for the proper length.
> So we need to check the proper length before the unalign check.
This will catch an unaligned zero-length entry. But there's still no
check for zero-length iov entries *after* the unaligned entry.
[...]
> --- a/block/blk-map.c
> +++ b/block/blk-map.c
> @@ -201,12 +201,13 @@ int blk_rq_map_user_iov(struct request_q
> for (i = 0; i < iov_count; i++) {
> unsigned long uaddr = (unsigned long)iov[i].iov_base;
>
> + if (!iov[i].iov_len)
> + return -EINVAL;
> +
> if (uaddr & queue_dma_alignment(q)) {
> unaligned = 1;
> break;
I think the correct fix is just to remove the 'break'.
Ben.
> }
> - if (!iov[i].iov_len)
> - return -EINVAL;
> }
>
> if (unaligned || (q->dma_pad_mask & len) || map_data)
>
--
Ben Hutchings
Sturgeon's Law: Ninety percent of everything is crap.
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 828 bytes --]
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov()
2011-11-04 15:24 ` Ben Hutchings
@ 2011-11-04 17:14 ` Greg KH
2011-11-04 19:06 ` Ben Hutchings
2011-11-04 19:36 ` Dan Carpenter
1 sibling, 1 reply; 122+ messages in thread
From: Greg KH @ 2011-11-04 17:14 UTC (permalink / raw)
To: Ben Hutchings
Cc: Dan Carpenter, Xiaotian Feng, Jens Axboe, linux-kernel, stable,
torvalds, akpm, alan
On Fri, Nov 04, 2011 at 03:24:16PM +0000, Ben Hutchings wrote:
> On Wed, 2011-11-02 at 15:14 -0700, Greg KH wrote:
> > 2.6.32-longterm review patch. If anyone has any objections, please let us know.
> >
> > ------------------
> >
> > From: Xiaotian Feng <dfeng@redhat.com>
> >
> > commit 5478755616ae2ef1ce144dded589b62b2a50d575 upstream.
> >
> > commit 9284bcf checks for proper length of iov entries in
> > blk_rq_map_user_iov(). But if the map is unaligned, kernel
> > will break out the loop without checking for the proper length.
> > So we need to check the proper length before the unalign check.
>
> This will catch an unaligned zero-length entry. But there's still no
> check for zero-length iov entries *after* the unaligned entry.
>
> [...]
> > --- a/block/blk-map.c
> > +++ b/block/blk-map.c
> > @@ -201,12 +201,13 @@ int blk_rq_map_user_iov(struct request_q
> > for (i = 0; i < iov_count; i++) {
> > unsigned long uaddr = (unsigned long)iov[i].iov_base;
> >
> > + if (!iov[i].iov_len)
> > + return -EINVAL;
> > +
> > if (uaddr & queue_dma_alignment(q)) {
> > unaligned = 1;
> > break;
>
> I think the correct fix is just to remove the 'break'.
Then the fix should go upstream first :)
thanks,
greg k-h
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov()
2011-11-04 17:14 ` Greg KH
@ 2011-11-04 19:06 ` Ben Hutchings
2011-11-04 20:28 ` Greg KH
0 siblings, 1 reply; 122+ messages in thread
From: Ben Hutchings @ 2011-11-04 19:06 UTC (permalink / raw)
To: Greg KH
Cc: Dan Carpenter, Xiaotian Feng, Jens Axboe, linux-kernel, stable,
torvalds, akpm, alan
On Fri, Nov 04, 2011 at 10:14:26AM -0700, Greg KH wrote:
> On Fri, Nov 04, 2011 at 03:24:16PM +0000, Ben Hutchings wrote:
> > On Wed, 2011-11-02 at 15:14 -0700, Greg KH wrote:
> > > 2.6.32-longterm review patch. If anyone has any objections, please let us know.
> > >
> > > ------------------
> > >
> > > From: Xiaotian Feng <dfeng@redhat.com>
> > >
> > > commit 5478755616ae2ef1ce144dded589b62b2a50d575 upstream.
> > >
> > > commit 9284bcf checks for proper length of iov entries in
> > > blk_rq_map_user_iov(). But if the map is unaligned, kernel
> > > will break out the loop without checking for the proper length.
> > > So we need to check the proper length before the unalign check.
> >
> > This will catch an unaligned zero-length entry. But there's still no
> > check for zero-length iov entries *after* the unaligned entry.
> >
> > [...]
> > > --- a/block/blk-map.c
> > > +++ b/block/blk-map.c
> > > @@ -201,12 +201,13 @@ int blk_rq_map_user_iov(struct request_q
> > > for (i = 0; i < iov_count; i++) {
> > > unsigned long uaddr = (unsigned long)iov[i].iov_base;
> > >
> > > + if (!iov[i].iov_len)
> > > + return -EINVAL;
> > > +
> > > if (uaddr & queue_dma_alignment(q)) {
> > > unaligned = 1;
> > > break;
> >
> > I think the correct fix is just to remove the 'break'.
>
> Then the fix should go upstream first :)
But if I'm right, this is a non-fix and doesn't belong in the
longterm update.
Ben.
--
Ben Hutchings
We get into the habit of living before acquiring the habit of thinking.
- Albert Camus
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov()
2011-11-04 15:24 ` Ben Hutchings
2011-11-04 17:14 ` Greg KH
@ 2011-11-04 19:36 ` Dan Carpenter
1 sibling, 0 replies; 122+ messages in thread
From: Dan Carpenter @ 2011-11-04 19:36 UTC (permalink / raw)
To: Ben Hutchings
Cc: Greg KH, Xiaotian Feng, Jens Axboe, linux-kernel, stable,
torvalds, akpm, alan
[-- Attachment #1: Type: text/plain, Size: 604 bytes --]
On Fri, Nov 04, 2011 at 03:24:16PM +0000, Ben Hutchings wrote:
> > --- a/block/blk-map.c
> > +++ b/block/blk-map.c
> > @@ -201,12 +201,13 @@ int blk_rq_map_user_iov(struct request_q
> > for (i = 0; i < iov_count; i++) {
> > unsigned long uaddr = (unsigned long)iov[i].iov_base;
> >
> > + if (!iov[i].iov_len)
> > + return -EINVAL;
> > +
> > if (uaddr & queue_dma_alignment(q)) {
> > unaligned = 1;
> > break;
>
> I think the correct fix is just to remove the 'break'.
>
Yeah. I think you're right. Are you going to send the patch?
regards,
dan carpenter
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov()
2011-11-04 19:06 ` Ben Hutchings
@ 2011-11-04 20:28 ` Greg KH
2011-11-04 21:00 ` Dan Carpenter
0 siblings, 1 reply; 122+ messages in thread
From: Greg KH @ 2011-11-04 20:28 UTC (permalink / raw)
To: Ben Hutchings
Cc: Dan Carpenter, Xiaotian Feng, Jens Axboe, linux-kernel, stable,
torvalds, akpm, alan
On Fri, Nov 04, 2011 at 07:06:16PM +0000, Ben Hutchings wrote:
> On Fri, Nov 04, 2011 at 10:14:26AM -0700, Greg KH wrote:
> > On Fri, Nov 04, 2011 at 03:24:16PM +0000, Ben Hutchings wrote:
> > > On Wed, 2011-11-02 at 15:14 -0700, Greg KH wrote:
> > > > 2.6.32-longterm review patch. If anyone has any objections, please let us know.
> > > >
> > > > ------------------
> > > >
> > > > From: Xiaotian Feng <dfeng@redhat.com>
> > > >
> > > > commit 5478755616ae2ef1ce144dded589b62b2a50d575 upstream.
> > > >
> > > > commit 9284bcf checks for proper length of iov entries in
> > > > blk_rq_map_user_iov(). But if the map is unaligned, kernel
> > > > will break out the loop without checking for the proper length.
> > > > So we need to check the proper length before the unalign check.
> > >
> > > This will catch an unaligned zero-length entry. But there's still no
> > > check for zero-length iov entries *after* the unaligned entry.
> > >
> > > [...]
> > > > --- a/block/blk-map.c
> > > > +++ b/block/blk-map.c
> > > > @@ -201,12 +201,13 @@ int blk_rq_map_user_iov(struct request_q
> > > > for (i = 0; i < iov_count; i++) {
> > > > unsigned long uaddr = (unsigned long)iov[i].iov_base;
> > > >
> > > > + if (!iov[i].iov_len)
> > > > + return -EINVAL;
> > > > +
> > > > if (uaddr & queue_dma_alignment(q)) {
> > > > unaligned = 1;
> > > > break;
> > >
> > > I think the correct fix is just to remove the 'break'.
> >
> > Then the fix should go upstream first :)
>
> But if I'm right, this is a non-fix and doesn't belong in the
> longterm update.
Doesn't this still fix one issue here, just not both of them described,
right?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov()
2011-11-04 20:28 ` Greg KH
@ 2011-11-04 21:00 ` Dan Carpenter
2011-11-04 21:04 ` Greg KH
0 siblings, 1 reply; 122+ messages in thread
From: Dan Carpenter @ 2011-11-04 21:00 UTC (permalink / raw)
To: Greg KH
Cc: Ben Hutchings, Xiaotian Feng, Jens Axboe, linux-kernel, stable,
torvalds, akpm, alan
[-- Attachment #1: Type: text/plain, Size: 361 bytes --]
On Fri, Nov 04, 2011 at 01:28:06PM -0700, Greg KH wrote:
> Doesn't this still fix one issue here, just not both of them described,
> right?
Not really.
We've got a list from 0 - 100. We should be checking them all.
If number 50 is unaligned in the old version we would check 0 - 50,
but with this patch applied we check from 0 to 51.
regards,
dan carpenter
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 122+ messages in thread
* Re: [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov()
2011-11-04 21:00 ` Dan Carpenter
@ 2011-11-04 21:04 ` Greg KH
0 siblings, 0 replies; 122+ messages in thread
From: Greg KH @ 2011-11-04 21:04 UTC (permalink / raw)
To: Dan Carpenter
Cc: Ben Hutchings, Xiaotian Feng, Jens Axboe, linux-kernel, stable,
torvalds, akpm, alan
On Sat, Nov 05, 2011 at 12:00:55AM +0300, Dan Carpenter wrote:
> On Fri, Nov 04, 2011 at 01:28:06PM -0700, Greg KH wrote:
> > Doesn't this still fix one issue here, just not both of them described,
> > right?
>
> Not really.
>
> We've got a list from 0 - 100. We should be checking them all.
> If number 50 is unaligned in the old version we would check 0 - 50,
> but with this patch applied we check from 0 to 51.
Ugh, you are right.
Xiaotian, please fix this correctly upstream, I'll go drop this patch
for now from the stable trees.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 122+ messages in thread
end of thread, other threads:[~2011-11-04 21:04 UTC | newest]
Thread overview: 122+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-02 22:16 [000/107] 2.6.32.47-longterm review Greg KH
2011-11-02 22:13 ` [001/107] USB: ftdi_sio: add Calao reference board support Greg KH
2011-11-02 22:13 ` [002/107] USB: EHCI: Do not rely on PORT_SUSPEND to stop USB resuming in ehci_bus_resume() Greg KH
2011-11-02 22:13 ` [003/107] rt2x00: do not drop usb dev reference counter on suspend Greg KH
2011-11-02 22:13 ` [004/107] atm: br2684: Fix oops due to skb->dev being NULL Greg KH
2011-11-02 22:13 ` [005/107] sparc: Allow handling signals when stack is corrupted Greg KH
2011-11-04 4:33 ` Ben Hutchings
2011-11-04 6:09 ` David Miller
2011-11-02 22:13 ` [006/107] sparc: fix array bounds error setting up PCIC NMI trap Greg KH
2011-11-02 22:13 ` [007/107] Fix broken backport for IPv6 tunnels Greg KH
2011-11-02 22:13 ` [008/107] net: Fix IPv6 GSO type checks in Intel ethernet drivers Greg KH
2011-11-02 22:13 ` [009/107] ipv6: Add GSO support on forwarding path Greg KH
2011-11-02 22:13 ` [010/107] Revert "x86, hotplug: Use mwait to offline a processor, fix the legacy case" Greg KH
2011-11-02 22:13 ` [011/107] GRO: fix merging a paged skb after non-paged skbs Greg KH
2011-11-02 22:13 ` [012/107] xen-blkfront: fix data size for xenbus_gather in blkfront_connect Greg KH
2011-11-02 22:13 ` [013/107] md/linear: avoid corrupting structure while waiting for rcu_free to complete Greg KH
2011-11-02 22:13 ` [014/107] powerpc/mpic: Fix problem that affinity is not updated Greg KH
2011-11-02 22:13 ` [015/107] powerpc/pci: Check devices status property when scanning OF tree Greg KH
2011-11-02 22:13 ` [016/107] xen: x86_32: do not enable iterrupts when returning from exception in interrupt context Greg KH
2011-11-02 22:13 ` [017/107] xen/smp: Warn user why they keel over - nosmp or noapic and what to use instead Greg KH
2011-11-02 22:13 ` [018/107] ARM: davinci: da850 EVM: read mac address from SPI flash Greg KH
2011-11-02 22:13 ` [019/107] md: Fix handling for devices from 2TB to 4TB in 0.90 metadata Greg KH
2011-11-02 22:13 ` [020/107] net/9p: fix client code to fail more gracefully on protocol error Greg KH
2011-11-02 22:13 ` [021/107] fs/9p: Fid is not valid after a failed clunk Greg KH
2011-11-02 22:13 ` [022/107] net/9p: Fix the msize calculation Greg KH
2011-11-02 22:13 ` [023/107] irda: fix smsc-ircc2 section mismatch warning Greg KH
2011-11-02 22:13 ` [024/107] [SCSI] qla2xxx: Correct inadvertent loop state transitions during port-update handling Greg KH
2011-11-02 22:13 ` [025/107] e1000: Fix driver to be used on PA RISC C8000 workstations Greg KH
2011-11-02 22:13 ` [026/107] ASoC: Fix reporting of partial jack updates Greg KH
2011-11-02 22:13 ` [027/107] ALSA: HDA: Cirrus - fix "Surround Speaker" volume control name Greg KH
2011-11-02 22:13 ` [028/107] drm/radeon/kms: fix typo in r100_blit_copy Greg KH
2011-11-03 13:01 ` Deucher, Alexander
2011-11-03 13:15 ` Greg KH
2011-11-02 22:13 ` [029/107] cifs: fix possible memory corruption in CIFSFindNext Greg KH
2011-11-02 22:13 ` [030/107] b43: Fix beacon problem in ad-hoc mode Greg KH
2011-11-02 22:13 ` [031/107] wireless: Reset beacon_found while updating regulatory Greg KH
2011-11-02 22:13 ` [032/107] USB: PL2303: correctly handle baudrates above 115200 Greg KH
2011-11-02 22:13 ` [033/107] ASIX: Add AX88772B USB ID Greg KH
2011-11-02 22:14 ` [034/107] hvc_console: Improve tty/console put_chars handling Greg KH
2011-11-02 22:14 ` [035/107] TPM: Call tpm_transmit with correct size Greg KH
2011-11-02 22:14 ` [036/107] TPM: Zero buffer after copying to userspace Greg KH
2011-11-02 22:14 ` [037/107] [SCSI] libiscsi_tcp: fix LLD data allocation Greg KH
2011-11-02 22:14 ` [038/107] cnic: Improve NETDEV_UP event handling Greg KH
2011-11-02 22:14 ` [039/107] ALSA: hda/realtek - Avoid bogus HP-pin assignment Greg KH
2011-11-02 22:14 ` [040/107] [SCSI] 3w-9xxx: fix iommu_iova leak Greg KH
2011-11-02 22:14 ` [041/107] [SCSI] aacraid: reset should disable MSI interrupt Greg KH
2011-11-02 22:14 ` [042/107] [SCSI] libsas: fix failure to revalidate domain for anything but the first expander child Greg KH
2011-11-02 22:14 ` [043/107] cfg80211: Fix validation of AKM suites Greg KH
2011-11-02 22:14 ` [044/107] splice: direct_splice_actor() should not use pos in sd Greg KH
2011-11-02 22:14 ` [045/107] [SCSI] libsas: fix panic when single phy is disabled on a wide port Greg KH
2011-11-02 22:14 ` [046/107] ahci: Enable SB600 64bit DMA on Asus M3A Greg KH
2011-11-02 22:14 ` [047/107] HID: usbhid: Add support for SiGma Micro chip Greg KH
2011-11-02 22:14 ` [048/107] hwmon: (w83627ehf) Properly report thermal diode sensors Greg KH
2011-11-02 22:14 ` [049/107] x25: Prevent skb overreads when checking call user data Greg KH
2011-11-02 22:14 ` [050/107] block: check for proper length of iov entries earlier in blk_rq_map_user_iov() Greg KH
2011-11-04 15:24 ` Ben Hutchings
2011-11-04 17:14 ` Greg KH
2011-11-04 19:06 ` Ben Hutchings
2011-11-04 20:28 ` Greg KH
2011-11-04 21:00 ` Dan Carpenter
2011-11-04 21:04 ` Greg KH
2011-11-04 19:36 ` Dan Carpenter
2011-11-02 22:14 ` [051/107] staging: quatech_usb2: Potential lost wakeup scenario in TIOCMIWAIT Greg KH
2011-11-02 22:14 ` [052/107] USB: qcserial: add device ID for "HP un2430 Mobile Broadband Module" Greg KH
2011-11-02 22:14 ` [053/107] xhci-mem.c: Check for ring->first_seg != NULL Greg KH
2011-11-02 22:14 ` [054/107] [SCSI] ipr: Always initiate hard reset in kdump kernel Greg KH
2011-11-02 22:14 ` [055/107] [SCSI] libsas: set sas_address and device type of rphy Greg KH
2011-11-02 22:14 ` [056/107] ALSA: HDA: Add new revision for ALC662 Greg KH
2011-11-02 22:14 ` [057/107] x86: Fix compilation bug in kprobes twobyte_is_boostable Greg KH
2011-11-02 22:14 ` [058/107] epoll: fix spurious lockdep warnings Greg KH
2011-11-02 22:14 ` [059/107] usbmon vs. tcpdump: fix dropped packet count Greg KH
2011-11-02 22:14 ` [060/107] USB: storage: Use normalized sense when emulating autosense Greg KH
2011-11-02 22:14 ` [061/107] USB: pid_ns: ensure pid is not freed during kill_pid_info_as_uid Greg KH
2011-11-02 22:14 ` [062/107] usb: cdc-acm: Owen SI-30 support Greg KH
2011-11-02 22:14 ` [063/107] USB: add RESET_RESUME for webcams shown to be quirky Greg KH
2011-11-02 22:14 ` [064/107] USB: pl2303: add id for SMART device Greg KH
2011-11-02 22:14 ` [065/107] USB: ftdi_sio: add PID for Sony Ericsson Urban Greg KH
2011-11-02 22:14 ` [066/107] USB: ftdi_sio: Support TI/Luminary Micro Stellaris BD-ICDI Board Greg KH
2011-11-02 22:14 ` [067/107] QE/FHCI: fixed the CONTROL bug Greg KH
2011-11-02 22:14 ` [068/107] Update email address for stable patch submission Greg KH
2011-11-03 8:08 ` Christoph Biedl
2011-11-03 8:25 ` Sven Joachim
2011-11-03 12:18 ` Greg KH
2011-11-02 22:14 ` [069/107] kobj_uevent: Ignore if some listeners cannot handle message Greg KH
2011-11-02 22:14 ` [070/107] kmod: prevent kmod_loop_msg overflow in __request_module() Greg KH
2011-11-02 22:14 ` [071/107] time: Change jiffies_to_clock_t() argument type to unsigned long Greg KH
2011-11-02 22:14 ` [072/107] nfsd4: Remove check for a 32-bit cookie in nfsd4_readdir() Greg KH
2011-11-02 22:14 ` [073/107] nfsd4: ignore WANT bits in open downgrade Greg KH
2011-11-02 22:14 ` [074/107] ASoC: wm8940: Properly set codec->dapm.bias_level Greg KH
2011-11-02 22:14 ` [075/107] ASoC: ak4642: fixup cache register table Greg KH
2011-11-02 22:14 ` [076/107] ASoC: ak4535: " Greg KH
2011-11-02 22:14 ` [077/107] KVM: s390: check cpu_id prior to using it Greg KH
2011-11-02 22:14 ` [078/107] [S390] ccwgroup: move attributes to attribute group Greg KH
2011-11-02 22:14 ` [079/107] iommu/amd: Fix wrong shift direction Greg KH
2011-11-02 22:14 ` [080/107] carminefb: Fix module parameters permissions Greg KH
2011-11-02 22:14 ` [081/107] [media] uvcvideo: Set alternate setting 0 on resume if the bus has been reset Greg KH
2011-11-02 22:14 ` [082/107] [media] tuner_xc2028: Allow selection of the frequency adjustment code for XC3028 Greg KH
2011-11-02 22:14 ` [083/107] plat-mxc: iomux-v3.h: implicitly enable pull-up/down when thats desired Greg KH
2011-11-02 22:14 ` [084/107] um: fix ubd cow size Greg KH
2011-11-02 22:14 ` [085/107] cfq: calculate the seek_mean per cfq_queue not per cfq_io_context Greg KH
2011-11-02 22:14 ` [086/107] cfq: merge cooperating cfq_queues Greg KH
2011-11-02 22:14 ` [087/107] cfq: change the meaning of the cfqq_coop flag Greg KH
2011-11-02 22:14 ` [088/107] cfq: break apart merged cfqqs if they stop cooperating Greg KH
2011-11-02 22:14 ` [089/107] cfq-iosched: get rid of the coop_preempt flag Greg KH
2011-11-02 22:14 ` [090/107] cfq: Dont allow queue merges for queues that have no process references Greg KH
2011-11-02 22:14 ` [091/107] xen/timer: Missing IRQF_NO_SUSPEND in timer code broke suspend Greg KH
2011-11-02 22:14 ` [092/107] KVM: x86: Reset tsc_timestamp on TSC writes Greg KH
2011-11-02 22:14 ` [093/107] genirq: Add IRQF_RESUME_EARLY and resume such IRQs earlier Greg KH
2011-11-02 22:15 ` [094/107] Revert "usb: musb: restore INDEX register in resume path" Greg KH
2011-11-02 22:15 ` [095/107] Revert "MIPS: MTX-1: Make au1000_eth probe all PHY Greg KH
2011-11-02 22:15 ` [096/107] watchdog: mtx1-wdt: fix build failure Greg KH
2011-11-02 22:15 ` [097/107] kcore: fix test for end of list Greg KH
2011-11-02 22:15 ` [098/107] thinkpad-acpi: module autoloading for newer Lenovo ThinkPads Greg KH
2011-11-02 22:15 ` [099/107] scm: lower SCM_MAX_FD Greg KH
2011-11-02 22:15 ` [100/107] deal with races in /proc/*/{syscall,stack,personality} Greg KH
2011-11-02 22:15 ` [101/107] NLM: Dont hang forever on NLM unlock requests Greg KH
2011-11-02 22:15 ` [102/107] Bluetooth: l2cap and rfcomm: fix 1 byte infoleak to userspace Greg KH
2011-11-02 22:15 ` [103/107] vm: fix vm_pgoff wrap in stack expansion Greg KH
2011-11-02 22:15 ` [104/107] vm: fix vm_pgoff wrap in upward expansion Greg KH
2011-11-02 22:15 ` [105/107] Bluetooth: Prevent buffer overflow in l2cap config request Greg KH
2011-11-02 22:15 ` [106/107] nl80211: fix overflow in ssid_len Greg KH
2011-11-02 22:15 ` [107/107] net_sched: Fix qdisc_notify() Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).