linux/arch/mips
Ralf Baechle 1f717929e9 MIPS: Handle __put_user() sleeping.
do_signal() does __put_user() which can fault, resulting in a might_sleep()
warning in down_read(&mm->mmap_sem) and a "scheduling while atomic" warning
when mmap_sem is contented. On Swarm this also results in:

WARNING: at kernel/smp.c:459 smp_call_function_many+0x148/0x398()
Modules linked in:
Call Trace:

[<ffffffff804b48a4>] dump_stack+0x1c/0x50
[<ffffffff8013dc94>] warn_slowpath_common+0x8c/0xc8
[<ffffffff8013dcfc>] warn_slowpath_null+0x2c/0x40
[<ffffffff801864a0>] smp_call_function_many+0x148/0x398
[<ffffffff80186748>] smp_call_function+0x58/0xa8
[<ffffffff80119b5c>] r4k_flush_data_cache_page+0x54/0xd8
[<ffffffff801f39bc>] handle_pte_fault+0xa9c/0xad0
[<ffffffff801f40d0>] handle_mm_fault+0x158/0x200
[<ffffffff80115548>] do_page_fault+0x218/0x3b0
[<ffffffff80102744>] ret_from_exception+0x0/0x10
[<ffffffff8010eb18>] copy_siginfo_to_user32+0x50/0x298
[<ffffffff8010edf0>] setup_rt_frame_32+0x90/0x250
[<ffffffff80106414>] do_notify_resume+0x154/0x358
[<ffffffff80102930>] work_notifysig+0xc/0x14

Fixed by enabling interrupts in do_notify_resume before delivering signals.

[ralf@linux-mips.org: Reported and original fix by tglx but I wanted to
minimize the amount of code being run with interrupts disabled so I moved
the local_irq_disable() call right into do_notify_resume.  Which is saner
than doing it in entry.S.]

Reported-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2011-09-21 17:52:38 +02:00
..
alchemy Merge branch 'timers-clocksource-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-05-19 17:44:13 -07:00
ar7 MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
ath79 USB: ohci: add bus glue for the Atheros AR71XX/AR7240 SoCs 2011-04-13 16:58:19 -07:00
bcm47xx Update my e-mail address 2011-07-07 15:18:01 +02:00
bcm63xx MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
boot MIPS: Alchemy: Rewrite UART setup and constants. 2011-05-19 09:55:45 +01:00
cavium-octeon Merge git://git.infradead.org/mtd-2.6 2011-05-27 20:06:53 -07:00
cobalt MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
configs rtc: fix build warnings in defconfigs 2011-06-15 20:04:02 -07:00
dec MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
emma MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
fw Merge branch 'master' into for-next 2011-04-26 10:22:59 +02:00
include/asm MIPS: Remove unneeded version.h includes from arch/mips/ 2011-09-17 02:40:36 +02:00
jazz i8253: Create linux/i8253.h and use it in all 8253 related files 2011-06-09 15:01:37 +02:00
jz4740 Merge branch 'timers-clocksource-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-05-19 17:44:13 -07:00
kernel MIPS: Handle __put_user() sleeping. 2011-09-21 17:52:38 +02:00
lantiq MIPS: Remove unneeded version.h includes from arch/mips/ 2011-09-17 02:40:36 +02:00
lasat MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
lib MIPS: Kconfig and Makefile update for Netlogic XLR/XLS 2011-05-19 09:55:40 +01:00
loongson MIPS: Loongson: Mark cascade interrupts IRQF_NO_THREAD 2011-09-21 17:52:22 +02:00
math-emu perf: Remove the nmi parameter from the swevent and overflow interface 2011-07-01 11:06:35 +02:00
mipssim atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
mm MIPS: Trivial style cleanups in mmap.c 2011-09-17 02:37:04 +02:00
mti-malta MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
netlogic MIPS: Netlogic: SMP fixes for XLR/XLS platform code. 2011-07-20 23:12:11 +01:00
nxp/pnx8550/common MIPS: Remove pointless return statement from empty void functions. 2011-07-25 17:26:55 +01:00
oprofile MIPS: oprofile: Add callgraph support 2011-06-15 14:35:34 +02:00
pci MIPS: RC32434: Fix PCI build error 2011-09-21 17:51:57 +02:00
pmc-sierra MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
pnx833x Fix common misspellings 2011-03-31 11:26:23 -03:00
pnx8550 MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
power MIPS: Hibernation: Fixes for PAGE_SIZE >= 64kb 2011-05-10 18:15:26 +01:00
powertv treewide: Convert uses of struct resource to resource_size(ptr) 2011-06-10 14:55:36 +02:00
rb532 MIPS: RB532: Use hex_to_bin() 2011-07-25 17:26:56 +01:00
sgi-ip22 MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
sgi-ip27 atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
sgi-ip32 MIPS: Convert the irq functions to the new names 2011-03-29 14:48:07 +02:00
sibyte MIPS: SB1250: Restore dropped irq_mask function 2011-07-20 23:12:11 +01:00
sni MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
txx9 Merge git://git.infradead.org/mtd-2.6 2011-05-27 20:06:53 -07:00
vr41xx MIPS: Mark cascade and low level interrupts IRQF_NO_THREAD 2011-09-21 17:52:15 +02:00
wrppmc MIPS: WRPPMC: Migrate to new platform makefile style. 2010-08-05 13:25:51 +01:00
Kbuild MIPS: Repair Kbuild make clean breakage. 2010-10-19 18:32:39 +01:00
Kbuild.platforms MIPS: XLR, XLS: Move makefile bits to were they belong. 2011-07-20 23:12:11 +01:00
Kconfig MIPS: Allow forced irq threading 2011-09-21 17:52:34 +02:00
Kconfig.debug lib: consolidate DEBUG_STACK_USAGE option 2011-05-25 08:39:54 -07:00
Makefile MIPS: XLR, XLS: Move makefile bits to were they belong. 2011-07-20 23:12:11 +01:00